2
0

6 Commits b69adbeb2a ... 949f7774af

Autor SHA1 Nachricht Datum
  micha 949f7774af add: show live data in ray-fix ... no dmx vor 2 Wochen
  micha c3800e8552 cleanup ray-fix vor 2 Wochen
  micha 8f477f4008 fix: exec-sel deleted fix vor 2 Wochen
  micha 6193721199 extend: ray-fix view-area-grid, add:scroll-bar vor 2 Wochen
  micha a8908a1f0d cleanup Ray-Fix vor 2 Wochen
  micha 41a8fd83c6 change fps compensation delta vor 2 Wochen
3 geänderte Dateien mit 285 neuen und 85 gelöschten Zeilen
  1. 6 2
      _LibreLightDesk.py
  2. 13 2
      tkray/dmx.py
  3. 266 81
      tkray/fix.py

+ 6 - 2
_LibreLightDesk.py

@@ -1427,8 +1427,12 @@ class MASTER():
                 #if fix in self.elem_attr:
                 #    if attr in self.elem_attr[fix]:
                 #        elem = self.elem_attr[fix][attr]
-                FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["ACTIVE"] = 1
-                FIXTURES.fixtures[fix]["ATTRIBUT"]["_ACTIVE"]["ACTIVE"] = 1
+
+                if fix in FIXTURES.fixtures:
+                    FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["ACTIVE"] = 1
+                    FIXTURES.fixtures[fix]["ATTRIBUT"]["_ACTIVE"]["ACTIVE"] = 1
+                else:
+                    cprint("exec_select: fix not in FIXTURE.fixtures ! exec:",nr+1,"fix:",fix,color="red")
                 #elem["bg"] = "yellow"
 
     def exec_go(self,nr,val=None,xfade=None,event=None,button="",ptfade=None):

+ 13 - 2
tkray/dmx.py

@@ -317,6 +317,8 @@ add=0
 modes_data = {}
 modes_time = time.time()
 
+core_tick_t = time.time()
+
 while not pyray.window_should_close():
     pyray.begin_drawing()
 
@@ -463,8 +465,6 @@ while not pyray.window_should_close():
         pyray.draw_rectangle(int(old_x-10),int(old_y-1),20,2,[255,0,255,255])
         pyray.draw_rectangle(int(old_x-1),int(old_y-10),2,20,[255,0,255,255])
 
-        pyray.end_drawing()
-        time.sleep(1/11)
 
         for i,v in enumerate(mouse_old):
             if v == "release":
@@ -478,6 +478,17 @@ while not pyray.window_should_close():
             fps_count = frame_count
             frame_count = 0
 
+        pyray.end_drawing()
+
+        # frame tick speed, CPU LOAD. ------
+        delta = 1/10
+        if delta > (time.time()-core_tick_t):
+            delta -= (time.time()-core_tick_t)
+        #print(delta)
+        time.sleep(delta)
+        core_tick_t = time.time()
+        # --------------------------------
+
     except KeyboardInterrupt as e:
         raise e
     except Exception as e:# KeyInterupt

+ 266 - 81
tkray/fix.py

@@ -4,7 +4,7 @@ import sys
 sys.path.insert(0,"/opt/LibreLight/Xdesk/")
 
 
-CAPTION = 'R-FIX-LIST'
+CAPTION = 'RAY-FIX-LIST'
 import tool.movewin as movewin
 
 import pathlib
@@ -67,13 +67,20 @@ a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
 
 k=200
 a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
-font10l = pyray.load_font_ex(a, 10, None, 0);
+font_l_10 = pyray.load_font_ex(a, 10, None, 0);
+
 a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
-font10 = pyray.load_font_ex(a, 12, None, 0);
-print(dir(font10))
-print(font10.baseSize)
-##exit()
+font10 = pyray.load_font_ex(a, 10, None, 0);
+font12 = pyray.load_font_ex(a, 12, None, 0);
+font14 = pyray.load_font_ex(a, 14, None, 0);
+font16 = pyray.load_font_ex(a, 16, None, 0);
 font20 = pyray.load_font_ex(a, 20, None, 0);
