コード例 #1
0
    def createSortByMenu(self):
        """
        Create a new instance of the sort by menu.
        
        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu('Sort By', self)
        sortOrder = self.sortOrder()
        sortColumn = self.sortColumn()
        for column in range(self.columnCount()):
            label = self.labelFromColumn(column)
            action = menu.addAction(label)
            action.setCheckable(True)
            if column == sortColumn:
                action.setChecked(True)
            else:
                action.setChecked(False)
            callback = partial(self.sortByColumn, column, sortOrder)
            action.triggered.connect(callback)

        menu.addSeparator()
        action = menu.addAction('Ascending')
        action.setCheckable(True)
        action.setChecked(sortOrder == QtCore.Qt.AscendingOrder)
        callback = partial(self.sortByColumn, sortColumn,
                           QtCore.Qt.AscendingOrder)
        action.triggered.connect(callback)
        action = menu.addAction('Descending')
        action.setCheckable(True)
        action.setChecked(sortOrder == QtCore.Qt.DescendingOrder)
        callback = partial(self.sortByColumn, sortColumn,
                           QtCore.Qt.DescendingOrder)
        action.triggered.connect(callback)
        return menu
コード例 #2
0
 def createItemSettingsMenu(self):
     menu = QtWidgets.QMenu('Item View', self)
     action = QtWidgets.QAction('Show labels', menu)
     action.setCheckable(True)
     action.setChecked(self.isItemTextVisible())
     action.triggered[bool].connect(self.setItemTextVisible)
     menu.addAction(action)
     menu.addSeparator()
     action = studioqt.SliderAction('Size', menu)
     action.slider().setMinimum(10)
     action.slider().setMaximum(200)
     action.slider().setValue(self.zoomAmount())
     action.slider().valueChanged.connect(self.setZoomAmount)
     menu.addAction(action)
     action = studioqt.SliderAction('Border', menu)
     action.slider().setMinimum(0)
     action.slider().setMaximum(20)
     action.slider().setValue(self.padding())
     action.slider().valueChanged.connect(self.setPadding)
     menu.addAction(action)
     action = studioqt.SliderAction('Spacing', menu)
     action.slider().setMinimum(self.DEFAULT_MIN_SPACING)
     action.slider().setMaximum(self.DEFAULT_MAX_SPACING)
     action.slider().setValue(self.spacing())
     action.slider().valueChanged.connect(self.setSpacing)
     menu.addAction(action)
     return menu
コード例 #3
0
ファイル: treewidget.py プロジェクト: lavalmi/studiolibrary
    def createGroupByMenu(self):
        """
        Create a new instance of the group by menu.

        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu("Group By", self)

        groupOrder = self._groupOrder
        groupColumn = self._groupColumn

        action = studioqt.SeparatorAction("Group By", menu)
        menu.addAction(action)

        action = menu.addAction("None")
        action.setCheckable(True)

        callback = partial(self.setGroupColumn, None)
        action.triggered.connect(callback)

        groupByLabels = self.groupLabels()

        currentGroupCollumn = self.groupColumn()
        if currentGroupCollumn is None:
            action.setChecked(True)

        for column in range(self.columnCount()):

            label = self.labelFromColumn(column)

            if groupByLabels and label not in groupByLabels:
                continue

            action = menu.addAction(label)
            action.setCheckable(True)

            if currentGroupCollumn == column:
                action.setChecked(True)

            callback = partial(self.setGroupColumn, column, groupOrder)
            action.triggered.connect(callback)

        action = studioqt.SeparatorAction("Group Order", menu)
        menu.addAction(action)

        action = menu.addAction("Ascending")
        action.setCheckable(True)
        action.setChecked(groupOrder == QtCore.Qt.AscendingOrder)

        callback = partial(self.setGroupColumn, groupColumn, QtCore.Qt.AscendingOrder)
        action.triggered.connect(callback)

        action = menu.addAction("Descending")
        action.setCheckable(True)
        action.setChecked(groupOrder == QtCore.Qt.DescendingOrder)

        callback = partial(self.setGroupColumn, groupColumn, QtCore.Qt.DescendingOrder)
        action.triggered.connect(callback)

        return menu
