Prechádzať zdrojové kódy

fix: GUI_FADER add: EXEC-WING add Label,btn=preset_go(nr+80)

micha 1 rok pred
rodič
commit
08c9586c96
2 zmenil súbory, kde vykonal 210 pridanie a 127 odobranie
  1. 147 104
      _LibreLightDesk.py
  2. 63 23
      tkgui/GUI.py

+ 147 - 104
_LibreLightDesk.py

@@ -292,7 +292,7 @@ INT   = ["DIM","SHUTTER","STROBE","FUNC"]
 #client = chat.tcp_sender(port=50001)
 
 
-def set_exec_fader(nr,val,color=""):
+def set_exec_fader(nr,val,label="",color=""):
     exec_wing = window_manager.get_obj(name="EXEC-WING") 
     if not exec_wing: 
         return
@@ -300,6 +300,18 @@ def set_exec_fader(nr,val,color=""):
     #print(exec_wing)
     try:
         exec_wing.set_fader(nr,val,color=color)
+        print(dir(exec_wing.fader_elem[0]))
+        print((exec_wing))
+        if len(exec_wing.fader_elem) > nr:
+            exec_wing.fader_elem[nr].attr["text"] =  label
+            cfg = get_exec_btn_cfg(nr+80)
+            if cfg:
+                exec_wing.fader_elem[nr].attr["bg"] = cfg["bg"]
+                exec_wing.fader_elem[nr].attr["fg"] = cfg["fg"]
+
+
+
+
     except Exception as e:
         cprint("- exception:",e)
     #print("remote in:",round(time.time(),0),"x",i,v)
@@ -307,7 +319,11 @@ def set_exec_fader(nr,val,color=""):
 def set_exec_fader_all():
     cprint( "set_exec_fader_all()",color="green")
     for nr in range(10):
-        set_exec_fader(nr,0) #,color="#fff")
+        _label = PRESETS.label_presets[nr+80] # = label
+        print("_label",_label)
+        set_exec_fader(nr,0,label=_label) #,color="#fff")
+        #sys.exit()
+
 
 # remote input - start (memcached)
 def JCB(x,sock=None):
@@ -2093,6 +2109,7 @@ class Base():
                 cprint("file:{}".format(xfname),color="red")
                 continue
             key,label,rdata = line.split("\t",2)
+            print(line)
             key = int(key)
 
             jdata = json.loads(rdata,object_pairs_hook=OrderedDict)
@@ -2188,6 +2205,123 @@ class cb():
         cprint(color)
         cprint( hex_to_rgb(color[1:]))
 
+def get_exec_btn_cfg(nr):
+    #b.configure(fg=_fg,bg=_bg,activebackground=_ba,text=_text)
+    #for k in PRESETS.val_presets: 
+    k = nr
+    if 1:
+        _bg = "grey"
+        _ba = "grey"
+        _fg = "lightgrey"
+        _text = "N/V"
+
+        if nr >= 0:
+            #if self._nr_ok:
+            #    return #pass#abreak
+            if nr != k:
+                return #continue
+            #else:
+            #    self._nr_ok = 1
+
+
+        label = ""
+
+        #if k not in self.elem_presets:
+        #    cprint("ERROR",k ,"not in elem_presets continue")
+        #    return #continue
+        if k in PRESETS.label_presets:
+            label = PRESETS.label_presets[k]
+            #print([label])
+        #b = self.elem_presets[k]
+        
+        ifval = 0
+        fx_only = 0
+        if k in PRESETS.val_presets and len(PRESETS.val_presets[k]) :
+            sdata = PRESETS.val_presets[k]
+
+            #print("sdata7654",sdata)
+            BTN="go"
+            if "CFG" in sdata:#["BUTTON"] = "GO"
+                if "BUTTON" in sdata["CFG"]:
+                    BTN = sdata["CFG"]["BUTTON"]
+            #txt=str(k+1)+" "+str(BTN)+" "+str(len(sdata)-1)+"\n"+label
+            txt="{} {} {}\n{}".format(k+1,BTN,len(sdata)-1,label)
+            _text = txt
+            #if b.text != txt: # TODO
+            #    #txt+=str(self._XX)
+            #    #b.configure(text= txt)
+            #    _text = txt
+            #    _bg="yellow"
+            #    _ba="yellow"
+
+            if len(sdata) > 1:
+                ifval = 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 "FX2" in sdata[fix][attr]:
+                            if sdata[fix][attr]["FX2"]:
+                                fx_color = 1
+                        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
+
+                #try:b.configure(fg= "black")
+                #except:pass
+                if val_color:
+                    _bg = "gold"
+                    _ba = "#ffaa55"
+                    if fx_color:
+                        _fg = "blue"
+                else:   
+                    if fx_color:
+                        fx_only = 1
+            else:
+                _bg = "grey"
+                _ba = "#aaa"
+
+
+        if "\n" in txt:
+            txt1 = txt.split("\n")[0]
+
+        _fg = "black"
+        if ifval:
+            if fx_only:
+                _bg = "cyan"
+                _ba = "#55d4ff"
+
+            if "SEL" in txt1:
+                #b.configure(bg="#77f")
+                _bg = "#77f"
+        else: 
+            _bg = "grey"
+            _fg = "darkgrey"
+
+            if "SEL" in txt1:
+                _fg = "blue"
+            elif "ON" in txt1:
+                _fg = "#040"
+            elif "GO" in txt1:
+                _fg = "#555"
+
+        if "FL" in txt1:
+            _fg = "#00e"
+        
+        out = {}
+        out["bg"] = _bg
+        out["ba"] = _ba
+        out["fg"] = _fg
+        out["text"] = _text
+        
+        return out
+        #b.configure(fg=_fg,bg=_bg,activebackground=_ba,text=_text)
 
 class Elem_Container():
     def __init__(self):
