dmx.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. from pyray import *
  2. import pyray
  3. ConfigFlags(FLAG_MSAA_4X_HINT) #|FLAG_WINDOW_RESIZABLE )
  4. #ConfigFlags(FLAG_WINDOW_RESIZABLE )
  5. ConfigFlags(FLAG_WINDOW_HIGHDPI )
  6. init_window(760, 450, "RAY-DMX")#,10,10,10,10)
  7. #pyray.TextureFilter(font10,1)
  8. import sys
  9. sys.path.insert(0,"/opt/LibreLight/Xdesk/")
  10. import tool.tk_elm as tk_elm
  11. img = "/opt/LibreLight/Xdesk/icon/scribble.png"
  12. IMG = load_image(img)
  13. print(set_window_icon(IMG))
  14. import time
  15. import memcache
  16. mc = memcache.Client(['127.0.0.1:11211'], debug=0)
  17. #x=mc.get(k)
  18. old_x = -10
  19. old_y = -10
  20. start = time.time()
  21. frame_count = 0
  22. fps_count = 0
  23. #a = "resources/pixantiqua.ttf"
  24. #a = "/lib/firefox-esr/fonts/TwemojiMozilla.ttf"
  25. #a = "/lib/python3/dist-packages/pygame/freesansbold.ttf"
  26. #a = "/usr/share/fonts/truetype/freefont/FreeMono.ttf"
  27. #a = "/usr/share/fonts/truetype/freefont/FreeSerif.ttf"
  28. #a = "/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf"
  29. a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  30. a = "/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf"
  31. a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
  32. #a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  33. k=200
  34. font10 = load_font_ex(a, 12, None, 0);
  35. print(dir(font10))
  36. print(font10.baseSize)
  37. ##exit()
  38. font20 = load_font_ex(a, 20, None, 0);
  39. a = "/usr/share/fonts/truetype/freefont/FreeMono.ttf"
  40. a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
  41. a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  42. font25 = load_font_ex(a, 25, None, 0);
  43. pyray.TextureFilter(3)
  44. grid_x = 250
  45. grid_y = 60
  46. class EVENT():
  47. def __init__(self):
  48. self.dict = {}
  49. self.type = 0
  50. self.button=0
  51. self.buttons=[0,0,0,0]
  52. xevent=EVENT()
  53. class BUTTON():
  54. def __init__(self,master=None,txt="<BUTTON>",pos=[10,10,20,90]):
  55. #self.btn = tk_elm.Button(None,pos=[390,12,20,90])
  56. self.btn = tk_elm.Button(master,pos=pos)
  57. self.btn.btn1.color = [127,127,127,255]
  58. #btn.btn1.color_on = [155,155,155,255]
  59. #btn.btn2.color = [155,55,155,255]
  60. #btn.btn2.color_on = [155,155,155,255]
  61. self.btn.btn3.color = [55,155,155,255]
  62. self.btn.btn3.color_on = [55,255,255,255]
  63. self.btn.btn2.color_on = [55,255,255,255]
  64. self.btn.btn1.name=txt
  65. #x=btn.btn1.name
  66. def draw(self,event=None):
  67. font_size = font10.baseSize
  68. pos=self.btn.pos
  69. c=[122,122,122,122] #btn.btn2.get_color()
  70. draw_rectangle(pos[1],pos[0],pos[3],pos[2],c)
  71. c=self.btn.btn3.get_color()
  72. draw_rectangle(pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2,c)
  73. c=self.btn.btn1.get_color()
  74. draw_rectangle(pos[1]+2,pos[0]+2,pos[3]-4,pos[2]-4,c)
  75. x=self.btn.btn1.name
  76. 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)
  77. def event(self,x,y,mouse):
  78. try:
  79. #print("POS:",old_x,old_y)
  80. xevent.dict={"pos":[old_y,old_x],"button":1,"buttons":[0,0,0]}
  81. xevent.type=3
  82. for i,v in enumerate(mouse):
  83. if i==0:
  84. if v == "release":
  85. xevent.type=6
  86. xevent.dict["button"] = 1
  87. #self.btn.btn1.val.set(0)
  88. if v == "press":
  89. xevent.type=5
  90. xevent.dict["button"] = 1
  91. #self.btn.btn1.val.set(255)
  92. xevent.dict["buttons"] = mouse
  93. #print(xevent.dict,xevent.type,xevent.button)
  94. self.btn.event(xevent)
  95. except Exception as e:
  96. import traceback
  97. print(traceback.format_exc())
  98. raise e
  99. mouse_old=[None,None,None]
  100. while not window_should_close():
  101. begin_drawing()
  102. clear_background(BLACK)
  103. Color(255,0,0,0)
  104. rl_enable_smooth_lines()
  105. buttons=[]
  106. font_size = font10.baseSize
  107. try:
  108. DATA=mc.get("index")#cmd)
  109. GREY = [122,122,122,255]
  110. p=0
  111. keys = []
  112. host_list = {}
  113. for k in DATA:
  114. #print(DATA[k])
  115. keys.append(k)
  116. host_list[k] = DATA[k] #[0]).ljust(" ",18) #,0,"=",0]
  117. keys.sort()
  118. k=keys[0]
  119. for i,v in enumerate(range(20)):
  120. # COL NUMBER -> 1 2... 20
  121. x2 = grid_x+i*25
  122. y2 = grid_y-20
  123. txt=str(i+1)
  124. draw_text_ex(font10,txt, [x2,y2], font_size, 0, [0,255,0,255]) #YELLOW)
  125. i+=1
  126. xi=0
  127. yi=0
  128. DMX=mc.get(k)
  129. cur = k
  130. draw_text_ex(font25,"SRC:{}".format(k),[grid_x-20,5], 25, 0, VIOLET)
  131. for i,v in enumerate(DMX):
  132. #print(i,v)
  133. if v:
  134. host_list[k][-1] +=1
  135. txt = str(i)+":"+str(v)
  136. txt = str(v)
  137. x2 = grid_x+xi*25
  138. y2 = grid_y+yi*15
  139. try:
  140. draw_rectangle(x2-2, y2-2,24,13,[255,255,255,int(v)])
  141. except:
  142. draw_rectangle(x2-2, y2-2,24,13,[255,2,2,255])
  143. try:
  144. int(v)
  145. except:
  146. v=0
  147. if int(v) > 100:
  148. draw_text_ex(font10,txt, [x2,y2], font_size, 0, BLACK)# VIOLET)
  149. else:
  150. draw_text_ex(font10,txt, [x2,y2], font_size, 0, GREY)# VIOLET)
  151. xi+=1
  152. if xi % 20 == 0:
  153. txt = str(int(yi*20)+1)
  154. draw_text_ex(font10,txt, [grid_x-30,y2], font_size, 0, YELLOW)# VIOLET) # ROEW NR
  155. xi = 0
  156. yi += 1
  157. txt = str(int(yi*20)+1)
  158. draw_text_ex(font10,txt, [grid_x-30,y2], font_size, 0, YELLOW)# VIOLET) # ROEW NR
  159. p=0
  160. for k,v in host_list.items():
  161. #for k in keys:
  162. # HOST LIST
  163. x2 = 10
  164. y2 = grid_y+p
  165. txt =str(k)+" "+str(v).replace(" ","").replace("[","").replace("]","")
  166. #draw_rectangle(x2-2, y2-2,200,18,[125,125,125,255])
  167. #draw_text_ex(font10,txt, [x2,y2], font_size, 0, BLACK) # YELLOW)# VIOLET)
  168. p+=22
  169. btn=BUTTON(None,txt,[y2,x2,20,190])
  170. #btn.btn.btn1.color = [55,155,155,255]
  171. btn.btn.btn1.color_on = [255,255,0,255]
  172. if cur in btn.btn.btn1.name:
  173. btn.btn.btn1.val.set(255)
  174. buttons.append(btn)
  175. w=200
  176. h=50
  177. x=200
  178. y=200
  179. draw_text_ex(font25,"FPS:{}".format(fps_count),[10,5], 25, 0, VIOLET)
  180. m=get_mouse_position()
  181. #print(m)
  182. if m.x != old_x or m.y != old_y:
  183. old_x = m.x
  184. old_y = m.y
  185. mouse=[None,None,None]
  186. if is_mouse_button_released(0):
  187. mouse[0] = "release"
  188. if is_mouse_button_released(1):
  189. mouse[1] = "release"
  190. if is_mouse_button_released(2):
  191. mouse[2] = "release"
  192. if is_mouse_button_pressed(0):
  193. mouse[0] = "press"
  194. if is_mouse_button_pressed(1):
  195. mouse[1] = "press"
  196. if is_mouse_button_pressed(2):
  197. mouse[2] = "press"
  198. if mouse != mouse_old and mouse != [None,None,None]:
  199. print(mouse)
  200. mouse_old = mouse[:]
  201. for btn in buttons:
  202. btn.event(old_x,old_y,mouse_old)
  203. btn.draw()
  204. draw_text_ex(font20,"POS:{}:{}".format(int(m.x),int(m.y)),[10,34], 20, 0, VIOLET)
  205. draw_rectangle(int(old_x-10),int(old_y-1),20,2,[255,0,255,255])
  206. draw_rectangle(int(old_x-1),int(old_y-10),2,20,[255,0,255,255])
  207. end_drawing()
  208. time.sleep(1/10)
  209. frame_count += 1
  210. if time.time()-start > 1:
  211. start = time.time()
  212. fps_count = frame_count
  213. frame_count = 0
  214. except KeyboardInterrupt as e:
  215. raise e
  216. except Exception as e:# KeyInterupt
  217. print("err",e)
  218. import traceback
  219. print(traceback.format_exc())
  220. time.sleep(1)
  221. close_window()