Exemplo n.º 1
0
 def raiseContextMenu(self, ev):
     """
     Raise the context menu
     """
     if not self.menuEnabled():
         return
     menu = self.menu  # getMenu()
     pos = ev.screenPos()
     menu.popup(QtCore.QPoint(pos.x(), pos.y()))
Exemplo n.º 2
0
    def __init__(self, show=True):

        super().__init__()

        pg.setConfigOption('background', 'w')
        pg.setConfigOption('foreground', 'k')

        siz = QtWidgets.QDesktopWidget().screenGeometry(-1)
        self.ww, self.wh = ww, wh = min(1500,
                                        siz.width() * .80), min(
                                            900,
                                            siz.height() * .80)
        self.move(QtCore.QPoint(10, 10))  # TODO: center it ?

        # --------------------------------------------------------------------------------------------------------------
        # Logging
        # --------------------------------------------------------------------------------------------------------------

        if not __DEV__:
            # production
            scp.app.log_level = logging.WARNING
        else:
            # development
            scp.app.log_level = logging.DEBUG

        # --------------------------------------------------------------------------------------------------------------
        # Main area
        # --------------------------------------------------------------------------------------------------------------

        self.area = area = LockedDockArea()
        self.setCentralWidget(area)
        self.setWindowIcon(QtGui.QIcon(str(geticon('scpy.png'))))
        self.setWindowTitle('SpectroChemPy GUI')

        # --------------------------------------------------------------------------------------------------------------
        # Create status bar
        # --------------------------------------------------------------------------------------------------------------

        self.statusbar = self.statusBar()
        self.statusbar.showMessage('Welcome to SpectroChemPy')

        # --------------------------------------------------------------------------------------------------------------
        # Create doc for plots
        # --------------------------------------------------------------------------------------------------------------

        # we need to create a dock object for this branch
        self.dplot = dplot = LockedDock('Plot', closable=False)
        dplot.hideTitleBar()

        # --------------------------------------------------------------------------------------------------------------
        # Create project window
        # --------------------------------------------------------------------------------------------------------------

        self.dproject = dproject = LockedDock("Project", size=(300, wh * .30))
        self.projectwidget = ProjectTreeWidget(showHeader=False, parent=self)

        self.project = Project(parent=self)

        dproject.addWidget(self.projectwidget)
        dproject.setMinimumWidth(300)
        dproject.setMaximumWidth(300)

        # --------------------------------------------------------------------------------------------------------------
        # Controller window
        # --------------------------------------------------------------------------------------------------------------

        dcontroller = LockedDock("Controller", size=(300, wh * .70))
        self.controller = Controller(parent=self)
        dcontroller.addWidget(self.controller)

        # --------------------------------------------------------------------------------------------------------------
        # set layout
        # --------------------------------------------------------------------------------------------------------------

        self.area.addDock(dproject, 'left')
        self.area.addDock(dplot, 'right')
        self.area.addDock(dcontroller, 'bottom', dproject)
        self.resize(ww, wh)

        # --------------------------------------------------------------------------------------------------------------
        # Create Menubar and actions
        # --------------------------------------------------------------------------------------------------------------

        # MENU FILE
        # -------------------------------------------------------------------

        project_menu = QtGui.QMenu('&Project', parent=self)
        self.menuBar().addMenu(project_menu)

        # Project menu
        # ----------------------------------------------------------------------------------------------------------

        self.new_action = QtGui.QAction('&New project', self)
        self.new_action.setShortcut(QtGui.QKeySequence.New)
        self.new_action.setStatusTip('Create a new main project')
        self.new_action.triggered.connect(
            partial(self.project.openProject, new=True))
        project_menu.addAction(self.new_action)

        self.open_action = QtGui.QAction('&Open project', self)
        self.open_action.setShortcut(QtGui.QKeySequence.Open)
        self.open_action.setStatusTip('Open a new main project')
        self.open_action.triggered.connect(
            partial(self.project.openProject, new=False))
        project_menu.addAction(self.open_action)

        # Dataset menu
        # --------------------------------------------------------------------------------------------------------------

        project_menu.addSeparator()

        self.add_dataset_action = QtGui.QAction('Add dataset', self)
        self.add_dataset_action.triggered.connect(self.project.addDataset)
        self.add_dataset_action.setShortcut(
            QtGui.QKeySequence('Ctrl+A', QtGui.QKeySequence.NativeText))
        self.add_dataset_action.setDisabled(True)
        project_menu.addAction(self.add_dataset_action)

        self.remove_dataset_action = QtGui.QAction('remove selected dataset',
                                                   self)
        self.remove_dataset_action.triggered.connect(
            self.project.removeDataset)
        self.remove_dataset_action.setShortcut(
            QtGui.QKeySequence('Ctrl+D', QtGui.QKeySequence.NativeText))
        self.remove_dataset_action.setDisabled(True)
        project_menu.addAction(self.remove_dataset_action)

        # Save project menu
        # ----------------------------------------------------------------------------------------------------------

        project_menu.addSeparator()

        self.save_action = QtGui.QAction('&Save project', self)
        self.save_action.setStatusTip('Save the entire project into a file')
        self.save_action.setShortcut(QtGui.QKeySequence.Save)
        self.save_action.triggered.connect(
            partial(self.project.saveProject, force=True))
        self.save_action.setDisabled(True)
        project_menu.addAction(self.save_action)

        self.save_as_action = QtGui.QAction('Save project as...', self)
        self.save_as_action.setStatusTip(
            'Save the entire project into a new file')
        self.save_as_action.setShortcut(QtGui.QKeySequence.SaveAs)
        self.save_as_action.triggered.connect(
            partial(self.project.saveProject, force=True, saveas=True))
        self.save_as_action.setDisabled(True)
        project_menu.addAction(self.save_as_action)

        # Close project menu
        # ----------------------------------------------------------------------------------------------------------

        project_menu.addSeparator()

        self.close_action = QtGui.QAction('Close project', self)
        self.close_action.setShortcut(
            QtGui.QKeySequence('Ctrl+Shift+W', QtGui.QKeySequence.NativeText))
        self.close_action.setStatusTip(
            'Close the main project and delete all data and plots out of '
            'memory')
        self.close_action.triggered.connect(self.project.closeProject)
        self.close_action.setDisabled(True)
        project_menu.addAction(self.close_action)

        # Quit
        # --------------------------------------------------------------------------------------------------------------

        if sys.platform != 'darwin':  # mac os makes this anyway
            quit_action = QtGui.QAction('Quit', self)
            quit_action.triggered.connect(
                QtCore.QCoreApplication.instance().quit)
            quit_action.setShortcut(QtGui.QKeySequence.Quit)
            project_menu.addAction(quit_action)

        self.menuBar().addMenu(project_menu)

        # Processing menu
        # ---------------
        proc_menu = QtGui.QMenu('Script', parent=self)
        self.menuBar().addMenu(proc_menu)

        # export script
        export_script_action = QtGui.QAction('Export script', self)
        export_script_action.triggered.connect(self.controller.exportScript)
        proc_menu.addAction(export_script_action)

        # import script
        import_script_action = QtGui.QAction('Import script', self)
        import_script_action.triggered.connect(self.controller.importScript)
        proc_menu.addAction(import_script_action)

        # Help menu
        # --------------------------------------------------------------------------------------------------------------

        help_menu = QtGui.QMenu('Help', parent=self)
        self.menuBar().addMenu(help_menu)

        # About

        about_action = QtGui.QAction('About', self)
        about_action.triggered.connect(self.onAbout)
        help_menu.addAction(about_action)

        # Preferences

        prefs_action = QtGui.QAction('Preferences', self)
        prefs_action.triggered.connect(lambda: self.onEditPreferences(True))
        prefs_action.setShortcut(QtGui.QKeySequence.Preferences)
        help_menu.addAction(prefs_action)

        # Documentation

        doc_action = QtGui.QAction('Documentationt', self)
        doc_action.triggered.connect(self.onDoc)
        help_menu.addAction(doc_action)

        # Console

        # console_action = QtGui.QAction('Console', self)
        # console_action.triggered.connect(self.show_console)
        # help_menu.addAction(console_action)

        if sys.platform == 'darwin':
            self.menuBar().setNativeMenuBar(
                False
            )  # this put the menu in the  #  window itself in OSX, as in windows.  # TODO: set this in
            # preferences

        self.preference_pages.extend([
            GeneralPreferencesWidget,
        ])

        # --------------------------------------------------------------------------------------------------------------
        # Signal connections
        # --------------------------------------------------------------------------------------------------------------

        # user requests
        self.projectwidget.sigDatasetSelected.connect(
            self.project.onSelectDataset)
        self.projectwidget.sigDatasetAdded.connect(self.project.addDataset)
        self.projectwidget.sigDatasetRemoved.connect(
            self.project.removeDataset)

        # model changes
        self.project.sigProjectChanged.connect(
            self.controller.onProjectChanged)
        self.project.sigDatasetChanged.connect(
            self.controller.onDatasetChanged)

        # --------------------------------------------------------------------------------------------------------------
        # Show window
        # --------------------------------------------------------------------------------------------------------------

        if show:
            self.show()
            self.controller.onProjectChanged('opened')