def main(): """ 1. Parse command line arguments. 2. If GUI enabled (session.gui), launch QApplication 3. Search an extension in "oalab.extension" plugins. - If found, launch extension - If not found, quit application and shows available extensions """ create_project_shortcut() session = Session() cli = CommandLineParser(session=session) cli.parse() if session.gui: from openalea.vpltk.qt import QtGui from openalea.oalab.gui.mainwindow import MainWindow app = QtGui.QApplication(sys.argv) win = None # Run all extension matching session.extension available_extensions = [] if session.extension == '': session.extension = 'plant' for plugin_class in plugins('oalab.lab'): try: ext = plugin_class.name except AttributeError: continue else: # register plugin info for user. args = dict(EXT=ext, MODULE=plugin_class.__module__, CLASS=plugin_class.__name__) text = ' - \033[94m%(EXT)s\033[0m (provided by class %(CLASS)s defined in %(MODULE)s)' % args available_extensions.append(text) if session.extension == ext: plugin = plugin_class() win = MainWindow(session) debug_plugin('oalab.lab', func=plugin, func_args=[win]) win.show() win.raise_() break if win: app.exec_() else: print 'Extension %r not found' % session.extension print 'Please choose a valid \033[94mextension\033[0m:' print '\n'.join(available_extensions)
def add_plugin(self, plugin=None, name=None): if name and plugin is None: _plugin_class = plugin_class('oalab.applet', name) if _plugin_class is None: return plugin = _plugin_class() def plug(): applet = plugin_instance('oalab.applet', plugin.name) plugin.graft(applet=applet, oa_mainwin=self) self.session.applet['plugin_%s' % plugin.name] = plugin self.session.applet[applet.__class__.__name__] = applet # Use plugin manager call to handle debug mode automatically debug_plugin('oalab.applet', func=plug)
def reload(self): self.dtype = None self._name_to_applet = {} self._name_to_action = {} self._action_to_name = {} for plugin in plugins('oalab.plugin', criteria=dict(implement='IParadigmApplet')): applet = debug_plugin('oalab.plugin', func=plugin) if applet: name = applet.default_name self._name_to_applet[name] = applet action = QtGui.QAction(qicon(applet.icon), "New " + name, self._parent) action.triggered.connect(self._on_action_triggered) self._name_to_action[name] = action self._action_to_name[action] = name
def __init__(self, parent=None): super(ParadigmContainer, self).__init__(parent=parent) self.setTabsClosable(True) self.applets = [] self._open_tabs = {} self.paradigms = {} self._new_file_actions = {} self.paradigms_actions = [] for plugin_class in plugins('oalab.paradigm_applet'): plugin = plugin_class() paradigm_applet = debug_plugin('oalab.paradigm_applet', func=plugin) if paradigm_applet: self.paradigms[plugin_class.name] = paradigm_applet self._open_objects = {} self.projectManager = ProjectManager() self.setAccessibleName("Container") self.setElideMode(QtCore.Qt.ElideLeft) self.actionNewFile = QtGui.QAction(qicon("new.png"), "New file", self) self.actionOpenFile = QtGui.QAction(qicon("open.png"), "Open file", self) self.actionSave = QtGui.QAction(qicon("save.png"), "Save File", self) self.actionSaveAs = QtGui.QAction(qicon("save.png"), "Save As", self) self.actionRun = QtGui.QAction(qicon("run.png"), "Run", self) self.actionAnimate = QtGui.QAction(qicon("play.png"), "Animate", self) self.actionStep = QtGui.QAction(qicon("step.png"), "Step", self) self.actionStop = QtGui.QAction(qicon("pause.png"), "Stop", self) self.actionInit = QtGui.QAction(qicon("rewind.png"), "Init", self) self.actionCloseCurrent = QtGui.QAction(qicon("closeButton.png"), "Close current tab", self) self.actionRunSelection = QtGui.QAction(qicon("run.png"), "Run subpart", self) self.actionUndo = QtGui.QAction(qicon("editundo.png"), "Undo", self) self.actionRedo = QtGui.QAction(qicon("editredo.png"), "Redo", self) self.actionSearch = QtGui.QAction(qicon("editfind.png"), "Search", self) self.actionComment = QtGui.QAction(qicon("commentOn.png"), "Comment", self) self.actionUnComment = QtGui.QAction(qicon("commentOff.png"), "Uncomment", self) self.actionGoto = QtGui.QAction(qicon("next-green.png"), "Go To", self) self.actionNewFile.setShortcut(self.tr("Ctrl+N")) self.actionOpenFile.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+O", None, QtGui.QApplication.UnicodeUTF8)) self.actionRunSelection.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+E", None, QtGui.QApplication.UnicodeUTF8)) self.actionCloseCurrent.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+W", None, QtGui.QApplication.UnicodeUTF8)) self.actionSearch.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+F", None, QtGui.QApplication.UnicodeUTF8)) self.actionGoto.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+G", None, QtGui.QApplication.UnicodeUTF8)) self.actionSave.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+S", None, QtGui.QApplication.UnicodeUTF8)) # self.actionRun.setShortcut(QtGui.QApplication.translate("MainWindow", "Ctrl+R", None, QtGui.QApplication.UnicodeUTF8)) self.actionRun.setShortcuts([QtGui.QApplication.translate("MainWindow", "F1", None, QtGui.QApplication.UnicodeUTF8), QtGui.QApplication.translate( "MainWindow", "Ctrl+R", None, QtGui.QApplication.UnicodeUTF8)]) self.actionAnimate.setShortcut( QtGui.QApplication.translate("MainWindow", "F2", None, QtGui.QApplication.UnicodeUTF8)) self.actionStep.setShortcut( QtGui.QApplication.translate("MainWindow", "F3", None, QtGui.QApplication.UnicodeUTF8)) self.actionStop.setShortcut( QtGui.QApplication.translate("MainWindow", "F4", None, QtGui.QApplication.UnicodeUTF8)) self.actionInit.setShortcut( QtGui.QApplication.translate("MainWindow", "F5", None, QtGui.QApplication.UnicodeUTF8)) self.actionNewFile.triggered.connect(self.new_file) self.actionOpenFile.triggered.connect(self.open) self.actionSave.triggered.connect(self.save_current) # self.actionSaveAs.triggered.connect(self.save_as) self.actionRun.triggered.connect(self.run) self.actionAnimate.triggered.connect(self.animate) self.actionStep.triggered.connect(self.step) self.actionStop.triggered.connect(self.stop) self.actionInit.triggered.connect(self.init) self.actionCloseCurrent.triggered.connect(self.close_current) self.actionRunSelection.triggered.connect(self.execute) self.actionUndo.triggered.connect(self.undo) self.actionRedo.triggered.connect(self.redo) self.actionSearch.triggered.connect(self.search) self.actionGoto.triggered.connect(self.goto) self.actionComment.triggered.connect(self.comment) self.actionUnComment.triggered.connect(self.uncomment) self.actionAddFile = QtGui.QAction(qicon("bool.png"), "Add to Project", self) self.actionAddFile.triggered.connect(self.add_current_file) self.actionStop.setEnabled(False) self._run_actions = [ self.actionAnimate, self.actionInit, self.actionRun, self.actionRunSelection, self.actionStep, self.actionStop, ] self._actions = [ ["Project", "Manage", self.actionNewFile, 0], ["Project", "Manage", self.actionAddFile, 1], ["Project", "Manage", self.actionOpenFile, 1], ["Project", "Manage", self.actionSave, 1], ["Project", "Manage", self.actionCloseCurrent, 1], ["Project", "Play", self.actionRun, 0], ["Project", "Play", self.actionAnimate, 0], ["Project", "Play", self.actionStep, 0], ["Project", "Play", self.actionStop, 0], ["Project", "Play", self.actionInit, 0], ["Edit", "Text Edit", self.actionUndo, 0], ["Edit", "Text Edit", self.actionRedo, 0], ["Edit", "Text Edit", self.actionSearch, 0], ["Edit", "Text Edit", self.actionGoto, 0], ["Edit", "Text Edit", self.actionComment, 0], ["Edit", "Text Edit", self.actionUnComment, 0], ["Edit", "Text Edit", self.actionRunSelection, 0], ] self.connect_paradigm_container() self.extensions = "" self.connect(self, QtCore.SIGNAL('tabCloseRequested(int)'), self.autoClose) self.connect(self, QtCore.SIGNAL('currentChanged(int)'), self.safe_display_help) self.currentChanged.connect(self.on_current_tab_changed) self.addDefaultTab() self.fine_tune()
def __init__(self, parent=None): super(ParadigmContainer, self).__init__(parent=parent) self.setTabsClosable(True) self.applets = [] self._open_tabs = {} self.paradigms = {} self._new_file_actions = {} self.paradigms_actions = [] for plugin_class in plugins('oalab.paradigm_applet'): plugin = plugin_class() paradigm_applet = debug_plugin('oalab.paradigm_applet', func=plugin) if paradigm_applet: self.paradigms[plugin_class.name] = paradigm_applet self._open_objects = {} self.projectManager = ProjectManager() self.setAccessibleName("Container") self.setElideMode(QtCore.Qt.ElideLeft) self.actionNewFile = QtGui.QAction(qicon("new.png"), "New file", self) self.actionOpenFile = QtGui.QAction(qicon("open.png"), "Open file", self) self.actionSave = QtGui.QAction(qicon("save.png"), "Save File", self) self.actionSaveAs = QtGui.QAction(qicon("save.png"), "Save As", self) self.actionRun = QtGui.QAction(qicon("run.png"), "Run", self) self.actionAnimate = QtGui.QAction(qicon("play.png"), "Animate", self) self.actionStep = QtGui.QAction(qicon("step.png"), "Step", self) self.actionStop = QtGui.QAction(qicon("pause.png"), "Stop", self) self.actionInit = QtGui.QAction(qicon("rewind.png"), "Init", self) self.actionCloseCurrent = QtGui.QAction(qicon("closeButton.png"), "Close current tab", self) self.actionRunSelection = QtGui.QAction(qicon("run.png"), "Run subpart", self) self.actionUndo = QtGui.QAction(qicon("editundo.png"), "Undo", self) self.actionRedo = QtGui.QAction(qicon("editredo.png"), "Redo", self) self.actionSearch = QtGui.QAction(qicon("editfind.png"), "Search", self) self.actionComment = QtGui.QAction(qicon("commentOn.png"), "Comment", self) self.actionUnComment = QtGui.QAction(qicon("commentOff.png"), "Uncomment", self) self.actionGoto = QtGui.QAction(qicon("next-green.png"), "Go To", self) self.actionNewFile.setShortcut(self.tr("Ctrl+N")) self.actionOpenFile.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+O", None, QtGui.QApplication.UnicodeUTF8)) self.actionRunSelection.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+E", None, QtGui.QApplication.UnicodeUTF8)) self.actionCloseCurrent.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+W", None, QtGui.QApplication.UnicodeUTF8)) self.actionSearch.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+F", None, QtGui.QApplication.UnicodeUTF8)) self.actionGoto.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+G", None, QtGui.QApplication.UnicodeUTF8)) self.actionSave.setShortcut( QtGui.QApplication.translate("MainWindow", "Ctrl+S", None, QtGui.QApplication.UnicodeUTF8)) # self.actionRun.setShortcut(QtGui.QApplication.translate("MainWindow", "Ctrl+R", None, QtGui.QApplication.UnicodeUTF8)) self.actionRun.setShortcuts([ QtGui.QApplication.translate("MainWindow", "F1", None, QtGui.QApplication.UnicodeUTF8), QtGui.QApplication.translate("MainWindow", "Ctrl+R", None, QtGui.QApplication.UnicodeUTF8) ]) self.actionAnimate.setShortcut( QtGui.QApplication.translate("MainWindow", "F2", None, QtGui.QApplication.UnicodeUTF8)) self.actionStep.setShortcut( QtGui.QApplication.translate("MainWindow", "F3", None, QtGui.QApplication.UnicodeUTF8)) self.actionStop.setShortcut( QtGui.QApplication.translate("MainWindow", "F4", None, QtGui.QApplication.UnicodeUTF8)) self.actionInit.setShortcut( QtGui.QApplication.translate("MainWindow", "F5", None, QtGui.QApplication.UnicodeUTF8)) self.actionNewFile.triggered.connect(self.new_file) self.actionOpenFile.triggered.connect(self.open) self.actionSave.triggered.connect(self.save_current) # self.actionSaveAs.triggered.connect(self.save_as) self.actionRun.triggered.connect(self.run) self.actionAnimate.triggered.connect(self.animate) self.actionStep.triggered.connect(self.step) self.actionStop.triggered.connect(self.stop) self.actionInit.triggered.connect(self.init) self.actionCloseCurrent.triggered.connect(self.close_current) self.actionRunSelection.triggered.connect(self.execute) self.actionUndo.triggered.connect(self.undo) self.actionRedo.triggered.connect(self.redo) self.actionSearch.triggered.connect(self.search) self.actionGoto.triggered.connect(self.goto) self.actionComment.triggered.connect(self.comment) self.actionUnComment.triggered.connect(self.uncomment) self.actionAddFile = QtGui.QAction(qicon("bool.png"), "Add to Project", self) self.actionAddFile.triggered.connect(self.add_current_file) self.actionStop.setEnabled(False) self._run_actions = [ self.actionAnimate, self.actionInit, self.actionRun, self.actionRunSelection, self.actionStep, self.actionStop, ] self._actions = [ ["Project", "Manage", self.actionNewFile, 0], ["Project", "Manage", self.actionAddFile, 1], ["Project", "Manage", self.actionOpenFile, 1], ["Project", "Manage", self.actionSave, 1], ["Project", "Manage", self.actionCloseCurrent, 1], ["Project", "Play", self.actionRun, 0], ["Project", "Play", self.actionAnimate, 0], ["Project", "Play", self.actionStep, 0], ["Project", "Play", self.actionStop, 0], ["Project", "Play", self.actionInit, 0], ["Edit", "Text Edit", self.actionUndo, 0], ["Edit", "Text Edit", self.actionRedo, 0], ["Edit", "Text Edit", self.actionSearch, 0], ["Edit", "Text Edit", self.actionGoto, 0], ["Edit", "Text Edit", self.actionComment, 0], ["Edit", "Text Edit", self.actionUnComment, 0], ["Edit", "Text Edit", self.actionRunSelection, 0], ] self.connect_paradigm_container() self.extensions = "" self.connect(self, QtCore.SIGNAL('tabCloseRequested(int)'), self.autoClose) self.connect(self, QtCore.SIGNAL('currentChanged(int)'), self.safe_display_help) self.currentChanged.connect(self.on_current_tab_changed) self.addDefaultTab() self.fine_tune()