fix.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. #from pyray import *
  2. import pyray
  3. import sys
  4. sys.path.insert(0,"/opt/LibreLight/Xdesk/")
  5. CAPTION = 'RAY-FIX-LIST'
  6. import tool.movewin as movewin
  7. import pathlib
  8. _file_path=pathlib.Path(__file__)
  9. print("file:",_file_path)
  10. movewin.check_is_started(CAPTION,_file_path)
  11. win_title =CAPTION.strip().split()[-1]
  12. store = movewin.load_all_sdl(win_title)
  13. print(store)
  14. POS=[10,10]
  15. if store:
  16. POS=[store[-2],store[-1]]
  17. #pyray.glfw_window_hint(4,1)
  18. #glfw_init_hint
  19. for i in dir(pyray):
  20. if "hint" in i.lower():
  21. print(i)
  22. #pyray.SetConfigFlags(FLAG_WINDOW_RESIZABLE);
  23. #pyray.ConfigFlags(pyray.FLAG_WINDOW_RESIZABLE )
  24. #for i in range(1,20):
  25. # try:
  26. # pyray.ConfigFlags(i) #pyray.FLAG_WINDOW_RESIZABLE )
  27. # except Exception as e:
  28. # print(e)
  29. pyray.init_window(760, 450, CAPTION) #"RAY-DMX")#,10,10,10,10)
  30. #pyray.init_window(0, 0, CAPTION) #"RAY-DMX")#,10,10,10,10)
  31. pyray.ConfigFlags(pyray.FLAG_WINDOW_RESIZABLE )
  32. #pyray.SetWindowMaxSize(2000,2000)
  33. pyray.set_window_min_size(200,200)
  34. pyray.set_window_max_size(1000,1000)
  35. #pyray.set_window_state()
  36. #pyray.TextureFilter(font10,1)
  37. #FLAG_RESIZABLE_WINDOW
  38. #POS=[100,200]
  39. #pyray.set_window_size(POS[0],POS[1])
  40. #POS=[200,100]
  41. #pyray.set_window_size(POS[0],POS[1])
  42. win_con = movewin.Control()
  43. win_con.title = win_title
  44. win_con.winfo()
  45. if POS:
  46. win_con.move(POS[0],POS[1])
  47. print(POS,win_con.title)
  48. #exit()
  49. import sys
  50. sys.path.insert(0,"/opt/LibreLight/Xdesk/")
  51. import tool.tk_elm as tk_elm
  52. #import tool.sdl_elm as sdl_elm
  53. img = "/opt/LibreLight/Xdesk/icon/scribble.png"
  54. IMG = pyray.load_image(img)
  55. print(pyray.set_window_icon(IMG))
  56. import time
  57. import memcache
  58. mc = memcache.Client(['127.0.0.1:11211'], debug=0)
  59. #x=mc.get(k)
  60. old_x = -10
  61. old_y = -10
  62. start = time.time()
  63. frame_count = 0
  64. fps_count = 0
  65. a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  66. a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
  67. k=200
  68. a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  69. font10l = pyray.load_font_ex(a, 10, None, 0);
  70. a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
  71. font10 = pyray.load_font_ex(a, 12, None, 0);
  72. print(dir(font10))
  73. print(font10.baseSize)
  74. ##exit()
  75. font20 = pyray.load_font_ex(a, 20, None, 0);
  76. a = "/usr/share/fonts/truetype/freefont/FreeMono.ttf"
  77. a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
  78. a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  79. font25 = pyray.load_font_ex(a, 25, None, 0);
  80. pyray.TextureFilter(3)
  81. class EVENT():
  82. def __init__(self):
  83. self.dict = {}
  84. self.type = 0
  85. self.button=10
  86. self.buttons=[0,0,0,0]
  87. xevent=EVENT()
  88. class BUTTON():
  89. def __init__(self,master=None,txt="<BUTTON>",pos=[10,10,20,90]):
  90. #self.btn = tk_elm.Button(None,pos=[390,12,20,90])
  91. self.btn = tk_elm.Button(master,pos=pos)
  92. self.btn.btn1.color = [127,127,127,255]
  93. #self.btn.btn1.type = "toggle"
  94. #self.btn.btn2.type = "toggle"
  95. #self.btn.btn3.type = "toggle"
  96. #btn.btn1.color_on = [155,155,155,255]
  97. #btn.btn2.color = [155,55,155,255]
  98. #btn.btn2.color_on = [155,155,155,255]
  99. self.btn.btn3.color = [55,155,155,255]
  100. self.btn.btn3.color_on = [55,255,255,255]
  101. self.btn.btn2.color_on = [55,255,255,255]
  102. self.btn.btn1.name=txt
  103. #x=btn.btn1.name
  104. def draw(self,event=None):
  105. font_size = font10.baseSize
  106. pos=self.btn.pos
  107. c=[122,122,122,122] #btn.btn2.get_color()
  108. pyray.draw_rectangle(pos[1],pos[0],pos[3],pos[2],c)
  109. c=self.btn.btn1.get_color()
  110. pyray.draw_rectangle(pos[1]+2,pos[0]+2,pos[3]-4,pos[2]-4,c)
  111. c=self.btn.btn3.get_color()
  112. #pyray.draw_rectangle(pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2,c)
  113. pyray.draw_rectangle_lines_ex([pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2],1,c)
  114. x=self.btn.btn1.name
  115. 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)
  116. def event(self,x,y,mouse):
  117. try:
  118. #print("POS:",old_x,old_y,mouse,xevent.type)
  119. xevent.dict={"pos":[old_y,old_x],"button":1,"buttons":[0,0,0]}
  120. #xevent.type=3
  121. for i,v in enumerate(mouse):
  122. if i==0:
  123. if v == "release":
  124. xevent.type=6
  125. xevent.dict["button"] = 1
  126. #self.btn.btn1.val.set(0)
  127. if v == "press":
  128. xevent.type=5
  129. xevent.dict["button"] = 1
  130. #self.btn.btn1.val.set(255)
  131. xevent.dict["buttons"] = mouse
  132. #print(xevent.dict,xevent.type,xevent.button)
  133. self.btn.event(xevent)
  134. except Exception as e:
  135. import traceback
  136. print(traceback.format_exc())
  137. raise e
  138. mouse_box_on = 0
  139. mouse_box_on_pos = [0,0]
  140. def draw_mouse_box(window,pos1,mouse=[None,None,None],color=[128,128,128],text=1):
  141. global mouse_box_on_pos
  142. global mouse_box_on
  143. if mouse[0]=="click":#"press":
  144. if mouse_box_on == 0:
  145. pos2 = pos1[:]
  146. mouse_box_on_pos = pos2
  147. mouse_box_on = 1
  148. else:
  149. mouse_box_on = 0
  150. if mouse[0]=="press":
  151. pos2 = mouse_box_on_pos[:]
  152. w=pos1[0]-pos2[0]
  153. h=pos1[1]-pos2[1]
  154. pos = pos2[:]
  155. #print(pos1,pos2,h,w)
  156. wd=1
  157. hd=1
  158. if w < 0:
  159. pos[0] = pos1[0]
  160. w*=-1
  161. wd=-1
  162. if h < 0:
  163. pos[1] = pos1[1]
  164. h*=-1
  165. hd=-1
  166. if w > 10 or h > 10:
  167. c=[255,255,255,255]
  168. pyray.draw_rectangle_lines_ex([pos[0],pos[1],w,h],1,c)
  169. font_size = font10l.baseSize
  170. pyray.draw_text_ex(font10l,str(pos1[0])+" "+str(pos1[1]), [pos1[0],pos1[1]-10], font_size, 0, pyray.WHITE)
  171. pyray.draw_text_ex(font10l,str(pos2[0])+" "+str(pos2[1]), [pos2[0]+5,pos2[1]+10], font_size, 0, pyray.WHITE)
  172. pyray.draw_text_ex(font10l,str(w), [pos2[0]+5+w/2*wd,pos2[1]], font_size, 0, pyray.WHITE)
  173. pyray.draw_text_ex(font10l,str(h), [pos2[0]+5,pos2[1]+h/2*hd], font_size, 0, pyray.WHITE)
  174. return pos1,pos2
  175. mouse_old=[None,None,None]
  176. def check_area_v(v1,v2,event_v):#elm_pos,event_pos):
  177. if event_v < v1+1:
  178. return 0
  179. if event_v > v2-1:
  180. return 0
  181. return 1
  182. def check_area(pos,event_pos):
  183. v2 = pos[0]+pos[2]
  184. x = check_area_v(pos[0],v2,event_pos[0])
  185. v2 = pos[1]+pos[3]
  186. y = check_area_v(pos[1],v2,event_pos[1])
  187. if x and y:
  188. return 1
  189. buttons={} #[]
  190. cur = None
  191. history = []
  192. add=0
  193. while not pyray.window_should_close():
  194. pyray.begin_drawing()
  195. pyray.clear_background(pyray.BLACK)
  196. pyray.Color(255,0,0,0)
  197. pyray.rl_enable_smooth_lines()
  198. font_size = font10.baseSize
  199. try:
  200. DATA=mc.get("fix")#cmd)
  201. GREY = [122,122,122,255]
  202. p=0
  203. keys = []
  204. host_list = {}
  205. for k in DATA:
  206. #print(k,DATA[k])
  207. #print(k)
  208. keys.append(k)
  209. host_list[k] = DATA[k] #[0]).ljust(" ",18) #,0,"=",0]
  210. keys.sort()
  211. k=keys[0]
  212. if cur is None:
  213. cur = k #k[3] #"xx123" # k
  214. p=0
  215. start = 0
  216. end = start+10
  217. i=0
  218. for k,v in host_list.items():
  219. if i > end:
  220. break
  221. if i < start:
  222. continue
  223. x2 = 30
  224. y2 = 60+p #grid_y+p
  225. v = str(v).replace(" ","").replace("[","").replace("]","")
  226. txt = str(k)+" "+str(v)
  227. key = txt.split(" ")[0]
  228. p+=32
  229. if key in buttons:
  230. btn = buttons[key]
  231. else:
  232. btn=BUTTON(None,txt,[y2,x2,30,690])
  233. buttons[key] = btn
  234. print("ADD",key,btn)
  235. add=1
  236. btn.btn.btn1.name = txt
  237. btn.btn.btn1.color_on = [255,255,0,255]
  238. btn.btn.btn1.val.set(0)
  239. #if cur in btn.btn.btn1.name:
  240. # btn.btn.btn1.val.set(255)
  241. # #btn.btn.btn1.press() #val.set(255)
  242. i+=1
  243. if add:
  244. add=0
  245. print()
  246. w=200
  247. h=50
  248. x=200
  249. y=200
  250. pyray.draw_text_ex(font25,"FPS:{}".format(fps_count),[10,5], 25, 0, pyray.VIOLET)
  251. m=pyray.get_mouse_position()
  252. #print(m)
  253. if m.x != old_x or m.y != old_y:
  254. old_x = m.x
  255. old_y = m.y
  256. mouse=[None,None,None]
  257. mouse_change=0
  258. for i in range(3):
  259. ev = ""
  260. if pyray.is_mouse_button_released(i):
  261. ev = "release"
  262. if pyray.is_mouse_button_pressed(i):
  263. ev = "click" #"press"
  264. if ev and ev != mouse[i]:
  265. mouse[i] = ev
  266. mouse_change=1
  267. if mouse != mouse_old and mouse != [None,None,None]:
  268. #print(mouse)
  269. mouse_old = mouse[:]
  270. for k,btn in buttons.items():
  271. btn.event(old_x,old_y,mouse_old)
  272. #if "press" == mouse_old[0]:
  273. if "release" == mouse_old[0]:
  274. btn.button = 1
  275. #if check_area(btn.btn.pos,[old_x,old_y]):#event_pos):
  276. if check_area(btn.btn.pos,[old_y,old_x]):#event_pos):
  277. #print(k,btn.btn.pos)
  278. #btn.btn.btn1.val.set(255)
  279. #cur = k
  280. cur = k # btn.btn.btn1.name
  281. btn.draw()
  282. aapos = draw_mouse_box(None,[old_x,old_y],mouse_old,color=[128,128,128],text=1)
  283. pyray.draw_text_ex(font20,"POS:{}:{}".format(int(m.x),int(m.y)),[10,34], 20, 0, pyray.VIOLET)
  284. pyray.draw_rectangle(int(old_x-10),int(old_y-1),20,2,[255,0,255,255])
  285. pyray.draw_rectangle(int(old_x-1),int(old_y-10),2,20,[255,0,255,255])
  286. pyray.end_drawing()
  287. time.sleep(1/11)
  288. for i,v in enumerate(mouse_old):
  289. if v == "release":
  290. mouse_old[i] = None
  291. if v == "click":
  292. mouse_old[i] = "press"
  293. #print(mouse_old)
  294. frame_count += 1
  295. if time.time()-start > 1:
  296. start = time.time()
  297. fps_count = frame_count
  298. frame_count = 0
  299. #pyray.set_window_size(POS[0],POS[1])
  300. #POS[0]+=1
  301. if pyray.is_window_resized():
  302. print( "RESIZE WINDOW OK")
  303. #print(pyray.FLAG_WINDOW_RESIZABLE )
  304. except KeyboardInterrupt as e:
  305. raise e
  306. except Exception as e:# KeyInterupt
  307. print("err",e)
  308. import traceback
  309. print(traceback.format_exc())
  310. time.sleep(1)
  311. pyray.close_window()