+font22 = pyray.load_font_ex(a, 22, None, 0);
+font24 = pyray.load_font_ex(a, 24, None, 0);
+
+a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
+font_l_22 = pyray.load_font_ex(a, 22, None, 0);
+
 a = "/usr/share/fonts/truetype/freefont/FreeMono.ttf"
 a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
 a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
@@ -104,12 +111,14 @@ class BUTTON():
         self.btn.btn3.color    = [55,155,155,255]
         self.btn.btn3.color_on = [55,255,255,255]
         self.btn.btn2.color_on = [55,255,255,255]
-
+        
+        self.font = font14
+        self.val = 0
         self.btn.btn1.name=txt
         #x=btn.btn1.name
-
+    def __repr__(self):
+        return "<BUTTON {} {} {}>".format(id(self),str(self.btn.pos),self.btn.btn1.name)
     def draw(self,event=None):
-        font_size = font10.baseSize
         pos=self.btn.pos
         c=[122,122,122,122] #btn.btn2.get_color()
         pyray.draw_rectangle(pos[1],pos[0],pos[3],pos[2],c)
@@ -117,12 +126,19 @@ class BUTTON():
         c=self.btn.btn1.get_color()
         pyray.draw_rectangle(pos[1]+2,pos[0]+2,pos[3]-4,pos[2]-4,c)
 
+        c=self.btn.btn4.color  # color bar
+        pyray.draw_rectangle(pos[1]+2,pos[0]+2,1+int(110*self.val/255),3,c)
+
         c=self.btn.btn3.get_color()
         #pyray.draw_rectangle(pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2,c)
         pyray.draw_rectangle_lines_ex([pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2],1,c)
 
         x=self.btn.btn1.name
-        pyray.draw_text_ex(font10,str(x), [pos[1]+4,pos[0]+4], font_size, 0, [0,0,0,255])#pyray.YELLOW)#[0,255,0,255]) #pyray.YELLOW)
+
+        font_size = self.font.baseSize
+        pyray.draw_text_ex(self.font,str(x), [pos[1]+4,pos[0]+4], font_size, 0, [0,0,0,255])#pyray.YELLOW)#[0,255,0,255]) #pyray.YELLOW)
+
+
 
     def event(self,x,y,mouse):
         try:
