Ver Fonte

fix: FixtureEditor PATCH Work's ! some bug's ! restart..

micha há 1 ano atrás
pai
commit
34cc74df07
2 ficheiros alterados com 171 adições e 47 exclusões
  1. 54 44
      _LibreLightDesk.py
  2. 117 3
      tkgui/GUI.py

+ 54 - 44
_LibreLightDesk.py

@@ -2662,7 +2662,7 @@ class MASTER():
 
                 if "FX2" not in row: # insert FX2 excetption
                     row["FX2"] = OrderedDict()
-                    
+                print("row",fix,row)    
                 if row["FX"]:
                     _buff["fg"] = "blue"
                 elif row["FX2"]:
@@ -3330,6 +3330,53 @@ def _load_fixture_list(mode="None"):
 
 
 
+def FIXTURE_CHECK_SDATA(ID,sdata):
+    print("FIXTURE_CHECK_SDATA",ID)
+    new_f = OrderedDict()
+    #print("++++")
+    for k,j in sdata.items():
+        overide=0 # only for repair
+        if overide:
+            if k in ["TYPE","VENDOR"]: #ignor
+                continue
+        new_f[k] = j
+        if k =="NAME":
+            #print("AAAADDDDDD")
+            if "TYPE" not in sdata and not overide:
+                if len( sdata["ATTRIBUT"]) == 1:
+                    new_f["TYPE"] = "DIMMER"
+                elif "PAN" in sdata["ATTRIBUT"]:
+                    new_f["TYPE"] = "MOVER"
+                elif "RED" in sdata["ATTRIBUT"] and len(sdata["ATTRIBUT"]) == 3:
+                    new_f["TYPE"] = "RGB"
+                elif "RED" in sdata["ATTRIBUT"]:
+                    new_f["TYPE"] = "LED"
+                elif "CYAN" in sdata["ATTRIBUT"]:
+                    new_f["TYPE"] = "COLOR"
+                else:
+                    new_f["TYPE"] = ""
+            if "VENDOR" not in sdata and not overide:
+                new_f["VENDOR"] = ""
+
+        #print(k,j)#,sdata)
+    sdata = new_f
+    if "ACTIVE" not in sdata:
+        sdata["ACTIVE"] = 0
+    sdata["ATTRIBUT"]["_ACTIVE"] = OrderedDict()
+    sdata["ATTRIBUT"]["_ACTIVE"]["NR"] = 0
+    sdata["ATTRIBUT"]["_ACTIVE"]["ACTIVE"] = 1
+    sdata["ATTRIBUT"]["_ACTIVE"]["VALUE"] = 0
+    sdata["ATTRIBUT"]["_ACTIVE"]["FX2"] = {}
+    sdata["ATTRIBUT"]["_ACTIVE"]["FX"] = {}
+
+    for attr in sdata["ATTRIBUT"]:
+        sdata["ATTRIBUT"][attr]["ACTIVE"] = 0
+    #print("load",filename,sdata)
+    #if "CFG" not in sdata:
+    #    sdata["CFG"] = OrderedDict()
+    if "ID" not in sdata:
+        sdata["ID"] = str(ID)
+    return sdata
 
 
 class Fixtures():
@@ -3340,7 +3387,7 @@ class Fixtures():
         self.fixtures = OrderedDict()
         self.gui = GUIHandler()
 
-        
+
     def load_patch(self):
         filename="patch"
         #self.base._init()
@@ -3348,46 +3395,9 @@ class Fixtures():
         self.fixtures = OrderedDict()
         for i in l:
             sdata = d[i]
