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
|
||||
|
||||
+7
-2
@@ -109,8 +109,9 @@ class Controller(Observer):
|
||||
|
||||
def refresh_gui(self):
|
||||
self._view.data_from_model()
|
||||
def data_from_model(self):
|
||||
self._view.data_from_model()
|
||||
self._view.set_states()
|
||||
# def data_from_model(self):
|
||||
# self._view.data_from_model()
|
||||
def data_from_view(self, key=None):
|
||||
return self._view.data_from_view(key)
|
||||
|
||||
@@ -194,6 +195,9 @@ class Controller(Observer):
|
||||
def get_all_gui_data(self):
|
||||
return self._model.get_all_gui_data()
|
||||
|
||||
def get_gui_states(self):
|
||||
return self._model.get_states()
|
||||
|
||||
def set_widget_status(self, widgetname, status):
|
||||
#self._view.set_widget_status(widgetname, status)
|
||||
pass
|
||||
@@ -252,6 +256,7 @@ class Controller(Observer):
|
||||
# Suche Knopf darf nur bei Einzelteilen funktionieren und wenn Halbzeug/NEuaufbau nicht angehakt sind
|
||||
if pdm_kategorie_neu == "Einzelteil" and not (aus_halbzeug == True or neuaufbau == True):
|
||||
newpath = self._view.suche_3d()
|
||||
if newpath:
|
||||
self._model.set_gui_data('model3d_neu', newpath)
|
||||
self._model.set_gui_data('cb_3Dmodel_neu', '')
|
||||
|
||||
|
||||
+60
@@ -170,6 +170,11 @@ class LeftFrameAsm(AllFrames):
|
||||
if 'asm_id' in data:
|
||||
self.asm_number.set(data["asm_id"])
|
||||
|
||||
def set_states(self):
|
||||
# not yet implemented. Not used
|
||||
pass
|
||||
|
||||
|
||||
class RightFrameLabels(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -204,6 +209,11 @@ class RightFrameLabels(AllFrames):
|
||||
if 'teilenummer' in data:
|
||||
self.teilenummer_text.set(data["teilenummer"])
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
if 'teilenummer' in data:
|
||||
self.teilenummer_text["state"] = data['teilenummer']
|
||||
|
||||
class RightFramePDM(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -384,6 +394,12 @@ class RightFramePDM(AllFrames):
|
||||
if 'cb_3Dmodel_neu' in data:
|
||||
self.model3d_combo['values'] = data["cb_3Dmodel_neu"]
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
# if 'teilenummer' in data:
|
||||
# self.teilenummer_text["state"] = data['teilenummer']
|
||||
|
||||
class RightFrameBezeichnung(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -464,6 +480,10 @@ class RightFrameBezeichnung(AllFrames):
|
||||
if 'bezeichnung2_sivas' in data:
|
||||
self.bezeichnung2_sivas.set(data["bezeichnung2_sivas"])
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
|
||||
class RightFrameHalbzeugOhneS(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -636,6 +656,10 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
if 'cb_kalkulationsart_neu' in data:
|
||||
self.kalkulationsart_neu_combo['values'] = data['cb_kalkulationsart_neu']
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
|
||||
class RightFrameBeschaffungsart(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -733,6 +757,10 @@ class RightFrameBeschaffungsart(AllFrames):
|
||||
if "cb_halbzeug_neu" in data:
|
||||
self.halbzeug_combo['values'] = data["cb_halbzeug_neu"]
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
|
||||
class RightFrameTOSGruppe(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -900,6 +928,10 @@ class RightFrameTOSGruppe(AllFrames):
|
||||
if "cb_hersteller_neu" in data:
|
||||
self.hersteller_neu_combo['values'] = data["cb_hersteller_neu"]
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
|
||||
class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -1018,6 +1050,10 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
if 'cb_farbe_neu' in data:
|
||||
self.farbe_neu_combo['values'] = data["cb_farbe_neu"]
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
|
||||
class RightFrameVersion(AllFrames):
|
||||
def __init__(self, frame, nrow=0):
|
||||
AllFrames.__init__(self, nrow)
|
||||
@@ -1118,6 +1154,10 @@ class RightFrameVersion(AllFrames):
|
||||
if text:
|
||||
self.freigabevermerk_neu.insert('1.0', text)
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
|
||||
def clear_texts(self):
|
||||
self.aenderungstext_sivas.delete('1.0', 'end')
|
||||
self.aenderungstext_neu.delete('1.0', 'end')
|
||||
@@ -1178,6 +1218,11 @@ class RightFrameZusatzinfos(AllFrames):
|
||||
text = data["zusatzinfos_bendef_text"]
|
||||
if text:
|
||||
self.zusatzinfos_bendef_text.insert('1.0', text)
|
||||
|
||||
def set_states(self):
|
||||
data = self.get_controller().get_gui_states()
|
||||
pass
|
||||
|
||||
def clear_texts(self):
|
||||
self.zusatzinfos_auto_text.delete('1.0', 'end')
|
||||
self.zusatzinfos_bendef_text.delete('1.0', 'end')
|
||||
@@ -1294,6 +1339,21 @@ class App():
|
||||
self.rf8.clear_texts()
|
||||
self.rf9.clear_texts()
|
||||
|
||||
def set_states(self):
|
||||
# not used. So not implemented:
|
||||
#self.lf1.set_states()
|
||||
#self.lf2.set_states()
|
||||
|
||||
self.rf1.set_states()
|
||||
self.rf2.set_states()
|
||||
self.rf3.set_states()
|
||||
self.rf4.set_states()
|
||||
self.rf5.set_states()
|
||||
self.rf6.set_states()
|
||||
self.rf7.set_states()
|
||||
self.rf8.set_states()
|
||||
self.rf9.set_states()
|
||||
|
||||
|
||||
def data_from_view(self, key=None):
|
||||
ret = dict()
|
||||
|
||||
Reference in New Issue
Block a user