st-ten-1/src/ui/steps_management/steps_management.py

94 lines
3.5 KiB
Python
Raw Normal View History

2022-07-19 09:59:00 +00:00
from glob import iglob
from PyQt5.QtCore import Qt
2022-07-26 10:24:53 +00:00
from PyQt5.QtWidgets import QPushButton
from ui.crud import Cell, Combo_Box_Cell_Widget, Crud
2022-07-19 09:59:00 +00:00
from ui.dialog import Dialog
from ui.leak_step_editor import Leak_Step_Editor
from ui.vision_step_editor import Vision_Step_Editor
from ui.widget import Widget
class Step_Spec_JEDECW(QPushButton, Cell):
def __init__(self, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None):
self.editors = {
2022-07-26 10:24:53 +00:00
"vision": Vision_Step_Editor(cell_widget=self),
"leak": Leak_Step_Editor(cell_widget=self),
2022-07-19 09:59:00 +00:00
}
self.editor = None
self.editor_type = None
self.dialog = Dialog()
self.dialog.setAttribute(Qt.WA_DeleteOnClose, on=False)
super().__init__(u"\u238B modifica")
2022-07-25 09:16:14 +00:00
Cell.__init__(self, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud)
self.update_editor()
2022-07-19 09:59:00 +00:00
self.crud.modified.connect(self.update_editor)
self.dialog.setWindowTitle(self.field_alias)
self.clicked.connect(self.dialog.show)
def update_editor(self):
self.editor_type = self.crud.db_tw.cellWidget(self.row_number, self.crud.select_index["type"])._parse()
self.editor = self.editors[self.editor_type]
2022-07-25 09:16:14 +00:00
if self.dialog.centralWidget is not self.editor:
self.dialog.setCentralWidget(self.editor)
self.dialog.adjustSize()
2022-07-19 09:59:00 +00:00
2022-07-26 10:24:53 +00:00
def set_readonly(self, readonly=True):
2022-07-19 09:59:00 +00:00
for editor in self.editors.values():
2022-07-26 10:24:53 +00:00
editor.set_readonly(readonly=readonly)
2022-07-19 09:59:00 +00:00
def do_autocomplete(self, autocomplete):
for editor_type, editor in self.editors.items():
if autocomplete is None:
editor.do_autocomplete(None)
elif editor_type in autocomplete:
editor.do_autocomplete(autocomplete[editor_type])
def connect_modified(self):
for editor in self.editors.values():
editor.connect_modified(self.check_modified)
def render(self, data, field_name=None, row_number=None, crud=None):
self.editor.render(data, field_name=field_name, row_number=row_number, crud=crud)
def parse(self, row_number=None, crud=None):
return self.editor.parse(row_number=row_number, crud=crud)
class Steps_Management(Widget):
def __init__(self):
super().__init__()
crud_aliases = {
"id": "Id",
"name": "Fase di test",
"type": "Tipo",
"spec": "Specifica",
2022-07-26 13:34:09 +00:00
"description": "Descrizione",
2022-07-19 09:59:00 +00:00
"archived": "Archiviata",
}
self.crud = Crud(
"steps",
display_name="GESTIONE FASI DI TEST",
readonly=["id"],
select=list(crud_aliases.keys()),
fields_aliases=crud_aliases,
autocomplete={
"type": [
"leak",
"vision",
],
"spec": {
"vision": {
# "recipe": iglob("*.ini", root_dir="./config/vision/recipes/"), # only in python3.10
"recipe": list(iglob("./config/vision/recipes/*.ini")),
},
},
"archived": False,
},
widget_classes={
"type": Combo_Box_Cell_Widget,
"spec": Step_Spec_JEDECW,
},
)
self.layout().addWidget(self.crud, 0, 0, -1, -1)