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:
@ -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]]]
|
||||||
|
@ -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 :]]
|
||||||
|
@ -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,
|
||||||
|
Reference in New Issue
Block a user