Browse Source

cleanup: x8font on EXEC; add: close/reopen EXEC-WING

micha 1 year ago
parent
commit
35984c4b97
3 changed files with 140 additions and 86 deletions
  1. 93 65
      _LibreLightDesk.py
  2. 19 6
      tkgui/GUI.py
  3. 28 15
      tkgui/draw.py

+ 93 - 65
_LibreLightDesk.py

@@ -19,17 +19,30 @@ along with LibreLight.  If not, see <http://www.gnu.org/licenses/>.
 (c) 2012 micha@librelight.de
 """
 import random
-rnd_id = str(random.randint(1000,9000))
-rnd_id += " beta 23-03 "
 import subprocess
 import string
+
+rnd_id  = str(random.randint(100,900))
+rnd_id += " beta"
+rnd_id2 = ""
+rnd_id3 = ""
+
+try:
+    _gcmd=['git','log','-1', '--format=%ci']
+    r = subprocess.check_output(_gcmd)
+    rnd_id3 += " " + r.decode('ascii').strip().split()[0]
+except:pass
+rnd_id += rnd_id3
+
 _gcmd=['git', 'rev-parse', '--short', 'HEAD']
 try:
     r = subprocess.check_output(_gcmd)
-    rnd_id += r.decode('ascii').strip()
+    rnd_id2 += " "+r.decode('ascii').strip()
 except Exception as e:
-    rnd_id += " no git" 
+    rnd_id2 += " no git" 
     #rnd_id += " ".join(_gcmd) +str(e)
+rnd_id += rnd_id2
+
 
 try:
     xtitle = __file__
@@ -62,7 +75,40 @@ INIT_OK = 0
 _global_short_key = 1
 
 
+gcolor = 1
+def cprint(*text,color="blue",space=" ",end="\n"):
+    #return 0 #disable print dbg
+    if not gcolor:
+        print(text)
+        return 0
+
+    if color == "green":
+        txt = '\033[92m'
+    elif color == "red":
+        txt = '\033[0;31m\033[1m'
+    elif color == "yellow":
+        txt = '\033[93m\033[1m'
+    elif color == "cyan":
+        txt = '\033[96m'
+    else:
+        txt = '\033[94m'
+    for t in text:
+        txt += str(t ) +" "
+    #HEADER = '\033[95m'
+    #OKBLUE = '\033[94m'
+    #OKCYAN = '\033[96m'
+    #OKGREEN = '\033[92m'
+    #WARNING = '\033[93m'
+    #FAIL = '\033[91m'
+    #ENDC = '\033[0m'
+    #BOLD = '\033[1m'
+    #UNDERLINE = '\033[4m'
+    txt += '\033[0m'
+    print(txt,end=end)
+    #return txt
 
+cprint("________________________________")
+ 
 
 
 
@@ -87,9 +133,10 @@ try:
         f.close()
         print("Exception:",e)
 
+    cprint("config read")
     for line in lines:
         line=line.strip()
-        print("config read",line)
+        cprint("- config:",line)
         row = json.loads(line) 
         _config.append(row)
 
@@ -283,12 +330,13 @@ except Exception as e:
 
 class MC():
     def __init__(self,server="127.0.0.1",port=11211):
-        print("----------- MC")
+        cprint("MC.init() ----------" ,server,port,color="red")
         try:
-            self.mc = memcache.Client(['127.0.0.1:11211'], debug=0)
+            #self.mc = memcache.Client(['127.0.0.1:11211'], debug=0)
+            self.mc = memcache.Client(['{}:{}'.format(server,port)], debug=0)
             #self.init()
         except Exception as e:
-            print("Exception",e)
+            print("-- Exception",e)
 
         # def init(self):
         data = {}
@@ -297,22 +345,25 @@ class MC():
         index = self.mc.get("index")
         if index:
             for i in index:
-                print("key",i)
+                print("-- key",i)
 
         self.fader_map = []
         for i in range(30+1):
             self.fader_map.append({"UNIV":0,"DMX":0})
 
         try:
-            f = open("/home/user/LibreLight/fader.json")
+            fname = "/home/user/LibreLight/fader.json"
+            f = open(fname)
             lines = f.readlines()
+            cprint("FADER MAP",fname)
+
             for i,line in enumerate(lines):
                 jdata = json.loads(line)
-                print("fader_map ->>",i,jdata)
+                print("-- fader_map ->>",i,jdata)
                 self.fader_map[i] = jdata
 
         except Exception as e:
-            print("Except Fader_map",e)
+            print("-- Except Fader_map",e)
         #exit()
 
     def ok(self):
@@ -610,40 +661,7 @@ class dummy_event():
         self.set_value=-1
 
 
-gcolor = 1
-def cprint(*text,color="blue",space=" ",end="\n"):
-    #return 0 #disable print dbg
-    if not gcolor:
-        print(text)
-        return 0
-
-    if color == "green":
-        txt = '\033[92m'
-    elif color == "red":
-        txt = '\033[0;31m\033[1m'
-    elif color == "yellow":
-        txt = '\033[93m\033[1m'
-    elif color == "cyan":
-        txt = '\033[96m'
-    else:
-        txt = '\033[94m'
-    for t in text:
-        txt += str(t ) +" "
-    #HEADER = '\033[95m'
-    #OKBLUE = '\033[94m'
-    #OKCYAN = '\033[96m'
-    #OKGREEN = '\033[92m'
-    #WARNING = '\033[93m'
-    #FAIL = '\033[91m'
-    #ENDC = '\033[0m'
-    #BOLD = '\033[1m'
-    #UNDERLINE = '\033[4m'
-    txt += '\033[0m'
-    print(txt,end=end)
-    #return txt
 
-cprint("________________________________")
- 
 def process_wings(xfixtures):
     """process the wing's of selected fixtures
     input: [1,2,3,4,10,12,13,14]
