示例#1
0
    def __init__(self, display):
        Tool.__init__(self, display)

        self._linked_display = None

        self._menu = QtGui.QMenu()
        self.setMenu(self._menu)
        self._menu.aboutToShow.connect(self._buildMenu)
示例#2
0
    def __init__(self, MEDIA_FOLDER):
        QtGui.QWidget.__init__(self)
        
        self.is_active = True
        self.max_hist_len = 5
        self._c = 0#count all added backups
        
        self.reset()
        self.setContentsMargins (0, 0, 0, 0)

        #HISTORY MENU
        self.menu = QtGui.QMenu()
        self.menu.aboutToShow.connect(self._showMenu)

        hl = QtGui.QHBoxLayout()
        hl.setContentsMargins (0, 0, 0, 0)

        self.setLayout(hl)

        icon_path = MEDIA_FOLDER.join("icons")
        
        #UNDO BUTTON
        self.btn_undo = QtGui.QToolButton()
        self.btn_undo.setAutoRaise(True)
        self.btn_undo.setToolTip('Undo')
        self.btn_undo.setIcon(QtGui.QIcon(icon_path.join('undo.svg')))
        self.btn_undo.setShortcut (QtGui.QKeySequence.Undo)
        self.btn_undo.clicked.connect(self.undo)
        self.btn_undo.setEnabled(False)
        
        #MENU BUTTON
        self.btn_menu = QtGui.QToolButton()
        self.btn_menu.setAutoRaise(True)
        self.btn_menu.setFixedWidth(9)
        self.btn_menu.setToolTip('Undo/Redo options')
        self.btn_menu.setMenu(self.menu)
        self.btn_menu.setPopupMode(QtGui.QToolButton.InstantPopup)
        
        self.menu_options = _MenuOptions()
        self.menu_options.activate.stateChanged.connect(self.setActive)
        
        action = QtGui.QWidgetAction(self)
        action.setDefaultWidget(self.menu_options)
        self.menu.addAction(action)      

        #REDO BUTTON
        self.btn_redo = QtGui.QToolButton()
        self.btn_redo.setAutoRaise(True)
        self.btn_redo.setToolTip('Redo')
        self.btn_redo.setIcon(QtGui.QIcon(icon_path.join('redo.svg')))
        self.btn_redo.clicked.connect(self.redo)
        self.btn_redo.setShortcut (QtGui.QKeySequence.Redo)
        self.btn_redo.setEnabled(False)

        hl.addWidget(self.btn_undo)
        hl.addWidget(self.btn_menu)
        hl.addWidget(self.btn_redo)
示例#3
0
    def _openContextMenu(self, pos):
        #show toolbar name and action[remove] on right click
        m = QtGui.QMenu()
        #title:
        a = QtGui.QAction('Toolbar:   %s' % self.name, self)
        a.setSoftKeyRole(QtGui.QAction.NoSoftKey)
        f = a.font()
        f.setBold(True)
        a.setFont(f)
        m.addAction(a)
        m.addSeparator()

        m.addAction("Remove").triggered.connect(self.actionSelect.trigger)
        m.exec_(self.mapToGlobal(pos))
示例#4
0
    def __init__(self, display):
        self.display = display

        mAll = QtGui.QMenu('All layers')
        mAll.addAction('Change').triggered.connect(
            self.display.changeLayerFiles)
        mAll.addAction('Remove').triggered.connect(self.display.removeLayers)

        GroupParameter.__init__(
            self, **{
                'name': '   Layers',
                'sliding': True,
                'addToContextMenu': [mAll]
            })
        #IF A LAYER IS MOVED:
        self.sigChildRemoved.connect(
            lambda parent, child, index, self=self: self.display.removeLayer(
                index, self.opts.get('aboutToMove', False)))
        self._fnInsertRemovedLayer = lambda parent, child, index, self=self: \
                                        self.display.insertRemovedLayer(index)
        self.sigChildAdded.connect(self._fnInsertRemovedLayer)
        self.sigChildAdded.connect(self._valuesChanged)
        self.sigChildRemoved.connect(self._valuesChanged)
示例#5
0
    def __init__(self, plotDisplay):
        Tool.__init__(self, plotDisplay)

        self.mDisplay = QtGui.QMenu('from display')
        self.setMenu(self.mDisplay)
        self.mDisplay.aboutToShow.connect(self._buildMenu)
