#from pyray import * import pyray #import ralib_sdl as pyray #import raylib as pyray import sys sys.path.insert(0,"/opt/LibreLight/Xdesk/") #pyray.set_config_flags(pyray.FLAG_WINDOW_HIGHDPI ) #pyray.set_config_flags(pyray.FLAG_MSAA_4X_HINT) pyray.set_config_flags(pyray.FLAG_WINDOW_RESIZABLE) CAPTION = 'RAY-DMX' import tool.movewin as movewin import pathlib try: import memcache mc = memcache.Client(['127.0.0.1:11211'], debug=0) #data = mc.get("MODES") except: mc = None _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=[store[-2],store[-1]] POS[0] += 5 #frame kompensation POS[1] += 29 #frame kompensation print(store) W=int(store[-4]) H=int(store[-3]) pyray.init_window(W, H, CAPTION) #"RAY-DMX")#,10,10,10,10) #pyray.TextureFilter(font10,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/FreeMono.ttf" #a = "/usr/share/fonts/truetype/freefont/FreeSerif.ttf" #a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf" #a = "/usr/share/fonts/truetype/freefont/FreeMonoBold.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,[pos1[0]-pos2[0],pos1[1]-pos2[1]] 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 spectrum = [[255,127]]*40 def render_spectrum(cur,x,y): pyray.draw_text_ex(font25,"SRC:{}".format(cur),[x-20,y-50], 25, 0, pyray.VIOLET) txt="1 DMX" pyray.draw_text_ex(font10,txt, [x,y-20], font_size, 0, [0,255,0,255]) #pyray.YELLOW) txt="255" pyray.draw_text_ex(font10,txt, [x+230,y-20], font_size, 0, [0,255,0,255]) #pyray.YELLOW) txt="512 DMX" pyray.draw_text_ex(font10,txt, [x+470,y-20], font_size, 0, [0,255,0,255]) #pyray.YELLOW) DMX=mc.get(cur) spectrum.append(DMX) if len(spectrum) > 40: spectrum.pop(0) for i,lines in enumerate(spectrum): if lines: for j,pix in enumerate(lines): if type(pix) is not int: pix=0 if pix > 255: pix=255 if pix < 0: pix=0 c=[255,255,255,pix] #pyray.draw_pixel(x+j,y+i*6,c) pyray.draw_line(x+j,y+i*6,x+j,y+i*6-5,c) def render_grid(cur,x,y): xi=0 yi=0 grid_x = x #250 grid_y = y #60 for i,v in enumerate(range(20)): # COL NUMBER -> 1 2... 20 x2 = grid_x+i*25#+xi y2 = grid_y-20 #+yi txt=str(i+1) pyray.draw_text_ex(font10,txt, [x2,y2], font_size, 0, [0,255,0,255]) #pyray.YELLOW) i+=1 DMX=mc.get(cur) pyray.draw_text_ex(font25,"SRC:{}".format(cur),[grid_x-20,grid_y-50], 25, 0, pyray.VIOLET) if DMX: for i,v in enumerate(DMX): if v: host_list[k][-1] +=1 txt = str(v) x2 = grid_x+xi*25 y2 = grid_y+yi*15 try: pyray.draw_rectangle(x2-2, y2-2,24,13,[255,255,255,int(v)]) except: pyray.draw_rectangle(x2-2, y2-2,24,13,[255,2,2,255]) try: int(v) except: v=0 if int(v) > 100: pyray.draw_text_ex(font10,txt, [x2,y2], font_size, 0, pyray.BLACK)# pyray.VIOLET) else: pyray.draw_text_ex(font10,txt, [x2,y2], font_size, 0, GREY)# pyray.VIOLET) xi+=1 if xi % 20 == 0: txt = str(int(yi*20)+1) pyray.draw_text_ex(font10,txt, [grid_x-30,y2], font_size, 0, pyray.YELLOW)# pyray.VIOLET) # ROEW NR xi = 0 yi += 1 txt = str(int(yi*20)+1) pyray.draw_text_ex(font10,txt, [grid_x-30,y2], font_size, 0, pyray.YELLOW)# pyray.VIOLET) # ROEW NR buttons={} #[] cur = None history = [] spectrum_btn=BUTTON(None,"SPECTRUM",[3,610,20,90]) spectrum_btn.btn.btn1.color = pyray.YELLOW # [127,127,127,255] spectrum_btn.btn.btn1.color_on = pyray.YELLOW # [127,127,127,255] add=0 modes_data = {} modes_time = 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() try: if modes_time+1 < time.time(): modes_time = time.time() modes_data = mc.get("MODES") pyray.set_window_title("RAY-DMX "+str(modes_data)) for k in ["RESTART","PRO","EASY","EXIT"]: if k in str(modes_data): pyray.close_window() exit() except Exception as e:# KeyInterupt print("err",e) import traceback print(traceback.format_exc()) time.sleep(1) font_size = font10.baseSize try: DATA=mc.get("index")#cmd) GREY = [122,122,122,255] p=0 keys = [] host_list = {} #"0":[]} k="xxx" if DATA is None: k="None" keys.append(k) host_list[k] = "" #DATA[k] #[0]).ljust(" ",18) #,0,"=",0] if DATA: 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 if cur not in host_list: if host_list: cur = keys[0] #host_list[0] if spectrum_btn.btn.btn1.val.get(): render_spectrum(cur,230,50) else: render_grid(cur,250,50) p=0 host_list_key = list(host_list.keys()) host_list_key.sort() #for k,v in host_list.items(): for k in host_list_key: v=host_list[k] x2 = 10 y2 = 60+p #grid_y+p v = str(v).replace(" ","").replace("[","").replace("]","") txt = str(k)+" "+str(v) key = txt.split(" ")[0] p+=22 if key in buttons: btn = buttons[key] else: btn=BUTTON(None,txt,[y2,x2,20,190]) 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) 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[:] spectrum_btn.event(old_x,old_y,mouse_old) #abtn.btn1.name = "SPECTRUM" if check_area(spectrum_btn.btn.pos,[old_y,old_x]):#event_pos): if "release" == mouse_old[0]: print( spectrum_btn.btn.btn1.val.get(),mouse_old) if spectrum_btn.btn.btn1.val.get(): spectrum_btn.btn.btn1.val.set(0) spectrum_btn.btn.btn1.name = "SPECTRUM" else: spectrum_btn.btn.btn1.val.set(255) spectrum_btn.btn.btn1.name = "DMX-GRID" spectrum_btn.draw() for k,btn in buttons.items(): btn.event(old_x,old_y,mouse_old) if "release" == mouse_old[0]: btn.button = 1 if check_area(btn.btn.pos,[old_y,old_x]):#event_pos): cur = k 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 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()