| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587 |
- #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]
- W=760
- H=450
- if store:
- POS[0] += 5 #frame kompensation
- POS[1] += 29 #frame kompensation
- POS=[store[-2],store[-1]]
- pyray.set_config_flags(pyray.FLAG_WINDOW_RESIZABLE)
- pyray.init_window(W, H, CAPTION) #"RAY-DMX")#,10,10,10,10)
- pyray.set_window_min_size(200,200)
- pyray.set_window_max_size(1000,1000)
- 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"
- 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, 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"
- 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.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):
- 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.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
- 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:
- buttons = [0,0,0]
- button = 0
- PRESS=5 #1025
- RELEASE=6 #1026
- _type=0
- for i in range(3):#2,0,-1):
- #print(i,mouse)
- if mouse[i] == "press":
- _type=PRESS
- if mouse[i] == "release":
- _type=RELEASE
- if mouse[i]:
- buttons[i] = 1
- button = i+1
- xevent.dict={"pos":[y,x],"button":button,"buttons":buttons,"type":_type}
- #print(xevent.dict)
- pos=self.btn.pos
-
- if check_area(pos,[y,x]):
- #print("POS:",x,y,mouse,xevent.type)
- for i,v in enumerate(mouse):
- if i==0:
- #if v == "release": # or v == "click":
- if v == "click": #"press" or v == "click": # or v == "release":
- self.btn.btn1.type = "toggle"
- self.btn.btn1.press()
- #xevent.type=5
- #xevent.dict["button"] = 1
- #self.btn.btn1.val.set(0)
- #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 = 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]
- 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
- _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()
- pyray.clear_background(pyray.BLACK)
- pyray.Color(255,0,0,0)
- pyray.rl_enable_smooth_lines()
- font_size = font12.baseSize
- try:
- mw = pyray.get_screen_width()
- mh = pyray.get_screen_height()
- keys,host_list = load_fix()
- GREY = [122,122,122,255]
-
- k=keys[0]
- if cur is None:
- cur = k #k[3] #"xx123" # k
- check_buttons(buttons,host_list)
- pyray.draw_text_ex(font_l_22,"FIXTURE LIST",[20,2], 22, 0, pyray.GRAY)
- 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(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:
- 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_change:
- print("MOUSE:",mouse,old_x,old_y) #=[None,None,None]
- for i in range(1,12+1):
- _KEY = "KEY_F{}".format(i)
- x = pyray.KeyboardKey[_KEY]
- #k_val=pyray.is_key_pressed(x)
- k_val=pyray.is_key_down(x)
- if _KEY not in KEY_BUF:
- KEY_BUF[_KEY] = k_val
- if KEY_BUF[_KEY] != k_val:
- print("KEY_CHANGE",_KEY,k_val)
- KEY_BUF[_KEY] = k_val
- x=pyray.get_key_pressed()
- if x:
- print("key",x)
- x=pyray.is_key_pressed(pyray.KEY_F1)
- if x:
- print("key",x)
- if mouse != mouse_old and mouse != [None,None,None]:
- #print(mouse)
- mouse_old = mouse[:]
-
- 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(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])
- aapos = draw_mouse_box(None,[old_x,old_y],mouse_old,color=[128,128,128],text=1)
- pyray.end_drawing()
-
- # 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":
- 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")
- #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
- print("err",e)
- import traceback
- print(traceback.format_exc())
- time.sleep(1)
- pyray.close_window()
|