Bläddra i källkod

fix: refresh gui Attributes

micha 3 år sedan
förälder
incheckning
cc1b18df62
1 ändrade filer med 179 tillägg och 233 borttagningar
  1. 179 233
      Editor3.py

+ 179 - 233
Editor3.py

@@ -74,6 +74,7 @@ FLASH = 0
 STONY_FX = 0
 LABEL = 0
 SELECT = 0
+ACTIVATE = 0
 CFG_BTN = 0
 POS   = ["PAN","TILT","MOTION"]
 COLOR = ["RED","GREEN","BLUE","COLOR"]
@@ -277,6 +278,7 @@ class Xevent():
             global STONY_FX
             global LABEL
             global SELECT
+            global ACTIVATE 
             global CFG_BTN
             change = 0
             
@@ -491,6 +493,16 @@ class Xevent():
                         else:
                             CFG_BTN = 1
                             self.data.elem_commands[self.attr]["bg"] = "red"
+                elif self.attr == "ACTIVATE": 
+                    global ACTIVATE
+                    if event.num == 1:
+                        if ACTIVATE:
+                            ACTIVATE = 0
+                            self.data.elem_commands[self.attr]["bg"] = "lightgrey"
+                        else:
+                            ACTIVATE = 1
+                            self.data.elem_commands[self.attr]["bg"] = "red"
+                    
                 elif self.attr == "SELECT":
                     global SELECT
                     #global CFG_BTN
@@ -573,77 +585,7 @@ class Xevent():
                 nr = self.attr #int(self.attr.split(":")[1])-1
                 if event.num == 1:
                     if STORE:
-                        print("STORE PRESET")
-                        sdata = {}
-                        sdata["CFG"] = OrderedDict()
-                        sdata["CFG"]["FADE"] = fade
-                        sdata["CFG"]["DEALY"] = 0
-                        sdata["CFG"]["BUTTON"] = "GO"
-                        for fix in self.data.FIXTURES.fixtures:                            
-                            data = self.data.FIXTURES.fixtures[fix]
-                            for attr in data["ATTRIBUT"]:
-                                if data["ATTRIBUT"][attr]["ACTIVE"]:
-                                    if fix not in sdata:
-                                        sdata[fix] = {}
-                                    if attr not in sdata[fix]:
-                                        sdata[fix][attr] = OrderedDict()
-                                        if not STONY_FX:
-                                            sdata[fix][attr]["VALUE"] = data["ATTRIBUT"][attr]["VALUE"]
-                                            #sdata[fix][attr]["FADE"] = fade
-                                        else:
-                                            sdata[fix][attr]["VALUE"] = None #data["ATTRIBUT"][attr]["VALUE"]
-
-                                        if "FX" not in data["ATTRIBUT"][attr]: 
-                                             data["ATTRIBUT"][attr]["FX"] =""
-                                        
-                                        sdata[fix][attr]["FX"] = data["ATTRIBUT"][attr]["FX"] 
-                    
-                        print("sdata",sdata)
-                        
-                        self.data.PRESETS.val_presets[nr] = sdata
-                        if len(sdata) > 1:
-                            fx_color = 0
-                            val_color = 0
-                            for fix in sdata:
-                                if fix == "CFG":
-                                    continue
-                                print( "$$$$",fix,sdata[fix])
-                                for attr in sdata[fix]:
-                                    if "FX" in sdata[fix][attr]:
-                                        if sdata[fix][attr]["FX"]:
-                                            fx_color = 1
-                                    if "VALUE" in sdata[fix][attr]:
-                                        if sdata[fix][attr]["VALUE"] is not None:
-                                            val_color = 1
-
-                            self.data.elem_presets[nr]["fg"] = "black"
-                            if val_color:
-                                self.data.elem_presets[nr]["bg"] = "yellow"
-                                if fx_color:
-                                    self.data.elem_presets[nr]["fg"] = "blue"
-                            else:   
-                                if fx_color:
-                                    self.data.elem_presets[nr]["bg"] = "cyan"
-                        else:
-                            self.data.elem_presets[nr]["fg"] = "black"
-                            self.data.elem_presets[nr]["bg"] = "grey"
-                        #self.data.elem_presets[nr].option_add("*Font", FontBold)
-                        label = ""
-                        if nr in self.data.PRESETS.label_presets:
-                            #print(dir(self.data))
-                            label = self.data.PRESETS.label_presets[nr]
-
-                        BTN="go"
-                        if "CFG" in sdata:#["BUTTON"] = "GO"
-                            if "BUTTON" in sdata["CFG"]:
-                                BTN = sdata["CFG"]["BUTTON"]
-                        txt = str(nr)+":"+str(BTN)+":"+str(len(sdata)-1)+"\n"+label 
-                        self.data.elem_presets[nr]["text"] = txt 
-                        print("GO CFG ",self.data.PRESETS.val_presets)
-                           
-                        self.data.val_commands["STORE"] = 0
-                        STORE = 0
-                        self.data.elem_commands["STORE"]["bg"] = "lightgrey"
+                        self.data.preset_store(nr)
                     elif CFG_BTN:
                         import tkinter.simpledialog
                         txt = tkinter.simpledialog.askstring("CFG-BTN","GO,FLASH,TOGGLE,SWOP\n EXE:"+str(nr))
