From a34ca26a24cfac62f51a324916d136a5d96a7799 Mon Sep 17 00:00:00 2001 From: jpcaram Date: Sun, 1 Feb 2015 20:03:03 -0500 Subject: [PATCH] Introduce activity monitor FlatCAMProcess.py. --- FlatCAMApp.py | 5 ++++ FlatCAMGUI.py | 3 ++- FlatCAMObj.py | 3 +++ FlatCAMProcess.py | 59 +++++++++++++++++++++++++++++++++++++++------- share/active.gif | Bin 0 -> 1497 bytes 5 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 share/active.gif diff --git a/FlatCAMApp.py b/FlatCAMApp.py index d57bece9..a68ddc0a 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -23,6 +23,7 @@ from FlatCAMCommon import LoudDict from FlatCAMTool import * from FlatCAMShell import FCShell from FlatCAMDraw import FlatCAMDraw +from FlatCAMProcess import * ######################################## @@ -160,6 +161,8 @@ class App(QtCore.QObject): self.clipboard = QtGui.QApplication.clipboard() + self.proc_container = FCVisibleProcessContainer(self.ui.activity_view) + self.project_filename = None self.toggle_units_ignore = False @@ -1552,6 +1555,7 @@ class App(QtCore.QObject): App.log.debug("open_gerber()") + proc = self.proc_container.new("Opening Gerber") self.progress.emit(10) # How the object should be initialized @@ -1600,6 +1604,7 @@ class App(QtCore.QObject): self.file_opened.emit("gerber", filename) self.progress.emit(100) + proc.done() # GUI feedback self.inform.emit("Opened: " + filename) diff --git a/FlatCAMGUI.py b/FlatCAMGUI.py index 86e89b6b..4f33cb13 100644 --- a/FlatCAMGUI.py +++ b/FlatCAMGUI.py @@ -248,7 +248,7 @@ class FlatCAMActivityView(QtGui.QWidget): self.icon = QtGui.QLabel(self) self.icon.setGeometry(0, 0, 12, 12) - self.movie = QtGui.QMovie("share/717.GIF") + self.movie = QtGui.QMovie("share/active.gif") self.icon.setMovie(self.movie) #self.movie.start() @@ -270,6 +270,7 @@ class FlatCAMActivityView(QtGui.QWidget): self.movie.start() self.text.setText(msg) + class FlatCAMInfoBar(QtGui.QWidget): def __init__(self, parent=None): diff --git a/FlatCAMObj.py b/FlatCAMObj.py index 64892be4..26524067 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -982,6 +982,8 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): self.app.inform.emit('[warning] No polygon found.') return + proc = self.app.proc_container.new("Painting polygon.") + # Initializes the new geometry object def gen_paintarea(geo_obj, app_obj): assert isinstance(geo_obj, FlatCAMGeometry) @@ -1000,6 +1002,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): def job_thread(app_obj): name = self.options["name"] + "_paint" app_obj.new_object("geometry", name, gen_paintarea) + proc.done() self.app.inform.emit("Polygon Paint started ...") self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) diff --git a/FlatCAMProcess.py b/FlatCAMProcess.py index cfd4801d..9ab151cc 100644 --- a/FlatCAMProcess.py +++ b/FlatCAMProcess.py @@ -1,4 +1,7 @@ from FlatCAMGUI import FlatCAMActivityView +from PyQt4 import QtCore +import weakref + class FCProcess(object): @@ -8,7 +11,11 @@ class FCProcess(object): } self.descr = descr + def __del__(self): + self.done() + def done(self): + print "FCProcess.done()" for fcn in self.callbacks["done"]: fcn(self) @@ -34,40 +41,74 @@ class FCProcessContainer(object): def add(self, proc): - self.procs.append(proc) + self.procs.append(weakref.ref(proc)) def new(self, descr): proc = FCProcess(descr) + proc.connect(self.on_done, event="done") - def on_done(self, proc): + # if proc not in self.procs: + # self.procs.append(proc) + self.add(proc) + + self.on_change(proc) + + return proc + + def on_change(self, proc): pass + def on_done(self, proc): + self.remove(proc) + def remove(self, proc): - if proc in self.procs: - self.procs.remove(proc) + to_be_removed = [] + + for pref in self.procs: + if pref() == proc or pref() is None: + to_be_removed.append(pref) + + for pref in to_be_removed: + self.procs.remove(pref) -class FCVisibleProcessContainer(FCProcessContainer): +class FCVisibleProcessContainer(QtCore.QObject, FCProcessContainer): + something_changed = QtCore.pyqtSignal() def __init__(self, view): assert isinstance(view, FlatCAMActivityView) - super(FCVisibleProcessContainer, self).__init__() + #super(FCVisibleProcessContainer, self).__init__() + FCProcessContainer.__init__(self) + QtCore.QObject.__init__(self) self.view = view + self.something_changed.connect(self.update_view) + def on_done(self, proc): + print "FCVisibleProcessContainer.on_done()" super(FCVisibleProcessContainer, self).on_done(proc) - self.update_view() + #self.update_view() + self.something_changed.emit() + + def on_change(self, proc): + print "FCVisibleProcessContainer.on_change()" + super(FCVisibleProcessContainer, self).on_change(proc) + + #self.update_view() + self.something_changed.emit() def update_view(self): - + print "FCVisibleProcessContainer.update_view()" if len(self.procs) == 0: self.view.set_idle() + elif len(self.procs) == 1: - self.view.set_busy(self.procs[0].status_msg()) + self.view.set_busy(self.procs[0]().status_msg()) + else: self.view.set_busy("%d processes running." % len(self.procs)) \ No newline at end of file diff --git a/share/active.gif b/share/active.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2cb55d77a4a73ef3a924765768f1bd98d722d72 GIT binary patch literal 1497 zcma)+e@qi+7{}lKw8ewcim7);1g zOECwY4bclRj4T)?*_Z@NVzOn)MyVp2ZV4_k`-7+{)nrQ}m2|`{o%kHrRH|`u|6T6# z=JWl$-{(2dSYN&OD26cPLr5x?vi&S=rgd7~!uxZo87j$x{5L%YIXA=i>-No z-C;}RE`vk_U#WkjN+l{nW&EE!29oU`8GA3>Y*mdiLvG~it}gm}w#!n{rE;oTdrWhR ztlFVjXI+FO=1cGxWk18IoPi{;_)Zuofeg5T60QK~Ar)LoD$n!e28jV&W**U%1fS|RU1aW($W?{`boS{bCvN00UTpOq96LrDeU}AY}U`Ncg@q{gtdup z4giC9L3i|VR4@*;fjFQWqP>-0W_Gp|Hn|(lw=pft$d%Obu1_zSZa)}nwRR$+wC83{ z$;U04AA7xO^}$m_XnSr2;oAA`sD88$<9g|-ximJBi47G29*``^6lg&^I2T3$gmZ&@ zjl#c%0T>eTcd;?&G81VjKWH}H4lo=AwhI6|M@fdaZ0nny8HkH;^}T6DWB*{S&FM(w z=hSSsPF*W>mrt^#M-Vk2{wQ6M*P++DhM^Vc*Z2CR=(XMm?S8B1wTh6II;ESoiu<@o zu9}qiEB6H*VGoi?2hVKMTkM=@UaHs2@wTXms~k7d;+ii_noqV}5tZI^=<0Rec-nPA zrfZ+q2d>kL1{y5v7jP|%Ba{Yo`_B4=bfDYzp$#qrj6;E-EC1tNW+Bg3G-wsd8Rn7} zi9*$$5q2ry&x;QrQ%F0d@m?XP4W0r{>Fpe68@~OmL0mIIe&3X}c=NyObIrx)IELQQ z_JQJ!Gbtd!qU5(ldXd1wSX(6gOs?$`U-SGLYrYHQva{`f=Jz60^8#hs)!YC8 literal 0 HcmV?d00001