コード例 #4
0
ファイル: treewidget.py プロジェクト: mrharris/studiolibrary
    def createHeaderMenu(self, column):
        """
        Creates a new header menu.

        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu(self)
        label = self.labelFromColumn(column)

        action = menu.addAction("Hide '{0}'".format(label))
        callback = partial(self.setColumnHidden, column, True)
        action.triggered.connect(callback)

        menu.addSeparator()

        action = menu.addAction('Sort Ascending')
        callback = partial(self.sortByColumn, column, QtCore.Qt.AscendingOrder,
                           self._groupColumn, self._groupOrder)
        action.triggered.connect(callback)

        action = menu.addAction('Sort Descending')
        callback = partial(self.sortByColumn, column,
                           QtCore.Qt.DescendingOrder, self._groupColumn,
                           self._groupOrder)
        action.triggered.connect(callback)

        menu.addSeparator()

        action = menu.addAction('Resize to Contents')
        callback = partial(self.resizeColumnToContents, column)
        action.triggered.connect(callback)

        return menu
コード例 #5
0
ファイル: treewidget.py プロジェクト: mrharris/studiolibrary
    def createHideColumnMenu(self):
        """
        Create the hide column menu.

        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu("Show/Hide Column", self)

        action = menu.addAction("Show All")
        action.triggered.connect(self.showAllColumns)

        action = menu.addAction("Hide All")
        action.triggered.connect(self.hideAllColumns)

        menu.addSeparator()

        for column in range(self.columnCount()):

            label = self.labelFromColumn(column)
            isHidden = self.isColumnHidden(column)

            action = menu.addAction(label)
            action.setCheckable(True)
            action.setChecked(not isHidden)

            callback = partial(self.setColumnHidden, column, not isHidden)
            action.triggered.connect(callback)

        return menu
コード例 #6
0
    def showMenu(self):
        """Show the menu using the actions from the data."""
        menu = QtWidgets.QMenu(self)
        actions = self.data().get("actions", [])

        for action in actions:

            name = action.get("name", "No name found")
            callback = action.get("callback")

            func = functools.partial(self.actionCallback, callback)

            action = menu.addAction(name)
            action.triggered.connect(func)

        point = QtGui.QCursor.pos()
        point.setX(point.x() + 3)
        point.setY(point.y() + 3)

        # Reset the action results
        self._actionResult = None

        menu.exec_(point)

        if self._actionResult is not None:
            self.setValue(self._actionResult)
コード例 #7
0
 def createSpaceOperatorMenu(self, parent=None):
     """
     Return the menu for changing the space operator.
     
     :type parent: QGui.QMenu
     :rtype: QGui.QMenu
     """
     searchFilter = self.searchFilter()
     menu = QtWidgets.QMenu(parent)
     menu.setTitle('Space Operator')
     action = QtWidgets.QAction(menu)
     action.setText('OR')
     action.setCheckable(True)
     callback = partial(self.setSpaceOperator, searchFilter.Operator.OR)
     action.triggered.connect(callback)
     if searchFilter.spaceOperator() == searchFilter.Operator.OR:
         action.setChecked(True)
     menu.addAction(action)
     action = QtWidgets.QAction(menu)
     action.setText('AND')
     action.setCheckable(True)
     callback = partial(self.setSpaceOperator, searchFilter.Operator.AND)
     action.triggered.connect(callback)
     if searchFilter.spaceOperator() == searchFilter.Operator.AND:
         action.setChecked(True)
     menu.addAction(action)
     return menu
コード例 #8
0
 def dockMenu(self):
     """
     Return a menu for editing the dock settings.
     
     :rtype: QtWidgets.QMenu
     """
     menu = QtWidgets.QMenu(self)
     menu.setTitle('Dock')
     action = QtWidgets.QAction('Set Floating', menu)
     action.setEnabled(self.isDocked())
     action.triggered.connect(self.setFloating)
     menu.addAction(action)
     menu.addSeparator()
     action = QtWidgets.QAction('Dock top', menu)
     action.setCheckable(True)
     action.setChecked(self.isDockedTop())
     action.triggered.connect(self.dockTop)
     menu.addAction(action)
     action = QtWidgets.QAction('Dock left', menu)
     action.setCheckable(True)
     action.setChecked(self.isDockedLeft())
     action.triggered.connect(self.dockLeft)
     menu.addAction(action)
     action = QtWidgets.QAction('Dock right', menu)
     action.setCheckable(True)
     action.setChecked(self.isDockedRight())
     action.triggered.connect(self.dockRight)
     menu.addAction(action)
     action = QtWidgets.QAction('Dock bottom', menu)
     action.setCheckable(True)
     action.setChecked(self.isDockedBottom())
     action.triggered.connect(self.dockBottom)
     menu.addAction(action)
     return menu