@@ -1312,6 +1330,8 @@ class Xevent_fx():
         return 1 
         
 def save_window_position(save_as=""):
+    print()
+    cprint("save_window_position",[save_as])
     try:
         base = Base()
         fname = "/home/user/LibreLight"
@@ -1319,10 +1339,10 @@ def save_window_position(save_as=""):
         if save_as:
             fname = save_as 
         fname +=  "/gui.txt"
-        print("save_window_position",fname)
+        cprint("- fname",fname)
         f = open(fname,"w")
         for k,win in window_manager.windows.items():
-            print("save:win:pos",win,k)
+            print("-- save:win:pos",win,k)
             if not win:
                 continue
             #print("d",dir(win))
@@ -1333,7 +1353,7 @@ def save_window_position(save_as=""):
             f.flush()
         f.close()
     except Exception as e:
-        cprint("save_window_position Exception:",e,color="red")
+        cprint("- save_window_position Exception:",e,color="red")
         return 
 
 def save_window_position_loop(): # like autosave
@@ -1348,12 +1368,14 @@ def save_window_position_loop(): # like autosave
     thread.start_new_thread(loop,())
 
 def load_window_position(_filter=""):
+    print()
+    cprint("load_window_position",[_filter])
     try:
         base = Base()
         fname = "/home/user/LibreLight"
         fname = base.show_path1 +base.show_name 
         fname +=  "/gui.txt"
-        print("load_window_position",fname)
+        cprint("- fname:",fname)
         f = open(fname,"r")
         data = {}
         for line in f.readlines():
@@ -1365,21 +1387,24 @@ def load_window_position(_filter=""):
         for k,win in window_manager.windows.items():
             if not win:
                 continue
