erstes Grundgerüst in mvc gebaut, um den Status einzusammeln und an die gui weiter zu geben

This commit is contained in:
2024-03-07 12:32:04 +01:00
parent 3dc8af5e70
commit 94ff9aa100
3 changed files with 118 additions and 12 deletions
+49 -8
View File
@@ -170,6 +170,7 @@ class CadItem(DataModel):
self._parent_children_mapping = {}
self._data = {}
self._gui_data = {}
self._gui_states = {}
self._read_only_items = {}
self._controller = None
self._logic = None
@@ -177,7 +178,10 @@ class CadItem(DataModel):
def clear(self):
self._data = {}
self._gui_data = {}
self._gui_states = {}
self._read_only_items = {}
if self._logic:
self._logic.clear_states()
def add_logic(self, logic):
self._logic = logic
@@ -253,6 +257,19 @@ class CadItem(DataModel):
else:
self._gui_data[key] = val
def set_state_dict(self, data:dict):
""" setzt die Zustände der GUI wie readonly etc."""
for k,v in data.items():
self.set_state(k,v)
def set_state(self, key, val):
""" merkt sich den status wie 'readonly' etc für die GUI """
if key not in self.gui_data_keys:
raise Exception("this data can not be set "+ key)
else:
self._gui_states[key] = val
def get_states(self):
return self._gui_states
def get_gui_data(self, key):
if key in self._gui_data:
return self._gui_data[key]
@@ -308,12 +325,19 @@ class CadItem(DataModel):
translated_data[self.excel_to_gui[k]] = v
# Spezial: Befüllung von Änderungstext mit dem Author, falls in der .csv vorhanden
if "Indexerfasser" in data and "Aenderungstext" in data:
if data["Indexerfasser"] is not None:
translated_data["aenderungstext_sivas"] = '{aenderungstext} (von {author})'.format(aenderungstext=data["Aenderungstext"], author=data["Indexerfasser"])
if "Indexerfasser" in data:
author = data["Indexerfasser"]
if "Aenderungstext" in data:
if author:
translated_data["aenderungstext_sivas"] = '{aenderungstext} (von {author})'.format(aenderungstext=data["Aenderungstext"], author=author)
# Indexerfasser wird nicht in der gui verwaltet. Deshalb Modifikation aus den Rohdate
else:
translated_data["aenderungstext_sivas"] = data["Aenderungstext"]
else:
default = "Erstanlage"
if author:
default = 'Erstanlage (von {author})'.format(author=author)
translated_data["aenderungstext_sivas"] = default
translated_data = self._transform_content_from_csv(translated_data)
self.set_gui_dict(translated_data)
@@ -422,7 +446,10 @@ class CadItem(DataModel):
if self._logic == None:
raise Exception("no logic set")
else:
return self._logic.callback(key, value)
new_content = self._logic.callback(key, value)
states = self._logic.get_states()
self.set_state_dict(states)
return new_content
def get_dependent(self, key):
if self._logic == None:
@@ -556,14 +583,28 @@ class CadItemRepository:
class GuiLogic():
"""
Class for business logic. implementing the dependencies between different user inputs
"""
die neuen Inhalte nach jedem Callback werden als dict zurückgegeben.
Manche Callbacks verursachen weitere abhängige Callbacks. Am Ende geht das
gesamte Dictionary der neuen Inhalte von Comboboxen und Entries zurück und
werden im Modell gesetzt
"""
def __init__(self, model, configs):
# das Modell soll hier nur verwendet werden um aktuell Zustände abzufragen!
# alles weitere zum Setzen von Daten etc. muss über den Controller laufen, also zurück gegeben werden.
self._model = model
# hier holt man die Daten der Configs
self._config = configs
# hier sind alle Callbacks bzw. deren Comboboxen
# hier werden die Zustände gespeichert
self._states = dict()
def clear_states(self):
self._states = dict()
def get_states(self):
return self._states
def set_state(self, key, val):
""" merkt sich den status wie 'readonly' etc für dieses item in der GUI"""
self._states[key] = val
def set_gui_defaults(self):
# set defaults from given logic
@@ -855,9 +896,9 @@ class GuiLogic():
itemid = str(self._model.get_current_item_id())
pfade = []
for root, dirnames, filenames in os.walk(search_path):
pfade.extend(glob.glob(root + "/"+itemid+".par"))
pfade.extend(glob.glob(os.path.join(root, itemid+".par")))
for root, dirnames, filenames in os.walk(search_path):
pfade.extend(glob.glob(root + "/"+itemid+".asm"))
pfade.extend(glob.glob(os.path.join(root, itemid+".asm")))
# Dropdownwerte = Dateipfade von allen .par-Dateien, die die aktuelle Teilenummer im Dateinamen aufweisen und sich gleichzeitig in einem der rekursiv durchsuchten Pfade aus der Sektion "3D-Modelle" in "Zielpfade.cfg" befinden.
# state_ComboBox = readonly
# state_Button = keiner