123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489 |
- #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()
|