示例#1
0
    def __init__(self, manager, name, config):
        Module.__init__(self, manager, name, config)
        self.win = QtGui.QMainWindow()
        mp = os.path.dirname(__file__)
        self.win.setWindowIcon(QtGui.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 = QtGui.QDockWidget(d)
                dock.setFeatures(dock.DockWidgetMovable
                                 | dock.DockWidgetFloatable)
                dock.setObjectName(d)
                dock.setWidget(dw)

                self.devRackDocks[d] = dock
                self.win.addDockWidget(QtCore.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 = QtCore.QRect(*state['geometry'])
            self.win.setGeometry(geom)
        # restore dock configuration
        if 'window' in state:
            ws = QtCore.QByteArray.fromPercentEncoding(state['window'])
            self.win.restoreState(ws)

        self.win.show()
示例#2
0
文件: Manager.py 项目: ablot/acq4
    def __init__(self, manager, name, config):
        Module.__init__(self, manager, name, config)
        self.win = QtGui.QMainWindow()
        mp = os.path.dirname(__file__)
        self.win.setWindowIcon(QtGui.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.devRackDocks = {}
        for d in self.manager.listDevices():
            try:
                dw = self.manager.getDevice(d).deviceInterface(self)
                if dw is None:
                    continue
                dock = QtGui.QDockWidget(d)
                dock.setFeatures(dock.DockWidgetMovable | dock.DockWidgetFloatable)
                dock.setObjectName(d)
                dock.setWidget(dw)
                
                self.devRackDocks[d] = dock
                self.win.addDockWidget(QtCore.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.loadModule)
        self.ui.reloadModuleBtn.clicked.connect(self.reloadAll)
        self.ui.configList.itemDoubleClicked.connect(self.loadConfig)
        self.ui.moduleList.itemDoubleClicked.connect(self.loadModule)
        self.ui.quitBtn.clicked.connect(self.requestQuit)

        state = self.manager.readConfigFile(self.stateFile)
        # restore window position
        if 'geometry' in state:
            geom = QtCore.QRect(*state['geometry'])
            self.win.setGeometry(geom)
        # restore dock configuration
        if 'window' in state:
            ws = QtCore.QByteArray.fromPercentEncoding(state['window'])
            self.win.restoreState(ws)

        self.win.show()
示例#3
0
    def __init__(self, manager, name, config):
        Module.__init__(self, manager, name, config)
        self.win = QtGui.QMainWindow()
        mp = os.path.dirname(__file__)
        self.win.setWindowIcon(QtGui.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')

        self.devRackDocks = {}
        for d in self.manager.listDevices():
            try:
                dw = self.manager.getDevice(d).deviceInterface(self)
                if dw is None:
                    continue
                dock = QtGui.QDockWidget(d)
                dock.setFeatures(dock.DockWidgetMovable | dock.DockWidgetFloatable)
                dock.setObjectName(d)
                dock.setWidget(dw)
                
                self.devRackDocks[d] = dock
                self.win.addDockWidget(QtCore.Qt.RightDockWidgetArea, 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()

        #QtCore.QObject.connect(self.ui.loadConfigBtn, QtCore.SIGNAL('clicked()'), self.loadConfig)
        self.ui.loadConfigBtn.clicked.connect(self.loadConfig)
        #QtCore.QObject.connect(self.ui.loadModuleBtn, QtCore.SIGNAL('clicked()'), self.loadModule)
        self.ui.loadModuleBtn.clicked.connect(self.loadModule)
        #QtCore.QObject.connect(self.ui.reloadModuleBtn, QtCore.SIGNAL('clicked()'), self.reloadAll)
        self.ui.reloadModuleBtn.clicked.connect(self.reloadAll)
        #QtCore.QObject.connect(self.ui.configList, QtCore.SIGNAL('itemDoubleClicked(QListWidgetItem*)'), self.loadConfig)
        self.ui.configList.itemDoubleClicked.connect(self.loadConfig)
        #QtCore.QObject.connect(self.ui.moduleList, QtCore.SIGNAL('itemDoubleClicked(QListWidgetItem*)'), self.loadModule)
        self.ui.moduleList.itemDoubleClicked.connect(self.loadModule)
        #self.logBtn = self.ui.logBtn ## to be able to access logBtns uniformly in all modules
        #self.logBtn.clicked.connect(manager.logWindow.show)
        #QtCore.QObject.connect(self.ui.quitBtn, QtCore.SIGNAL('clicked()'), self.requestQuit)
        self.ui.quitBtn.clicked.connect(self.requestQuit)

        state = self.manager.readConfigFile(self.stateFile)
        if 'geometry' in state:
            geom = QtCore.QRect(*state['geometry'])
            self.win.setGeometry(geom)
        if 'window' in state:
            ws = QtCore.QByteArray.fromPercentEncoding(state['window'])
            self.win.restoreState(ws)

        self.win.show()
示例#4
0
class Manager(Module):
    def __init__(self, manager, name, config):
        Module.__init__(self, manager, name, config)
        self.win = QtGui.QMainWindow()
        mp = os.path.dirname(__file__)
        self.win.setWindowIcon(QtGui.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')

        self.devRackDocks = {}
        for d in self.manager.listDevices():
            try:
                dw = self.manager.getDevice(d).deviceInterface(self)
                if dw is None:
                    continue
                dock = QtGui.QDockWidget(d)
                dock.setFeatures(dock.DockWidgetMovable | dock.DockWidgetFloatable)
                dock.setObjectName(d)
                dock.setWidget(dw)
                
                self.devRackDocks[d] = dock
                self.win.addDockWidget(QtCore.Qt.RightDockWidgetArea, 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()

        #QtCore.QObject.connect(self.ui.loadConfigBtn, QtCore.SIGNAL('clicked()'), self.loadConfig)
        self.ui.loadConfigBtn.clicked.connect(self.loadConfig)
        #QtCore.QObject.connect(self.ui.loadModuleBtn, QtCore.SIGNAL('clicked()'), self.loadModule)
        self.ui.loadModuleBtn.clicked.connect(self.loadModule)
        #QtCore.QObject.connect(self.ui.reloadModuleBtn, QtCore.SIGNAL('clicked()'), self.reloadAll)
        self.ui.reloadModuleBtn.clicked.connect(self.reloadAll)
        #QtCore.QObject.connect(self.ui.configList, QtCore.SIGNAL('itemDoubleClicked(QListWidgetItem*)'), self.loadConfig)
        self.ui.configList.itemDoubleClicked.connect(self.loadConfig)
        #QtCore.QObject.connect(self.ui.moduleList, QtCore.SIGNAL('itemDoubleClicked(QListWidgetItem*)'), self.loadModule)
        self.ui.moduleList.itemDoubleClicked.connect(self.loadModule)
        #self.logBtn = self.ui.logBtn ## to be able to access logBtns uniformly in all modules
        #self.logBtn.clicked.connect(manager.logWindow.show)
        #QtCore.QObject.connect(self.ui.quitBtn, QtCore.SIGNAL('clicked()'), self.requestQuit)
        self.ui.quitBtn.clicked.connect(self.requestQuit)

        state = self.manager.readConfigFile(self.stateFile)
        if 'geometry' in state:
            geom = QtCore.QRect(*state['geometry'])
            self.win.setGeometry(geom)
        if 'window' in state:
            ws = QtCore.QByteArray.fromPercentEncoding(state['window'])
            self.win.restoreState(ws)

        self.win.show()

        
    def showMessage(self, *args):
        self.ui.statusBar.showMessage(*args)
        
    def updateModList(self):
        self.ui.moduleList.clear()
        for m in self.manager.listDefinedModules():
            self.ui.moduleList.addItem(m)
            
    def updateConfList(self):
        self.ui.configList.clear()
        for m in self.manager.listConfigurations():
            self.ui.configList.addItem(m)
        
    def show(self):
        self.win.show()

    def requestQuit(self):
        self.manager.quit()
    

        
    def loadModule(self):
        try:
            QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
            mod = str(self.ui.moduleList.currentItem().text())
            self.manager.loadDefinedModule(mod)
            self.showMessage("Loaded module '%s'." % mod, 10000)
        finally:
            QtGui.QApplication.restoreOverrideCursor()
        
    def reloadAll(self):
        self.manager.reloadAll()
        #mod = str(self.ui.moduleList.currentItem().text())
        #self.manager.loadDefinedModule(mod, forceReload=True)
        #self.showMessage("Loaded module '%s'." % mod, 10000)
        
    def loadConfig(self):
        #print "LOAD CONFIG"
        cfg = str(self.ui.configList.currentItem().text())
        self.manager.loadDefinedConfig(cfg)
        self.updateModList()
        self.showMessage("Loaded configuration '%s'." % cfg, 10000)

    def quit(self):
        ## save ui configuration
        geom = self.win.geometry()
        state = {'window': str(self.win.saveState().toPercentEncoding()), 'geometry': [geom.x(), geom.y(), geom.width(), geom.height()]}
        self.manager.writeConfigFile(state, self.stateFile)
        Module.quit(self)
示例#5
0
class Manager(Module):
    def __init__(self, manager, name, config):
        Module.__init__(self, manager, name, config)
        self.win = QtGui.QMainWindow()
        mp = os.path.dirname(__file__)
        self.win.setWindowIcon(QtGui.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.devRackDocks = {}
        for d in self.manager.listDevices():
            try:
                dw = self.manager.getDevice(d).deviceInterface(self)
                if dw is None:
                    continue
                dock = QtGui.QDockWidget(d)
                dock.setFeatures(dock.DockWidgetMovable | dock.DockWidgetFloatable)
                dock.setObjectName(d)
                dock.setWidget(dw)
                
                self.devRackDocks[d] = dock
                self.win.addDockWidget(QtCore.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.loadModule)
        self.ui.reloadModuleBtn.clicked.connect(self.reloadAll)
        self.ui.configList.itemDoubleClicked.connect(self.loadConfig)
        self.ui.moduleList.itemDoubleClicked.connect(self.loadModule)
        self.ui.quitBtn.clicked.connect(self.requestQuit)

        state = self.manager.readConfigFile(self.stateFile)
        # restore window position
        if 'geometry' in state:
            geom = QtCore.QRect(*state['geometry'])
            self.win.setGeometry(geom)
        # restore dock configuration
        if 'window' in state:
            ws = QtCore.QByteArray.fromPercentEncoding(state['window'])
            self.win.restoreState(ws)

        self.win.show()

        
    def showMessage(self, *args):
        self.ui.statusBar.showMessage(*args)
        
    def updateModList(self):
        self.ui.moduleList.clear()
        for m in self.manager.listDefinedModules():
            self.ui.moduleList.addItem(m)
            
    def updateConfList(self):
        self.ui.configList.clear()
        for m in self.manager.listConfigurations():
            self.ui.configList.addItem(m)
        
    def show(self):
        self.win.show()

    def requestQuit(self):
        self.manager.quit()
    

        
    def loadModule(self):
        try:
            QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
            mod = str(self.ui.moduleList.currentItem().text())
            self.manager.loadDefinedModule(mod)
            self.showMessage("Loaded module '%s'." % mod, 10000)
        finally:
            QtGui.QApplication.restoreOverrideCursor()
        
    def reloadAll(self):
        self.manager.reloadAll()
        #mod = str(self.ui.moduleList.currentItem().text())
        #self.manager.loadDefinedModule(mod, forceReload=True)
        #self.showMessage("Loaded module '%s'." % mod, 10000)
        
    def loadConfig(self):
        #print "LOAD CONFIG"
        cfg = str(self.ui.configList.currentItem().text())
        self.manager.loadDefinedConfig(cfg)
        self.updateModList()
        self.showMessage("Loaded configuration '%s'." % cfg, 10000)

    def quit(self):
        ## save ui configuration
        geom = self.win.geometry()
        state = {'window': str(self.win.saveState().toPercentEncoding()), 'geometry': [geom.x(), geom.y(), geom.width(), geom.height()]}
        self.manager.writeConfigFile(state, self.stateFile)
        Module.quit(self)
示例#6
0
class Manager(Module):
    moduleDisplayName = "Manager"
    moduleCategory = None

    def __init__(self, manager, name, config):
        Module.__init__(self, manager, name, config)
        self.win = QtGui.QMainWindow()
        mp = os.path.dirname(__file__)
        self.win.setWindowIcon(QtGui.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 = QtGui.QDockWidget(d)
                dock.setFeatures(dock.DockWidgetMovable
                                 | dock.DockWidgetFloatable)
                dock.setObjectName(d)
                dock.setWidget(dw)

                self.devRackDocks[d] = dock
                self.win.addDockWidget(QtCore.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 = QtCore.QRect(*state['geometry'])
            self.win.setGeometry(geom)
        # restore dock configuration
        if 'window' in state:
            ws = QtCore.QByteArray.fromPercentEncoding(state['window'])
            self.win.restoreState(ws)

        self.win.show()

    def showMessage(self, *args):
        self.ui.statusBar.showMessage(*args)

    def updateModList(self):
        # Fill the list of modules.

        # clear tree and create top-level items in default order
        self.ui.moduleList.clear()
        self._modGrpItems = {}
        for n in self.modGroupOrder:
            self._mkModGrpItem(n)

        # load defined configurations first
        confMods = []
        for name, conf in self.manager.listDefinedModules().items():
            cls = modules.getModuleClass(conf['module'])
            confMods.append(cls)
            root = self._mkModGrpItem(cls.moduleCategory)
            item = QtGui.QTreeWidgetItem([name])
            font = item.font(0)
            font.setBold(True)
            item.setFont(0, font)
            item.confModName = name
            root.addChild(item)

        # if a module has no defined configurations, then just give it a default entry without configuration.
        for name, cls in modules.getModuleClasses().items():
            if cls is Manager or cls in confMods:
                continue
            root = self._mkModGrpItem(cls.moduleCategory)
            dispName = cls.moduleDisplayName or cls.__name__
            item = QtGui.QTreeWidgetItem([dispName])
            item.modName = name
            root.addChild(item)

    def _mkModGrpItem(self, name):
        if name is None:
            name = "Other"
        if name in self._modGrpItems:
            return self._modGrpItems[name]
        parts = name.split('.')
        if len(parts) > 1:
            root = self._mkModGrpItem('.'.join(parts[:-1]))
        else:
            root = self.ui.moduleList.invisibleRootItem()
        item = QtGui.QTreeWidgetItem([parts[-1]])
        root.addChild(item)
        item.setExpanded(True)
        self._modGrpItems[name] = item
        return item

    def updateConfList(self):
        self.ui.configList.clear()
        for m in self.manager.listConfigurations():
            self.ui.configList.addItem(m)

    def show(self):
        self.win.show()

    def requestQuit(self):
        self.manager.quit()

    def loadSelectedModule(self):
        item = self.ui.moduleList.currentItem()
        if hasattr(item, 'confModName'):
            self.loadConfiguredModule(item.confModName)
        elif hasattr(item, 'modName'):
            self.loadModule(item.modName)

    def loadConfiguredModule(self, mod):
        try:
            QtGui.QApplication.setOverrideCursor(
                QtGui.QCursor(QtCore.Qt.WaitCursor))
            self.manager.loadDefinedModule(mod)
            self.showMessage("Loaded module configuration '%s'." % mod, 10000)
        finally:
            QtGui.QApplication.restoreOverrideCursor()

    def loadModule(self, mod):
        try:
            QtGui.QApplication.setOverrideCursor(
                QtGui.QCursor(QtCore.Qt.WaitCursor))
            self.manager.loadModule(mod)
            self.showMessage("Loaded module '%s'." % mod, 10000)
        finally:
            QtGui.QApplication.restoreOverrideCursor()

    def reloadAll(self):
        self.manager.reloadAll()
        #mod = str(self.ui.moduleList.currentItem().text())
        #self.manager.loadDefinedModule(mod, forceReload=True)
        #self.showMessage("Loaded module '%s'." % mod, 10000)

    def loadConfig(self):
        #print "LOAD CONFIG"
        cfg = str(self.ui.configList.currentItem().text())
        self.manager.loadDefinedConfig(cfg)
        self.updateModList()
        self.showMessage("Loaded configuration '%s'." % cfg, 10000)

    def quit(self):
        ## save ui configuration
        geom = self.win.geometry()
        state = {
            'window': str(self.win.saveState().toPercentEncoding()),
            'geometry': [geom.x(),
                         geom.y(),
                         geom.width(),
                         geom.height()]
        }
        self.manager.writeConfigFile(state, self.stateFile)
        Module.quit(self)