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
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
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
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
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
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)
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
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
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
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
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
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
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
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)
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)
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))
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
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
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
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))
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_()
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
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
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
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 = ""