-            new_f = OrderedDict()
-            #print("++++")
-            for k,j in sdata.items():
-                overide=0 # only for repair
-                if overide:
-                    if k in ["TYPE","VENDOR"]: #ignor
-                        continue
-                new_f[k] = j
-                if k =="NAME":
-                    #print("AAAADDDDDD")
-                    if "TYPE" not in sdata and not overide:
-                        if len( sdata["ATTRIBUT"]) == 1:
-                            new_f["TYPE"] = "DIMMER"
-                        elif "PAN" in sdata["ATTRIBUT"]:
-                            new_f["TYPE"] = "MOVER"
-                        elif "RED" in sdata["ATTRIBUT"] and len(sdata["ATTRIBUT"]) == 3:
-                            new_f["TYPE"] = "RGB"
-                        elif "RED" in sdata["ATTRIBUT"]:
-                            new_f["TYPE"] = "LED"
-                        elif "CYAN" in sdata["ATTRIBUT"]:
-                            new_f["TYPE"] = "COLOR"
-                        else:
-                            new_f["TYPE"] = ""
-                    if "VENDOR" not in sdata and not overide:
-                        new_f["VENDOR"] = ""
-
-                #print(k,j)#,sdata)
-            sdata = new_f
-            if "ACTIVE" not in sdata:
-                sdata["ACTIVE"] = 0
-            sdata["ATTRIBUT"]["_ACTIVE"] = OrderedDict()
-            sdata["ATTRIBUT"]["_ACTIVE"]["NR"] = 0
-            sdata["ATTRIBUT"]["_ACTIVE"]["ACTIVE"] = 1
-            sdata["ATTRIBUT"]["_ACTIVE"]["VALUE"] = 0
+            #sdata = self._repair_sdata(sdata)
+            sdata = FIXTURE_CHECK_SDATA(i,sdata)
 
-            for attr in sdata["ATTRIBUT"]:
-                sdata["ATTRIBUT"][attr]["ACTIVE"] = 0
-            #print("load",filename,sdata)
-            #if "CFG" not in sdata:
-            #    sdata["CFG"] = OrderedDict()
             self.fixtures[str(i)] = sdata
         #PRESETS.label_presets = l
         self.fx_off("all")
@@ -3795,7 +3805,7 @@ class Fixtures():
 
 
 
-def CFG_CHECKER(sdata):
+def PRESET_CFG_CHECKER(sdata):
     "repair CFG  "
     ok = 0
     if "CFG" not in sdata:
@@ -3845,7 +3855,7 @@ class Presets():
         d,l = self.base._load(filename)
         for i in d:
             sdata = d[i]
-            ok = CFG_CHECKER(sdata)
+            ok = PRESET_CFG_CHECKER(sdata)
 
         self.val_presets = d
         self.label_presets = l
@@ -3868,7 +3878,7 @@ class Presets():
     def _check_cfg(self,sdata):
         cprint("PRESETS._check_cfg()")#,color="red")
 
-        ok = CFG_CHECKER(sdata)
+        ok = PRESET_CFG_CHECKER(sdata)
 
         if ok:
             cprint("REPAIR CFG's",ok,sdata["CFG"],color="red")

+ 117 - 3
tkgui/GUI.py

@@ -845,13 +845,13 @@ class GUI_FixtureEditor():
         self.pw = None
         self.header=[]
         self.data = data
+        self.fixture = []
         self.title = title
         self.width = width
         #cprint("GUI:",root,title)
         self.root = root
         self.frame = frame
         self.draw()
-
     def draw(self):
         root = self.frame
 
@@ -953,7 +953,7 @@ class GUI_FixtureEditor():
         self.b.grid(row=r,column=c)
 
         r+=1
-        self.b = tk.Button(self.frame,bg="lightblue",text="1", width=4)#,command=self.event) #bv.change_dmx)
+        self.b = tk.Button(self.frame,bg="lightblue",text="4", width=4)#,command=self.event) #bv.change_dmx)
         #self.entry_qty=self.b
         self.qty=self.b
         self.b["command"] = self.set_qty
@@ -1108,7 +1108,115 @@ class GUI_FixtureEditor():
         dialog._cb = _cb
         dialog.askstring("QTY:","QTY:",initialvalue=txt)
     def do_patch(self,_event=None):