コード例 #9
0
ファイル: folderswidget.py プロジェクト: jeanim/studiolibrary
    def createEditMenu(self, parent=None):
        """
        Return the edit menu for deleting, renaming folders.

        :rtype: QtWidgets.QMenu
        """
        selectedFolders = self.selectedFolders()

        menu = QtWidgets.QMenu(parent)
        menu.setTitle("Edit")

        if len(selectedFolders) == 1:
            action = QtWidgets.QAction("Rename", menu)
            action.triggered.connect(self.showRenameDialog)
            menu.addAction(action)

            action = QtWidgets.QAction("Show in folder", menu)
            action.triggered.connect(self.openSelectedFolders)
            menu.addAction(action)

        separator = QtWidgets.QAction("Separator2", menu)
        separator.setSeparator(True)
        menu.addAction(separator)

        action = QtWidgets.QAction("Show icon", menu)
        action.setCheckable(True)
        action.setChecked(self.isFolderIconVisible())
        action.triggered[bool].connect(self.setFolderIconVisible)
        menu.addAction(action)

        action = QtWidgets.QAction("Show bold", menu)
        action.setCheckable(True)
        action.setChecked(self.isFolderBold())
        action.triggered[bool].connect(self.setFolderBold)

        menu.addAction(action)
        separator = QtWidgets.QAction("Separator2", menu)
        separator.setSeparator(True)
        menu.addAction(separator)

        action = QtWidgets.QAction("Change icon", menu)
        action.triggered.connect(self.browseFolderIcon)
        menu.addAction(action)

        action = QtWidgets.QAction("Change color", menu)
        action.triggered.connect(self.browseFolderColor)
        menu.addAction(action)

        separator = QtWidgets.QAction("Separator3", menu)
        separator.setSeparator(True)
        menu.addAction(separator)

        action = QtWidgets.QAction("Reset settings", menu)
        action.triggered.connect(self.resetFolderSettings)
        menu.addAction(action)

        return menu
コード例 #10
0
ファイル: folderswidget.py プロジェクト: jonntd/mira
 def showContextMenu(self):
     """
     :rtype: None
     """
     menu = QtWidgets.QMenu(self)
     if self.isLocked():
         self.lockedMenu(menu)
     else:
         self.createContextMenu(menu)
     action = menu.exec_(QtGui.QCursor.pos())
     menu.close()
     return action
