Browse Source

change: ... focus-in/out ... remote-key

micha 7 months ago
parent
commit
9b2cfb10de
5 changed files with 254 additions and 135 deletions
  1. 1 1
      input/touchscreen.py
  2. 24 3
      lib/jsbc.py
  3. 116 110
      lib/libtk.py
  4. 2 3
      lib/mytklib.py
  5. 111 18
      tkgui/EXEC.py

+ 1 - 1
input/touchscreen.py

@@ -262,7 +262,7 @@ class Action():
 
         if multipointer_off:
             print(" multipointer ist OFF !")
-            #return
+            return
 
         if len(create) and self.pointer_create_count < 10: # recursion !!
             print(" self.refresh_multipointer_config() # recursion !!!")

+ 24 - 3
lib/jsbc.py

@@ -10,6 +10,7 @@ import lib.fixlib as fixlib
 
 
 def JSCB(x,sock=None):
+    # REMOTE KEY EVENT's
     i = ""
     msg = ""
     msgs = []
@@ -18,12 +19,13 @@ def JSCB(x,sock=None):
         for i in x:
             #print("i",[i])
             msgs = json.loads(i)
-            print(" JSCB",msgs) #,sock)
+            #print(" JSCB",msgs) #,sock)
             if type(msgs) is not list:
                 continue
 
             for msg in msgs:
-                print("  ",msg)
+                OK = 0
+                #print("  msg",msg)
                 if "event" not in msg:
                     continue
 
@@ -45,32 +47,47 @@ def JSCB(x,sock=None):
                     #event.num = enum
 
                     #cb.cb(event)
+                    OK = 1
                 if "CLEAR" == msg["event"]:
                     #MAIN.FIXTURES.clear()
                     fixlib.clear(MAIN.FIXTURES.fixtures)
                     MAIN.modes.val("REC",0)
                     #MAIN.master.xcb("CLEAR",1)
+                    OK = 1
                 elif "REC" == msg["event"]:
                     MAIN.modes.val("REC",1)
+                    OK = 1
                 elif "EDIT" == msg["event"]:
                     MAIN.modes.val("EDIT",1)
+                    OK = 1
                 elif "BLIND" == msg["event"]:
                     MAIN.modes.val("BLIND",1)
+                    OK = 1
                 elif "FLASH" == msg["event"]:
                     MAIN.modes.val("FLASH",1)
+                    OK = 1
                 elif "CFG-BTN" == msg["event"]:
                     MAIN.modes.val("CFG-BTN",1)
+                    OK = 1
                 elif "LABEL" == msg["event"]:
                     MAIN.modes.val("LABEL",1)
+                    OK = 1
                 elif "REC" == msg["event"]:
                     MAIN.modes.val("REC",1)
+                    OK = 1
+                elif "FX-OFF" == msg["event"]:
+                    MAIN.modes.val("FX-OFF",1)
+                    #OK = 1
                 elif "SAVE\nSHOW" == msg["event"]:
                     MAIN.save_show()
+                    OK = 1
                 elif "RESTART" == msg["event"]:
                     print("OK OK")
                     MAIN.LOAD_SHOW_AND_RESTART("").cb(force=1)
+                    OK = 1
                 elif "REC-FX" == msg["event"]:
                     MAIN.modes.val("REC-FX",1)
+                    OK = 1
                 elif "EXEC" == msg["event"]:
                     print("  EXEC EXEC")
                     val = -1
@@ -90,10 +107,14 @@ def JSCB(x,sock=None):
                             #print("TIME:",int((e-s)*1000),int(e*10)/10)
                             print("EXE TIME:","{:0.02f}".format(e-s),int(e*100)/100)
                             print()
-
+                            OK = 1
                     except Exception as e:
                         print("EXEC ERR:",e)
             
+                if OK:
+                    cprint(" remote-key:",msg ,color="green")
+                else:
+                    cprint(" remote-key:",msg ,color="red")
     except Exception as e:
         cprint("exception JSCB:",e,color="red")
         cprint("- i:",i,color="red")

+ 116 - 110
lib/libtk.py

