예제 #1
0
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
예제 #2
0
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()