@@ -2364,112 +2498,21 @@ class MASTER():
         
         self._XX +=1
         self._nr_ok = 0
-        for k in PRESETS.val_presets: 
-            _bg = "grey"
-            _ba = "grey"
-            _fg = "lightgrey"
-            _text = "N/V"
-
-            if nr >= 0:
-                if self._nr_ok:
-                    break
-                if nr != k:
-                    continue
-                else:
-                    self._nr_ok = 1
-
 
-            label = ""
-
-            if k not in self.elem_presets:
-                cprint("ERROR",k ,"not in elem_presets continue")
-                continue
-            if k in PRESETS.label_presets:
-                label = PRESETS.label_presets[k]
-                #print([label])
-            b = self.elem_presets[k]
-            
-            ifval = 0
-            fx_only = 0
-            if k in PRESETS.val_presets and len(PRESETS.val_presets[k]) :
-                sdata = PRESETS.val_presets[k]
-
-                #print("sdata7654",sdata)
-                BTN="go"
-                if "CFG" in sdata:#["BUTTON"] = "GO"
-                    if "BUTTON" in sdata["CFG"]:
-                        BTN = sdata["CFG"]["BUTTON"]
-                #txt=str(k+1)+" "+str(BTN)+" "+str(len(sdata)-1)+"\n"+label
-                txt="{} {} {}\n{}".format(k+1,BTN,len(sdata)-1,label)
-                _text = txt
-                if b.text != txt: # TODO
-                    #txt+=str(self._XX)
-                    #b.configure(text= txt)
-                    _text = txt
-                    _bg="yellow"
-                    _ba="yellow"
-
-                if len(sdata) > 1:
-                    ifval = 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 "FX2" in sdata[fix][attr]:
-                                if sdata[fix][attr]["FX2"]:
-                                    fx_color = 1
-                            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
-
-                    try:b.configure(fg= "black")
-                    except:pass
-                    if val_color:
-                        _bg = "gold"
-                        _ba = "#ffaa55"
-                        if fx_color:
-                            _fg = "blue"
-                    else:   
-                        if fx_color:
-                            fx_only = 1
-                else:
-                    _bg = "grey"
-                    _ba = "#aaa"
-
-
-            if "\n" in txt:
-                txt1 = txt.split("\n")[0]
-
-            _fg = "black"
-            if ifval:
-                if fx_only:
-                    _bg = "cyan"
-                    _ba = "#55d4ff"
-
-                if "SEL" in txt1:
-                    b.configure(bg="#77f")
-                    _bg = "#77f"
-            else: 
-                _bg = "grey"
-                _fg = "darkgrey"
+        for nr in PRESETS.val_presets: 
+            cfg = get_exec_btn_cfg(nr)
+            if not cfg:
+                out = {}
+                out["bg"] = "lightgrey"
+                out["ba"] = "grey"
+                out["fg"] = "grey"
+                out["text"] = "?"
+                cfg = out
 
-                if "SEL" in txt1:
-                    _fg = "blue"
-                elif "ON" in txt1:
-                    _fg = "#040"
-                elif "GO" in txt1:
-                    _fg = "#555"
+            b = self.elem_presets[nr]
+            b.configure(fg=cfg["fg"],bg=cfg["bg"],activebackground=cfg["ba"],text=cfg["text"])
 
-            if "FL" in txt1:
-                _fg = "#00e"
 
-            b.configure(fg=_fg,bg=_bg,activebackground=_ba,text=_text)
         time.sleep(0.01)
     def refresh_fix(self):
         refresher_fix.reset() # = Refresher()