-            if k in data:
-                cprint("set_win_pos",k)
-                try:
-                    #print("> ",[k,data[k]])
-                    if _filter:
-                        if _filter == k:
-                            win.tk.geometry(data[k])
-                    else:
-                        win.tk.geometry(data[k])
-                except Exception as e:
-                    cprint("load_window_position 544 Exception:",e,color="red")
+
+            if k not in data:
+                continue
+            w = data[k] 
+
+            if _filter:
+                if _filter != k:
+                    continue
+
+            cprint("- set_win_pos","filter:",[_filter],"Name: {:<20}".format(k),w,win)
+            try:
+                win.tk.geometry(w)
+            except Exception as e:
+                cprint("- load_window_position 544 Exception:",e,color="red")
             #print("winfo",k,win.tk.geometry())
         f.close()
     except Exception as e:
-        cprint("load_window_position 345 Exception:",e,color="red")
+        cprint("- load_window_position 345 Exception:",e,color="red")
         return 
  
 class Xevent():
@@ -3803,6 +3828,8 @@ class WindowManager():
 
     def top(self,name):
         name = str(name)
+        for n in self.windows:
+            print("TOP",n) #self.get("")
         if name in self.windows:
             self.windows[name].tk.state(newstate='normal')
             self.windows[name].tk.attributes('-topmost',True)
@@ -3961,7 +3988,7 @@ def create_EXEC_WING(args={}):#name,master=0,width=600,height=415,left=0,top=0,H
     for i in range(10*3):
         data.append({"EXEC"+str(i):"EXEC"})
     obj=GUI_ExecWingLayout(w1,data)
-    window_manager.new(w,name,obj)
+    #window_manager.new(w,name,obj)
     return w,name,obj
 
 class create_buffer():
@@ -3971,9 +3998,9 @@ class create_buffer():
     def create(self):
         cprint()
         cprint(self,"create",self.args["title"],color="green")
-        r = self.cb(args=self.args) 
+        w,name,obj = self.cb(args=self.args) 
         #self.name,self.master,self.width,self.height,self.left,self.top,self.H1,self.W1)
-        return r
+        return w,name,obj
 
 if __run_main:
     print("main")
@@ -4083,8 +4110,9 @@ if __run_main:
     #create_EXEC_WING(name,master=0,width=600,height=415,left=L1,top=TOP+H1+HTB*2)
     args = {"title":name,"master":0,"width":600,"height":415,"left":L1,"top":TOP+H1+HTB*2,"H1":H1,"W1":W1}
     c = create_buffer(create_EXEC_WING,args)#name,master=0,width=600,height=415,left=L1,top=TOP+H1+HTB*2,H1=H1,W1=W1)
-    c.create()
+    w,name,obj = c.create()
     create_buffer_fader_wing = c
+    window_manager.new(w,name,obj)
 
     name="ENCODER"
     #w = Window(name,master=0,width=620,height=113,left=L0+710,top=TOP+H1+15+HTB*2)

+ 19 - 6
tkgui/GUI.py

@@ -1342,6 +1342,12 @@ class WindowManager():
         self.obj = {}
         self.nr= 0
         self.first=""
+
+    def update(self,w,name="",obj=None):
+        for k in self.windows:
+            if k == name:
+                self.windows[str(name)] = w
+                self.obj[str(name)] = obj
     def new(self,w,name="",obj=None):
         if not self.first:
             if name:
@@ -1382,15 +1388,22 @@ class WindowManager():
         name = str(name)
         if name in self.windows:
             import __main__ as m
-            print(dir(m))
+            #print(dir(m))
             try:
                 self.windows[name].tk.state(newstate='normal')
-            except:
+            except Exception as e:
+                cprint("exception",e,color="red")
+                cprint(name,self.windows[name])
 
                 c = m.create_buffer_fader_wing 
-                r = c.create()
-                self.windows[r[1]]= r[2]
+                w,_name,obj = c.create()
+                print("recreate",w,name,_name,r,obj)
+                m.window_manager.update(w,name,obj)
+
+                cprint("reposition",name)
                 m.load_window_position(_filter=name)
+                #m.window_manager.new(w,name,obj)
+
             self.windows[name].tk.attributes('-topmost',True)
             self.windows[name].tk.attributes('-topmost',False)
             self.windows[name].tk.update_idletasks()# gui_menu_gui.tk)