-        r=tkinter.messagebox.showwarning(message="PACH FIXTURE \nnot implemented",parent=None)
+        qty = int(self.qty["text"])
+        ID = int(self.fixid["text"])
+        univ = self.univ #int(self.univ["text"])
+        dmx = self.dmx #int(self.dmx["text"])
+        name = self.name["text"]
+        name_nr = ""
+        if "-" in name:
+            try:
+                name_nr = name.split("-")[-1]
+                name_nr = int(name_nr)
+                name = name.split("-")[:-1]
+                name = "-".join(name)
+            except:
+                name_nr = ""
+        
+        if name_nr == '':
+            if ID:
+                name_nr = ID
+            else:
+                name_nr = 9000
+        name_nr=int(name_nr)
+        print("do_patch",dmx,univ,qty)
+        DMX = dmx #univ*512 + dmx 
+        fixture = {"DMX": DMX, "UNIVERS": univ, "NAME": "D1", "TYPE": "", "VENDOR": "", "ATTRIBUT": {} , "ACTIVE": 0}
+        ATTR = []
+        max_nr = 0
+        for fader in self.fader_elem:
+            #print("patch -",fader)
+            attr = fader.attr["text"]
+            nr = fader.elem_nr["text"]
+            if nr == '':
+                continue
+            if nr == "off":
+                nr = -1
+            nr = int(nr)
+            mode = fader.mode["text"]
+            val = float(fader.elem_fader.get())
+            if not attr:
+                continue
+            if attr.startswith("EMPTY"):
+                continue
+            ATTR = OrderedDict()
+            ATTR["NR"] = nr
+            ATTR["MASTER"] = "0"
+            ATTR["MODE"] = mode
+            ATTR["VALUE"] = val
+            ATTR["ACTIVE"] = 0
+            ATTR["FX"] = ""
+            ATTR["FX2"] =  {}
+            print("patch --",nr,mode,attr)
+
+            fixture["ATTRIBUT"][attr] = ATTR
+            if nr > max_nr:
+                max_nr = nr
+
+        ok = 1
+        out=[]
+        err = []
+        err2 = []
+        sucess = []
+        for i in range(qty):
+            fixture = copy.deepcopy(fixture)
+            print("i",i)
+            fixture["NAME"] = name + "-{:0>4}".format(name_nr)
+            fixture["ID"] = ID 
+            print(fixture)
+            sdata = _M.FIXTURE_CHECK_SDATA(ID,fixture)
+            #out.append(sdata)
+            out.append(fixture)
+            if str(ID) in _M.FIXTURES.fixtures:
+                ok = 0
+                err.append(" ID '{}' is in use ! ".format(ID))
+
+            if ATTR:
+                sucess.append("ID '{}' DMX:{} UNIV:{}".format(ID,fixture["DMX"],fixture["UNIVERS"]))
+            else:
+                ok = 0
+                err2.append(" NO 'attributes'  ID:'{}' ! ".format(ID))
+
+            #print("OK:",ok)
+            #--------
+            name_nr += 1
+            ID += 1
+            fixture["DMX"] += max_nr
+        print("OK:",ok)
+        print()
+        if err:
+            #r=tkinter.messagebox.showwarning(message="PACH FIXTURE \nnot implemented",parent=None)
+            r=tkinter.messagebox.askyesno(message="PACH ERROR '"+name+"'\n\n"+"\n".join(err)+"\n\n ",title="cancel/Abbruch",parent=None)
+            print("err",r)
+            if r: # exit if yes
+                return
+
+        if err2:
+            r=tkinter.messagebox.showwarning(message="PACH ERROR '"+name+"'\n\n"+"\n".join(err2)+"\n\n ",title="Error",parent=None)
+            return
+
+        if sucess:
+            r=tkinter.messagebox.askyesno(message="PACH OK '"+name+"'\n\n"+"\n".join(sucess),title="Execute/Ausführen",parent=None)
+            print("yes no" ,r )
+            if r:
+                for fix in out:
+                    print(";;",fix)
+                    k = str(fix["ID"])
+                    v = fix
+                    _M.FIXTURES.fixtures[k] = v
+
+
+
     def set_fixid(self,_event=None):
         txt = self.fixid["text"]
         def _cb(data):
@@ -1190,6 +1298,8 @@ class GUI_FixtureEditor():
                         continue
                     if fixture["NAME"] != args["val"]:
                         continue
+                    
+                    self.fixture = fixture
 
                     print("a    :",k,str(fixture)[:220],"...")
                     #print("a    ::",type(k),":",type(fixture))
@@ -1490,6 +1600,9 @@ class ELEM_FADER():
                     txt = "off"
                     self.attr["bg"] = "#fa0"
                     self.elem_nr["bg"] = "#fa0"
+                else:
+                    self.attr["bg"] = "lightblue"
+                    self.elem_nr["bg"] = "lightblue"
             except:pass
             self.elem_nr["text"] = "{}".format(txt)
         if self._cb:
@@ -1529,6 +1642,7 @@ class ELEM_FADER():
         self.elem.append(self.b)
         
         self.b = tk.Scale(frameS,bg="#ffa", width=28,from_=from_,to=to,command=self.fader_event)
+        self.elem_fader = self.b
         self.b.pack(fill=tk.Y, side=tk.TOP)
         if init is not None:
             self.b.set(init)