Known regressions in current commit: - No "extra" files - GLOSS map does not look corrected - "override" flag is not respected
89 lines
3.8 KiB
Python
89 lines
3.8 KiB
Python
# gui/delegates.py
|
|
from PySide6.QtWidgets import QStyledItemDelegate, QLineEdit, QComboBox
|
|
from PySide6.QtCore import Qt, QModelIndex
|
|
from config import ALLOWED_ASSET_TYPES, ALLOWED_FILE_TYPES # Import config lists
|
|
|
|
class LineEditDelegate(QStyledItemDelegate):
|
|
"""Delegate for editing string values using a QLineEdit."""
|
|
def createEditor(self, parent, option, index):
|
|
# Creates the QLineEdit editor widget used for editing.
|
|
editor = QLineEdit(parent)
|
|
return editor
|
|
|
|
def setEditorData(self, editor: QLineEdit, index: QModelIndex):
|
|
# Sets the editor's initial data based on the model's data.
|
|
# Use EditRole to get the raw data suitable for editing.
|
|
value = index.model().data(index, Qt.EditRole)
|
|
editor.setText(str(value) if value is not None else "")
|
|
|
|
def setModelData(self, editor: QLineEdit, model, index: QModelIndex):
|
|
# Commits the editor's data back to the model.
|
|
value = editor.text()
|
|
# Pass the potentially modified text back to the model's setData.
|
|
model.setData(index, value, Qt.EditRole)
|
|
|
|
def updateEditorGeometry(self, editor, option, index):
|
|
# Ensures the editor widget is placed correctly within the cell.
|
|
editor.setGeometry(option.rect)
|
|
|
|
|
|
class ComboBoxDelegate(QStyledItemDelegate):
|
|
"""
|
|
Delegate for editing string values from a predefined list using a QComboBox.
|
|
Determines the list source based on column index.
|
|
"""
|
|
def createEditor(self, parent, option, index: QModelIndex):
|
|
# Creates the QComboBox editor widget.
|
|
editor = QComboBox(parent)
|
|
column = index.column()
|
|
model = index.model() # Get the model instance
|
|
|
|
# Add a "clear" option first, associating None with it.
|
|
editor.addItem("---", None) # UserData = None
|
|
|
|
# Populate based on column using lists from config
|
|
items_list = None
|
|
if column == 2: # Asset-Type Override (AssetRule)
|
|
items_list = ALLOWED_ASSET_TYPES
|
|
elif column == 4: # Item-Type Override (FileRule)
|
|
items_list = ALLOWED_FILE_TYPES
|
|
|
|
if items_list:
|
|
for item_str in items_list:
|
|
# Add item with the string itself as text and UserData
|
|
editor.addItem(item_str, item_str)
|
|
else:
|
|
# If the delegate is incorrectly applied to another column,
|
|
# it will just have the "---" option.
|
|
pass
|
|
|
|
return editor
|
|
|
|
def setEditorData(self, editor: QComboBox, index: QModelIndex):
|
|
# Sets the combo box's current item based on the model's string data.
|
|
# Get the current string value (or None) from the model via EditRole.
|
|
value = index.model().data(index, Qt.EditRole) # This should be a string or None
|
|
|
|
idx = -1
|
|
if value is not None:
|
|
# Find the index corresponding to the string value.
|
|
idx = editor.findText(value)
|
|
else:
|
|
# If the model value is None, find the "---" item.
|
|
idx = editor.findData(None) # Find the item with UserData == None
|
|
|
|
# Set the current index, defaulting to 0 ("---") if not found.
|
|
editor.setCurrentIndex(idx if idx != -1 else 0)
|
|
|
|
|
|
def setModelData(self, editor: QComboBox, model, index: QModelIndex):
|
|
# Commits the selected combo box data (string or None) back to the model.
|
|
# Get the UserData associated with the currently selected item.
|
|
# This will be the string value or None (for the "---" option).
|
|
value = editor.currentData() # This is either the string or None
|
|
# Pass this string value or None back to the model's setData.
|
|
model.setData(index, value, Qt.EditRole)
|
|
|
|
def updateEditorGeometry(self, editor, option, index):
|
|
# Ensures the editor widget is placed correctly within the cell.
|
|
editor.setGeometry(option.rect) |