@@ -679,170 +621,19 @@ class Xevent():
                         self.data.elem_presets[nr]["text"] = txt
                         LABEL = 0
                         self.data.elem_commands["LABEL"]["bg"] = "lightgrey"
+                    elif ACTIVATE:
+                        self.data.preset_select(nr)
+                        self.data.preset_go(nr,xfade=0,event=event)
+                        ACTIVATE = 0
+                        self.data.elem_commands["ACTIVATE"]["bg"] = "lightgrey"
                     elif SELECT:
-                        print("SELECT PRESET")
-                        sdata = self.data.PRESETS.val_presets[nr]
-                        cmd = ""
-                        for fix in sdata:
-                            if fix == "CFG":
-                                continue
-                            for attr in sdata[fix]:
-                                v2 = sdata[fix][attr]["VALUE"]
-                                v2_fx = sdata[fix][attr]["FX"]
-                                #print( self.data.elem_attr)
-                                elem = self.data.elem_attr[fix][attr]
-                                #self#encoder(attr=attr,data=data,elem=elem,action="click")
-                                self.data.FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["ACTIVE"] = 1
-                                elem["bg"] = "yellow"
+                        self.data.preset_select(nr)
                     else:
-                        print("GO PRESET FADE",nr)
-
-                        rdata = self.data.PRESETS.get_raw_map(nr)
-                        cfg   = self.data.PRESETS.get_cfg(nr)
-                        fcmd  = self.data.FIXTURES.update_raw(rdata)
-                        #virtcmd  = self.data.FIXTURES.get_virtual(rdata)
-
-
-                        xFLASH = 0
-                        value=None
-                        xfade = fade
-                        if FLASH or ( "BUTTON" in cfg and cfg["BUTTON"] == "FL"): #FLASH
-                            xFLASH = 1
-                            xfade = 0
-                            if str(event.type) == "ButtonRelease":
-                                if xFLASH:
-                                    value = "off"
-
-                        vvcmd = update_raw_dmx( rdata ,value,[xfade] ) 
-                        fxcmd = update_raw_dmx( rdata ,value,[xfade],fx=1) 
-
-                        cmd = []
-                        for vcmd,d in [[vvcmd,"d"],[fxcmd,"fx"]]:
-                            if xFLASH:
-                                d+="f"
-                            for i,v in enumerate(fcmd):
-                                DMX = fcmd[i]["DMX"]
-                                if DMX and vcmd[i]:
-                                    xcmd = ",{}{}:{}".format(d,DMX,vcmd[i])
-                                    cmd.append( xcmd )
-
-                                if "VIRTUAL" in fcmd[i]:
-                                    for a in fcmd[i]["VIRTUAL"]:
-                                        DMX = fcmd[i]["VIRTUAL"][a]
-                                        if DMX and vcmd[i]:
-                                            xcmd = ",{}{}:{}".format(d,DMX,vcmd[i])
-                                            cmd.append( xcmd )
-
-
-
-                        cmd = "".join(cmd)
-                        
-                        
-                        print("cmd",cmd) 
-                        if cmd:
-                            client.send(cmd )
-
-
-
-                        for i,d in enumerate(rdata):
-                            fix   = d["FIX"]
-                            attr  = d["ATTR"]
-                            v2    = d["VALUE"]
-                            v2_fx = d["FX"]
-
-                            if 0:
-                                xFLASH = 0
-                                if FLASH or ( "BUTTON" in cfg and cfg["BUTTON"] == "FL"): #FLASH
-                                    xFLASH = 1
-                                if str(event.type) == "ButtonRelease":
-                                    if xFLASH:
-                                        cmd+=update_dmx(attr,data,value="off",flash=xFLASH)
-                                        if v2_fx:
-                                            cmd+=update_dmx(attr,data,pfx="fxf",value="off",flash=xFLASH)
-                                else:
-                                    if fade_on:
-                                        xfade = fade
-                                    else:
-                                        xfade = 0
-                                    cmd+=update_dmx(attr,data,args=[xfade],flash=xFLASH)
-                                    if v2_fx:
-                                        cmd+=update_dmx(attr,data,pfx="fx",value=v2_fx,flash=xFLASH)
-                                
+                        self.data.preset_go(nr,event=event)
                         
                 if event.num == 3:
                     if not STORE:
