Browse Source

add: RAYLIB mouse_drag_box, button press/release event

micha 5 months ago
parent
commit
32155c23e2
2 changed files with 117 additions and 25 deletions
  1. 113 23
      tkray/dmx.py
  2. 4 2
      tool/movewin.py

+ 113 - 23
tkray/dmx.py

@@ -1,5 +1,10 @@
 from pyray import *
 import pyray 
+
+for i in dir(pyray):
+    if i.startswith("draw_"):
+        print(i)
+#exit()
 ConfigFlags(FLAG_MSAA_4X_HINT) #|FLAG_WINDOW_RESIZABLE  )
 #ConfigFlags(FLAG_WINDOW_RESIZABLE  )
 ConfigFlags(FLAG_WINDOW_HIGHDPI )
@@ -9,6 +14,7 @@ init_window(760, 450, "RAY-DMX")#,10,10,10,10)
 import sys
 sys.path.insert(0,"/opt/LibreLight/Xdesk/")
 import tool.tk_elm as tk_elm
+#import tool.sdl_elm as sdl_elm
 
 img = "/opt/LibreLight/Xdesk/icon/scribble.png"
 IMG = load_image(img)
@@ -38,6 +44,9 @@ a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
 
 
 k=200
+a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
+font10l = load_font_ex(a, 10, None, 0);
+a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
 font10 = load_font_ex(a, 12, None, 0);
 print(dir(font10))
 print(font10.baseSize)
@@ -57,7 +66,7 @@ class EVENT():
     def __init__(self):
         self.dict = {}
         self.type = 0
-        self.button=0
+        self.button=10
         self.buttons=[0,0,0,0]
 xevent=EVENT()
 
@@ -66,6 +75,9 @@ class BUTTON():
         #self.btn = tk_elm.Button(None,pos=[390,12,20,90])
         self.btn = tk_elm.Button(master,pos=pos)
         self.btn.btn1.color    = [127,127,127,255]
+        #self.btn.btn1.type = "toggle"
+        #self.btn.btn2.type = "toggle"
+        #self.btn.btn3.type = "toggle"
         #btn.btn1.color_on = [155,155,155,255]
         #btn.btn2.color    = [155,55,155,255]
         #btn.btn2.color_on = [155,155,155,255]
@@ -82,19 +94,21 @@ class BUTTON():
         c=[122,122,122,122] #btn.btn2.get_color()
         draw_rectangle(pos[1],pos[0],pos[3],pos[2],c)
 
-        c=self.btn.btn3.get_color()
-        draw_rectangle(pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2,c)
         c=self.btn.btn1.get_color()
         draw_rectangle(pos[1]+2,pos[0]+2,pos[3]-4,pos[2]-4,c)
 
+        c=self.btn.btn3.get_color()
+        #draw_rectangle(pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2,c)
+        draw_rectangle_lines_ex([pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2],1,c)
+
         x=self.btn.btn1.name
         draw_text_ex(font10,str(x), [pos[1]+4,pos[0]+4], font_size, 0, [0,0,0,255])#YELLOW)#[0,255,0,255]) #YELLOW)
 
     def event(self,x,y,mouse):
         try:
-            #print("POS:",old_x,old_y)
+            #print("POS:",old_x,old_y,mouse,xevent.type)
             xevent.dict={"pos":[old_y,old_x],"button":1,"buttons":[0,0,0]}
-            xevent.type=3
+            #xevent.type=3
             for i,v in enumerate(mouse):
                 if i==0:
                     if v == "release":
@@ -113,8 +127,70 @@ class BUTTON():
             print(traceback.format_exc())
             raise e
 
+mouse_box_on = 0
+mouse_box_on_pos = [0,0]
+def draw_mouse_box(window,pos1,mouse=[None,None,None],color=[128,128,128],text=1):
+    global mouse_box_on_pos 
+    global mouse_box_on 
+
+    if mouse[0]=="press":
+        if mouse_box_on == 0:
+            pos2 = pos1[:]
+            mouse_box_on_pos = pos2
+            mouse_box_on = 1
+    else:
+        mouse_box_on = 0
+
+    if mouse[0]=="press":
+        pos2 = mouse_box_on_pos[:]
+        
+
+        w=pos1[0]-pos2[0]
+        h=pos1[1]-pos2[1]
+        pos = pos2[:]
+        #print(pos1,pos2,h,w)
+        wd=1
+        hd=1
+        if w < 0:
+            pos[0] = pos1[0]
+            w*=-1
+            wd=-1
+        if h < 0:
+            pos[1] = pos1[1]
+            h*=-1
+            hd=-1
+
+        if w > 10 or h > 10:
+            c=[255,255,255,255]
+            draw_rectangle_lines_ex([pos[0],pos[1],w,h],1,c)
+            font_size = font10l.baseSize
+            draw_text_ex(font10l,str(pos1[0])+" "+str(pos1[1]), [pos1[0],pos1[1]-10], font_size, 0, WHITE)
+            draw_text_ex(font10l,str(pos2[0])+" "+str(pos2[1]), [pos2[0]+5,pos2[1]+10], font_size, 0, WHITE)
+            draw_text_ex(font10l,str(w), [pos2[0]+5+w/2*wd,pos2[1]], font_size, 0, WHITE)
+            draw_text_ex(font10l,str(h), [pos2[0]+5,pos2[1]+h/2*hd], font_size, 0, WHITE)
+            return pos1,pos2
+
 mouse_old=[None,None,None]
 
