0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 19:21:50 +02:00

fix: reset dict table properly

This commit is contained in:
2025-06-13 17:23:16 +02:00
committed by David Perl
parent be73349c70
commit 5623547e92
3 changed files with 15 additions and 8 deletions

View File

@ -11,13 +11,13 @@ from bec_qthemes import material_icon
from pydantic import BaseModel, ConfigDict, Field, field_validator
from pydantic.fields import FieldInfo
from pydantic_core import PydanticUndefined
from PySide6 import QtCore
from PySide6.QtWidgets import QComboBox
from qtpy import QtCore
from qtpy.QtCore import Signal # type: ignore
from qtpy.QtWidgets import (
QApplication,
QButtonGroup,
QCheckBox,
QComboBox,
QDoubleSpinBox,
QGridLayout,
QHBoxLayout,
@ -178,6 +178,8 @@ class DynamicFormItem(QWidget):
def _set_pretty_display(self):
self.setEnabled(False)
if button := getattr(self, "_clear_button", None):
button.setVisible(False)
def _describe(self, pad=" "):
return pad + (self._desc if self._desc else "")
@ -476,6 +478,8 @@ class SetFormItem(ListFormItem):
self._add_item_field = self._types.widget()
self._buttons.addWidget(QLabel("Add new:"))
self._buttons.addWidget(self._add_item_field)
self.setMinimumSize(QtCore.QSize(50, 100))
self.setSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.MinimumExpanding)
@SafeSlot()
def _add_row(self):
@ -504,7 +508,7 @@ class SetFormItem(ListFormItem):
return set(self._data)
def setValue(self, value: set):
return super().setValue(set(self._data))
return super().setValue(set(value))
WidgetTypeRegistry = OrderedDict[str, tuple[Callable[[FormItemSpec], bool], type[DynamicFormItem]]]

View File

@ -55,7 +55,10 @@ class DictBackedTableModel(QAbstractTableModel):
Qt.ItemDataRole.EditRole,
Qt.ItemDataRole.ToolTipRole,
]:
return str(self._data[index.row()][index.column()])
try:
return str(self._data[index.row()][index.column()])
except IndexError:
return None
def setData(self, index, value, role):
if role == Qt.ItemDataRole.EditRole:
@ -67,9 +70,10 @@ class DictBackedTableModel(QAbstractTableModel):
return False
def replaceData(self, data: dict):
self.delete_rows(list(range(len(self._data))))
self.resetInternalData()
self._data = [[k, v] for k, v in data.items()]
self.dataChanged.emit(self.index(0, 0), self.index(len(self._data), 0))
self.dataChanged.emit(self.index(0, 0), self.index(len(self._data), 1))
def update_disallowed_keys(self, keys: list[str]):
"""Set the list of keys which may not be used.
@ -80,7 +84,7 @@ class DictBackedTableModel(QAbstractTableModel):
for i, item in enumerate(self._data):
if item[0] in self._disallowed_keys:
self._data[i][0] = ""
self.dataChanged.emit(self.index(i, 0), self.index(i, 0))
self.dataChanged.emit(self.index(i, 0), self.index(i, 1))
def _other_keys(self, row: int):
return [r[0] for r in self._data[:row] + self._data[row + 1 :]]

View File

@ -5,8 +5,7 @@ from bec_lib.atlas_models import Device as DeviceConfigModel
from bec_lib.config_helper import CONF as DEVICE_CONF_KEYS
from bec_lib.config_helper import ConfigHelper
from bec_lib.logger import bec_logger
from PySide6.QtCore import QObject
from qtpy.QtCore import QRunnable, QSize, Qt, QThreadPool, Signal
from qtpy.QtCore import QObject, QRunnable, QSize, Qt, QThreadPool, Signal
from qtpy.QtWidgets import (
QApplication,
QDialog,