controller_api.py
179 lines
| 3.7 KiB
| text/x-python
|
PythonLexer
/ schainpy / controller_api.py
|
r636 | import threading | ||
|
r827 | from Queue import Queue | ||
|
r636 | |||
from schainpy.controller import Project | ||||
|
r716 | from schainpy.model.graphics.jroplotter import PlotManager | ||
|
r636 | |||
class ControllerThread(threading.Thread, Project): | ||||
|
r944 | |||
|
r708 | def __init__(self, plotter_queue=None): | ||
|
r944 | |||
|
r636 | threading.Thread.__init__(self) | ||
|
r708 | Project.__init__(self, plotter_queue) | ||
|
r944 | |||
|
r636 | self.setDaemon(True) | ||
|
r944 | |||
|
r672 | self.lock = threading.Lock() | ||
|
r636 | self.control = {'stop':False, 'pause':False} | ||
|
r944 | |||
|
r636 | def __del__(self): | ||
|
r944 | |||
|
r636 | self.control['stop'] = True | ||
|
r944 | |||
|
r636 | def stop(self): | ||
|
r944 | |||
|
r672 | self.lock.acquire() | ||
|
r944 | |||
|
r636 | self.control['stop'] = True | ||
|
r944 | |||
|
r672 | self.lock.release() | ||
|
r944 | |||
|
r636 | def pause(self): | ||
|
r944 | |||
|
r672 | self.lock.acquire() | ||
|
r944 | |||
|
r636 | self.control['pause'] = not(self.control['pause']) | ||
|
r672 | paused = self.control['pause'] | ||
|
r944 | |||
|
r672 | self.lock.release() | ||
|
r944 | |||
|
r672 | return paused | ||
|
r944 | |||
|
r672 | def isPaused(self): | ||
|
r944 | |||
|
r672 | self.lock.acquire() | ||
paused = self.control['pause'] | ||||
self.lock.release() | ||||
|
r944 | |||
|
r672 | return paused | ||
|
r944 | |||
|
r672 | def isStopped(self): | ||
|
r944 | |||
|
r672 | self.lock.acquire() | ||
stopped = self.control['stop'] | ||||
self.lock.release() | ||||
|
r944 | |||
|
r672 | return stopped | ||
|
r944 | |||
|
r636 | def run(self): | ||
self.control['stop'] = False | ||||
self.control['pause'] = False | ||||
|
r944 | |||
|
r708 | self.writeXml() | ||
|
r944 | |||
|
r636 | self.createObjects() | ||
self.connectObjects() | ||||
Project.run(self) | ||||
|
r944 | |||
|
r636 | def isRunning(self): | ||
|
r944 | |||
|
r636 | return self.is_alive() | ||
|
r944 | |||
|
r636 | def isFinished(self): | ||
|
r944 | |||
|
r636 | return not self.is_alive() | ||
|
r681 | |||
|
r716 | def setPlotters(self): | ||
|
r944 | |||
|
r736 | plotterList = PlotManager.plotterList | ||
|
r944 | |||
|
r716 | for thisPUConfObj in self.procUnitConfObjDict.values(): | ||
|
r944 | |||
|
r716 | inputId = thisPUConfObj.getInputId() | ||
|
r944 | |||
|
r716 | if int(inputId) == 0: | ||
continue | ||||
|
r944 | |||
|
r716 | for thisOpObj in thisPUConfObj.getOperationObjList(): | ||
|
r944 | |||
|
r716 | if thisOpObj.type == "self": | ||
continue | ||||
|
r944 | |||
|
r716 | if thisOpObj.name in plotterList: | ||
thisOpObj.type = "plotter" | ||||
def setPlotterQueue(self, plotter_queue): | ||||
|
r944 | |||
|
r716 | self.plotterQueue = plotter_queue | ||
|
r944 | |||
|
r716 | def getPlotterQueue(self): | ||
|
r944 | |||
|
r716 | return self.plotterQueue | ||
def useExternalPlotter(self): | ||||
|
r944 | |||
|
r827 | self.plotterQueue = Queue(10) | ||
|
r716 | self.setPlotters() | ||
|
r944 | |||
|
r716 | plotManagerObj = PlotManager(self.plotterQueue) | ||
plotManagerObj.setController(self) | ||||
|
r944 | |||
|
r716 | return plotManagerObj | ||
|
r944 | |||
|
r681 | # from PyQt4 import QtCore | ||
# from PyQt4.QtCore import SIGNAL | ||||
|
r944 | # | ||
|
r681 | # class ControllerQThread(QtCore.QThread, Project): | ||
|
r944 | # | ||
|
r681 | # def __init__(self, filename): | ||
|
r944 | # | ||
|
r681 | # QtCore.QThread.__init__(self) | ||
# Project.__init__(self) | ||||
|
r944 | # | ||
|
r681 | # self.filename = filename | ||
|
r944 | # | ||
|
r681 | # self.lock = threading.Lock() | ||
# self.control = {'stop':False, 'pause':False} | ||||
|
r944 | # | ||
|
r681 | # def __del__(self): | ||
|
r944 | # | ||
|
r681 | # self.control['stop'] = True | ||
# self.wait() | ||||
|
r944 | # | ||
|
r681 | # def stop(self): | ||
|
r944 | # | ||
|
r681 | # self.lock.acquire() | ||
|
r944 | # | ||
|
r681 | # self.control['stop'] = True | ||
|
r944 | # | ||
|
r681 | # self.lock.release() | ||
|
r944 | # | ||
|
r681 | # def pause(self): | ||
|
r944 | # | ||
|
r681 | # self.lock.acquire() | ||
|
r944 | # | ||
|
r681 | # self.control['pause'] = not(self.control['pause']) | ||
# paused = self.control['pause'] | ||||
|
r944 | # | ||
|
r681 | # self.lock.release() | ||
|
r944 | # | ||
|
r681 | # return paused | ||
|
r944 | # | ||
|
r681 | # def isPaused(self): | ||
|
r944 | # | ||
|
r681 | # self.lock.acquire() | ||
# paused = self.control['pause'] | ||||
# self.lock.release() | ||||
|
r944 | # | ||
|
r681 | # return paused | ||
|
r944 | # | ||
|
r681 | # def isStopped(self): | ||
|
r944 | # | ||
|
r681 | # self.lock.acquire() | ||
# stopped = self.control['stop'] | ||||
# self.lock.release() | ||||
|
r944 | # | ||
|
r681 | # return stopped | ||
|
r944 | # | ||
|
r681 | # def run(self): | ||
|
r944 | # | ||
|
r681 | # self.control['stop'] = False | ||
# self.control['pause'] = False | ||||
|
r944 | # | ||
|
r681 | # self.readXml(self.filename) | ||
# self.createObjects() | ||||
# self.connectObjects() | ||||
# self.emit( SIGNAL( "jobStarted( PyQt_PyObject )" ), 1) | ||||
# Project.run(self) | ||||
# self.emit( SIGNAL( "jobFinished( PyQt_PyObject )" ), 1) | ||||
|
r944 | # | ||