+def check_area_v(v1,v2,event_v):#elm_pos,event_pos):
+    if event_v < v1+1: 
+        return 0
+    if event_v > v2-1: 
+        return 0
+    return 1
+
+def check_area(pos,event_pos):
+    v2 = pos[0]+pos[2]
+    x = check_area_v(pos[0],v2,event_pos[0])
+    v2 = pos[1]+pos[3]
+    y = check_area_v(pos[1],v2,event_pos[1])
+    if x and y:
+        return 1
+
+
+buttons={} #[]
+cur = None
+
 while not window_should_close():
     begin_drawing()
 
@@ -122,7 +198,6 @@ while not window_should_close():
     Color(255,0,0,0)
     rl_enable_smooth_lines()
 
-    buttons=[]
 
 
     font_size = font10.baseSize
@@ -133,12 +208,13 @@ while not window_should_close():
         keys = []
         host_list = {}
         for k in DATA:
-            #print(DATA[k])
+            print(k,DATA[k])
+            #print(k)
             keys.append(k)
             host_list[k] = DATA[k] #[0]).ljust(" ",18) #,0,"=",0]
         keys.sort()
 
-        k=keys[0]
+        k=keys[1]
         for i,v in enumerate(range(20)):
             # COL NUMBER -> 1 2... 20
             x2 = grid_x+i*25
@@ -150,16 +226,14 @@ while not window_should_close():
 
         xi=0
         yi=0
-        DMX=mc.get(k)
-        cur = k
-        draw_text_ex(font25,"SRC:{}".format(k),[grid_x-20,5], 25, 0,  VIOLET)
+        if cur is None:
+            cur = k #k[3] #"xx123" # k
+        DMX=mc.get(cur)
+        draw_text_ex(font25,"SRC:{}".format(cur),[grid_x-20,5], 25, 0,  VIOLET)
 
         for i,v in enumerate(DMX):
-            #print(i,v)
-            
             if v:
                 host_list[k][-1] +=1
-            txt = str(i)+":"+str(v)
             txt = str(v)
             x2 = grid_x+xi*25
             y2 = grid_y+yi*15
@@ -191,21 +265,28 @@ while not window_should_close():
 
         p=0
         for k,v in host_list.items():
-            #for k in keys:
-            # HOST LIST  
             x2 = 10
             y2 = grid_y+p
-            txt =str(k)+" "+str(v).replace(" ","").replace("[","").replace("]","") 
-            #draw_rectangle(x2-2, y2-2,200,18,[125,125,125,255])
-            #draw_text_ex(font10,txt, [x2,y2], font_size, 0, BLACK) # YELLOW)# VIOLET)
+            v = str(v).replace(" ","").replace("[","").replace("]","") 
+            txt = str(k)+" "+str(v)
+
+            key = txt.split(" ")[0]
             p+=22
 
-            btn=BUTTON(None,txt,[y2,x2,20,190])
-            #btn.btn.btn1.color    = [55,155,155,255]
+            if key in buttons:
+                btn = buttons[key]
+            else:
+                btn=BUTTON(None,txt,[y2,x2,20,190])
+                buttons[key] = btn
+                print("ADD",key,btn)
+            
+            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)
-            buttons.append(btn)
+                #btn.btn.btn1.press() #val.set(255)
+
 
         w=200
         h=50
@@ -239,9 +320,18 @@ while not window_should_close():
             print(mouse)
             mouse_old = mouse[:]
 
-        for btn in buttons:
+        for k,btn in buttons.items():
             btn.event(old_x,old_y,mouse_old)
+            if "press" == mouse_old[0]:
+                btn.button = 1
+                #if check_area(btn.btn.pos,[old_x,old_y]):#event_pos):
+                if check_area(btn.btn.pos,[old_y,old_x]):#event_pos):
+                    print(k,btn.btn.pos)
+                    #btn.btn.btn1.val.set(255)
+                    #cur = k
+                    cur = k # btn.btn.btn1.name
             btn.draw()
+            aapos = draw_mouse_box(None,[old_x,old_y],mouse_old,color=[128,128,128],text=1)
 
 
         draw_text_ex(font20,"POS:{}:{}".format(int(m.x),int(m.y)),[10,34], 20, 0,  VIOLET)

+ 4 - 2
tool/movewin.py

@@ -132,8 +132,10 @@ def winfo2(name="WinfoWinName"):
 def get_store_sdl_line():
     #print()
     #print("-> def",inspect.currentframe().f_code.co_name,"-"*10)
-    lines = winfo2(name="SDL-")
+    lines = []
+    lines.extend( winfo2(name="SDL-"))
     lines.extend( winfo2(name="TK-"))
+    lines.extend( winfo2(name="RAY-"))
     lines.extend( winfo2(name="EXEC-BTN"))
     lines.extend( winfo2(name="EXEC-XWING"))
     out_lines=[]
@@ -141,7 +143,7 @@ def get_store_sdl_line():
         t=line[2].split()
         for k in t:
             k = k.replace(" ", "_")
-            if "SDL-" in k or "TK-" in k or "EXEC-BTN" in k or "EXEC-XWING" in k:
+            if "SDL-" in k or "RAY-" in k or "TK-" in k or "EXEC-BTN" in k or "EXEC-XWING" in k:
                 s=line[-2]
                 p=line[-1]