+ 63 - 23
tkgui/GUI.py

@@ -562,6 +562,8 @@ class GUI_PATCH():
         self._head = head
         self._foot = foot
 
+        self.fader_elem = []
+
         self.draw()
 
     def draw(self): #,gui,yframe):
@@ -785,6 +787,7 @@ class GUI_FixtureEditor():
         self.dmx=1
         self.univ=0
         self.elem=[]
+        self.fader_elem = []
         self.pw = None
         self.header=[]
         self.data = data
@@ -802,6 +805,7 @@ class GUI_FixtureEditor():
         width = self.width
         data = self.data
 
+        self.fader_elem = []
         # HEAD 2
         
         self.frame = tk.Frame(root,bg="grey",width=width)
@@ -934,7 +938,8 @@ class GUI_FixtureEditor():
 
             e= ELEM_FADER(frameS,nr=j+1,cb=self._cb)
             e.pack()
-            e.attr["bg"] = "red"
+            #e.attr["bg"] = "red"
+            self.fader_elem.append(e)
             self.elem.append(e)
             frameS.pack(fill=tk.X, side=tk.TOP)
             c+=1
@@ -1028,7 +1033,7 @@ class GUI_FixtureEditor():
 
     def clear(self,_event=None,attr=[]):
         attr = [""]*100
-        mode = ["F"]*100
+        mode = [""]*100
         self._load_fix(None,attr,mode)
         self.b_path["text"] = "clean..."
         self.close_fixture_list()
@@ -1057,8 +1062,17 @@ class GUI_FixtureEditor():
         self.b_path["text"] = "load_LED"
         self.close_fixture_list()
     def load_MH(self,_event=None,attr=[]):
-        attr = ["PAN","PAN-FINE","TILT","TILT-FINE","SHUTTER","DIM","RED","GREEN","BLUE","GOBO"]
-        mode = ["F","F","F","F","S","F","F","F","F","S"]
+        if not attr:
+            attr = ["PAN","PAN-FINE","TILT","TILT-FINE","SHUTTER","DIM","RED","GREEN","BLUE","GOBO"]
+        mode = []
+        for a in attr:
+            if a.endswith("-FINE"):
+                mode.append("-")
+            elif a in ["PAN","TILT","DIM","RED","GREEN","BLUE","CYAN","YELLOW","MAGENTA","FOCUS","ZOOM","FROST"]:
+                mode.append("F")
+            else:
+                mode.append("S")
+
         self._load_fix(None,attr,mode)
         self.b_path["text"] = "load_MH"
         self.close_fixture_list()
@@ -1241,10 +1255,10 @@ class ELEM_FADER():
                 return None
             txt = data["Value"]
             print(self,"set_mode._cb()",txt)
-            w = Window("config",master=1,width=200,height=140,left=L1,top=TOP)
+            #w = _M.Window("config",master=1,width=200,height=140,left=L1,top=TOP)
             #w.pack()
             self._set_mode(txt)
-            w.show()
+            #w.show()
             if self._cb:
                 self._cb([self,"set_mode",txt])
         dialog._cb = _cb
@@ -1284,18 +1298,18 @@ class ELEM_FADER():
         f = tk.Frame(frameS)
         #f.pack()
         self.b = tk.Button(f,bg="lightblue",text="<+", width=1,command=self.set_mode,font=self.font8 )
-        self.mode=self.b
+        #self.mode=self.b
         #self.b.pack(fill=tk.BOTH, side=tk.LEFT)
         #self.elem.append(self.b)
 
-        self.b = tk.Button(frameS,bg="lightblue",text="F", width=4,command=self.set_mode,font=self.font8 )
+        self.b = tk.Button(frameS,bg="lightblue",text="", width=4,command=self.set_mode,font=self.font8 )
         self.mode=self.b
         self.b.pack(fill=tk.BOTH, side=tk.TOP)
         #self.b.pack(fill=tk.BOTH, side=tk.LEFT)
         self.elem.append(self.b)
 
         self.b = tk.Button(f,bg="lightblue",text="+>", width=1,command=self.set_mode,font=self.font8 )
-        self.mode=self.b
+        #self.mode=self.b
         #self.b.pack(fill=tk.BOTH, side=tk.LEFT)
         #self.elem.append(self.b)
 
@@ -1312,27 +1326,27 @@ class ELEM_FADER():
 
 
 class EXEC_FADER():
-    def __init__(self,frame,nr,cb=None,**args):
+    def __init__(self,frame,nr,cb=None,fader_cb=None,**args):
         self.frame = frame
         self.nr= nr
         self.id=nr
         self.elem = []
         self._cb = cb