@@ -1444,8 +1457,8 @@ class GUI_menu():
         self.frame.pack()
         INIT_OK = 1
     def callback(self,event,data={}):
-        global window_manager
-        print("callback543",self,event,data)
+        #print("callback543",self,event,data)
+        print("callback543",self,event) #,data)
         #window_manager.top(data["text"])# = WindowManager()
         self.window_manager.top(data["text"])# = WindowManager()
     def update(self,button,text):

+ 28 - 15
tkgui/draw.py

@@ -115,28 +115,36 @@ class ExecButton(MiniButton):
         try:
             text = text.split("\n")[1]
         except:pass
+
+
         if "grün" in text.lower() or "green" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="green",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="green",tag="label")
+        elif "purple" in text.lower() or "purple" in text.lower():
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="#800080",tag="label")
+        elif "lime" in text.lower() or "lime" in text.lower():
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="#00ff00",tag="label")
         elif "blau" in text.lower() or "blue" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="blue",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="blue",tag="label")
         elif "rot" in text.lower() or "red" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="red",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="red",tag="label")
         elif "orange" in text.lower():# or "yellow" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="orange",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="orange",tag="label")
         elif "weiß" in text.lower() or "white" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="white",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="white",tag="label")
         elif "cyan" in text.lower():# or "yellow" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="cyan",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="cyan",tag="label")
         elif "gelb" in text.lower() or "yellow" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="yellow",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="yellow",tag="label")
+        elif "pink" in text.lower() or "pink" in text.lower():
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="#ff69b4",tag="label")
         elif "mage" in text.lower() or "mage" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,20,37,fill="magenta",tag="label")
+            self.l = self.bb.create_rectangle(10,29,20,39,fill="magenta",tag="label")
 
         if "nebel" in text.lower()  or "smoke" in text.lower() or "haze" in text.lower():
-            self.l = self.bb.create_rectangle(10,27,60,37,fill="white",tag="label")
+            self.l = self.bb.create_rectangle(10,29,60,39,fill="white",tag="label")
         if "mh " in text.lower() or " mh" in text.lower() :
-            self.l = self.bb.create_rectangle(30,27,35,32,fill="black",tag="label")
-            self.l = self.bb.create_rectangle(28,34,37,37,fill="black",tag="label")
+            self.l = self.bb.create_rectangle(30,29,35,32,fill="black",tag="label")
+            self.l = self.bb.create_rectangle(28,34,37,39,fill="black",tag="label")
         if "off" in text.lower(): 
             self.l = self.bb.create_rectangle(50,30,55,35,fill="black",tag="label")
         if "dim" in text.lower() or "front" in text.lower()  or "on" in text.lower(): 
@@ -144,7 +152,7 @@ class ExecButton(MiniButton):
             self.l = self.bb.create_rectangle(50,30,55,35,fill="white",tag="label")
             #self.l = self.bb.create_line(56,36,58,36,fill="black",tag="label")
         if "circle" in text.lower(): 
-            self.l = self.bb.create_oval(30,27,40,37,fill="",tag="label")
+            self.l = self.bb.create_oval(30,29,40,39,fill="",tag="label")
         if "pan" in text.lower(): 
             self.l = self.bb.create_line(20,34 ,45,34,fill="black",arrow=tk.BOTH,tag="label")
         if "tilt" in text.lower(): 
@@ -172,9 +180,14 @@ class ExecButton(MiniButton):
                     elif ts == 5:
                         xfont = self.x7font
 
-                
-                #self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg,font=xfont)
-                self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg)
+                if len(t) > 14:
+                    t2 = t[:14]
+                    t3 = t[14:]
+                    self.l = self.bb.create_text(37,z*10+9-2,text=t2,anchor="c",tag="label",fill=self.fg,font=xfont)
+                    self.l = self.bb.create_text(37,z*10+9+6,text=t3,anchor="c",tag="label",fill=self.fg,font=xfont)
+                else:
+                    self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg,font=xfont)
+                #self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg)
             else:
                 self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg)
             z+=1