コード例 #11
0
ファイル: itemswidget.py プロジェクト: mrharris/studiolibrary
    def createSettingsMenu(self):
        """
        Create and return the settings menu for the widget.

        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu("Item View", self)

        menu.addSeparator()

        action = QtWidgets.QAction("Show labels", menu)
        action.setCheckable(True)
        action.setChecked(self.isItemTextVisible())
        action.triggered[bool].connect(self.setItemTextVisible)
        menu.addAction(action)

        menu.addSeparator()

        sortByMenu = self.treeWidget().createSortByMenu()
        menu.addMenu(sortByMenu)

        groupByMenu = self.treeWidget().createGroupByMenu()
        menu.addMenu(groupByMenu)

        copyTextMenu = self.treeWidget().createCopyTextMenu()
        menu.addMenu(copyTextMenu)

        menu.addSeparator()

        action = studioqt.SliderAction("Size", menu)
        action.slider().setMinimum(10)
        action.slider().setMaximum(200)
        action.slider().setValue(self.zoomAmount())
        action.slider().valueChanged.connect(self.setZoomAmount)
        menu.addAction(action)

        action = studioqt.SliderAction("Border", menu)
        action.slider().setMinimum(0)
        action.slider().setMaximum(20)
        action.slider().setValue(self.padding())
        action.slider().valueChanged.connect(self.setPadding)
        menu.addAction(action)
        #
        action = studioqt.SliderAction("Spacing", menu)
        action.slider().setMinimum(self.DEFAULT_MIN_SPACING)
        action.slider().setMaximum(self.DEFAULT_MAX_SPACING)
        action.slider().setValue(self.spacing())
        action.slider().valueChanged.connect(self.setSpacing)
        menu.addAction(action)

        return menu
コード例 #12
0
ファイル: treewidget.py プロジェクト: mrharris/studiolibrary
    def createSortByMenu(self):
        """
        Create a new instance of the sort by menu.

        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu("Sort By", self)

        sortOrder = self._sortOrder
        sortColumn = self._sortColumn
        sortLabel = self.labelFromColumn(sortColumn)

        action = studioqt.SeparatorAction("Sort By", menu)
        menu.addAction(action)

        sortByLabels = self.sortLabels()

        for label in sortByLabels:

            action = menu.addAction(label)
            action.setCheckable(True)

            if sortLabel == label:
                action.setChecked(True)
            else:
                action.setChecked(False)

            callback = partial(self.setSortColumn, label, sortOrder)
            action.triggered.connect(callback)

        action = studioqt.SeparatorAction("Sort Order", menu)
        menu.addAction(action)

        action = menu.addAction("Ascending")
        action.setCheckable(True)
        action.setChecked(sortOrder == QtCore.Qt.AscendingOrder)

        callback = partial(self.setSortColumn, sortColumn,
                           QtCore.Qt.AscendingOrder)
        action.triggered.connect(callback)

        action = menu.addAction("Descending")
        action.setCheckable(True)
        action.setChecked(sortOrder == QtCore.Qt.DescendingOrder)

        callback = partial(self.setSortColumn, sortColumn,
                           QtCore.Qt.DescendingOrder)
        action.triggered.connect(callback)

        return menu
コード例 #13
0
 def showContextMenu(self):
     """
     Create and show the context menu for the search widget.
     
     :rtype QtWidgets.QAction
     """
     menu = QtWidgets.QMenu(self)
     subMenu = self.createStandardContextMenu()
     subMenu.setTitle('Edit')
     menu.addMenu(subMenu)
     subMenu = self.createSpaceOperatorMenu(menu)
     menu.addMenu(subMenu)
     point = QtGui.QCursor.pos()
     action = menu.exec_(point)
     return action
コード例 #14
0
    def createItemsMenu(self, items=None):
        """
        Create the item menu for given item.

        :rtype: QtWidgets.QMenu
        """
        item = items or self.selectedItem()

        menu = QtWidgets.QMenu(self)

        if item:
            try:
                item.contextMenu(menu)
            except Exception, msg:
                logger.exception(msg)
コード例 #15
0
    def showMenu(self):
        """Show the menu using the actions from the options."""
        menu = QtWidgets.QMenu(self)
        actions = self.option().get("actions", [])

        for action in actions:

            name = action.get("name", "No name found")
            callback = action.get("callback")

            action = menu.addAction(name)
            action.triggered.connect(callback)

        point = QtGui.QCursor.pos()
        point.setX(point.x() + 3)
        point.setY(point.y() + 3)

        menu.exec_(point)
コード例 #16
0
    def setCaptureMenuEnabled(self, enable):
        """
        Enable the capture menu for editing the thumbnail.

        :rtype: None 
        """
        if enable:
            parent = self.item().libraryWindow()

            iconPath = self.iconPath()
            if iconPath == "":
                iconPath = self.item().thumbnailPath()

            menu = mutils.gui.ThumbnailCaptureMenu(iconPath, parent=parent)
            menu.captured.connect(self.setIconPath)
            self.ui.thumbnailButton.setMenu(menu)
        else:
            self.ui.thumbnailButton.setMenu(QtWidgets.QMenu(self))