-                        print("GO PRESET FAST")
-                        cfg = self.data.PRESETS.get_cfg(nr)
-                        rdata = self.data.PRESETS.get_raw_map(nr) 
-                        cmd = ""
-                        for i,d in enumerate(rdata):
-                            print("i,d",i,d)
-                            fix   = d["FIX"]
-                            attr  = d["ATTR"]
-                            v2    = d["VALUE"]
-                            v2_fx = d["FX"]
-                            if 1:
-                                if fix in self.data.FIXTURES.fixtures:
-                                    #print("==",self.data.FIXTURES.fixtures[fix]["ATTRIBUT"])
-                                    if attr in self.data.FIXTURES.fixtures[fix]["ATTRIBUT"]:
-                                        data = self.data.FIXTURES.fixtures[fix]
-                                        v=self.data.FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["VALUE"]
-                                        if v2 is not None:
-                                            self.data.FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["VALUE"] = v2
-                                        self.data.elem_attr[fix][attr]["text"] = str(attr)+' '+str(round(v,2))
-                                        if str(event.type) == "ButtonRelease":
-                                            if FLASH :
-                                                cmd+=update_dmx(attr,data,value="off",flash=FLASH)
-                                                if v2_fx:
-                                                    cmd+=update_dmx(attr,data,pfx="fxf",value="off",flash=FLASH)#,flash=FLASH)
-                                        else:
-                                            cmd+=update_dmx(attr,data,args=[0],flash=FLASH)
-                                            if v2_fx:
-                                                cmd+=update_dmx(attr,data,pfx="fx",value=v2_fx,flash=FLASH)#,flash=FLASH)
-                                        #worker.fade_dmx(fix,attr,data,v,v2)
-                                  
-                        print( cmd)
-                        if cmd:
-                            client.send(cmd )
-                    if 0:
-                        print("GO PRESET FAST OLD")
-                        if nr not in self.data.PRESETS.val_presets:
-                            self.data.PRESETS.val_presets[nr] = OrderedDict()
-                            self.data.PRESETS.val_presets[nr]["VALUE"] = None
-                            self.data.PRESETS.val_presets[nr]["FX"] = ""
-                        sdata = self.data.PRESETS.val_presets[nr]
-                        cmd = ""
-                        for fix in sdata:
-                            if fix == "CFG":
-                                continue
-                            for attr in sdata[fix]:
-                                v2 = sdata[fix][attr]["VALUE"]
-                                v2_fx = sdata[fix][attr]["FX"]
-                                #print(fix,attr,v)
-                                if fix in self.data.FIXTURES.fixtures:
-                                    #print("==",self.data.FIXTURES.fixtures[fix]["ATTRIBUT"])
-                                    if attr in self.data.FIXTURES.fixtures[fix]["ATTRIBUT"]:
-                                        data = self.data.FIXTURES.fixtures[fix]
-                                        v=self.data.FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["VALUE"]
-                                        if v2 is not None:
-                                            self.data.FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["VALUE"] = v2
-                                        self.data.elem_attr[fix][attr]["text"] = str(attr)+' '+str(round(v,2))
-                                        if str(event.type) == "ButtonRelease":
-                                            if FLASH :
-                                                cmd+=update_dmx(attr,data,value="off",flash=FLASH)
-                                                if v2_fx:
-                                                    cmd+=update_dmx(attr,data,pfx="fxf",value="off",flash=FLASH)#,flash=FLASH)
-                                        else:
-                                            cmd+=update_dmx(attr,data,args=[0],flash=FLASH)
-                                            if v2_fx:
-                                                cmd+=update_dmx(attr,data,pfx="fx",value=v2_fx,flash=FLASH)#,flash=FLASH)
-                                        #worker.fade_dmx(fix,attr,data,v,v2)
-                                  
-                        if cmd:
-                            client.send(cmd )
-                                        
-                                        
-                                
+                        self.data.preset_go(nr,xfade=0,event=event)
                         
                 return 0
             elif self.mode == "INPUT":