+        self._fader_cb = fader_cb
         width=11
         frameS = tk.Frame(self.frame,bg="#005",width=width)
         frameS.pack(fill=tk.Y, side=tk.LEFT)
         self.frame=frameS
 
     def event(self,a1="",a2=""):
-        print(self)
-        print("event",[self.nr,a1,a2],self.label["text"],self.attr["text"])
-        if self._cb is not None:
-            self._cb(a1,a2,nr=self.nr)
-        else:
-            j=[]
-            jdata = {'VALUE': int(a1), 'args': [] , 'FADE': 0,'DMX': str(self.nr)}
-            j.append(jdata)
-            jclient_send(j)
+        print(self,"event",[self.nr,a1,a2],self.label["text"],self.attr["text"],self._fader_cb)
+        if self._fader_cb is not None:
+            self._fader_cb(a1,a2,nr=self.nr)
+        #else:
+        #    j=[]
+        #    jdata = {'VALUE': int(a1), 'args': [] , 'FADE': 0,'DMX': str(self.nr)}
+        #    j.append(jdata)
+        #    jclient_send(j)
 
     def set_attr(self,_event=None):
         txt= self.attr["text"]
@@ -1362,19 +1376,35 @@ class EXEC_FADER():
                 return None
             txt = data["Value"]
             print(self,"set_mode._cb()",txt)
-            w = Window("config",master=1,width=200,height=140,left=L1,top=TOP)
+            #w = _M.Window("config",master=1,width=200,height=140,left=L1,top=TOP)
             #w.pack()
             self._set_mode(txt)
-            w.show()
+            #w.show()
         dialog._cb = _cb
         dialog.askstring("MODE S/F:","SWITCH or FADE",initialvalue=txt)
 
     def _set_mode(self,txt=""):
+        print("_set_mode",txt)
         if type(txt) is str:
             self.mode["text"] = "{}".format(txt[0].upper())
             #print("_set_mode",[self])
     def _refresh(self):
         pass
+
+    def go(self,event=None,X=None,Y=None):
+        print(self,"go()",event,self.attr["text"])
+        print(dir(event))
+        print(event.num,event.state,event.type)
+        nr = self.id+80
+        if event.state > 0:
+            value = 0
+            #PRESETS.go(self.id+80)
+            _M.master.preset_go(nr-1,xfade=None,val=value)
+        else:
+            value = 1
+            #PRESETS.go(self.id+80)
+            _M.master.preset_go(nr-1,xfade=None,val=value)
+
     def pack(self,init=None,from_=255,to=0,**args):
         width=11
         r=0
@@ -1394,7 +1424,14 @@ class EXEC_FADER():
         if 1: #self.nr <= 10:
 
             self.elem.append(self.b)
-            self.b = tk.Button(frameS,bg="lightblue",text="", width=5,command=self.set_attr,font=self.font8 )
+            self.b = tk.Button(frameS,bg="lightblue",text="", width=5,font=self.font8 )
+            self.b.bind("<Button>",self.go) #BEvent({"NR":self.id+80,"text":""},self.go).cb)
+            self.b.bind("<ButtonRelease>",self.go) #BEvent({"NR":self.id+80,"text":""},self.go).cb)
+            #b = self.b
+            #k = ""
+            #gui = _M.master
+            #self.b.bind("<Button>",Xevent(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
+            #self.b.bind("<ButtonRelease>",Xevent(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
             self.attr=self.b
             self.b.pack(fill=tk.BOTH, side=tk.TOP)
             self.elem.append(self.b)
@@ -1434,6 +1471,7 @@ class GUI_ExecWingLayout():
         c=0
         i=1
         self.elem=[]
+        self.fader_elem = []
         self.header=[]
         self.data = data
 
@@ -1466,12 +1504,13 @@ class GUI_ExecWingLayout():
                 c=0
             #print(frameS)
             #e= ELEM_FADER(frameS,nr=j+1,cb=self.event_cb)
-            e= EXEC_FADER(frameS,nr=j+1,cb=self.event_cb)
+            e= EXEC_FADER(frameS,nr=j+1,fader_cb=self.event_cb)
             if j >= 10:
                 e.pack(from_=400,to=0,init=100)
             else:
                 e.pack(from_=200,to=0,init=100)
             self.elem.append(e)
+            self.fader_elem.append(e)
             frameS.pack(fill=tk.X, side=tk.TOP)
             c+=1
             i+=1
@@ -1498,6 +1537,7 @@ class GUI_ExecWingLayout():
 
     def event_cb(self,a1="",a2="",nr=None,**args):
         print("event_cb:",nr,a1,a2,args)
+        
         nr += 1
         jdata= {"CMD":"X-MASTER","NR":nr,"VALUE":int(a1)}