示例#6
0
    def buildLayer(self,
                   fname,
                   label,
                   name,
                   data,
                   origin=None,
                   index=None,
                   info=None,
                   changes=None):
        '''
        for every layer of the stack add a parameter containing ...
        * it's stack value
        * an layer info field
        * a layer changed field
        '''
        info, changes = self._extractFromOrigin(origin, index, info, changes)
        try:
            self.sigChildAdded.disconnect(self._fnInsertRemovedLayer)
        except TypeError:
            pass

        #ADD OPTIONS TO THE CONTEXT MENU:
        mCopy = QtGui.QMenu('Copy')
        mMove = QtGui.QMenu('Move')

        if not fname or not PathStr(fname).isfile():
            fname = None

        menu_entries = [mCopy, mMove]
        if self.display.reader is not None:
            aFile = QtGui.QAction('Change File', self)
            aFile.triggered.connect(lambda checked, i=len(self.childs): self.
                                    display.changeLayerFile(i))
            menu_entries.append(aFile)
        #CREATE AND ADD COPY-LAYER-TO OPTION TO PARAMETER:
        pLayer = self.addChild({
            'type':
            'float',
            'highlight':
            True,
            'name':
            name,
            'value':
            self.display.axes.stackAxis.getNextStackValue(
                PathStr(fname).basename()),
            'expanded':
            False,
            'removable':
            True,
            'autoIncrementName':
            True,
            'renamable':
            True,
            'readonly':
            True,
            'addToContextMenu':
            menu_entries,
            'filename':
            fname,
            'layername':
            label,
        })
        mCopy.aboutToShow.connect(
            lambda pLayer=pLayer, mCopy=mCopy, self=self: self.
            buildCopyToDisplayMenu(mCopy, pLayer, 'copy'))
        mMove.aboutToShow.connect(
            lambda pLayer=pLayer, mMove=mMove, self=self: self.
            buildCopyToDisplayMenu(mMove, pLayer, 'move'))

        #UPDATE STACK VALUES:
        pLayer.sigValueChanged.connect(self._valuesChanged)
        #EMIT LAYERNAMESCHANGED:
        pLayer.sigNameChanged.connect(
            lambda param, val, self=self: self.sigLayerNameChanged.emit(
                param.parent().children().index(param), val))
        #CHECK WHETHER INSERTED LAYER COMES FROM A MOVED ONE:
        self.sigChildAdded.connect(self._fnInsertRemovedLayer)
        #ADD LAYER INFO
        if info is None:
            finfo = ''
            if fname is not None:
                try:
                    #read info from file:
                    finfo += self.getFileInfo(
                        fname) + '\n'  # + self.getMetaData(name)
                except AttributeError:
                    pass
                #    finfo = '' #not possible to read from file because maybe not a filename
            dinfo = ''
            if data is not None:
                try:
                    dinfo = 'shape:\t%s\ndtype:\t%s' % (data.shape, data.dtype)
                except AttributeError:
                    #data in not array
                    dinfo = 'length: %s' % len(data)
            info = '%s---\n%s' % (finfo, dinfo)

        if isinstance(info, Parameter):
            #CASE: layer was duplicated and [info] is a parameter
            for ch in info.children():
                pLayer.addChild(ch.duplicate())
        else:
            #info is given as text
            #LAYER INFO
            pLayer.addChild({
                'type': 'text',
                'name': 'Info',
                'value': info if info != None else '',
                'readonly': True
            })
        #LAYER CHANGES
        pLayer.addChild({
            'type': 'text',
            'name': 'Changes',
            #'TODO: every change through a tool/scripts operation to be added here',
            'value': changes if changes else '',
            #'readonly':True
            'expanded': bool(changes)
        })
