fix.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. import math
  2. import random
  3. import time
  4. import os
  5. import sys
  6. HOME = os.getenv('HOME')
  7. START = time.time()
  8. _START = time.time()
  9. from optparse import OptionParser
  10. ...
  11. parser = OptionParser()
  12. parser.add_option("-m", "--mode", dest="mode",
  13. help="pixel mode") #, metavar="FILE")
  14. parser.add_option("-X", "--XX", dest="XX", #default=1,
  15. help="x-split") #, metavar="FILE")
  16. parser.add_option("-x", "--xx", dest="xsplit", #default=1,
  17. help="x-split") #, metavar="FILE")
  18. parser.add_option("-y", "--yy", dest="ysplit",#default=1,
  19. help="y-split") #, metavar="FILE")
  20. parser.add_option("-s", "--start-univ", dest="start_univ",#default=1,
  21. help="set start-univers default=2") #, metavar="FILE")
  22. parser.add_option("-g", "--gobo-ch", dest="gobo_ch",#default=1,
  23. help="gobo ch univ on 1") #, metavar="FILE")
  24. #parser.add_option("-f", "--file", dest="filename",
  25. # help="write report to FILE", metavar="FILE")
  26. #parser.add_option("-q", "--quiet",
  27. # action="store_false", dest="verbose", default=True,
  28. # help="don't print status messages to stdout")
  29. (options, args) = parser.parse_args()
  30. def load_window_position():
  31. try:
  32. base = Base()
  33. fname = HOME+"/LibreLight"
  34. fname = base.show_path1 +base.show_name
  35. fname += "/gui.txt"
  36. print("load_window_position",fname)
  37. f = open(fname,"r")
  38. data = {}
  39. for line in f.readlines():
  40. line = line.strip()
  41. if " " in line:
  42. k,geo = line.split(" ",1)
  43. data[k] = geo
  44. for k,win in window_manager.windows.items():
  45. if not win:
  46. continue
  47. if k in data:
  48. try:
  49. #print("> ",[k,data[k]])
  50. win.tk.geometry(data[k])
  51. except Exception as e:
  52. cprint("load_window_position Exception:",e,color="red")
  53. #print("winfo",k,win.tk.geometry())
  54. f.close()
  55. except Exception as e:
  56. cprint("load_window_position Exception:",e,color="red")
  57. return
  58. # ===== GUI =========
  59. import pygame
  60. import pygame.gfxdraw
  61. import pygame.font
  62. #os.environ['SDL_VIDEO_WINDOW_POS'] = '%i,%i' % (200,55)
  63. #os.environ['SDL_VIDEO_CENTERED'] = '0'
  64. pg = pygame
  65. pygame.init()
  66. import random
  67. CAPTION = 'NEXTGEN GUI id:{}'.format(random.randint(10000,90000))
  68. pg.display.set_caption(CAPTION)
  69. pygame.mixer.quit()
  70. f = pygame.font.get_fonts()
  71. f = list(f)
  72. f.sort()
  73. for i in f:
  74. if 1:# "mono" in i.lower():
  75. print(i)
  76. font0 = pygame.font.SysFont("freesans",10)
  77. font0b = pygame.font.SysFont("freesansbold",10)
  78. font = pygame.font.SysFont("freemonobold",22)
  79. font10 = pygame.font.SysFont("freemonobold",10)
  80. font12 = pygame.font.SysFont("freemonobold",12)
  81. font15 = pygame.font.SysFont("freemonobold",15)
  82. font22 = pygame.font.SysFont("FreeSans",22)
  83. #font = pygame.font.SysFont(None,30)
  84. fr = font.render("hallo" ,1, (200,0,255))
  85. class Layout():
  86. def __init__(self,master):
  87. self.master = master
  88. def pack(self,**args):
  89. pass
  90. def grid(self,**args):
  91. pass
  92. def bind(self,**args):
  93. pass
  94. class Button():
  95. def __init__(self,window,pos):
  96. self.window = window
  97. self.event_pos = [0,0]
  98. self.w = 20
  99. self.h = 10
  100. self.pos = pos
  101. self.on = 0
  102. self.bd = [0,255,0]
  103. self.on_bg = [255,255,0]
  104. self.rgb = (0xaa,0xaa,0xaa,127)
  105. self.__layout = Layout(self)
  106. self.pack = self.__layout.pack
  107. self.grid = self.__layout.grid
  108. self.bind = self.__layout.bind
  109. self.text = "line1\nline2"
  110. self.motion = 0
  111. def draw(self,text="GOBO1"):
  112. #pos = [160,100,70,60]
  113. #rgb = (0xdd,0xdd,0xdd,0)
  114. #rgb = (0xaa,0xaa,0xaa,0)
  115. pos = self.pos
  116. rgb = self.rgb
  117. window.set_alpha(128)
  118. if self.on:
  119. rgb = self.on_bg
  120. pygame.draw.rect(self.window,rgb,pos)
  121. r = pos[1]+6
  122. for i in self.text.split("\n"):
  123. fr = font0.render(i ,1, (0,0,0))
  124. #fr = font.render("You win!", True, BLACK)
  125. #text_rect = fr.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
  126. self.window.blit(fr,(pos[0]+4,r))
  127. r += 10
  128. self._check_event()
  129. self._draw_bd(color=(0xaa,0xaa,0xaa))
  130. self._draw_bd(delta=-1)
  131. self._draw_bd(delta=-2,highlight=1,color=self.bd)
  132. def _check_event(self):
  133. self.bd = [125,125,125]
  134. self.motion = 0
  135. if self.event_pos[0] < self.pos[0]+1:
  136. return #continue
  137. if self.event_pos[0] > self.pos[0]+self.pos[2]-1:
  138. return #continue
  139. if self.event_pos[1] < self.pos[1]+1:
  140. return #continue
  141. if self.event_pos[1] > self.pos[1]+self.pos[3]-1:
  142. return #continue
  143. #print(">>",self.event_pos)
  144. self.bd = [200,200,200]
  145. self.motion = 1
  146. def _draw_bd(self,delta=0,highlight=0,color=[0,0,0]):
  147. pos = self.pos
  148. d = delta
  149. xpos = (
  150. (pos[0]-d ,pos[1]-d),
  151. (pos[0]+pos[2]+d-1 ,pos[1]-d),
  152. (pos[0]+pos[2]+d-1 ,pos[1]+pos[3]+d-1),
  153. (pos[0]-d ,pos[1]+pos[3]+d-1)
  154. )
  155. i_old = None
  156. ypos = []
  157. for i in xpos:
  158. if i_old:
  159. ypos.append( (i_old,i) )
  160. i_old = i
  161. ypos.append( (i_old,xpos[0]) )
  162. for i in ypos:
  163. #print("ypos",i)
  164. pygame.draw.aaline(window,color,i[0],i[1],1)
  165. def event(self,event=None):
  166. #print(self.pos)
  167. if "pos" in event.dict:
  168. self.event_pos = event.pos
  169. self._check_event()
  170. if self.motion:
  171. #print(self,"Motion.event",event)
  172. if "button" in event.dict:
  173. print("-",self,"Button.event",event.dict)
  174. print(type(event))
  175. if event.type == 5:
  176. if event.button == 1:
  177. if self.on:
  178. self.on = 0
  179. else:
  180. self.on = 1
  181. def draw_box(pos1,pos2,color=[128,128,128],text=1):
  182. color = [200,0,0,127]
  183. if text:
  184. fr = font15.render("A" ,1, (200,200,200))
  185. window.blit(fr,pos1)
  186. fr = font15.render("B" ,1, (200,200,200))
  187. window.blit(fr,[pos2[0]-10,pos2[1]-10])
  188. # h unten
  189. _pos1 = [pos1[0],pos2[1]]
  190. _pos2 = [pos2[0],pos2[1]]
  191. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  192. color = [255,255,0,127]
  193. # h rechts
  194. _pos1 = [pos2[0],pos1[1]]
  195. _pos2 = [pos2[0],pos2[1]]
  196. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  197. color = [0,200,0,127]
  198. # h links
  199. _pos1 = [pos1[0],pos1[1]]
  200. _pos2 = [pos1[0],pos2[1]]
  201. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  202. color = [0,0,200,127]
  203. # h oben
  204. _pos1 = [pos1[0],pos1[1]]
  205. _pos2 = [pos2[0],pos1[1]]
  206. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  207. main_size=(500,500)
  208. window = pygame.display.set_mode(main_size,pg.RESIZABLE,32)#,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  209. #pygame.mouse.set_cursor(pygame.SYSTEM_CURSOR_ARROW)
  210. class Gevent():
  211. def __init__(self):
  212. self.drag = 0
  213. self.pos1 = [0,0]
  214. self.pos2 = [0,0]
  215. self.event_pos = [0,0]
  216. self.gain = 0
  217. def check_in(self,elem):
  218. print(self.event_pos)
  219. print(self.pos1)
  220. print(self.pos2)
  221. print(elem.pos)
  222. def draw(self,delta=0,highlight=0,color=[0,255,0]):
  223. if self.pos1 == [0,0]:
  224. return
  225. if self.pos2 == [0,0]:
  226. return
  227. #if not self.drag:
  228. # return
  229. pos1 = [self.pos1[0],self.pos1[1]]
  230. pos2 = [self.pos2[0],self.pos2[1]]
  231. #pygame.draw.aaline(window,color,pos1,pos2,1)
  232. color = [200,0,0,127]
  233. draw_box(self.pos1,self.pos2)
  234. return 0
  235. fr = font15.render("A" ,1, (200,200,200))
  236. window.blit(fr,self.pos1)
  237. fr = font15.render("B" ,1, (200,200,200))
  238. window.blit(fr,[self.pos2[0]-10,self.pos2[1]-10])
  239. # h unten
  240. pos1 = [self.pos1[0],self.pos2[1]]
  241. pos2 = [self.pos2[0],self.pos2[1]]
  242. pygame.draw.aaline(window,color,pos1,pos2,1)
  243. color = [255,255,0,127]
  244. # h rechts
  245. pos1 = [self.pos2[0],self.pos1[1]]
  246. pos2 = [self.pos2[0],self.pos2[1]]
  247. pygame.draw.aaline(window,color,pos1,pos2,1)
  248. color = [0,200,0,127]
  249. # h links
  250. pos1 = [self.pos1[0],self.pos1[1]]
  251. pos2 = [self.pos1[0],self.pos2[1]]
  252. pygame.draw.aaline(window,color,pos1,pos2,1)
  253. color = [0,0,200,127]
  254. # h oben
  255. pos1 = [self.pos1[0],self.pos1[1]]
  256. pos2 = [self.pos2[0],self.pos1[1]]
  257. pygame.draw.aaline(window,color,pos1,pos2,1)
  258. def event(self,event):
  259. print("GLOBAL",self,self.event_pos,event,event.type)
  260. if event.type == pygame.QUIT:
  261. pygame.quit()
  262. sys.exit(0)
  263. elif event.type == pygame.VIDEORESIZE:
  264. scrsize = event.size
  265. width = event.w
  266. hight = event.h
  267. screen = pygame.display.set_mode(scrsize,pg.RESIZABLE)
  268. changed = True
  269. if "pos" in event.dict:
  270. self.event_pos = event.pos
  271. #self._check_event()
  272. if "button" in event.dict:
  273. if event.button == 1 and event.type == 5: # and self.drag:
  274. self.pos1 = self.event_pos
  275. self.drag = 0
  276. if "buttons" in event.dict:
  277. if event.buttons[0] == 1:
  278. self.pos2 = self.event_pos
  279. self.drag = 1
  280. else:
  281. self.drag = 0
  282. if "gain" in event.dict:
  283. self.gain = event.gain
  284. global_event = Gevent()
  285. import sys
  286. sys.path.insert(0,"tool")
  287. #import tool.movewin
  288. import movewin
  289. _id = movewin.winfo(CAPTION)
  290. c1 = movewin.movewin(_id,200,50)
  291. os.system(c1)
  292. c1 = movewin.activate(_id)
  293. os.system(c1)
  294. #exit()
  295. def main():
  296. START = time.time()
  297. running = 1
  298. frame = 0
  299. fps = 0
  300. b0 = Button(window,pos=[80,80,50,40])
  301. b1 = Button(window,pos=[100,100,60,40])
  302. b2 = Button(window,pos=[200,200,60,40])
  303. b2a = Button(window,pos=[260,200,60,40])
  304. b3 = Button(window,pos=[1500,800,60,40])
  305. table = []
  306. r = 0
  307. for i in range(20):
  308. bx = Button(window,pos=[20,150+r,60,20])
  309. bx.text = "FIX:{}".format(i+1)
  310. bx.on_bg = [255,0,255]
  311. table.append(bx)
  312. r+=20
  313. while running:
  314. pygame.display.flip()
  315. #event()
  316. pos = [160,10,70,60]
  317. rgb = (0xdd,0xdd,0xdd,0)
  318. rgb = (0xaa,0xaa,0xaa,0)
  319. window.fill((0,0,0))
  320. fr = font22.render("DEMO / TEST - MODE !" ,1, (200,200,200))
  321. window.blit(fr,(10,30 ))
  322. fr = font15.render("{}".format(pos[1]) ,1, (200,200,200))
  323. window.blit(fr,(10,pos[1] ))
  324. fr = font15.render("{}".format(fps) ,1, (200,200,200))
  325. window.blit(fr,(30,pos[1] ))
  326. fr = font15.render("{}".format(frame) ,1, (200,200,200))
  327. window.blit(fr,(60,pos[1] ))
  328. fr = font15.render("{:03}".format(int((START+1-time.time())*100)) ,1, (200,200,200))
  329. window.blit(fr,(80,pos[1] ))
  330. #print(window,rgb,pos)
  331. #pygame.draw.rect(window,rgb,pos)
  332. #pygame.draw.rect(window,(255,0,0),(15,15,20,10))
  333. for event in pygame.event.get():
  334. global_event.event(event)
  335. b0.event(event)
  336. b1.event(event)
  337. b2.event(event)
  338. b2a.event(event)
  339. b3.event(event)
  340. for t in table:
  341. t.event(event)
  342. b0.draw()
  343. b1.draw()
  344. b2.draw()
  345. b2a.draw()
  346. b3.draw()
  347. c = (200,200,200)
  348. #for t in table:
  349. # global_event.check_in(t)
  350. for t in table:
  351. t.draw()
  352. global_event.check_in(t)
  353. fr = font15.render("A:{}".format(str(global_event.pos1)) ,1, c)
  354. window.blit(fr,(200,pos[1] ))
  355. fr = font15.render("B:{}".format(str(global_event.pos2)) ,1, c)
  356. window.blit(fr,(200,pos[1]+10 ))
  357. if global_event.gain:
  358. c = (0,255,0)
  359. #blue box
  360. if global_event.pos1[0] > global_event.event_pos[0] and global_event.pos2[0] < global_event.event_pos[0]:
  361. #c = (0,0,255)
  362. if global_event.pos1[1] > global_event.event_pos[1] and global_event.pos2[1] < global_event.event_pos[1]:
  363. c = (0,0,255)
  364. # red box
  365. if global_event.pos1[0] < global_event.event_pos[0] and global_event.pos2[0] > global_event.event_pos[0]:
  366. #c = (0,0,255)
  367. if global_event.pos1[1] < global_event.event_pos[1] and global_event.pos2[1] > global_event.event_pos[1]:
  368. c = (255,0,0)
  369. fr = font15.render("{:03}/{:03}".format(global_event.event_pos[0],global_event.event_pos[1]) ,1, c)
  370. window.blit(fr,(120,pos[1] ))
  371. global_event.draw()
  372. #pygame.display.flip()
  373. pg.time.wait(30)
  374. pg.time.wait(30)
  375. #pg.time.wait(30)
  376. frame += 1
  377. if START+1 < time.time():
  378. fps = frame
  379. frame = 0
  380. START = time.time()
  381. if __name__ == "__main__":
  382. main()