コード例 #1
0
    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)
コード例 #2
0
    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
コード例 #3
0
ファイル: Manager.py プロジェクト: outofculture/acq4
    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()
コード例 #4
0
    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)