|
@@ -0,0 +1,379 @@
|
|
|
+#from pyray import *
|
|
|
+import pyray
|
|
|
+import sys
|
|
|
+sys.path.insert(0,"/opt/LibreLight/Xdesk/")
|
|
|
+
|
|
|
+
|
|
|
+CAPTION = 'RAY-FIX-LIST'
|
|
|
+import tool.movewin as movewin
|
|
|
+
|
|
|
+import pathlib
|
|
|
+
|
|
|
+_file_path=pathlib.Path(__file__)
|
|
|
+print("file:",_file_path)
|
|
|
+movewin.check_is_started(CAPTION,_file_path)
|
|
|
+
|
|
|
+win_title =CAPTION.strip().split()[-1]
|
|
|
+store = movewin.load_all_sdl(win_title)
|
|
|
+print(store)
|
|
|
+POS=[10,10]
|
|
|
+if store:
|
|
|
+ POS=[store[-2],store[-1]]
|
|
|
+
|
|
|
+#pyray.glfw_window_hint(4,1)
|
|
|
+#glfw_init_hint
|
|
|
+
|
|
|
+for i in dir(pyray):
|
|
|
+ if "hint" in i.lower():
|
|
|
+ print(i)
|
|
|
+
|
|
|
+#pyray.SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
|
|
+#pyray.ConfigFlags(pyray.FLAG_WINDOW_RESIZABLE )
|
|
|
+#for i in range(1,20):
|
|
|
+# try:
|
|
|
+# pyray.ConfigFlags(i) #pyray.FLAG_WINDOW_RESIZABLE )
|
|
|
+# except Exception as e:
|
|
|
+# print(e)
|
|
|
+pyray.init_window(760, 450, CAPTION) #"RAY-DMX")#,10,10,10,10)
|
|
|
+#pyray.init_window(0, 0, CAPTION) #"RAY-DMX")#,10,10,10,10)
|
|
|
+pyray.ConfigFlags(pyray.FLAG_WINDOW_RESIZABLE )
|
|
|
+#pyray.SetWindowMaxSize(2000,2000)
|
|
|
+pyray.set_window_min_size(200,200)
|
|
|
+pyray.set_window_max_size(1000,1000)
|
|
|
+#pyray.set_window_state()
|
|
|
+#pyray.TextureFilter(font10,1)
|
|
|
+#FLAG_RESIZABLE_WINDOW
|
|
|
+
|
|
|
+#POS=[100,200]
|
|
|
+#pyray.set_window_size(POS[0],POS[1])
|
|
|
+#POS=[200,100]
|
|
|
+#pyray.set_window_size(POS[0],POS[1])
|
|
|
+
|
|
|
+win_con = movewin.Control()
|
|
|
+win_con.title = win_title
|
|
|
+win_con.winfo()
|
|
|
+if POS:
|
|
|
+ win_con.move(POS[0],POS[1])
|
|
|
+print(POS,win_con.title)
|
|
|
+#exit()
|
|
|
+
|
|
|
+
|
|
|
+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 = pyray.load_image(img)
|
|
|
+print(pyray.set_window_icon(IMG))
|
|
|
+
|
|
|
+import time
|
|
|
+import memcache
|
|
|
+mc = memcache.Client(['127.0.0.1:11211'], debug=0)
|
|
|
+#x=mc.get(k)
|
|
|
+
|
|
|
+old_x = -10
|
|
|
+old_y = -10
|
|
|
+start = time.time()
|
|
|
+frame_count = 0
|
|
|
+fps_count = 0
|
|
|
+
|
|
|
+a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
|
|
|
+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);
|
|
|
+a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
|
|
|
+font10 = pyray.load_font_ex(a, 12, None, 0);
|
|
|
+print(dir(font10))
|
|
|
+print(font10.baseSize)
|
|
|
+##exit()
|
|
|
+font20 = pyray.load_font_ex(a, 20, 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"
|
|
|
+font25 = pyray.load_font_ex(a, 25, None, 0);
|
|
|
+
|
|
|
+pyray.TextureFilter(3)
|
|
|
+
|
|
|
+
|
|
|
+class EVENT():
|
|
|
+ def __init__(self):
|
|
|
+ self.dict = {}
|
|
|
+ self.type = 0
|
|
|
+ self.button=10
|
|
|
+ self.buttons=[0,0,0,0]
|
|
|
+xevent=EVENT()
|
|
|
+
|
|
|
+class BUTTON():
|
|
|
+ def __init__(self,master=None,txt="<BUTTON>",pos=[10,10,20,90]):
|
|
|
+ #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]
|
|
|
+ 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.btn.btn1.name=txt
|
|
|
+ #x=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)
|
|
|
+
|
|
|
+ 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.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)
|
|
|
+
|
|
|
+ def event(self,x,y,mouse):
|
|
|
+ try:
|
|
|
+ #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
|
|
|
+ for i,v in enumerate(mouse):
|
|
|
+ if i==0:
|
|
|
+ if v == "release":
|
|
|
+ xevent.type=6
|
|
|
+ xevent.dict["button"] = 1
|
|
|
+ #self.btn.btn1.val.set(0)
|
|
|
+ if v == "press":
|
|
|
+ xevent.type=5
|
|
|
+ xevent.dict["button"] = 1
|
|
|
+ #self.btn.btn1.val.set(255)
|
|
|
+ xevent.dict["buttons"] = mouse
|
|
|
+ #print(xevent.dict,xevent.type,xevent.button)
|
|
|
+ self.btn.event(xevent)
|
|
|
+ except Exception as e:
|
|
|
+ import traceback
|
|
|
+ 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]=="click":#"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]
|
|
|
+ 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)
|
|
|
+ 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
|
|
|
+history = []
|
|
|
+
|
|
|
+
|
|
|
+add=0
|
|
|
+while not pyray.window_should_close():
|
|
|
+ pyray.begin_drawing()
|
|
|
+
|
|
|
+ pyray.clear_background(pyray.BLACK)
|
|
|
+ pyray.Color(255,0,0,0)
|
|
|
+ pyray.rl_enable_smooth_lines()
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ font_size = font10.baseSize
|
|
|
+ try:
|
|
|
+ DATA=mc.get("fix")#cmd)
|
|
|
+ GREY = [122,122,122,255]
|
|
|
+ p=0
|
|
|
+ keys = []
|
|
|
+ host_list = {}
|
|
|
+ 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()
|
|
|
+
|
|
|
+ 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
|
|
|
+
|
|
|
+
|
|
|
+ if add:
|
|
|
+ add=0
|
|
|
+ print()
|
|
|
+ w=200
|
|
|
+ h=50
|
|
|
+
|
|
|
+ x=200
|
|
|
+ y=200
|
|
|
+
|
|
|
+ pyray.draw_text_ex(font25,"FPS:{}".format(fps_count),[10,5], 25, 0, pyray.VIOLET)
|
|
|
+
|
|
|
+ m=pyray.get_mouse_position()
|
|
|
+ #print(m)
|
|
|
+ if m.x != old_x or m.y != old_y:
|
|
|
+ old_x = m.x
|
|
|
+ old_y = m.y
|
|
|
+
|
|
|
+ mouse=[None,None,None]
|
|
|
+ mouse_change=0
|
|
|
+ for i in range(3):
|
|
|
+ ev = ""
|
|
|
+ if pyray.is_mouse_button_released(i):
|
|
|
+ ev = "release"
|
|
|
+ if pyray.is_mouse_button_pressed(i):
|
|
|
+ ev = "click" #"press"
|
|
|
+ if ev and ev != mouse[i]:
|
|
|
+ mouse[i] = ev
|
|
|
+ mouse_change=1
|
|
|
+
|
|
|
+ if mouse != mouse_old and mouse != [None,None,None]:
|
|
|
+ #print(mouse)
|
|
|
+ mouse_old = mouse[:]
|
|
|
+
|
|
|
+
|
|
|
+ for k,btn in buttons.items():
|
|
|
+ btn.event(old_x,old_y,mouse_old)
|
|
|
+ #if "press" == mouse_old[0]:
|
|
|
+ if "release" == 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)
|
|
|
+
|
|
|
+
|
|
|
+ pyray.draw_text_ex(font20,"POS:{}:{}".format(int(m.x),int(m.y)),[10,34], 20, 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])
|
|
|
+
|
|
|
+ pyray.end_drawing()
|
|
|
+ time.sleep(1/11)
|
|
|
+
|
|
|
+ for i,v in enumerate(mouse_old):
|
|
|
+ if v == "release":
|
|
|
+ mouse_old[i] = None
|
|
|
+ if v == "click":
|
|
|
+ mouse_old[i] = "press"
|
|
|
+ #print(mouse_old)
|
|
|
+ frame_count += 1
|
|
|
+ if time.time()-start > 1:
|
|
|
+ start = time.time()
|
|
|
+ fps_count = frame_count
|
|
|
+ frame_count = 0
|
|
|
+
|
|
|
+ #pyray.set_window_size(POS[0],POS[1])
|
|
|
+ #POS[0]+=1
|
|
|
+ if pyray.is_window_resized():
|
|
|
+ print( "RESIZE WINDOW OK")
|
|
|
+ #print(pyray.FLAG_WINDOW_RESIZABLE )
|
|
|
+
|
|
|
+ except KeyboardInterrupt as e:
|
|
|
+ raise e
|
|
|
+ except Exception as e:# KeyInterupt
|
|
|
+ print("err",e)
|
|
|
+ import traceback
|
|
|
+ print(traceback.format_exc())
|
|
|
+ time.sleep(1)
|
|
|
+pyray.close_window()
|
|
|
+
|