コード例 #17
0
    def createCopyTextMenu(self):
        """
        Create a menu to copy the selected items data to the clipboard.
        
        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu('Copy Text', self)
        if self.selectedItems():
            for column in range(self.columnCount()):
                label = self.labelFromColumn(column)
                action = menu.addAction(label)
                callback = partial(self.copyText, column)
                action.triggered.connect(callback)

        else:
            action = menu.addAction('No items selected')
            action.setEnabled(False)
        return menu
コード例 #18
0
    def createGroupByMenu(self):
        """
        Create a new instance of the group by menu.
        
        :rtype: QtWidgets.QMenu
        """
        menu = QtWidgets.QMenu('Group By', self)
        groupOrder = self._groupOrder
        groupColumn = self._groupColumn
        action = menu.addAction('None')
        action.setCheckable(True)
        callback = partial(self.groupByColumn, None, groupOrder)
        action.triggered.connect(callback)
        validGroupColumns = self._validGroupByColumns
        currentGroupCollumn = self.groupColumn()
        if currentGroupCollumn is None:
            action.setChecked(True)
        for column in range(self.columnCount()):
            label = self.labelFromColumn(column)
            if validGroupColumns and label not in validGroupColumns:
                continue
            action = menu.addAction(label)
            action.setCheckable(True)
            if currentGroupCollumn == column:
                action.setChecked(True)
            callback = partial(self.groupByColumn, column, groupOrder)
            action.triggered.connect(callback)

        menu.addSeparator()
        action = menu.addAction('Ascending')
        action.setCheckable(True)
        action.setChecked(groupOrder == QtCore.Qt.AscendingOrder)
        callback = partial(self.groupByColumn, groupColumn,
                           QtCore.Qt.AscendingOrder)
        action.triggered.connect(callback)
        action = menu.addAction('Descending')
        action.setCheckable(True)
        action.setChecked(groupOrder == QtCore.Qt.DescendingOrder)
        callback = partial(self.groupByColumn, groupColumn,
                           QtCore.Qt.DescendingOrder)
        action.triggered.connect(callback)
        return menu
コード例 #19
0
    def createItemsMenu(self, items = None):
        """
        Create the item menu for given item.
        
        :rtype: QtWidgets.QMenu
        """
        item = items or self.selectedItem()
        menu = QtWidgets.QMenu(self)
        if item:
            try:
                item.contextMenu(menu)
            except Exception as msg:
                logger.exception(msg)

        else:
            action = QtWidgets.QAction(menu)
            action.setText('No Item selected')
            action.setDisabled(True)
            menu.addAction(action)
        return menu
コード例 #20
0
    def setCaptureMenuEnabled(self, enable):
        """
        Enable the capture menu for creating the thumbnail.

        :type enable: bool
        :rtype: None 
        """
        logger.info("Setting capture menu to %s", enable)

        if enable:
            parent = self.parent()
            iconPath = mutils.gui.tempThumbnailPath()

            menu = mutils.gui.ThumbnailCaptureMenu(iconPath,
                                                   force=True,
                                                   parent=parent)
            menu.captured.connect(self._thumbnailCaptured)

            self.ui.thumbnailButton.setMenu(menu)
        else:
            self.ui.thumbnailButton.setMenu(QtWidgets.QMenu(self))
コード例 #21
0
def example2():
    """
    Example:

        import studiolibrary.widgets.colorpicker
        reload(studiolibrary.widgets.colorpicker)
        studiolibrary.widgets.colorpicker.example2()
    """
    menu = QtWidgets.QMenu()

    colors = [
        "rgb(230, 60, 60)",
        "rgb(255, 90, 40)",
        "rgb(255, 125, 100)",
        "rgb(250, 200, 0)",
        "rgb(80, 200, 140)",
        "rgb(50, 180, 240)",
        "rgb(110, 110, 240)",
    ]

    action = ColorPickerAction(menu)
    action.picker().setColors(colors)
    menu.addAction(action)

    colors = [
        "rgb(20, 20, 20)",
        "rgb(20, 30, 40)",
        "rgb(40, 40, 40)",
        "rgb(40, 50, 60)",
        "rgb(60, 60, 60)",
        "rgb(60, 70, 80)",
        "rgb(240, 240, 240)",
    ]

    action = ColorPickerAction(menu)
    action.picker().setColors(colors)
    menu.addAction(action)
    menu.addSeparator()

    menu.exec_()
コード例 #22
0
    def createItemSettingsMenu(self):

        menu = QtWidgets.QMenu("Item View", self)

        action = SeparatorAction("View Settings", menu)
        menu.addAction(action)

        action = SliderAction("Size", menu)
        action.slider().setMinimum(10)
        action.slider().setMaximum(200)
        action.slider().setValue(self.zoomAmount())
        action.slider().valueChanged.connect(self.setZoomAmount)
        menu.addAction(action)

        action = SliderAction("Border", menu)
        action.slider().setMinimum(0)
        action.slider().setMaximum(20)
        action.slider().setValue(self.padding())
        action.slider().valueChanged.connect(self.setPadding)
        menu.addAction(action)
        #
        action = SliderAction("Spacing", menu)
        action.slider().setMinimum(self.DEFAULT_MIN_SPACING)
        action.slider().setMaximum(self.DEFAULT_MAX_SPACING)
        action.slider().setValue(self.spacing())
        action.slider().valueChanged.connect(self.setSpacing)
        menu.addAction(action)

        action = SeparatorAction("Item Options", menu)
        menu.addAction(action)

        action = QtWidgets.QAction("Show labels", menu)
        action.setCheckable(True)
        action.setChecked(self.isItemTextVisible())
        action.triggered[bool].connect(self.setItemTextVisible)
        menu.addAction(action)

        return menu
コード例 #23
0
    def createSpaceOperatorMenu(self, parent=None):
        """
        Return the menu for changing the space operator.

        :type parent: QGui.QMenu
        :rtype: QGui.QMenu
        """
        menu = QtWidgets.QMenu(parent)
        menu.setTitle("Space Operator")

        # Create the space operator for the OR operator
        action = QtWidgets.QAction(menu)
        action.setText("OR")
        action.setCheckable(True)

        callback = partial(self.setSpaceOperator, "or")
        action.triggered.connect(callback)

        if self.spaceOperator() == "or":
            action.setChecked(True)

        menu.addAction(action)

        # Create the space operator for the AND operator
        action = QtWidgets.QAction(menu)
        action.setText("AND")
        action.setCheckable(True)

        callback = partial(self.setSpaceOperator, "and")
        action.triggered.connect(callback)

        if self.spaceOperator() == "and":
            action.setChecked(True)

        menu.addAction(action)

        return menu
コード例 #24
0
    def createFolderFilterMenu(self, owner):

        menu = QtWidgets.QMenu("Folder Filter", owner)

        action = SeparatorAction("Library Filter", menu)
        menu.addAction(action)

        action = QtWidgets.QAction("Active Character", menu)
        action.setCheckable(True)
        action.setChecked(self.displayLibs() == SideBarDisplayLibs.FROM_SCENE)
        callback = partial(self.setLibraryFilter,
                           SideBarDisplayLibs.FROM_SCENE)
        action.triggered.connect(callback)
        menu.addAction(action)

        action = QtWidgets.QAction("All libraries", menu)
        action.setCheckable(True)
        action.setChecked(self.displayLibs() == SideBarDisplayLibs.ALL)
        callback = partial(self.setLibraryFilter, SideBarDisplayLibs.ALL)
        action.triggered.connect(callback)
        menu.addAction(action)

        action = QtWidgets.QAction("User defined", menu)
        action.setCheckable(True)
        action.setChecked(
            self.displayLibs() == SideBarDisplayLibs.USER_DEFINED)
        callback = partial(self.setLibraryFilter,
                           SideBarDisplayLibs.USER_DEFINED)
        action.triggered.connect(callback)
        menu.addAction(action)

        #find all the libraries
        libItems = self.dataset().findItems([{
            'operator':
            'or',
            'filters': [('type', 'is', 'Library')]
        }])
        libPaths = list(set([item.itemData()['lib_id'] for item in libItems]))

        def _libraryContextMenu(libPaths, lineEditAction, event):
            menu = LibrarySelectMenu(libPaths, parent=lineEditAction.line())
            menu.menu().setStyleSheet('background-color:black;')
            point = lineEditAction.line().mapToGlobal(
                QtCore.QPoint(lineEditAction.line().width(), 0))
            menu.show(point)
            lineEditAction.line().setText(menu.selected(full=False))
            lineEditAction.line().clearFocus()

        action = LineEditAction("Libraries Name", menu)
        action.line().setText(self._displayLibsDefined)
        action.line().contextMenuEvent = partial(_libraryContextMenu, libPaths,
                                                 action)
        action.valueChanged.connect(self.setLibaryFilterText)
        menu.addAction(action)

        action = SeparatorAction("Users Filter", menu)
        menu.addAction(action)

        action = QtWidgets.QAction(
            "Only [{0}]".format(self.dataset().currentUser()), menu)
        action.setCheckable(True)
        action.setChecked(self.displayUsers() == SideBarDisplayUser.CURRENT)
        callback = partial(self.setUserFilter, SideBarDisplayUser.CURRENT)
        action.triggered.connect(callback)
        menu.addAction(action)

        action = QtWidgets.QAction("All Active Users", menu)
        action.setCheckable(True)
        action.setChecked(
            self.displayUsers() == SideBarDisplayUser.ACTIVE_USERS)
        callback = partial(self.setUserFilter, SideBarDisplayUser.ACTIVE_USERS)
        action.triggered.connect(callback)
        menu.addAction(action)

        action = QtWidgets.QAction("All Users", menu)
        action.setCheckable(True)
        action.setChecked(self.displayUsers() == SideBarDisplayUser.ALL)
        callback = partial(self.setUserFilter, SideBarDisplayUser.ALL)
        action.triggered.connect(callback)
        menu.addAction(action)

        action = QtWidgets.QAction("User Defined", menu)
        action.setCheckable(True)
        action.setChecked(
            self.displayUsers() == SideBarDisplayUser.USER_DEFINED)
        callback = partial(self.setUserFilter, SideBarDisplayUser.USER_DEFINED)
        action.triggered.connect(callback)
        menu.addAction(action)

        #find all users
        userItems = self.dataset().findItems([{
            'operator':
            'or',
            'filters': [('type', 'is', 'User')]
        }])
        users = [item.name()[:-5] for item in userItems]

        def _userContextMenu(users, lineEditAction, event):
            menu = LibrarySelectMenu(users, parent=lineEditAction.line())
            menu.menu().setStyleSheet('background-color:black;')
            point = lineEditAction.line().mapToGlobal(
                QtCore.QPoint(lineEditAction.line().width(), 0))
            menu.show(point)
            lineEditAction.line().setText(menu.selected(full=False))
            lineEditAction.line().clearFocus()

        action = LineEditAction("Users Name", menu)
        action.line().setText(self._displayUsersDefined)
        action.line().contextMenuEvent = partial(_userContextMenu, users,
                                                 action)
        action.valueChanged.connect(self.setUsersFilterText)
        menu.addAction(action)

        return menu
コード例 #25
0
    def __init__(self, libraries, name="Library", callback=None, parent=None):
        """create a select menu
        
        Arguments:
            libraries {list or dict} -- the list or dict of libraries path. If this is a dict the key is the libpath and the value is the full path of the item
        
        Keyword Arguments:
            name {str} -- the name of the menu (default: {"Library"})
            callback {function} -- the callback when we do the selection (default: {None})
            parent {QMenu/QtWidget} -- the parent menu (default: {None})
        """
        super(LibrarySelectMenu, self).__init__()

        self._callback = callback

        self._menu = QtWidgets.QMenu(name, parent)
        if parent != None and isinstance(parent, QtWidgets.QMenu):
            parent.addMenu(self._menu)

        builddict = {'menu': self._menu, 'children': {}}

        libkeys = libraries
        if isinstance(libraries, dict):
            libkeys = sorted(libraries.keys())

        for lib in libkeys:
            d = builddict

            paths = lib.split('/')
            pathsCount = len(paths)
            for i, path in enumerate(paths):

                #if we are the last element we add an action
                if i >= pathsCount - 1:
                    childaction = d['menu'].addAction(path)
                    thisdict = d['children'].get(path, {})
                    thisdict['action'] = childaction
                    d['children'][path] = thisdict

                    if isinstance(libraries, dict):
                        callback = partial(self._onselected, lib,
                                           libraries[lib])
                    else:
                        callback = partial(self._onselected, lib, lib)
                    childaction.triggered.connect(callback)

                #check if we already have the path in the children of our dict
                elif path not in d['children'] or 'menu' not in d['children'][
                        path]:

                    childmenu = d['menu'].addMenu(path)
                    thisdict = d['children'].get(path, {})
                    thisdict['menu'] = childmenu
                    d['children'][path] = thisdict

                #prepare for the next path
                d = d['children'][path]
                if 'children' not in d:
                    d['children'] = {}

        self._selected = ""
        self._path = ""