erstes Grundgerüst in mvc gebaut, um den Status einzusammeln und an die gui weiter zu geben
This commit is contained in:
+49
-8
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user