@@ -201,11 +217,11 @@ def draw_mouse_box(window,pos1,mouse=[None,None,None],color=[128,128,128],text=1
         if w > 10 or h > 10:
             c=[255,255,255,255]
             pyray.draw_rectangle_lines_ex([pos[0],pos[1],w,h],1,c)
-            font_size = font10l.baseSize
-            pyray.draw_text_ex(font10l,str(pos1[0])+" "+str(pos1[1]), [pos1[0],pos1[1]-10], font_size, 0, pyray.WHITE)
-            pyray.draw_text_ex(font10l,str(pos2[0])+" "+str(pos2[1]), [pos2[0]+5,pos2[1]+10], font_size, 0, pyray.WHITE)
-            pyray.draw_text_ex(font10l,str(w), [pos2[0]+5+w/2*wd,pos2[1]], font_size, 0, pyray.WHITE)
-            pyray.draw_text_ex(font10l,str(h), [pos2[0]+5,pos2[1]+h/2*hd], font_size, 0, pyray.WHITE)
+            font_size = font_l_10.baseSize
+            pyray.draw_text_ex(font_l_10,str(pos1[0])+" "+str(pos1[1]), [pos1[0],pos1[1]-10], font_size, 0, pyray.WHITE)
+            pyray.draw_text_ex(font_l_10,str(pos2[0])+" "+str(pos2[1]), [pos2[0]+5,pos2[1]+10], font_size, 0, pyray.WHITE)
+            pyray.draw_text_ex(font_l_10,str(w), [pos2[0]+5+w/2*wd,pos2[1]], font_size, 0, pyray.WHITE)
+            pyray.draw_text_ex(font_l_10,str(h), [pos2[0]+5,pos2[1]+h/2*hd], font_size, 0, pyray.WHITE)
             return pos1,pos2
 
 mouse_old=[None,None,None]
@@ -225,13 +241,197 @@ def check_area(pos,event_pos):
     if x and y:
         return 1
 
+_load_fix_DATA = {}
+_load_fix_host_list = {}
+_load_fix_last = time.time()
+_load_fix_keys = 0
+_load_fix_init = 0
+_load_fix_keys = []
+def load_fix():
+    global _load_fix_DATA 
+    global _load_fix_host_list 
+    global _load_fix_keys 
+    global _load_fix_init
+    global _load_fix_last
+
+    if not _load_fix_init: 
+        pass
+    elif _load_fix_last+1 > time.time():
+        return _load_fix_keys.copy(), _load_fix_host_list.copy()
+
+    print("load_fix update")
+    _load_fix_last = time.time()
+    _load_fix_init = 1
+
+    DATA=mc.get("fix")#cmd)
+    keys = []
+    host_list = {}
+    if not DATA:
+        DATA = {}
+        print("mc.get ist NONE")
+        #continue
+
+    for k in DATA:
+        keys.append(k)
+        host_list[k] = DATA[k] #[0]).ljust(" ",18) #,0,"=",0]
+    keys.sort()
+
+    _load_fix_keys = keys
+    _load_fix_host_list = host_list 
+
+    return _load_fix_keys.copy(), _load_fix_host_list.copy()
+
+def check_buttons(buttons,host_list):
+    _x=20
+    _y=30
+
+    H = 22
+    W = 100
+    W2 = W+20
+
+    _last_v = {}
+    for i,k in enumerate(host_list): #.items():
+        _x=20
+        key = str(i)
+        if key not in buttons: # insert 
+            v=host_list[k]
+            _last_v = v
+            txt="ID:"+str(v["ID"])
+            btn=BUTTON(None,txt,[_y,_x,H,60])
+            btn.btn.btn1.color_on = [255,255,0,255]
+            buttons[key+".ID"] = btn
+            #print("ADD",key,btn)
+            _x+=60+2
+
+            txt=v["NAME"]
+            btn=BUTTON(None,txt,[_y,_x,H,W])
+            btn.btn.btn1.color_on = [255,255,0,255]
+            buttons[key] = btn
+            #print("ADD",key,btn)
+            
+            _x+=W+2
+            key = str(i)+":rgb"
+            txt = ""
+            btn=BUTTON(None,txt,[_y,_x,H,20])
+            btn.btn.btn1.color = [0,0,0,255]
+            btn.btn.btn1.color_on = [255,255,0,255]
+            buttons[key] = btn
+            _x+=20+2
+
+            if "ATTRIBUT" in v:
+                #print(txt)
+                ATTR = v["ATTRIBUT"]
+                if 1:
+                    ay2=_y
+                    ax2=_x
+                    for kk,vv in v["ATTRIBUT"].items():
+                        if "-FINE" in kk or kk.startswith("_"):
+                            continue
+                        key = str(i)+":" +kk
+                        VAL = vv["VALUE"]
+                        #print("-",kk,vv)
+                        txt = kk+" "+str(VAL)
+                        btn=BUTTON(None,txt,[ay2,ax2,H,W2])
+                        btn.btn.btn1.color_on = [255,255,0,255]
+
+
+                        #self.btn4.increment = 4.4
+                        #self.btn4.type = "fader"
+                        #self.btn4.nr_on  = [4]
+                        #self.btn4.nr_off = [5]
+                        RGB = [255,255,255,255]
+                        if kk == "RED":
+                            RGB = [255,0,0,255]
+                        elif kk == "GREEN":
+                            RGB = [0,255,0,255]
+                        elif kk == "BLUE":
+                            RGB = [0,0,255,255]
+
+                        btn.btn.btn4.color = RGB
+                        #btn.btn.btn4.val._max = 100
+                        btn.val = 100
+                        #btn.btn.btn4.val.set(50)
+                        
+                        buttons[key] = btn
+                        add=1
+                        ax2+=W2+3
+
+        _y+=23
+
+    for i,k in enumerate(host_list): #.items():
+        key = str(i)
+        v=host_list[k]
+
+        txt=v["NAME"]
+        btn = buttons[key] 
+        btn1 = buttons[key+".ID"] 
+
+        if v["ATTRIBUT"]["_ACTIVE"]["ACTIVE"]:
+            btn.btn.btn1.val.set(1)
+            btn1.btn.btn1.val.set(1)
+        else:
+            btn.btn.btn1.val.set(0)
+            btn1.btn.btn1.val.set(0)
+
+
+        if key in buttons: # insert 
+            #print(v)
+            txt="ID:"+str(v["ID"])
+            btn = buttons[key+".ID"] 
+
+            
+            key = str(i)+":rgb"
+            txt = ""
+            btn = buttons[key] 
+
+            if "ATTRIBUT" in v:
+                ATTR = v["ATTRIBUT"]
+                for kk,vv in v["ATTRIBUT"].items():
+                    if "-FINE" in kk or kk.startswith("_"):
+                        continue
+                    key = str(i)+":" +kk
+                    VAL = vv["VALUE"]
+
+                    txt = kk+" "+str(VAL)
+                    btn = buttons[key] 
+                    btn.val = VAL
+                    if kk in ["RED","GREEN","BLUE"]:
+                        _key = str(i)+":rgb"
+                        if kk == "RED":
+                            buttons[_key].btn.btn1.color[0] = VAL
+                        if kk == "GREEN":
+                            buttons[_key].btn.btn1.color[1] = VAL
+                        if kk == "BLUE":
+                            buttons[_key].btn.btn1.color[2] = VAL
+
+
+                    btn.btn.btn1.name = txt
+                    if vv["ACTIVE"]:
+                        btn.btn.btn1.val.set(1)
+                    else:
+                        btn.btn.btn1.val.set(0)
+    if _last_v:
+        print("init.button.ok",_last_v)
+
+def draw_buttons(buttons):
+    mh = pyray.get_screen_height()
+    for k,btn in buttons.items():
+        btn.event(old_x,old_y,mouse_old)
+        #print(btn)
+        pos = btn.btn.pos
+        if pos[0] > (mh-40):
+            continue
+        btn.draw()
 
 buttons={} #[]
 cur = None
 history = []
 KEY_BUF={}
-
+FIRST_RUN = 1
 add=0
+
+core_tick_t = time.time()
+
 while not pyray.window_should_close():
     pyray.begin_drawing()
 
@@ -241,78 +441,35 @@ while not pyray.window_should_close():
 
 
 
-    font_size = font10.baseSize
+    font_size = font12.baseSize
     try:
-        DATA=mc.get("fix")#cmd)
-        GREY = [122,122,122,255]
-        p=0
-        keys = []
-        host_list = {}
-        if not DATA:
-            DATA = {}
-            print("mc.get ist NONE")
-            pyray.draw_text_ex(font25,"ERR:{NO DATA}",[10,5], 25, 0,  pyray.VIOLET)
-            pyray.end_drawing()
-            time.sleep(0.5)
-            continue
+        mw = pyray.get_screen_width()
+        mh = pyray.get_screen_height()
 
-        for k in DATA:
-            #print(k,DATA[k])
-            #print(k)
-            keys.append(k)
-            host_list[k] = DATA[k] #[0]).ljust(" ",18) #,0,"=",0]
-        keys.sort()
+        keys,host_list = load_fix()
+
+        GREY = [122,122,122,255]
         
         k=keys[0]
 
         if cur is None:
             cur = k #k[3] #"xx123" # k
 
-
-        p=0
-        start = 0
-        end   = start+10
-        i=0
-        for k,v in host_list.items():
-            if i > end:
-                break
-            if i < start:
-                continue
-
-            x2 = 30
-            y2 = 60+p #grid_y+p
-            v = str(v).replace(" ","").replace("[","").replace("]","") 
-            txt = str(k)+" "+str(v)
-
-            key = txt.split(" ")[0]
-            p+=32
-            if key in buttons:
-                btn = buttons[key]
-            else:
-                btn=BUTTON(None,txt,[y2,x2,30,690])
-                buttons[key] = btn
-                print("ADD",key,btn)
-                add=1
-            btn.btn.btn1.name = txt
-            btn.btn.btn1.color_on = [255,255,0,255]
-            #btn.btn.btn1.val.set(0)
-            #if cur in btn.btn.btn1.name:
-            #    btn.btn.btn1.val.set(255)
-            #    #btn.btn.btn1.press() #val.set(255)
-            i+=1
+        check_buttons(buttons,host_list)
 
 
-        if add:
-            add=0
-            print()
-        w=200
-        h=50
+        pyray.draw_text_ex(font_l_22,"FIXTURE LIST",[20,2], 22, 0,  pyray.GRAY)
 
-        x=200
-        y=200
+        pyray.draw_text_ex(font12,"ACTIVE:{:0.1f} {:0.1f}".format(0,0),[220,5], 12, 0,  pyray.YELLOW)
+        pyray.draw_text_ex(font12,"ENCODER:{:0.2f}".format(5),[315,5], 12, 0,  pyray.YELLOW)
 
-        pyray.draw_text_ex(font25,"FPS:{}".format(fps_count),[10,5], 25, 0,  pyray.VIOLET)
+        pyray.draw_text_ex(font12,"FPS:{}".format(fps_count)     ,[420,5], 12, 0,  pyray.BLUE)
+        pyray.draw_text_ex(font12,"BTN:{}".format(len(buttons))  ,[460,5], 12, 0,  pyray.BLUE)
+        pyray.draw_text_ex(font12,"FIX:{}".format(len(host_list)),[520,5], 12, 0,  pyray.BLUE)
 
+        wheel = pyray.get_mouse_wheel_move()
+        if wheel:
+            print(wheel)
         m=pyray.get_mouse_position()
         #print(m)
         if m.x != old_x or m.y != old_y:
@@ -357,12 +514,24 @@ while not pyray.window_should_close():
             #print(mouse)
             mouse_old = mouse[:]
             
-
-        for k,btn in buttons.items():
-            btn.event(old_x,old_y,mouse_old)
-            btn.draw()
+        key="scroll-bar"
+        if key not in buttons:
+            txt=""
+            btn=BUTTON(None,txt,[30,mw-35,mh-75,30])
+            #btn.btn.btn1.color_on = [255,255,0,255]
+            buttons[key] = btn
+            btn.btn.btn4.val.set(btn.btn.btn4.val._max*0.4)
+
+        txt="HELP"
+        key="HELP"
+        btn=BUTTON(None,txt,[4,160,16,40])
+        btn.font = font10
+        buttons[key] = btn
+
+        draw_buttons(buttons)
         
-        pyray.draw_text_ex(font20,"POS:{}:{}".format(int(m.x),int(m.y)),[10,34], 20, 0,  pyray.VIOLET)
+        pyray.draw_text_ex(font12,"X:{}".format(int(m.x)),[590,5], 12, 0,  pyray.VIOLET)
+        pyray.draw_text_ex(font12,"Y:{}".format(int(m.y)),[620,5], 12, 0,  pyray.VIOLET)
 
         pyray.draw_rectangle(int(old_x-10),int(old_y-1),20,2,[255,0,255,255])
         pyray.draw_rectangle(int(old_x-1),int(old_y-10),2,20,[255,0,255,255])
@@ -371,7 +540,16 @@ while not pyray.window_should_close():
 
         pyray.end_drawing()
         
-        time.sleep(1/11)
+        # frame tick speed, CPU LOAD. ------
+        delta = 1/5
+        if delta > (time.time()-core_tick_t):
+            delta -= (time.time()-core_tick_t)
+        #print(delta)
+        time.sleep(delta)
+        core_tick_t = time.time()
+        # --------------------------------
+
+
 
         for i,v in enumerate(mouse_old):
             if v == "release":
@@ -389,8 +567,15 @@ while not pyray.window_should_close():
         #POS[0]+=1
         if pyray.is_window_resized():
             print( "RESIZE WINDOW OK")
+            #for i in dir(pyray):
+            #    if "height" in i.lower(): 
+            #        print(i)
+            w = pyray.get_screen_width()
+            h = pyray.get_screen_height()
+            print(h,w)
         #print(pyray.FLAG_WINDOW_RESIZABLE  )
         #print("E",pyray.is_window_focused() )
+        FIRST_RUN = 0
     except KeyboardInterrupt as e:
         raise e
     except Exception as e:# KeyInterupt