예제 #1
0
 def setModelData(self, editor, model, index):
     """ Get the data from our custom editor and stuffs it into the model.
     """
     if index.column() == 3:
         model.setData(index, editor.starRating.starCount)
     else:
         QStyledItemDelegate.setModelData(self, editor, model, index)
예제 #2
0
class KnechtValueDelegate(QStyledItemDelegate):
    def __init__(self, view: QTreeWidget):
        """ Overwrite QTreeWidget Item Edit Behaviour

        :param QTreeWidget view: View we replace delegates in
        """
        super(KnechtValueDelegate, self).__init__(view)
        self.view = view
        self.default_delegate = QStyledItemDelegate(view)

    def createEditor(self, parent: QWidget, option: QStyleOptionViewItem,
                     index: QModelIndex) -> QWidget:
        editor = QLineEdit(parent)
        current_value = index.model().data(index, Qt.EditRole)
        editor.setText(current_value)

        return editor

    def setModelData(self, editor, model, index):
        current_value = index.data(Qt.DisplayRole)
        new_value = editor.text()

        if new_value == current_value:
            return

        if not index.parent().isValid():
            # Do not edit Top-Level items
            self.view.info_overlay.display(
                _('Action List Namen können nicht editieren werden.'), 3000)
            return

        LOGGER.debug('Editor Model Data %s %s %s %s', new_value,
                     index.data(Qt.DisplayRole), index.row(),
                     index.parent().row())

        undo_cmd = ItemEditUndoCommand(current_value,
                                       new_value,
                                       index,
                                       view_name=self.view.objectName())
        self.view.undo_stack.push(undo_cmd)
        self.view.undo_stack.setActive(True)

        return self.default_delegate.setModelData(editor, model, index)
예제 #3
0
class KnechtValueDelegate(QStyledItemDelegate):
    def __init__(self, view):
        """ Basic item delegate that returns the views default item delegate or depending
            on the item type column: an appropriate custom render setting item delegate.

        :param modules.itemview.treeview.KnechtTreeView view: View we replace delegates in
        """
        super(KnechtValueDelegate, self).__init__(view)
        self.view = view

        self.default_delegate = QStyledItemDelegate(view)
        self.setting_delegate = None

    def createEditor(self, parent, option, index):
        # ---- Default behaviour ----
        if not self._index_is_custom_setting(index):
            return self.default_delegate.createEditor(parent, option, index)

        # ---- Custom behaviour ----
        return self.setting_delegate.create_editor(parent, option, index)

    def setEditorData(self, editor, index):
        # ---- Default behaviour ----
        if not self._index_is_custom_setting(index):
            return self.default_delegate.setEditorData(editor, index)

        # ---- Custom behaviour ---
        self.setting_delegate.set_editor_data(editor, index)

    def setModelData(self, editor, model, index):
        # ---- Default behaviour ----
        if not self._index_is_custom_setting(index):
            return self.default_delegate.setModelData(editor, model, index)

        # ---- Custom behaviour ---
        self.setting_delegate.set_model_data(editor, model, index)

    def updateEditorGeometry(self, editor, option, index):
        # ---- Default behaviour ----
        if not self._index_is_custom_setting(index):
            return self.default_delegate.updateEditorGeometry(
                editor, option, index)

        # ---- Custom behaviour ---
        editor.setGeometry(option.rect)

    def _index_is_custom_setting(self, index: QModelIndex):
        src_index = index.model().mapToSource(index)
        item: KnechtItem = index.model().sourceModel().get_item(src_index)
        setting_type = item.data(Kg.TYPE)

        if item.userType in [Kg.output_item]:
            self.setting_delegate = OutputDirButton(self.view)
            return True

        if item.userType in [Kg.plmxml_item]:
            self.setting_delegate = InputFileButton(self.view)
            return True

        if item.userType == Kg.render_setting and setting_type in RENDER_SETTING_MAP.keys(
        ):
            self.setting_delegate = RENDER_SETTING_MAP[setting_type](self.view)
            return True
        return False