diff --git a/lib/caditem.py b/lib/caditem.py index 6a9b4e7..d099f2d 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -124,10 +124,12 @@ class CadItem(DataModel): "cb_oberflaeche_neu", "cb_farbe_neu", # buttons - "cb_suche_asm", "cb_speichern", "cb_migrieren", + "cb_suche_asm", "cb_zurücksetzen", + "cb_ladelokal_asm", + "cb_3dsuchen", ] # dies sind die Excel Headel der SIVAS csv Export Datei @@ -770,14 +772,22 @@ class GuiLogic(): ret["bezeichnung1_neu"] = text[0:maxlen] return ret - def cb_neuaufbau(self, trueOrfalse): + def cb_neuaufbau(self, selected): ret = dict() + pdm_kat = self._model.get_gui_data("pdm_kategorie_neu") - if pdm_kat == "Einzelteil" or pdm_kat == "Kaufteil": - if not trueOrfalse is None: - ret["neuaufbau"] = trueOrfalse + if pdm_kat != "Einzelteil" and pdm_kat != "Kaufteil": + self.set_state('neuaufbau', 'disabled') else: - ret["neuaufbau"] = False + self.set_state('neuaufbau', 'normal') + + if selected is None: + # Default Vorbelegung + if pdm_kat != "Einzelteil" and pdm_kat != "Kaufteil": + ret['neuaufbau'] = False + else: + ret['neuaufbau'] = selected + return ret def cb_aus_halbzeug_neu(self, trueOrfalse): @@ -794,13 +804,16 @@ class GuiLogic(): ret["halbzeugnummer_neu"] = '' aus_halbzeug = ret["aus_halbzeug_neu"] if aus_halbzeug == True: + self.set_state('halbzeugnummer_neu', 'normal') # wenn Kind der aktuellen Teilenummer in RD_Teilenummern.csv ist, dann anzeigen current_id = self._model.get_current_item_id() child_id = self._model.get_child_of_id(current_id) if child_id is not None: - Teilenummern = self._config.TeileNummern.get_ruledesigner_ids() + Teilenummern = self._config.get_ruledesigner_ids() if child_id in Teilenummern: ret["halbzeugnummer_neu"] = child_id + else: + self.set_state('halbzeugnummer_neu', 'disabled') return ret @@ -876,12 +889,16 @@ class GuiLogic(): # Dropdownwerte = keine # state_ComboBox = disabled # state_Button = disabled + self.set_state('cb_3Dmodel_neu', 'disabled') + self.set_state('cb_3dsuchen', 'disabled') elif pdm_kategorie_neu == "Kaufteil": pfad = self._config.Pfade.get('3D-Modelle', 'Kaufteil') ret['cb_3Dmodel_neu'] = [pfad] # Dropdownwerte = keine # state_ComboBox = disabled # state_Button = disabled + self.set_state('cb_3Dmodel_neu', 'disabled') + self.set_state('cb_3dsuchen', 'disabled') elif pdm_kategorie_neu == "Einzelteil": aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu") neuaufbau = self._model.get_gui_data("neuaufbau") @@ -891,6 +908,8 @@ class GuiLogic(): # Dropdownwerte = keine # state_ComboBox = disabled # state_Button = disabled + self.set_state('cb_3Dmodel_neu', 'disabled') + self.set_state('cb_3dsuchen', 'disabled') else: search_path = self._config.Pfade.get('3D-Modelle', 'EinzelteilDefault') itemid = str(self._model.get_current_item_id()) @@ -900,6 +919,8 @@ class GuiLogic(): for root, dirnames, filenames in os.walk(search_path): 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. + self.set_state('cb_3Dmodel_neu', 'readonly') + self.set_state('cb_3dsuchen', 'normal') # state_ComboBox = readonly # state_Button = keiner ret['cb_3Dmodel_neu'] = pfade diff --git a/lib/gui.py b/lib/gui.py index 00db949..7844000 100644 --- a/lib/gui.py +++ b/lib/gui.py @@ -79,28 +79,47 @@ class TreeView(): for c in self.tree.get_children(): self.tree.delete(c) + def _has_childs(self, sid, parent_children_mapping): + '''gibt zurück ob sid ein ein Zwischenknoten eines Baume ist, also kein Blatt hat''' + for parent,children in parent_children_mapping.items(): + if sid == parent: + return True + return False + def create(self, parent_children_mapping, red_ids): # adding data of first column after root - pool = set() - for parent,children in parent_children_mapping.items(): - if parent not in pool: - self.tree.insert('', tk.END, text=parent, iid=parent, open=True) - pool.add(parent) - cn = children - # sortiere die Zahlen im Baum immer aufsteigend - cn.sort(reverse=True) - for child_id in cn: - if child_id not in pool: - pool.add(child_id) - if child_id not in red_ids: rowtags = ('good') - else: rowtags = ('missing') - self.tree.insert('', tk.END, text=child_id, iid=child_id, tags=rowtags, open=True) - #self.tree.move(child_id, parent, 0) + pool = dict() + for parent, children in parent_children_mapping.items(): + parent_text = parent + # parent erzeugen, falls es diese nicht schon gibt + if parent_text not in pool: + parent_id = self.tree.insert('', tk.END, text=parent_text, open=True) + pool[parent_text] = parent_id + else: + parent_id = pool[parent_text] - # einmal über alles gehen und alle keys an die richtige Stelle schieben - for parent,children in parent_children_mapping.items(): - for child_id in children: - self.tree.move(child_id, parent, 0) + for child in children: + child_text = child + if child_text not in red_ids: rowtags = ('good') + else: rowtags = ('missing') + if self._has_childs(child_text, parent_children_mapping) == True: + # wenn das Objekt ein Kind hat, könnte es bereits erzeugt worden sein + if child_text not in pool: + child_id = self.tree.insert('', tk.END, text=child_text, tags=rowtags, open=True) + pool[child_text] = child_id + self.tree.move(child_id, parent_id, 0) + else: + # die Blätter des Baumes kann man bedenkenlos bauen + child_id = self.tree.insert('', tk.END, text=child_text, tags=rowtags, open=True) + self.tree.move(child_id, parent_id, 0) + pool[child_text] = child_id + + + + # # einmal über alles gehen und alle keys an die richtige Stelle schieben + # for parent,children in parent_children_mapping.items(): + # for child_id in children: + # self.tree.move(child_id, parent, 0) # https://www.askpython.com/python-modules/tkinter/tkinter-colors #self.tree.tag_configure('good', background='LawnGreen') @@ -280,16 +299,16 @@ class RightFramePDM(AllFrames): halbzeugnummer_label = ttk.Label(frame, text="Halbzeugnummer:" ) halbzeugnummer_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugnummer_neu = tk.StringVar() - halbzeugnummer_neu_entry = ttk.Entry(frame, textvariable=self.halbzeugnummer_neu, width=AllFrames.get_entry_text_width(self)) - halbzeugnummer_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) + self.halbzeugnummer_neu_entry = ttk.Entry(frame, textvariable=self.halbzeugnummer_neu, width=AllFrames.get_entry_text_width(self)) + self.halbzeugnummer_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Halbzeuglänge halbzeuglaenge_label = ttk.Label(frame, text="Halbzeuglänge:" ) halbzeuglaenge_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeuglaenge_neu = tk.StringVar() - halbzeuglaenge_neu_entry = ttk.Entry(frame, textvariable=self.halbzeuglaenge_neu, width=AllFrames.get_entry_text_width(self)) - halbzeuglaenge_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) + self.halbzeuglaenge_neu_entry = ttk.Entry(frame, textvariable=self.halbzeuglaenge_neu, width=AllFrames.get_entry_text_width(self)) + self.halbzeuglaenge_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # HalbzeugOberfläche @@ -334,8 +353,8 @@ class RightFramePDM(AllFrames): self.rownum += 1 #lambda: self.callback("cb_speichern", None) - suche3d_button = ttk.Button(frame, text="Durchsuchen..", command=lambda: self.callback("cb_3dsuchen", None)) - suche3d_button.grid(column=col_left+2, row=self.rownum, sticky=tk.EW) + self.suche3d_button = ttk.Button(frame, text="Durchsuchen..", command=lambda: self.callback("cb_3dsuchen", None)) + self.suche3d_button.grid(column=col_left+2, row=self.rownum, sticky=tk.EW) self.rownum += 1 @@ -396,9 +415,30 @@ class RightFramePDM(AllFrames): def set_states(self): data = self.get_controller().get_gui_states() - pass - # if 'teilenummer' in data: - # self.teilenummer_text["state"] = data['teilenummer'] + # if 'datenbank' in data: + # self.datenbank['state'] = data["datenbank"] + if 'neuaufbau' in data: + self.neuaufbau_checkbutton['state'] = data["neuaufbau"] + if 'halbzeugnummer_neu' in data: + self.halbzeugnummer_neu_entry['state'] = data["halbzeugnummer_neu"] + if 'halbzeuglaenge_neu' in data: + self.halbzeuglaenge_neu_entry['state'] = data["halbzeuglaenge_neu"] + if 'aus_halbzeug_neu' in data: + self.aushalbzeug_checkbutton['state'] = data["aus_halbzeug_neu"] + # ab hier die Dropdowns der Oberfläche + if 'cb_pdm_kategorie_neu' in data: + self.pdmkategorie_combo['state'] = data["cb_pdm_kategorie_neu"] + if 'cb_lebenszyklus_status_neu' in data: + self.lebenszyklusstatus_combo['state'] = data["cb_lebenszyklus_status_neu"] + if 'cb_halbzeugoberflaeche' in data: + self.halbzeugoberflaeche_combo['state'] = data["cb_halbzeugoberflaeche"] + if 'cb_halbzeugfarbe' in data: + self.halbzeugfarbe_combo['state'] = data["cb_halbzeugfarbe"] + if 'cb_3Dmodel_neu' in data: + self.model3d_combo['state'] = data["cb_3Dmodel_neu"] + # buttons + if 'cb_3dsuchen' in data: + self.suche3d_button['state'] =data["cb_3dsuchen"] class RightFrameBezeichnung(AllFrames): def __init__(self, frame, nrow=0): diff --git a/lib/manage_configs.py b/lib/manage_configs.py index 8858b09..dc1fa12 100644 --- a/lib/manage_configs.py +++ b/lib/manage_configs.py @@ -458,7 +458,7 @@ class Configs: self.TOSGruppen = TOSGroupsConfig(cfg_dir) self.Materialien = MaterialTransConfig(cfg_dir) - self.TeileNummern = None + self._TeileNummern = None self._env = None def get_cfg_path(self): @@ -476,4 +476,10 @@ class Configs: if self._env: return self._env return None + + def get_ruledesigner_ids(self): + if not self._TeileNummern: + self._TeileNummern = RuleDesignerDatabaseConfig(self._env.data_dir).get_ruledesigner_ids() + return self._TeileNummern +