class CreateMenu(QMenu): def __init__(self, parent_widget, menu_name: str = _("Erstellen")): super(CreateMenu, self).__init__(menu_name, parent_widget) self.parent_widget = parent_widget self.current_view = None i = IconRsc self.create_action_grp = QActionGroup(self) self.create_action_grp.setExclusive(False) # -- Create User Preset from selection action self.user_preset_from_selected = QAction( i.get_icon('preset'), _('User Preset aus Selektion'), self.create_action_grp) self.user_preset_from_selected.triggered.connect( self._create_user_preset_from_selected) # -- Create Render Preset from selection action self.render_preset_from_selected = QAction( i.get_icon('render'), _('Render Preset aus Selektion'), self.create_action_grp) self.render_preset_from_selected.triggered.connect( self._create_render_preset_from_selected) action_list = [ (_("Render Preset\tEnthält User Presets, Viewsets und Rendereinstellungen" ), i.get_icon('render'), self._create_render_preset_from_selected), (_("User Preset\tEnthält Varianten und/oder Referenzen"), i.get_icon('preset'), self._create_user_preset_from_selected), (_("Viewset\tEnthält **eine** Shot Variante"), i.get_icon('viewset'), self._create_viewset), (_("Reset\tVarianten für eine Resetschaltung"), i.get_icon('reset'), self._create_reset), (_("Trimline Preset\tVarianten für eine Serienschaltung"), i.get_icon('car'), self._create_trimline), (_("Paket Preset\tVarianten eines Pakets"), i.get_icon('pkg'), self._create_package), (_("FaKom Serien\tVarianten einer Serien Farbkombination"), i.get_icon('fakom_trim'), self._create_fakom_trim), (_("FaKom Option\tVarianten einer Farbkombination"), i.get_icon('fakom'), self._create_fakom_option), (_('Ausgabe Objekt\tDefiniert einen Ausgabepfad'), i.get_icon('folder'), self._create_output_item), (_('PlmXml Objekt\tDefiniert einen Pfad zur PlmXml Datei'), i.get_icon('assignment'), self._create_plmxml_item), (_('Kamera Objekt\tEnthält 3DS DeltaGen Kameradaten'), i.get_icon('videocam'), self._create_camera_item), (_("Separator\tNicht-interagierbares Ordnungselement"), i.get_icon('navicon'), self._create_separator) ] for a in action_list: name, icon, method_call = a action = QAction(icon, name, self.create_action_grp) action.triggered.connect(method_call) self.addAction(action) self.aboutToShow.connect(self.update_current_view) def _create_user_preset_from_selected(self): self._create_preset_from_selected(is_user_preset=True) def _create_render_preset_from_selected(self): rp = self._create_preset_from_selected(is_user_preset=False) if rp: LOGGER.debug('RP ID: %s', rp.data(Kg.ID)) def _create_preset_from_selected(self, is_user_preset: bool = True ) -> Union[None, KnechtItem]: """ Copy and create a preset from selected items """ if not self.current_view: LOGGER.error('Can not find view in focus to add items to.') return child_items = self.current_view.editor.copypaste.copy_preset_items_from_selection( ) if is_user_preset: return self.current_view.editor.create.create_preset_from_items( child_items) else: return self.current_view.editor.create.create_render_preset_from_items( child_items) def _create_camera_item(self): if not self.current_view: return name = _('DeltaGen_Kamera_{:03d}').format( self.current_view.editor.create.item_count) self.current_view.editor.create.item_count += 1 new_item = self.current_view.editor.create.create_camera_item( name, KnechtImageCameraInfo.camera_example_info) self.current_view.editor.create_top_level_rows([new_item]) def _create_viewset(self): self._create_item(ItemTemplates.viewset) def _create_reset(self): self._create_item(ItemTemplates.reset) def _create_trimline(self): self._create_item(ItemTemplates.trim) def _create_package(self): self._create_item(ItemTemplates.package) def _create_fakom_trim(self): self._create_item(ItemTemplates.fakom_trim) def _create_fakom_option(self): self._create_item(ItemTemplates.fakom_option) def _create_output_item(self): self._create_item(ItemTemplates.output) def _create_plmxml_item(self): self._create_item(ItemTemplates.plmxml) def _create_separator(self): self._create_item(ItemTemplates.separator, False) def _create_item(self, item, create_id: bool = True): if not self.current_view: LOGGER.error('Can not find view in focus to add items to.') return self.current_view.editor.create.add_item(item, create_id=create_id) @Slot() def update_current_view(self): current_view = None if isinstance(self.parent_widget, QMainWindow): current_view = self.parent_widget.view_mgr.current_view() self.create_action_grp.setEnabled(True) LOGGER.debug('Create Menu about to show from Main Window Menu.') elif isinstance(self.parent_widget, QMenu): current_view = self.parent_widget.view self.create_action_grp.setEnabled(True) LOGGER.debug('Create Menu about to show from Context Menu.') if current_view.is_render_view: self.create_action_grp.setEnabled(False) self.current_view = current_view
class EditMenu(QMenu): enable_undo_actions = Signal(bool) def __init__(self, ui, menu_name: str = _('Bearbeiten')): """ :param modules.gui.main_ui.KnechtWindow ui: The main ui class :param str menu_name: Edit Menu display name """ super(EditMenu, self).__init__(menu_name, ui) self.ui = ui self.view = None # View Editor self.history = DocHistoryWidget(ui, self) self.undo_timer = QTimer() self.undo_timer.setInterval(50) self.undo_timer.setSingleShot(True) self.undo_timer.timeout.connect(self.undo_timeout_stop) self.undo_action_grp = QActionGroup(self) self.undo_action_grp.setExclusive(False) self.undo_action_grp.triggered.connect(self.undo_timeout_start) self.undo_action = ui.app.undo_grp.createUndoAction( self.undo_action_grp, prefix=_('Rückgängig:')) self.undo_action.setIcon(IconRsc.get_icon('undo')) self.undo_action.setShortcut(QKeySequence('Ctrl+Z')) self.addAction(self.undo_action) self.redo_action = ui.app.undo_grp.createRedoAction( self.undo_action_grp, prefix=_('Wiederherstellen:')) self.redo_action.setIcon(IconRsc.get_icon('redo')) self.redo_action.setShortcut(QKeySequence('Ctrl+Y')) self.addAction(self.redo_action) self.history_action = QAction(IconRsc.get_icon('later'), _('Historie\tStrg+H'), self) self.history_action.triggered.connect(self.toggle_history) self.history_action.setShortcut(QKeySequence('Ctrl+H')) self.addAction(self.history_action) self.addSeparator() self.search_action = QAction(IconRsc.get_icon('search'), _('Suchen und Ersetzen\tStrg+F'), self) self.search_action.triggered.connect(self.search) self.search_action.setShortcut(QKeySequence('Ctrl+F')) self.addAction(self.search_action) self.search_dlg = SearchDialog(self.ui) self.addSeparator() self.copy_action = QAction(IconRsc.get_icon('clip_copy'), _('Kopieren\tStrg+C'), self) self.copy_action.setShortcut(QKeySequence('Ctrl+C')) self.copy_action.triggered.connect(self.copy) self.addAction(self.copy_action) self.cut_action = QAction(IconRsc.get_icon('clip_cut'), _('Ausschneiden\tStrg+X'), self) self.cut_action.setShortcut(QKeySequence('Ctrl+X')) self.cut_action.triggered.connect(self.cut) self.addAction(self.cut_action) self.paste_action = QAction(IconRsc.get_icon('clip_paste'), _('Einfügen\tStrg+V'), self) self.paste_action.setShortcut(QKeySequence('Ctrl+V')) self.paste_action.triggered.connect(self.paste) self.addAction(self.paste_action) self.addSeparator() self.remove_rows_action = QAction( IconRsc.get_icon('trash-a'), _('Selektierte Zeilen entfernen\tEntf'), self) self.remove_rows_action.setShortcut(QKeySequence.Delete) self.remove_rows_action.triggered.connect(self.remove_rows) self.addAction(self.remove_rows_action) self.addSeparator() self.select_ref_action = QAction(_('Referenzen selektieren\tStrg+R'), self) self.select_ref_action.setShortcut(QKeySequence('Ctrl+R')) self.select_ref_action.triggered.connect(self.select_references) self.addAction(self.select_ref_action) self.select_none_action = QAction(_('Selektion aufheben\tStrg+D'), self) self.select_none_action.setShortcut(QKeySequence('Ctrl+D')) self.select_none_action.triggered.connect(self.deselect) self.addAction(self.select_none_action) self.aboutToShow.connect(self.update_view) QTimer.singleShot(1, self.delayed_setup) @Slot() def delayed_setup(self): """ Setup attributes that require a fully initialized ui""" self.view = self.ui.variantTree self.update_view() self.ui.tree_focus_changed.connect(self.update_view) def undo_timeout_start(self): self.undo_action_grp.setEnabled(False) self.undo_timer.start() def undo_timeout_stop(self): if not self.view.editor.enabled: self.undo_timer.start() return self.undo_action_grp.setEnabled(True) def search(self): self.search_dlg.center_on_ui() self.search_dlg.show() def select_references(self): self.view.editor.selection.select_references() def deselect(self): self.view.editor.selection.clear_selection() def copy(self): self.ui.clipboard.items = self.view.editor.copy_items() self.ui.clipboard.origin = self.view.editor.view def cut(self): self.copy() self.view.editor.remove_rows() def paste(self): if not self.ui.clipboard.items: return self.view.editor.paste_items(self.ui.clipboard) def remove_rows(self): self.view.editor.remove_rows() def toggle_history(self): if self.history.isHidden(): self.history.show() else: self.history.hide() def update_view(self): self.view = self.ui.tree_with_focus()