@@ -379,6 +379,121 @@ class on_focus():
                 e["bg"] = "#fff"
                 e["activebackground"] = "#fff"
             except:pass
+            time.sleep(0.3)
+            cmd = "xset -display :0.0 r off"
+            os.system(cmd)
+
+def tk_keyboard_callback(event,data={}):#value=255):
+    sstart = time.time()
+    #time.sleep(0.1)
+    if not MAIN._global_short_key:
+        return 1
+
+    #global MAIN #_shift_key
+    #cprint("<GUI>",event,color="yellow")
+    value = 255
+    if "Release" in str(event.type) or str(event.type) == '5' or str(event.type) == '3':
+        value = 0
+    cprint("<GUI>",event.state,data,value,[event.type,event.keysym],color="yellow")
+    #print(event)
+    if "state" in dir(event) and "keysym" in dir(event):
+        #print([event.state,event.keysym,event.type])
+        if event.state == 4  and str(2) == str(event.type): # strg + s
+            if str(event.keysym) == "s":
+                MAIN.save_show()
+
+                e = MAIN.master.setup_elem["SAVE\nSHOW"]
+                b = BLINKI(e)
+                b.blink()
+            if str(event.keysym) == "c":
+                if MAIN.save_show():
+                    MAIN.LOAD_SHOW_AND_RESTART("").cb(force=1)
+
+            return
+
+    if "keysym" in dir(event):
+        if "Escape" == event.keysym:
+            #MAIN.FIXTURES.clear()
+            fixlib.clear(MAIN.FIXTURES.fixtures)
+            MAIN.modes.val("ESC",1)
+            MAIN.master.refresh_fix()
+        elif event.keysym in ["Shift_L","Shift_R"]:
+            #cprint(event.type)
+            if "KeyRelease" in str(event.type) or str(event.type) in ["3"]:
+                MAIN._shift_key = 0
+            else:
+                MAIN._shift_key = 1
+            #cprint("SHIFT_KEY",_shift_key,"??????????")
+            #cprint("SHIFT_KEY",_shift_key,"??????????")
+            #global MAIN #_ENCODER_WINDOW
+            try:
+                if MAIN._shift_key:
+                    MAIN._ENCODER_WINDOW.title("SHIFT/FINE ")
+                else:
+                    MAIN._ENCODER_WINDOW.title("ENCODER") 
+            except Exception as e:
+                cprint("exc9800",e)
+                #raise e
+
+        elif event.keysym in "ebfclrmsRx" and value: 
+            if "e" == event.keysym:
+                MAIN.modes.val("EDIT",1)
+            elif "b" == event.keysym:
+                MAIN.modes.val("BLIND",1)
+            elif "f" == event.keysym:
+                MAIN.modes.val("FLASH",1)
+            elif "c" == event.keysym:
+                MAIN.modes.val("CFG-BTN",1)
+            elif "l" == event.keysym:
+                MAIN.modes.val("LABEL",1)
+            elif "r" == event.keysym:
+                MAIN.modes.val("REC",1)
+            elif "R" == event.keysym:
+                MAIN.modes.val("REC-FX",1)
+            elif "x" == event.keysym:
+                MAIN.modes.val("REC-FX",1)
+            elif "m" == event.keysym:
+                x=MAIN.modes.val("MOVE",1)
+                if not x:
+                    MAIN.EXEC.clear_move()
+            elif "s" == event.keysym:
+                MAIN.modes.val("SELECT",1)
+        elif event.keysym in ["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]:
+            nr = int( event.keysym[1:]) # F:1-12
+            nr = nr-1+81  
+            cprint("F-KEY",value,nr,event.keysym)
+            #print(event)
+            MAIN.master.exec_go(nr-1,xfade=None,val=value)
+        elif event.keysym in ["1","2","3","4","5","6","7","8","9","0"]:
+            nr = int( event.keysym)
+            if nr == 0:
+                nr = 10
+            nr = nr-1+161  
+            cprint("NUM-KEY",value,nr)
+            MAIN.master.exec_go(nr-1,xfade=None,val=value)
+        elif "numbersign" == event.keysym and value: # is char "#"
+            cprint("numbersign !!")
+            MAIN.save_show()
+
+            for e in MAIN.master.setup_cmd:
+                cprint(e)
+            e =  MAIN.master.setup_elem["SAVE\nSHOW"]
+            cprint(e)
+            b = BLINKI(e)
+            b.blink()
+            #e = MAIN.tk_event(fix=0,elem=None,attr="SAVE\nSHOW",mode="SETUP")
+            #e.cb(event=event)
+        elif "End" == event.keysym:
+            MAIN.FIXTURES.fx_off("all")
+            MAIN.CONSOLE.fx_off("all")
+            MAIN.CONSOLE.flash_off("all")
+        elif "Delete" == event.keysym:
+            #MAIN.EXEC.delete(nr)
+            if value:
+                MAIN.modes.val("DEL",1)
+
+    #cprint("oipo "*10,round(int(time.time()-sstart)*1000,2))
+
 
 class DummyCallback():
     def __init__(self,name="name"):
@@ -499,117 +614,8 @@ class WindowContainer():
             cmd="xset -display :0.0 r rate 240 15"
             #print(cmd)
             os.system(cmd)
-
     def callback(self,event,data={}):#value=255):
-        sstart = time.time()
-        #time.sleep(0.1)
-        if not MAIN._global_short_key:
-            return 1
-
-        #global MAIN #_shift_key
-        #cprint("<GUI>",event,color="yellow")
-        value = 255
-        if "Release" in str(event.type) or str(event.type) == '5' or str(event.type) == '3':
-            value = 0
-        cprint("<GUI>",event.state,data,value,[event.type,event.keysym],color="yellow")
-        #print(event)
-        if "state" in dir(event) and "keysym" in dir(event):
-            #print([event.state,event.keysym,event.type])
-            if event.state == 4  and str(2) == str(event.type): # strg + s
-                if str(event.keysym) == "s":
-                    MAIN.save_show()
-
-                    e = MAIN.master.setup_elem["SAVE\nSHOW"]
-                    b = BLINKI(e)
-                    b.blink()
-                if str(event.keysym) == "c":
-                    if MAIN.save_show():
-                        MAIN.LOAD_SHOW_AND_RESTART("").cb(force=1)
-
-                return
-
-        if "keysym" in dir(event):
-            if "Escape" == event.keysym:
-                #MAIN.FIXTURES.clear()
-                fixlib.clear(MAIN.FIXTURES.fixtures)
-                MAIN.modes.val("ESC",1)
-                MAIN.master.refresh_fix()
-            elif event.keysym in ["Shift_L","Shift_R"]:
-                #cprint(event.type)
-                if "KeyRelease" in str(event.type) or str(event.type) in ["3"]:
-                    MAIN._shift_key = 0
-                else:
-                    MAIN._shift_key = 1
-                #cprint("SHIFT_KEY",_shift_key,"??????????")
-                #cprint("SHIFT_KEY",_shift_key,"??????????")
-                #global MAIN #_ENCODER_WINDOW
-                try:
-                    if MAIN._shift_key:
-                        MAIN._ENCODER_WINDOW.title("SHIFT/FINE ")
-                    else:
-                        MAIN._ENCODER_WINDOW.title("ENCODER") 
-                except Exception as e:
-                    cprint("exc9800",e)
-                    #raise e
-
-            elif event.keysym in "ebfclrmsRx" and value: 
-                if "e" == event.keysym:
-                    MAIN.modes.val("EDIT",1)
-                elif "b" == event.keysym:
-                    MAIN.modes.val("BLIND",1)
-                elif "f" == event.keysym:
-                    MAIN.modes.val("FLASH",1)
-                elif "c" == event.keysym:
-                    MAIN.modes.val("CFG-BTN",1)
-                elif "l" == event.keysym:
-                    MAIN.modes.val("LABEL",1)
-                elif "r" == event.keysym:
-                    MAIN.modes.val("REC",1)
-                elif "R" == event.keysym:
-                    MAIN.modes.val("REC-FX",1)
-                elif "x" == event.keysym:
-                    MAIN.modes.val("REC-FX",1)
-                elif "m" == event.keysym:
-                    x=MAIN.modes.val("MOVE",1)
-                    if not x:
-                        MAIN.EXEC.clear_move()
-                elif "s" == event.keysym:
-                    MAIN.modes.val("SELECT",1)
-            elif event.keysym in ["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]:
-                nr = int( event.keysym[1:]) # F:1-12
-                nr = nr-1+81  
-                cprint("F-KEY",value,nr,event.keysym)
-                #print(event)
-                MAIN.master.exec_go(nr-1,xfade=None,val=value)
-            elif event.keysym in ["1","2","3","4","5","6","7","8","9","0"]:
-                nr = int( event.keysym)
-                if nr == 0:
-                    nr = 10
-                nr = nr-1+161  
-                cprint("NUM-KEY",value,nr)
-                MAIN.master.exec_go(nr-1,xfade=None,val=value)
-            elif "numbersign" == event.keysym and value: # is char "#"
-                cprint("numbersign !!")
-                MAIN.save_show()
-
-                for e in MAIN.master.setup_cmd:
-                    cprint(e)
-                e =  MAIN.master.setup_elem["SAVE\nSHOW"]
-                cprint(e)
-                b = BLINKI(e)
-                b.blink()
-                #e = MAIN.tk_event(fix=0,elem=None,attr="SAVE\nSHOW",mode="SETUP")
-                #e.cb(event=event)
-            elif "End" == event.keysym:
-                MAIN.FIXTURES.fx_off("all")
-                MAIN.CONSOLE.fx_off("all")
-                MAIN.CONSOLE.flash_off("all")
-            elif "Delete" == event.keysym:
-                #MAIN.EXEC.delete(nr)
-                if value:
-                    MAIN.modes.val("DEL",1)
-
-        #cprint("oipo "*10,round(int(time.time()-sstart)*1000,2))
+        tk_keyboard_callback(event,data=data) #:#value=255):
  
 class window_create_buffer():
     # könnte auch direkt im WindowContainer object eingebaut werden !?

+ 2 - 3
lib/mytklib.py

@@ -233,9 +233,8 @@ class ExecButton(MiniButton):
         if "tilt" in text.lower(): 
             self.l = self.bb.create_line(30,25 ,30,43,fill="black",arrow=tk.BOTH,tag=tag)
         if self.fx: 
-            #self.l = self.bb.create_line(30,25 ,35,45,fill="black",arrow=tk.BOTH,tag=tag)
-            #self.l = self.bb.create_rectangle(3,35,6,38,fill="cyan",tag=tag)
-            self.l = self.bb.create_text(2,33,text="FX",anchor="nw",tag=tag,fill="black",font=self.x5font)
+            #self.l = self.bb.create_rectangle(1,34,12,48,fill="cyan",outline="",tag=tag) # bad contrast !
+            self.l = self.bb.create_text(2,33,text="FX"+str(self.fx),anchor="nw",tag=tag,fill="black",font=self.x5font)
 
         text = txt2
         z = 0

+ 111 - 18
tkgui/EXEC.py

@@ -24,6 +24,7 @@ import tkgui.draw as draw
 import lib.libtk as libtk
 import lib.zchat as chat
 
+_global_short_key = 1
 root = None
 
 cmd_client = chat.Client(port=30003)
@@ -36,23 +37,34 @@ except:
 
 
 
-class Refresher():
+class Refresher(): # DUMMY
     def __init__(self,*arg,**args):
         print(self,"__init__",arg,args)
     def reset(*arg,**args):
         print(self,"reset",arg,args)
     
-class MASTER():
+class MASTER(): # DUMMY
     def __init__(self,*arg,**args):
         print(self,"__init__",arg,args)
         #self.refresh_fix = Refresher()
     def refresh_fix(self,*arg,**args):# = Refresher()
         print(self,"refresh_fix",arg,args)
+    def exec_go(self,nr,*arg,**args): #val=None,xfade=None,event=None,button="",ptfade=None):
+        if _global_key_lock:
+            return
+        #def exec_go(nr,xfade=None,val=0):
+        print(self,"MASTER",nr,arg,args)
+        btn_nr = nr
+        v = args["val"]
+        
+        msg=json.dumps([{"event":"EXEC","EXEC":btn_nr+1,"VAL":v,"NR-KEY":btn_nr}]).encode("utf-8")
+        cprint("SEND MASTER.EXEC_GO:",msg,color="green")
+        cmd_client.send(msg)
 
-def refresh_fix(*arg,**args):
+def refresh_fix(*arg,**args): # DUMMY
     print("refresh_fix",arg,args)
 
-class Refresher_fix():
+class Refresher_fix(): # DUMMY
     def __init__(self,*arg,**args):
         print(self,"init",arg,args)
     def reset(self,*arg,**args):
@@ -60,31 +72,32 @@ class Refresher_fix():
 
 refresher_fix =  Refresher_fix()
 
-class Modes():
+class Modes(): # DUMMY
     def __init__(self,*arg,**args):
         print("Modes.__init__",arg,args)
         self.modes = {}
     def val(self,*arg,**args):
-        print("Modes.val",arg,args)
+        #print("Modes.val",arg,args)
+        pass
 
 master = MASTER() #{}
 modes = Modes()
 
 import tkinter as tk
-class Exec():
+class Exec(): # DUMMY
     def __init__(self):
         self.val_exec = {}
         for i in range(512):
             k=i #"ABC-{}".format(i+1)
             self.val_exec[k] = {"NAME":"XX"}
 EXEC = Exec()
-class Gui():
+class Gui(): # DUMMY
     def __init__(self):
         self.elem_exec = []
         self.elem_meta = [None]*512
 
     def _refresh_exec(self,*arg,**args):
-        print("Gui._refresh_exec",arg,args)
+        print("EXEC_Gui._refresh_exec",arg,args)
 
         nr = 14-1
 
@@ -117,7 +130,8 @@ class Gui():
             out["text"] = _text #"? "+str(nr+1)
 
             META = {'LABEL': 'ERR', 'LEN': 2, 'CFG': {}}
-            META["CFG"] = {'FADE': 3.0, 'DEALY': 0, 'DELAY': 4.0, 'BUTTON': 'ON', 'HTP-MASTER': 100, 'SIZE-MASTER': 100, 'SPEED-MASTER': 100, 'OFFSET-MASTER': 100, 'OUT-FADE': 10.0}
+            META["CFG"] = {'FADE': 3.0, 'DEALY': 0, 'DELAY': 4.0, 'BUTTON': 'ON', 'HTP-MASTER': 100,
+                         'SIZE-MASTER': 100, 'SPEED-MASTER': 100, 'OFFSET-MASTER': 100, 'OUT-FADE': 10.0}
             
             try: 
                 META = METAS[nr]
@@ -127,6 +141,7 @@ class Gui():
                 if LEN: # >= 3:
                     _bg = "orange" #yellow"
                     _fg = "black" #grey"
+
             except Exception as e:
                 print("  ER4R",e,nr)
                 time.sleep(0.001)
@@ -134,6 +149,7 @@ class Gui():
                 txt1 = META["CFG"]["BUTTON"]
             except:
                 pass
+
                 
             if META["LEN"]:
                 _fg = "black"
@@ -150,6 +166,10 @@ class Gui():
                     _fg = "#555"
                     _fg = "black"
 
+            out["fx"] = ""
+            if  META["CFG"]["HAVE-FX"] >= 1:
+                out["fx"] = META["CFG"]["HAVE-FX"] # show FX on EXEC-BTN
+
             if  META["CFG"]["HAVE-FX"] >= 1 and META["CFG"]["HAVE-VAL"] == 0:
                 _bg = "cyan"
 
@@ -174,7 +194,7 @@ class Gui():
         if "CFG-BTN" in modes.modes:
             button = self.elem_exec[btn_nr]
             label = str(btn_nr) #self.elem_meta[nr] = META
-
+            
             if v:
                 META = self.elem_meta[btn_nr] 
                 print("META",META)
@@ -184,7 +204,7 @@ class Gui():
                 DIALOG.ask_exec_config(str(btn_nr+1),button=button,label=label,cfg=cfg)
             return 
         msg=json.dumps([{"event":"EXEC","EXEC":btn_nr+1,"VAL":v,"NR-KEY":btn_nr}]).encode("utf-8")
-        print("SPCIAL-KEY",msg)
+        cprint("SEND GUI.EXEC_GO",msg,color="green")
         cmd_client.send(msg)
 
 gui  = Gui()
@@ -213,16 +233,85 @@ defaultFont.configure(family="FreeSans",
                        size=10,
                        weight="bold")
 # MAIN MENUE
-#try:
-#    self.tk.iconphoto(False, tk.PhotoImage(file=ico_path+"main.png"))
-#except Exception as e:
-#    print(" Exception GUIWindowContainer.__init__",e)
+try:
+    ico_path = "/opt/LibreLight/Xdesk/icon/"
+    root.iconphoto(False, tk.PhotoImage(file=ico_path+"exec.png"))
+except Exception as e:
+    print(" Exception GUIWindowContainer.__init__",e)
 
 #xframe=root
 xframe = libtk.ScrollFrame(root,width=820,height=400,bd=1,bg="black",head=None,foot=None)
 draw.draw_exec(gui,xframe,EXEC)
 #xframe.pack()
-root.title("DEMO TK-EXEC 2")
+root.title("TK-EXEC 2")
+
+def serialize_event(event):
+    data = {}
+    for k in dir(event):
+        if k.startswith("_"):
+            continue
+        v = event.__getattribute__(k)
+        if v == '??':
+            continue
+        if type(v) not in [int,str,float]:
+            continue
+        data[k] = v
+    return data
+
+def tk_event(event,data={}):
+    print("tk_event",event,data)
+    if _global_key_lock:
+        return
+    #print("   ",dir(event)) #.dict())
+    data =  serialize_event(event)
+    print("   ",data)
+    ok=0
+    if 'keysym' in data:
+        if data['keysym'] == 'End':
+            ok = 1
+            msg=json.dumps([{"event":"FX-OFF"}]).encode("utf-8")
+            cprint("SEND tk_event",msg,color="green")
+            cmd_client.send(msg)
+
+        if data['keysym'] == 'Escape':
+            ok = 1
+            msg=json.dumps([{"event":"CLEAR"}]).encode("utf-8")
+            cprint("SEND tk_event",msg,color="green")
+            cmd_client.send(msg)
+
+    if not ok:
+        libtk.tk_keyboard_callback(event,data=data)
+
+root.bind("<Button>",tk_event)#
+root.bind("<Key>",tk_event)#,self.callback)
+root.bind("<KeyRelease>",tk_event)#,self.callback)
+#root.bind("<FocusIn>",tk_event)#, on_focus(self.args["title"],"In").cb)
+#root.bind("<FocusOut>",tk_event)#, on_focus(self.args["title"],"Out").cb)
+
+import os
+
+_global_key_lock = 0
+def focus_in(event=None):
+    _global_short_key = 0 # protect key-press-repeat
+    cmd = "xset -display :0.0 r off"
+    print("FOCUS_IN1", cmd)
+    os.system(cmd)
+    time.sleep(0.3)
+    print("FOCUS_IN2", cmd)
+    os.system(cmd)
+    _global_short_key = 1 # protect key-press-repeat
+    time.sleep(0.3)
+    _global_key_lock = 0
+
+def focus_out(event=None):
+    _global_key_lock = 1
+    _global_short_key = 0
+    cmd="xset -display :0.0 r rate 240 20"
+    print("FOCUS_OUT", cmd)
+    os.system(cmd)
+
+root.bind("<FocusIn>", focus_in)
+root.bind("<FocusOut>", focus_out)
 
 
 def _refr_loop():
@@ -237,12 +326,16 @@ def _refr_loop2():
     while 1:
         try:
             global root
-            title = "DEMO TK-EXEC"
+            title = "TK-EXEC"
             data = mc.get("MODES")
             title += "  "+str(data)
             data = json.loads(data)
             #print("MODES",data)
             modes.modes = data
+            if "S-KEY" in data:
+                _global_short_key = 0
+                if data["S-KEY"]:
+                    _global_short_key = 1
             if root:
                 root.title(title)
         except Exception as e: