def customContextMenu(self, pos): """ Open up a custom context menu. """ # pylint: disable=unused-argument self.deleteSelectedAction.setEnabled(self.listWidget.currentRow() > -1) menu = QtWidgets.QMenu() menu.addAction(self.deleteSelectedAction) menu.exec_(QtGui.QCursor.pos())
def setup_root_menu(self): """ Attempts to find an existing menu of the specified title. If it can't be found, it creates one. """ # Get the "main menu" (the bar of menus) try: main_menu = self.get_katana_main_bar() except Exception as error: message = 'Failed to get main Katana menu bar: {}'.format(error) self.engine.log_debug(message) return # Attempt to find existing menu for menu in main_menu.children(): is_menu = isinstance(menu, QtWidgets.QMenu) if is_menu and menu.title() == self.menu_name: return menu # Otherwise, create a new menu menu = QtWidgets.QMenu(self.menu_name, main_menu) main_menu.addMenu(menu) return menu
def __listMousePressEvent(self, event): item = self.tree.itemAt(event.pos()) if not item: return pos = event.pos() pos = self.tree.mapToGlobal( QtCore.QPoint(pos.x(), pos.y() + self.tree.header().height())) self.__lastTreePos = event.pos() self.__lastPos = pos if event.button() == QtCore.Qt.LeftButton: local_pos = event.pos() global_pos = pos if self.__popupVersions(item, local_pos, global_pos): event.accept() else: if event.button() == QtCore.Qt.RightButton: if item.isSelected(): items = self.tree.selectedItems() else: items = [item] for item in items: dark = QtGui.QColor(32, 32, 32) item.setHiliteColor(dark) self.tree.update(self.tree.indexFromItem(item)) menu = QtWidgets.QMenu(None) types = set((i.getItemData()['type'] for i in items)) if len(types) > 1: menu.addAction(RemoveItemsAction(menu, self.node, items)) else: itemType = tuple(types)[0] if itemType == 'output': if str(item.text(NAME_COLUMN)) == 'default': a = menu.addAction( '(Default Output Cannot Be Removed)') a.setEnabled(False) else: menu.addAction( RemoveItemsAction(menu, self.node, items)) else: if itemType == 'assetTree': assetItem = item.getItemData()['assetItem'] if assetItem.isIgnorable(): menu.addAction( ToggleIgnoreItemsAction( menu, self.node, items, not assetItem.isIgnored())) if assetItem.isDeletable(): try: menu.addAction( RemoveItemsAction( menu, self.node, items)) except Exception as exception: log.exception( 'Error adding action to context menu: %s' % str(exception)) if assetItem.canDuplicate(): try: menu.addAction( DuplicateItemAction( menu, self.node, items)) except: import traceback traceback.print_exc() if len(items) == 1: assetItem.addToContextMenu(menu, self.node) menu.exec_(pos) for item in items: item.setHiliteColor(None) self.tree.update(self.tree.indexFromItem(item)) event.accept() return