@@ -972,13 +763,14 @@ class Base():
         f = open(xfname,"w")
         for key in data:
             line = data[key]
-            print(line)
+            #print(line)
             label = "label" 
             if key in labels:
                 label = labels[key]
             if label == "Name-"+str(key):
                 label = ""
-            print(xfname,"load",key,label,len(line))
+            #print(xfname,"load",key,label,len(line))
+
             f.write( "{}\t{}\t{}\n".format( key,label,json.dumps(line) ) )
         f.close()
             
@@ -1143,7 +935,7 @@ class GUI(Base):
         self.all_attr =["DIM","VDIM","PAN","TILT"]
         self.elem_attr = {}
         
-        self.commands =["BLIND","CLEAR","STORE","EDIT","","CFG-BTN","LABEL","SELECT"
+        self.commands =["BLIND","CLEAR","STORE","EDIT","","CFG-BTN","LABEL"
                 ,"BACKUP","SET","","","SELECT","ACTIVATE","FLASH","FADE"
                 ,"STONY_FX","FX OFF", "FX:SIN","FX:COS","FX:CIR","SZ:","SP:","OF:"
                 ,"FX:BUM","FX:BUM-","FX:FD","FX:ON","FX:ON-","FX:ON2","FX:ON2-" ]
@@ -1173,6 +965,160 @@ class GUI(Base):
         print("********************************************************")
         self.FIXTURES.backup_patch()
         print("*********del",self,"***********************************************")
+    def refresh_gui(self):
+        for fix in self.FIXTURES.fixtures:                            
+            sdata = self.FIXTURES.fixtures[fix]                            
+            for attr in sdata["ATTRIBUT"]:
+                if "FINE" in attr:
+                    continue
+                v2 = sdata["ATTRIBUT"][attr]["VALUE"]
+                if fix in self.elem_attr:
+                    elem = self.elem_attr[fix][attr]
+                    #print( attr,v2)
+                    elem["text"] = "{} {:0.2f}".format(attr,v2)
+                    if sdata["ATTRIBUT"][attr]["ACTIVE"]:
+                        elem["bg"] = "yellow"
+                    else:
+                        elem["bg"] = "grey"
+
+    def preset_store(self,nr):
+        print("STORE PRESET")
+        self.val_commands["STORE"] = 0
+        global STORE
+        STORE = 0
+        self.elem_commands["STORE"]["bg"] = "lightgrey"
+
+        sdata = {}
+        sdata["CFG"] = OrderedDict()
+        sdata["CFG"]["FADE"] = fade
+        sdata["CFG"]["DEALY"] = 0
+        sdata["CFG"]["BUTTON"] = "GO"
+        for fix in self.FIXTURES.fixtures:                            
+            data = self.FIXTURES.fixtures[fix]
+            for attr in data["ATTRIBUT"]:
+                if data["ATTRIBUT"][attr]["ACTIVE"]:
+                    if fix not in sdata:
+                        sdata[fix] = {}
+                    if attr not in sdata[fix]:
+                        sdata[fix][attr] = OrderedDict()
+                        if not STONY_FX:
+                            sdata[fix][attr]["VALUE"] = data["ATTRIBUT"][attr]["VALUE"]
+                            #sdata[fix][attr]["FADE"] = fade
+                        else:
+                            sdata[fix][attr]["VALUE"] = None #data["ATTRIBUT"][attr]["VALUE"]
+
+                        if "FX" not in data["ATTRIBUT"][attr]: 
+                             data["ATTRIBUT"][attr]["FX"] =""
+                        
+                        sdata[fix][attr]["FX"] = data["ATTRIBUT"][attr]["FX"] 
+    
+        print("sdata",len(sdata))
+        
+        self.PRESETS.val_presets[nr] = sdata
+        if len(sdata) > 1:
+            fx_color = 0
+            val_color = 0
+            for fix in sdata:
+                if fix == "CFG":
+                    continue
+                print( "$$$$",fix,sdata[fix])
+                for attr in sdata[fix]:
+                    if "FX" in sdata[fix][attr]:
+                        if sdata[fix][attr]["FX"]:
+                            fx_color = 1
+                    if "VALUE" in sdata[fix][attr]:
+                        if sdata[fix][attr]["VALUE"] is not None:
+                            val_color = 1
+
+            self.elem_presets[nr]["fg"] = "black"
+            if val_color:
+                self.elem_presets[nr]["bg"] = "yellow"
+                if fx_color:
+                    self.elem_presets[nr]["fg"] = "blue"
+            else:   
+                if fx_color:
+                    self.elem_presets[nr]["bg"] = "cyan"
+        else:
+            self.elem_presets[nr]["fg"] = "black"
+            self.elem_presets[nr]["bg"] = "grey"
+        #self.elem_presets[nr].option_add("*Font", FontBold)
+        label = ""
+        if nr in self.PRESETS.label_presets:
+            #print(dir(self.data))
+            label = self.PRESETS.label_presets[nr]
+
+        BTN="go"
+        if "CFG" in sdata:#["BUTTON"] = "GO"
+            if "BUTTON" in sdata["CFG"]:
+                BTN = sdata["CFG"]["BUTTON"]
+        txt = str(nr)+":"+str(BTN)+":"+str(len(sdata)-1)+"\n"+label 
+        self.elem_presets[nr]["text"] = txt 
+        #print("GO CFG ",self.PRESETS.val_presets)
+           
+
+    def preset_select(self,nr):
+        print("SELECT PRESET")
+        sdata = self.PRESETS.val_presets[nr]
+        cmd = ""
+        for fix in sdata:
+            if fix == "CFG":
+                continue
+            for attr in sdata[fix]:
+                v2 = sdata[fix][attr]["VALUE"]
+                v2_fx = sdata[fix][attr]["FX"]
+                #print( self.data.elem_attr)
+                if fix in self.elem_attr:
+                    elem = self.elem_attr[fix][attr]
+                    #self#encoder(attr=attr,data=data,elem=elem,action="click")
+                    self.FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["ACTIVE"] = 1
+                    elem["bg"] = "yellow"
+    def preset_go(self,nr,xfade=fade,event=None):
+        print("GO PRESET FADE",nr)
+
+        rdata = self.PRESETS.get_raw_map(nr)
+        cfg   = self.PRESETS.get_cfg(nr)
+        fcmd  = self.FIXTURES.update_raw(rdata)
+        #virtcmd  = self.data.FIXTURES.get_virtual(rdata)
+
+
+        xFLASH = 0
+        value=None
+        #xfade = fade
+        if FLASH or ( "BUTTON" in cfg and cfg["BUTTON"] == "FL"): #FLASH
+            xFLASH = 1
+            xfade = 0
+            if event:
+                if str(event.type) == "ButtonRelease":
+                    if xFLASH:
+                        value = "off"
+
+        vvcmd = update_raw_dmx( rdata ,value,[xfade] ) 
+        fxcmd = update_raw_dmx( rdata ,value,[xfade],fx=1) 
+
+        cmd = []
+        for vcmd,d in [[vvcmd,"d"],[fxcmd,"fx"]]:
+            if xFLASH:
+                d+="f"
+            for i,v in enumerate(fcmd):
+                DMX = fcmd[i]["DMX"]
+                if DMX and vcmd[i]:
+                    xcmd = ",{}{}:{}".format(d,DMX,vcmd[i])
+                    cmd.append( xcmd )
+
+                if "VIRTUAL" in fcmd[i]:
+                    for a in fcmd[i]["VIRTUAL"]:
+                        DMX = fcmd[i]["VIRTUAL"][a]
+                        if DMX and vcmd[i]:
+                            xcmd = ",{}{}:{}".format(d,DMX,vcmd[i])
+                            cmd.append( xcmd )
+
+        cmd = "".join(cmd)
+        print("cmd",cmd) 
+        if cmd:
+            client.send(cmd )
+        
+        self.refresh_gui()
+
         
     def draw_dim(self,fix,data,c=0,r=0,frame=None):
         i=0