def updateDeviceDocks(self, devNames=None): """Create/unhide new docks if they are needed and hide old docks if they are not. If a list of device names is given, only those device docks will be affected.""" task = self.currentTask #print "update docks", task.name() #print " devices:", task.enabledDevices() ## (un)hide docks as needed for d in self.docks: if devNames is not None and d not in devNames: continue #print " check", d if self.docks[d] is None: continue if d not in task.enabledDevices(): #print " hide", d self.hideDock(d) else: #print " show", d self.showDock(d) ## Create docks that don't exist #pdb.set_trace() for d in task.enabledDevices(): if devNames is not None and d not in devNames: continue if d not in self.docks: if d not in self.manager.listDevices(): continue self.docks[d] = None ## Instantiate to prevent endless loops! #print " Create", d try: dev = self.manager.getDevice(d) dw = dev.taskInterface(self) except: printExc("Error while creating dock '%s':" % d) del self.docks[d] if d in self.docks: dock = Qt.QDockWidget(d) dock.setFeatures(dock.AllDockWidgetFeatures) dock.setAllowedAreas(Qt.Qt.BottomDockWidgetArea | Qt.Qt.TopDockWidgetArea) dock.setObjectName(d) dock.setWidget(dw) dock.setAutoFillBackground(True) dw.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Expanding) self.docks[d] = dock self.win.addDockWidget(Qt.Qt.BottomDockWidgetArea, dock) if self.firstDock is None: self.firstDock = dock else: Qt.QApplication.sendPostedEvents( dock, 0) # required to ensure new tab is visible self.win.tabifyDockWidget(self.firstDock, dock) dock.widget().sigSequenceChanged.connect( self.updateSeqParams) self.updateSeqParams(d)
def createAnalysisDock(self, mod): try: m = analysisModules.createAnalysisModule(mod, self) dock = Qt.QDockWidget(mod) dock.setFeatures(dock.AllDockWidgetFeatures) dock.setAllowedAreas(Qt.Qt.BottomDockWidgetArea | Qt.Qt.TopDockWidgetArea) dock.setObjectName(mod) dock.setWidget(m) dock.setAutoFillBackground(True) self.analysisDocks[mod] = dock self.win.addDockWidget(Qt.Qt.BottomDockWidgetArea, dock) if self.firstDock is None: self.firstDock = dock else: # by default, docks are tabbed. # if dock state is stored, this will be corrected later. Qt.QApplication.sendPostedEvents( dock, 0) # required to ensure new tab is visible self.win.tabifyDockWidget(self.firstDock, dock) items = self.ui.analysisList.findItems(mod, Qt.Qt.MatchExactly) items[0].setCheckState(Qt.Qt.Checked) return True except: printExc("Analysis module creation failed:") return False
def __init__(self, manager, name, config): Module.__init__(self, manager, name, config) self.win = Qt.QMainWindow() mp = os.path.dirname(__file__) self.win.setWindowIcon(Qt.QIcon(os.path.join(mp, 'icon.png'))) self.ui = Ui_MainWindow() self.ui.setupUi(self.win) self.stateFile = os.path.join('modules', self.name + '_ui.cfg') firstDock = None self.modGroupOrder = ['Acquisition', 'Analysis', 'Utilities'] self.devRackDocks = {} for d in self.manager.listDevices(): try: dw = self.manager.getDevice(d).deviceInterface(self) if dw is None: continue dock = Qt.QDockWidget(d) dock.setFeatures(dock.DockWidgetMovable | dock.DockWidgetFloatable) dock.setObjectName(d) dock.setWidget(dw) self.devRackDocks[d] = dock self.win.addDockWidget(Qt.Qt.RightDockWidgetArea, dock) # By default, we stack all docks if firstDock is None: firstDock = dock else: self.win.tabifyDockWidget(firstDock, dock) except: self.showMessage( "Error creating dock for device '%s', see console for details." % d, 10000) printExc("Error while creating dock for device '%s':" % d) self.updateModList() self.updateConfList() self.ui.loadConfigBtn.clicked.connect(self.loadConfig) self.ui.loadModuleBtn.clicked.connect(self.loadSelectedModule) self.ui.reloadModuleBtn.clicked.connect(self.reloadAll) self.ui.configList.itemDoubleClicked.connect(self.loadConfig) self.ui.moduleList.itemDoubleClicked.connect(self.loadSelectedModule) self.ui.quitBtn.clicked.connect(self.requestQuit) state = self.manager.readConfigFile(self.stateFile) # restore window position if 'geometry' in state: geom = Qt.QRect(*state['geometry']) self.win.setGeometry(geom) # restore dock configuration if 'window' in state: ws = Qt.QByteArray.fromPercentEncoding(state['window']) self.win.restoreState(ws) self.win.show()
def addCanvas(self, name=None, state=None): if name is None: name = 'Canvas' i = 0 while True: name2 = '%s_%03d' % (name, i) if name2 not in self.dockItems: break i += 1 name = name2 p = CanvasWidget() d = Qt.QDockWidget(name) d.setObjectName(name) d.setWidget(p) #if state is not None: #p.restoreState(state) nodes = self.flowchart.nodes() #print name, nodes if name in nodes: node = nodes[name] else: node = self.flowchart.createNode('CanvasWidget', name=name) node.setCanvas(p.canvas) self.addDockWidget(Qt.Qt.RightDockWidgetArea, d) item = ListItem(name, d) self.dockItems[name] = { 'type': 'Canvas', 'listItem': item, 'dock': d, 'widget': p, 'node': node } self.ui.dockList.addItem(item)