0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 03:31: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 import BaseModel, ConfigDict, Field, field_validator
from pydantic.fields import FieldInfo from pydantic.fields import FieldInfo
from pydantic_core import PydanticUndefined from pydantic_core import PydanticUndefined
from PySide6 import QtCore from qtpy import QtCore
from PySide6.QtWidgets import QComboBox
from qtpy.QtCore import Signal # type: ignore from qtpy.QtCore import Signal # type: ignore
from qtpy.QtWidgets import ( from qtpy.QtWidgets import (
QApplication, QApplication,
QButtonGroup, QButtonGroup,
QCheckBox, QCheckBox,
QComboBox,
QDoubleSpinBox, QDoubleSpinBox,
QGridLayout, QGridLayout,
QHBoxLayout, QHBoxLayout,
@ -178,6 +178,8 @@ class DynamicFormItem(QWidget):
def _set_pretty_display(self): def _set_pretty_display(self):
self.setEnabled(False) self.setEnabled(False)
if button := getattr(self, "_clear_button", None):
button.setVisible(False)
def _describe(self, pad=" "): def _describe(self, pad=" "):
return pad + (self._desc if self._desc else "") return pad + (self._desc if self._desc else "")
@ -476,6 +478,8 @@ class SetFormItem(ListFormItem):
self._add_item_field = self._types.widget() self._add_item_field = self._types.widget()
self._buttons.addWidget(QLabel("Add new:")) self._buttons.addWidget(QLabel("Add new:"))
self._buttons.addWidget(self._add_item_field) self._buttons.addWidget(self._add_item_field)
self.setMinimumSize(QtCore.QSize(50, 100))
self.setSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.MinimumExpanding)
@SafeSlot() @SafeSlot()
def _add_row(self): def _add_row(self):
@ -504,7 +508,7 @@ class SetFormItem(ListFormItem):
return set(self._data) return set(self._data)
def setValue(self, value: set): 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]]] WidgetTypeRegistry = OrderedDict[str, tuple[Callable[[FormItemSpec], bool], type[DynamicFormItem]]]

View File

@ -55,7 +55,10 @@ class DictBackedTableModel(QAbstractTableModel):
Qt.ItemDataRole.EditRole, Qt.ItemDataRole.EditRole,
Qt.ItemDataRole.ToolTipRole, 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): def setData(self, index, value, role):
if role == Qt.ItemDataRole.EditRole: if role == Qt.ItemDataRole.EditRole:
@ -67,9 +70,10 @@ class DictBackedTableModel(QAbstractTableModel):
return False return False
def replaceData(self, data: dict): def replaceData(self, data: dict):
self.delete_rows(list(range(len(self._data))))
self.resetInternalData() self.resetInternalData()
self._data = [[k, v] for k, v in data.items()] 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]): def update_disallowed_keys(self, keys: list[str]):
"""Set the list of keys which may not be used. """Set the list of keys which may not be used.
@ -80,7 +84,7 @@ class DictBackedTableModel(QAbstractTableModel):
for i, item in enumerate(self._data): for i, item in enumerate(self._data):
if item[0] in self._disallowed_keys: if item[0] in self._disallowed_keys:
self._data[i][0] = "" 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): def _other_keys(self, row: int):
return [r[0] for r in self._data[:row] + self._data[row + 1 :]] 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 CONF as DEVICE_CONF_KEYS
from bec_lib.config_helper import ConfigHelper from bec_lib.config_helper import ConfigHelper
from bec_lib.logger import bec_logger from bec_lib.logger import bec_logger
from PySide6.QtCore import QObject from qtpy.QtCore import QObject, QRunnable, QSize, Qt, QThreadPool, Signal
from qtpy.QtCore import QRunnable, QSize, Qt, QThreadPool, Signal
from qtpy.QtWidgets import ( from qtpy.QtWidgets import (
QApplication, QApplication,
QDialog, QDialog,