Source code for qtdraw.widget.delegate

"""
Delegate for GroupModel and GroupView.

This module provides delegate for color selector, combo, and editor.
"""

from PySide6.QtWidgets import QStyle, QStyledItemDelegate
from PySide6.QtCore import Qt
from qtdraw.widget.custom_widget import Combo, Editor, ColorSelector


# ==================================================
[docs] class Delegate(QStyledItemDelegate): # ================================================== def __init__(self, parent): """ Base delegate. Args: parent (QWidget): parent. """ super().__init__(parent) # ==================================================
[docs] def setEditorData(self, editor, index): """ Set editor data. Args: editor (QWidget): editor. index (QModelIndex): index. """ value = index.model().data(index, Qt.EditRole) editor.setCurrentText(value)
# ==================================================
[docs] def setModelData(self, editor, model, index): """ Set model data. Args: editor (QWidget): editor. model (QAbstractItemModel) model. index (QModelIndex): index. """ model.blockSignals(True) model.setData(index, editor.currentText(), Qt.EditRole) model.blockSignals(False)
# ==================================================
[docs] def updateEditorGeometry(self, editor, option, index): """ Update editor geometry. Args: editor (QWidget): editor. option (QStyleOptionViewItem) option. index (QModelIndex): index. """ editor.setGeometry(option.rect)
# ==================================================
[docs] def paint(self, painter, option, index): """ Paint cell. Args: painter (QPainter): painter. option (QStyleOptionViewItem) option. index (QModelIndex): index. """ if index.isValid(): value = index.model().data(index, Qt.DisplayRole) if value: option.displayAlignment = Qt.AlignHCenter | Qt.AlignVCenter self.parent().style().drawControl(QStyle.CE_ItemViewItem, option, painter, self.parent())
# ==================================================
[docs] class ComboDelegate(Delegate): # ================================================== def __init__(self, parent): """ Create delegate for Combo. Args: parent (QWidget): parent. """ super().__init__(parent) # ==================================================
[docs] def createEditor(self, parent, option, index): """ Create combobox. Args: parent (QWidget): parent. option (QStyleOptionViewItem): option. index (QModelIndex): index. Returns: - (Combo) -- combo widget. """ c = index.column() dd = index.model().column_default[c] opt = index.model().column_option[c] combo = Combo(parent, opt, dd) combo.setStyleSheet("margin: 5px 10px 5px 10px; padding: 0px 5px 0px 5px;") combo.currentTextChanged.connect(lambda data: index.model().setData(index, data)) return combo
# ==================================================
[docs] class ColorDelegate(Delegate): # ================================================== def __init__(self, parent): """ Create delegate for ColorSelector. Args: parent (QWidget): parent. """ super().__init__(parent) # ==================================================
[docs] def createEditor(self, parent, option, index): """ Create color selector. Args: parent (QWidget): parent. option (QStyleOptionViewItem): option. index (QModelIndex): index. Returns: - (ColorSelector) -- color selector widget. """ c = index.column() dd = index.model().column_default[c] tp = index.model().column_type[c] color_selector = ColorSelector(parent, dd, tp) color_selector.setStyleSheet("margin: 5px 10px 5px 10px; padding: 0px 5px 0px 5px;") color_selector.currentTextChanged.connect(lambda data: index.model().setData(index, data)) return color_selector
# ==================================================
[docs] class EditorDelegate(Delegate): # ================================================== def __init__(self, parent): """ Create delegate for Editor. Args: parent (QWidget): parent. """ super().__init__(parent) # ==================================================
[docs] def createEditor(self, parent, option, index): """ Create editor. Args: parent (QWidget): parent. option (QStyleOptionViewItem): option. index (QModelIndex): index. Returns: - (Editor) -- editor widget. """ model = index.model() c = index.column() dd = model.column_default[c] opt = model.column_option[c] tp = model.column_type[c] color = model.parent()._preference["latex"]["color"] size = model.parent()._preference["latex"]["size"] dpi = model.parent()._preference["latex"]["dpi"] editor = Editor(parent, dd, (tp, opt), color, size, dpi) editor.returnPressed.connect(lambda data: index.model().setData(index, data)) return editor