示例#7
0
    def _appendMenubarAndPreferences(self):
        m = self.menuBar()
        m.setFixedHeight(25)
        #         m.setMaximumHeight(25)

        m.aboutWidget.setModule(dataArtist)
        m.aboutWidget.setInstitutionLogo(
            MEDIA_FOLDER.join('institution_logo.svg'))

        #hide the menu so toolbars can only be show/hidden via gui->view->toolbars:
        m.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)

        self.undoRedo = UndoRedo(MEDIA_FOLDER)

        self.gTools = GlobalTools()
        self.gTools.addWidget(self.undoRedo)

        m.setCornerWidget(self.gTools)

        #APPEND PREFERENCES
        t = m.file_preferences.tabs
        t.addTab(PreferencesView(self), 'View')
        t.addTab(self.pref_import, 'Import')
        t.addTab(PreferencesCommunication(self), 'Communication')
        #APPEND MENUBAR
        #MENU - FILE
        f = m.menu_file
        p = f.action_preferences
        action_file = QtGui.QAction('&Import', f)
        action_file.triggered.connect(self.openFile)
        action_file.setShortcut(
            QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_I))
        f.insertAction(p, action_file)
        f.insertSeparator(p)
        #MENU VIEW
        v = m.menu_view
        #ACTION PRINT VIEW
        aPrintView = QtGui.QAction('Print view', v)
        aPrintView.setCheckable(True)
        aPrintView.triggered.connect(
            lambda checked: self.currentWorkspace().setPrintView(checked))
        v.addAction(aPrintView)

        #SHOW/HIDE history
        aHistory = QtGui.QAction('Program history', v)
        aHistory.setShortcut(QtCore.Qt.Key_F4)

        aHistory.setCheckable(True)

        def showhideHistory(checked):
            s = self.currentWorkspace().middle_splitter
            r = s.getRange(1)[1]
            if checked:
                r /= 1.5
            return s.moveSplitter(r, 1)

        def isHistoryVisible():
            s = self.currentWorkspace().middle_splitter
            aHistory.setChecked(s.sizes()[1] != 0)

        aHistory.triggered.connect(showhideHistory)
        v.aboutToShow.connect(isHistoryVisible)
        v.addAction(aHistory)

        #SHOW/HIDE preferences
        aPref = QtGui.QAction('Dock preferences', v)
        aPref.setShortcut(QtCore.Qt.Key_F3)
        aPref.setCheckable(True)

        def showhidePref(checked):
            s = self.currentWorkspace().vert_splitter
            r = s.getRange(1)[1]
            if checked:
                r /= 3
            else:
                r = 0
            return s.moveSplitter(r, 1)

        def isPrefVisible():
            w = self.currentWorkspace()
            s = w.vert_splitter
            aPref.setChecked(s.sizes()[0] != 0)
            aPref.setEnabled(w.displayPrefTabs.isVisible())

        aPref.triggered.connect(showhidePref)
        v.aboutToShow.connect(isPrefVisible)
        v.addAction(aPref)

        #ACTION VIEW2CLIPBOARD
        aClipboard = QtGui.QAction('Copy view to clipboard', v)
        aClipboard.triggered.connect(
            lambda checked: self.currentWorkspace().copyViewToClipboard())
        v.addAction(aClipboard)
        #ACTION Display2CLIPBOARD
        aClipboard = QtGui.QAction('Copy active display to clipboard', v)
        aClipboard.triggered.connect(lambda checked: self.currentWorkspace().
                                     copyCurrentDisplayToClipboard())
        v.addAction(aClipboard)
        #MENU - TOOLS
        t = m.menu_tools = QtGui.QMenu('Dock')
        m.insertMenuBefore(m.menu_workspace, t)
        #ADD DISPLAY
        mDisplay = t.addMenu('Add Display')
        for i, name in (  #(1, 'Dot'), 
            (2, 'Graph'),
            (3, 'Image/Video'),
                #(4, 'Surface')
                #TODO:
                #(4, 'TODO: Surface'),
                #(5, 'TODO: Volume')
        ):
            mDisplay.addAction('%sD - %s' % (i - 1, name)).triggered.connect(
                lambda checked, i=i: self.currentWorkspace().addDisplay(axes=i
                                                                        ))
        #ADD TABLE
        t.addAction('Add Table').triggered.connect(
            lambda: self.currentWorkspace().addTableDock())
        #ADD NOTEPAD
        t.addAction('Add Notepad').triggered.connect(
            lambda: self.currentWorkspace().addTextDock())
        t.addSeparator()
        #DUPLICATE CURRENT DOCK
        t.addAction('Duplicate current display').triggered.connect(
            self._duplicateCurrentDiplay)
        self._m_duplDisp = t.addMenu('Move current display to other workspace')
        self._m_duplDisp.aboutToShow.connect(self._fillMenuDuplicateToOtherWS)
        #MENU - TOOLBARS
        self.menu_toolbars = QtGui.QMenu('Toolbars', m)
        self.connect(self.menu_toolbars,
                     QtCore.SIGNAL("hovered(QAction *)"),
                     lambda action, m=self.menu_toolbars:
                     _showActionToolTipInMenu(m, action))

        #SHOW ALL TOOLBARS - ACTION
        a = self.menu_toolbars.a_show = QtGui.QAction('show', m)
        f = a.font()
        f.setBold(True)
        a.setFont(f)
        a.setCheckable(True)
        a.setChecked(True)
        a.triggered.connect(self._toggleShowSelectedToolbars)

        self.menu_toolbars.aboutToShow.connect(self._listToolbarsInMenu)
        m.insertMenuBefore(m.menu_workspace, self.menu_toolbars)
        #MENU HELP
        m.menu_help.addAction('User manual').triggered.connect(
            lambda checked: os.startfile(HELP_FILE))
        #TUTORIALS
        ####not used at the moment
        #         self.m_tutorials = TutorialMenu(
        #                         tutorialFolder=PathStr.getcwd('dataArtist').join('tutorials'),
        #                         openFunction=self._openFnForTutorial,
        #                         saveFunction=self.app.session.blockingSave)
        #         m.menu_help.addMenu(self.m_tutorials)

        m.menu_help.addAction('Online tutorials').triggered.connect(
            lambda checked: os.startfile(
                'http://www.youtube.com/channel/UCjjngrC3jPdx1HL8zJ8yqLQ'))
        m.menu_help.addAction('Support').triggered.connect(
            lambda checked: os.startfile(
                'https://github.com/radjkarl/dataArtist/issues'))