""" Contains the logic for the MVC of CreoMigrate Gui """ class Controller(): """ Class for manipulating the model and returning data for the view """ def __init__(self, model, view): self.set_model(model) self.set_view(view) self.logic = None def add_logic(self, logic): self.logic = logic def remove_logic(self): self.logic = None def set_model(self, model): self.model = model def set_view(self, view): self.view = view def refresh_gui(self): self.view.data_from_model() def data_from_model(self): self.view.data_from_model() def get_current_asm_id(self): self.model.get_current_asm_id() def set_current_asm_id(self, asm_id): self.model.set_current_asm_id(asm_id) def set_red_ids(self, red_ids): self.model.set_red_ids(red_ids) def get_red_ids(self): return self.model.get_red_ids() def set_parent_children(self, parent_children_mapping): self.model.set_parent_children(parent_children_mapping) def get_parent_children(self): return self.model.get_parent_children() # merkt sich die reinen Daten zum Impfen def set_data_dict(self, data:dict): """merken der Daten zum Impfen""" for k,v in data: self.set_data(k,v) def set_data(self, key, value): """merken der Daten zum Impfen""" self.model.set_data(key, value) def get_data(self, key): return self.model.get_data(key) def get_all_data(self): return self.model.get_all_data() # merkt sich die Nutzereingaben, bzw. Daten für die GUI def set_gui_dict(self, data:dict): """merken der Eingaben des Nutzers der GUI """ for k,v in data.items(): self.set_gui_data(k,v) def set_gui_data(self, key, value): """merken der Eingaben des Nutzers der GUI """ self.model.set_gui_data(key, value) def get_gui_data(self, key): return self.model.get_gui_data(key) def get_all_gui_data(self): return self.model.get_all_gui_data() def callback(self, key, value): if not self.logic: return model_values = self.logic.callback(key, value) if model_values: self.set_gui_dict(model_values) self.refresh_gui() class GuiLogic(): """ Class for business logic. implementing the dependencies between different user inputs """ def __init__(self, configs): self.config = configs self.callbacks = [ 'cb_pdm_kategorie_neu', 'cb_neuaufbau', 'cb_aus_halbzeug_neu', 'cb_lebenszyklus_status_neu', 'cb_3Dmodel_neu', 'cb_halbzeugOhneSaege_neu', 'cb_ruestcode_neu', 'cb_fertigungsart_neu', 'cb_allgemeintoleranz_neu', 'cb_fosGruppe_neu', 'cb_kalkulationsart_neu', 'cb_beschaffungsart_neu', 'cb_mengeneinheit_neu', 'cb_halbzeug_neu', 'cb_dispogruppe_neu', 'cb_dispolaufgruppe_neu', 'cb_hersteller_neu', 'cb_werkstoffdiskrepanz', 'cb_werkstofftyp_neu', 'cb_material_neu', 'cb_oberflaeche_neu', 'cb_farbe_neu', 'cb_speichern', 'cb_migrieren', 'cb_zurücksetzen' ] def callback(self, key, value): if key not in self.callbacks: raise Exception("this callback does not exist "+key) if key == 'cb_pdm_kategorie_neu': pass elif key == 'cb_neuaufbau': pass elif key == 'cb_aus_halbzeug_neu': pass elif key == 'cb_lebenszyklus_status_neu': pass elif key == 'cb_3Dmodel_neu': pass elif key == 'cb_halbzeugOhneSaege_neu': pass elif key == 'cb_ruestcode_neu': pass elif key == 'cb_fertigungsart_neu': pass elif key == 'cb_allgemeintoleranz_neu': pass elif key == 'cb_fosGruppe_neu': pass elif key == 'cb_kalkulationsart_neu': pass elif key == 'cb_beschaffungsart_neu': pass elif key == 'cb_mengeneinheit_neu': pass elif key == 'cb_halbzeug_neu': pass elif key == 'cb_dispogruppe_neu': pass elif key == 'cb_dispolaufgruppe_neu': pass elif key == 'cb_hersteller_neu': pass elif key == 'cb_werkstoffdiskrepanz': pass elif key == 'cb_werkstofftyp_neu': return self.werkstofftyp(value) elif key == 'cb_material_neu': pass elif key == 'cb_oberflaeche_neu': pass elif key == 'cb_farbe_neu': pass elif key == 'cb_speichern': pass elif key == 'cb_migrieren': pass elif key == 'cb_zurücksetzen': pass else: raise Exception("this callback does not exist "+key) def werkstofftyp(self, selected_werkstoff): """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche""" wnamen = self.config.Werkstoffe.get_werkstoffe_of_name(selected_werkstoff) onamen = self.config.Oberfläche.get_oberfläche_of_type(selected_werkstoff) farben = self.config.Farben.get_oberfläche_of_type(selected_werkstoff) # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell ret = { # das Feld selbst mit dem Selektierten beschreiben 'werkstofftyp_neu': selected_werkstoff, # die neuen Inhalte der comboboxen setzen 'cb_material_neu': wnamen, 'cb_oberflaeche_neu': onamen, # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen 'material_neu': wnamen[0], 'oberflaeche_neu': onamen[0], 'farbe_neu': farben[0], } return ret if __name__ == "__main__": pass