tkevent.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789
  1. #!/usr/bin/python3
  2. import sys
  3. import time
  4. import traceback
  5. from lib.cprint import cprint
  6. import __main__ as MAIN
  7. import lib.baselib as baselib
  8. import lib.fxlib as fxlib
  9. import lib.libtk as libtk
  10. import tkgui.dialog as dialoglib
  11. import lib.tkrefresh as tkrefresh
  12. dialog = dialoglib.Dialog()
  13. class tk_event():
  14. """ global input event Handeler for short cut's ... etc
  15. """
  16. def __init__(self,fix,elem,attr=None,data=None,mode=None):
  17. self.fix = fix
  18. self.data=data
  19. self.attr = attr
  20. self.elem = elem
  21. self.mode = mode
  22. def setup(self,event):
  23. cprint("tk_event.SETUP",[self.mode,self.attr],color="red")
  24. if self.mode != "SETUP":
  25. return 0
  26. if self.attr == "SAVE\nSHOW":
  27. self.elem["bg"] = "orange"
  28. self.elem["text"] = "SAVING..."
  29. self.elem["bg"] = "red"
  30. self.elem.config(activebackground="orange")
  31. MAIN.modes.val(self.attr,1)
  32. MAIN.save_show()
  33. self.elem["bg"] = "lightgrey"
  34. self.elem.config(activebackground="lightgrey")
  35. b = libtk.BLINKI(self.elem)
  36. b.blink()
  37. self.elem["text"] = "SAVE\nSHOW"
  38. elif self.attr == "LOAD\nSHOW":
  39. name = "LOAD-SHOW"
  40. line1 = "PATH: " + baselib.current_show_path()
  41. line2 = "DATE: " + time.strftime("%Y-%m-%d %X", time.localtime(time.time()))
  42. class cb():
  43. def __init__(self,name=""):
  44. self.name=name
  45. cprint(" LOAD-SHOW.init",name)
  46. def cb(self,event=None,**args):
  47. cprint(" LOAD-SHOW.cdb",self.name,event,args)
  48. if self.name != "<exit>":
  49. cprint("-----------------------:")
  50. MAIN.LOAD_SHOW_AND_RESTART(self.name).cb()
  51. pw = libtk.PopupList(name,cb=cb)
  52. print(line1,line2)
  53. frame = pw.sframe(line1=line1,line2=line2)
  54. r = libtk.frame_of_show_list(frame,cb=cb)
  55. elif self.attr == "NEW\nSHOW":
  56. def _cb(data):
  57. if not data:
  58. cprint("err443",self,"_cb",data)
  59. return None
  60. fname = data["Value"]
  61. fpath = baselib.generate_show_path(fname)
  62. cprint("SAVE NEW SHOW",fpath,fname)
  63. if MAIN.save_show_as(fname,new=1):
  64. MAIN.LOAD_SHOW_AND_RESTART(fname).cb()
  65. dialog._cb = _cb
  66. dialog.askstring("CREATE NEW SHOW","CREATE NEW SHOW:")
  67. elif self.attr == "SAVE\nSHOW AS":
  68. #def _cb(fname):
  69. def _cb(data):
  70. if not data:
  71. cprint("err443",self,"_cb",data)
  72. return None
  73. fname = data["Value"]
  74. if MAIN.save_show_as(fname):
  75. MAIN.LOAD_SHOW_AND_RESTART(fname).cb()
  76. dialog._cb = _cb
  77. dialog.askstring("SAVE SHOW AS","SAVE SHOW AS:")
  78. elif self.attr == "SAVE &\nRESTART":
  79. self.elem["bg"] = "orange"
  80. self.elem["text"] = "SAVING..."
  81. self.elem["bg"] = "red"
  82. self.elem.config(activebackground="orange")
  83. MAIN.modes.val(self.attr,1)
  84. MAIN.save_show()
  85. self.elem["text"] = "RESTARTING..."
  86. self.elem["bg"] = "lightgrey"
  87. self.elem.config(activebackground="lightgrey")
  88. MAIN.LOAD_SHOW_AND_RESTART("").cb(force=1)
  89. elif self.attr == "DRAW\nGUI":
  90. old_text = self.elem["text"]
  91. window_manager.top("PATCH")
  92. gui_patch.draw(MAIN.FIXTURES)
  93. gui_fix.draw(MAIN.FIXTURES)
  94. window_manager.top("MAIN.FIXTURES")
  95. MAIN.master._refresh_exec()
  96. self.elem["text"] = old_text
  97. elif self.attr == "PRO\nMODE":
  98. MAIN.save_show()
  99. import lib.restart as restart
  100. restart.pro()
  101. elif self.attr == "EASY\nMODE":
  102. MAIN.save_show()
  103. import lib.restart as restart
  104. restart.easy()
  105. else:
  106. if IS_GUI:
  107. msg="{}\nnot implemented".format(self.attr.replace("\n"," "))
  108. r=tkinter.messagebox.showwarning(message=msg,parent=None)
  109. return 1
  110. def live(self,event):
  111. if self.mode != "LIVE":
  112. return 0
  113. if "FADE" in self.attr or "DELAY" in self.attr:
  114. if self.attr == "FADE":
  115. ct = FADE
  116. if self.attr == "DELAY":
  117. ct = DELAY
  118. if "PAN/TILT\nFADE" in self.attr:
  119. ct = FADE_move
  120. value = ct.val()
  121. #print("EVENT CHANGE ",[self.attr])
  122. cprint("EVENT CHANGE:",self.mode,value,self.attr)
  123. if value < 0:
  124. value = 1
  125. if event.num == 4:
  126. value += 0.1
  127. elif event.num == 5:
  128. value -= 0.1
  129. elif event.num == 1:
  130. if ct._is():
  131. ct.off()# = 0
  132. self.data.commands.elem[self.attr]["bg"] = "grey"
  133. self.elem.config(activebackground="grey")
  134. else:
  135. ct.on()# = 1
  136. self.data.commands.elem[self.attr]["bg"] = "green"
  137. self.elem.config(activebackground="lightgreen")
  138. elif event.num == 2:
  139. value += 1
  140. if value > 10:
  141. value = 1
  142. value = round(value,1)
  143. value = ct.val(value)
  144. if self.attr == "FADE":
  145. self.data.commands.elem[self.attr]["text"] = "FADE:\n{:0.2f}".format(value)
  146. if self.attr == "DELAY":
  147. self.data.commands.elem[self.attr]["text"] = "DELAY:\n{:0.3f}".format(value)
  148. if "PAN/TILT\nFADE" in self.attr:
  149. self.data.commands.elem[self.attr]["text"] = "PAN/TILT\nFADE:{:0.2f}".format(value)
  150. def command(self,event):
  151. if self.mode != "COMMAND":
  152. return 0
  153. if self.attr == "CLEAR":
  154. if event.num == 1:
  155. ok = MAIN.FIXTURES.clear()
  156. if ok:
  157. MAIN.master._refresh_fix()
  158. MAIN.modes.val(self.attr,0)
  159. elif self.attr == "SAVE":
  160. MAIN.modes.val(self.attr,1)
  161. MAIN.save_show()
  162. #MAIN.EXEC.backup_exec()
  163. #MAIN.FIXTURES.backup_patch()
  164. #time.sleep(1)
  165. MAIN.modes.val(self.attr,0)
  166. elif self.attr == "S-KEY":
  167. global _global_short_key
  168. if _global_short_key:
  169. _global_short_key = 0
  170. MAIN.master.commands.elem["S-KEY"]["bg"] = "red"
  171. MAIN.master.commands.elem["S-KEY"]["activebackground"] = "red"
  172. else:
  173. _global_short_key = 1
  174. MAIN.master.commands.elem["S-KEY"]["bg"] = "green"
  175. MAIN.master.commands.elem["S-KEY"]["activebackground"] = "green"
  176. cprint("s-key",_global_short_key)
  177. else:
  178. if event.num == 1:
  179. cprint("ELSE",self.attr)
  180. MAIN.modes.val(self.attr,1)
  181. return 0
  182. def encoder(self,event):
  183. cprint("tk_event","ENC",self.fix,self.attr,self.mode)
  184. cprint("SHIFT_KEY",MAIN._shift_key,"??????????")
  185. if self.mode == "ENCODER":
  186. if self._encoder(event):
  187. MAIN.master.refresh_fix() # delayed
  188. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  189. if self.mode == "ENCODER2":
  190. if self._encoder(event):
  191. MAIN.master.refresh_fix() # delayed
  192. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  193. if self.mode == "INVERT":
  194. cprint("INVERT",event)
  195. if self._encoder(event):
  196. MAIN.master.refresh_fix() # delayed
  197. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  198. def _encoder(self,event):
  199. cprint("-- tk_event","_ENC",self.fix,self.attr,self.mode)
  200. cprint("-- SHIFT_KEY",MAIN._shift_key,"??????????")
  201. val=""
  202. if event.num == 1:
  203. val ="click"
  204. elif event.num == 4:
  205. val ="++"
  206. if MAIN._shift_key:
  207. val = "+"
  208. elif event.num == 5:
  209. val ="--"
  210. if MAIN._shift_key:
  211. val = "-"
  212. #print("SHIFT",val,MAIN._shift_key)
  213. if val:
  214. MAIN.FIXTURES.encoder(fix=self.fix,attr=self.attr,xval=val)
  215. return 1
  216. def cb(self,event):
  217. cprint("EVENT cb",self.attr,self.mode,event,color='yellow')
  218. cprint(["type",event.type,"num",event.num])
  219. MAIN.INIT_OK = 1
  220. try:
  221. change = 0
  222. if "keysym" in dir(event):
  223. if "Escape" == event.keysym:
  224. ok = MAIN.FIXTURES.clear()
  225. MAIN.master._refresh_fix()
  226. cprint()
  227. return 0
  228. if self.mode == "SETUP":
  229. self.setup(event)
  230. elif self.mode == "COMMAND":
  231. self.command(event)
  232. elif self.mode == "LIVE":
  233. self.live(event)
  234. elif self.mode == "ENCODER":
  235. self.encoder(event)
  236. MAIN.master.refresh_fix()
  237. elif self.mode == "ENCODER2":
  238. self.encoder(event)
  239. elif self.mode == "INVERT":
  240. self.encoder(event)
  241. elif self.mode == "FX":
  242. cprint("tk_event CALLING FX WRONG EVENT OBJECT !!",color="red")
  243. elif self.mode == "ROOT":
  244. if event.keysym=="Escape":
  245. pass
  246. elif self.mode == "INPUT":
  247. cprint("INP",self.data.entry.get())
  248. if event.keycode == 36:
  249. x=self.data.entry.get()
  250. #client.send(x)
  251. elif self.mode == "INPUT2":
  252. cprint("INP2",self.data.entry2.get())
  253. if event.keycode == 36:
  254. x=self.data.entry2.get()
  255. #client.send(x)
  256. elif self.mode == "INPUT3":
  257. cprint("INP3",self.data.entry3.get())
  258. if event.keycode == 36:
  259. x=self.data.entry3.get()
  260. #client.send(x)
  261. elif self.mode == "EXEC":
  262. nr = self.attr #int(self.attr.split(":")[1])-1
  263. if event.num == 3: # right click for testing
  264. if str(event.type) == '4': #4 ButtonPress
  265. if MAIN.modes.val("CFG-BTN"):
  266. MAIN.master.btn_cfg(nr,testing=1)
  267. if event.num == 1:
  268. if str(event.type) == '4': #4 ButtonPress
  269. if MAIN.modes.val("REC"):
  270. self.data.exec_rec(nr)
  271. MAIN.modes.val("REC",0)
  272. time.sleep(0.05)
  273. MAIN.master._refresh_exec(nr=nr)
  274. elif MAIN.modes.val("DEL"):
  275. ok=MAIN.EXEC.delete(nr)
  276. if ok:
  277. MAIN.modes.val("DEL",0)
  278. #MAIN.master.refresh_exec()
  279. MAIN.master._refresh_exec(nr=nr)
  280. elif MAIN.modes.val("COPY"):
  281. ok=MAIN.EXEC.copy(nr)
  282. if ok:
  283. MAIN.modes.val("COPY",0)
  284. MAIN.master._refresh_exec(nr=nr)
  285. elif MAIN.modes.val("MOVE"):
  286. ok,cnr,bnr=MAIN.EXEC.move(nr)
  287. if ok:
  288. #MAIN.modes.val("MOVE",0) # keep MOVE on
  289. MAIN.master._refresh_exec(nr=nr)
  290. MAIN.master._refresh_exec(nr=bnr)
  291. elif MAIN.modes.val("CFG-BTN"):
  292. MAIN.master.btn_cfg(nr)
  293. #MAIN.master._refresh_exec(nr=nr)
  294. elif MAIN.modes.val("LABEL"):#else:
  295. MAIN.master.label(nr)
  296. #MAIN.master._refresh_exec(nr=nr)
  297. elif MAIN.modes.val("EDIT"):
  298. MAIN.FIXTURES.clear()
  299. self.data.exec_select(nr)
  300. self.data.exec_go(nr,xfade=0,event=event,val=255,button="go")
  301. MAIN.modes.val("EDIT", 0)
  302. MAIN.master.refresh_fix()
  303. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  304. elif MAIN.modes.val("SELECT"):
  305. self.data.exec_select(nr)
  306. else:
  307. self.data.exec_go(nr,event=event,val=255)
  308. else:
  309. self.data.exec_go(nr,xfade=0,event=event,val=0)
  310. #cprint(" == "*10)
  311. MAIN.master.refresh_fix()
  312. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  313. if event.num == 3:
  314. if not MAIN.modes.val("REC"):
  315. if str(event.type) == '4': #4 ButtonPress
  316. self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=255)
  317. else:
  318. self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=0)
  319. cprint()
  320. return 0
  321. elif self.mode == "INPUT":
  322. cprint()
  323. return 0
  324. except Exception as e:
  325. cprint("== cb EXCEPT",e,color="red")
  326. cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
  327. cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")
  328. cprint()
  329. return 1
  330. class tk_event_fx():
  331. """ global input event Handeler for short cut's ... etc
  332. """
  333. def __init__(self,fix,elem,attr=None,data=None,mode=None):
  334. self.fix = fix
  335. self.data = data
  336. self.attr = attr
  337. self.elem = elem
  338. self.mode = mode
  339. def fx(self,event):
  340. cprint("Xevent.fx",self.attr,self.fix,event)
  341. fx2 = {}
  342. if self.attr == "FX:RED":
  343. if event.num == 4:
  344. cprint("FX:COLOR CHANGE",MAIN.fx_prm,color="red")
  345. txt = "FX:RED"
  346. MAIN.fx_prm["MODE"] += 1
  347. if MAIN.fx_prm["MODE"] >= len(MAIN.fx_modes):
  348. MAIN.fx_prm["MODE"]=0
  349. txt = "FX:\n"+MAIN.fx_modes[MAIN.fx_prm["MODE"]]
  350. MAIN.master.fx_color.elem["FX:RED"]["text"] = txt
  351. elif event.num == 5:
  352. cprint("FX:COLOR CHANGE",MAIN.fx_prm,color="red")
  353. txt = "FX:RED"
  354. MAIN.fx_prm["MODE"] -= 1
  355. if MAIN.fx_prm["MODE"] < 0:
  356. MAIN.fx_prm["MODE"]= len(MAIN.fx_modes)-1
  357. txt = "FX:\n"+MAIN.fx_modes[MAIN.fx_prm["MODE"]]
  358. MAIN.master.fx_color.elem["FX:RED"]["text"] = txt
  359. if self.attr.startswith("2D"):
  360. if event.num == 4:
  361. cprint("2D-X: CHANGE",MAIN.fx_prm,color="red")
  362. txt = "2D-X:"
  363. MAIN.fx_prm["2D:MODE"] += 1
  364. if MAIN.fx_prm["2D:MODE"] >= len(fx_x_modes):
  365. MAIN.fx_prm["2D:MODE"]=0
  366. txt = "2D:MODE\n"+fx_x_modes[MAIN.fx_prm["2D:MODE"]]
  367. MAIN.master.fx.elem["2D:MODE"]["text"] = txt
  368. elif event.num == 5:
  369. cprint("2D-X: CHANGE",MAIN.fx_prm,color="red")
  370. txt = "2D-X:"
  371. MAIN.fx_prm["2D:MODE"] -= 1
  372. if MAIN.fx_prm["2D:MODE"] < 0:
  373. MAIN.fx_prm["2D:MODE"]= len(fx_x_modes)-1
  374. txt = "2D:MODE\n"+fx_x_modes[MAIN.fx_prm["2D:MODE"]]
  375. MAIN.master.fx.elem["2D:MODE"]["text"] = txt
  376. elif event.num == 1:
  377. xfixtures = []
  378. fix_active =MAIN.FIXTURES.get_active()
  379. for fix in fix_active:
  380. if fix == "CFG":
  381. continue
  382. xfixtures.append(fix)
  383. if not xfixtures:
  384. cprint("470 fx() ... init no fixture selected",color="red")
  385. return 0
  386. xfixtures = MAIN.process_matrix(xfixtures)
  387. wing_buffer = fxlib.process_wings(xfixtures,MAIN.fx_prm)
  388. fxlib.process_effect(
  389. wing_buffer,MAIN.fx_prm,MAIN.fx_prm_move,MAIN.modes,
  390. MAIN.jclient_send,MAIN.master,
  391. MAIN.FIXTURES,fx_name=self.attr
  392. )
  393. def command(self,event,mode=""):
  394. cprint("fx_command",self.mode)
  395. if self.mode == "FX":
  396. prm = MAIN.fx_prm
  397. ct = self.data.fx
  398. if self.mode == "FX-MOVE":
  399. prm = MAIN.fx_prm_move
  400. ct = self.data.fx_moves
  401. if 1:
  402. if self.attr.startswith("SIZE:"):#SIN":
  403. #global MAIN.fx_prm
  404. k = "SIZE"
  405. if event.num == 1:
  406. _stats = [0,30,100,255]
  407. if prm[k] in _stats:
  408. idx = _stats.index(prm[k])+1
  409. if idx > len(_stats)-1: #rotate
  410. idx = 0
  411. prm[k] = _stats[idx]
  412. else:
  413. prm[k] = _stats[1]
  414. elif event.num == 3:
  415. prm[k] =100
  416. elif event.num == 4:
  417. if prm[k] <= 0:
  418. prm[k] = 1
  419. prm[k] +=5
  420. elif event.num == 5:
  421. prm[k] -=5
  422. #prm[k] =int(prm[k])
  423. if prm[k] > 4000:
  424. prm[k] = 4000
  425. if prm[k] < 0:
  426. prm[k] =0
  427. if prm[k] == 6: #bug
  428. prm[k] =5
  429. ct.elem[self.attr]["text"] = "SIZE:\n{:0.0f}".format(prm[k])
  430. cprint(prm)
  431. elif self.attr.startswith("SPEED:"):#SIN":
  432. #global prm
  433. k = "SPEED"
  434. if event.num == 1:
  435. _stats = [0,5,25,30,100,255]
  436. if prm[k] in _stats:
  437. idx = _stats.index(prm[k])+1
  438. if idx > len(_stats)-1: #rotate
  439. idx = 0
  440. prm[k] = _stats[idx]
  441. else:
  442. prm[k] = 0
  443. elif event.num == 3:
  444. prm[k] = 10
  445. elif event.num == 4:
  446. if prm[k] <= 0:
  447. prm[k] = 0.06
  448. elif prm[k] < 5:
  449. prm[k] *=1.2
  450. else:
  451. prm[k] +=5 #1.1
  452. elif event.num == 5:
  453. if prm[k] <= 5:
  454. prm[k] *=0.8
  455. else:
  456. prm[k] -= 5 #1.1
  457. #prm[k] =int(prm[k])
  458. if prm[k] > 4000:
  459. prm[k] = 4000
  460. if prm[k] < 0.05:
  461. prm[k] =0
  462. if prm[k] > 5 and prm[k] < 10: #bug
  463. prm[k] =5
  464. if prm[k] < 0:
  465. ct.elem[self.attr]["text"] = "SPEED:\noff".format(prm[k])
  466. else:
  467. ct.elem[self.attr]["text"] = "SPEED:\n{:0.02f}".format(prm[k])
  468. cprint(prm)
  469. elif self.attr.startswith("START:"):#SIN":
  470. #global prm
  471. k = "START"
  472. if event.num == 1:
  473. pass
  474. elif event.num == 2:
  475. pass
  476. elif event.num == 4:
  477. if prm[k] <= 0:
  478. prm[k] = 1
  479. prm[k] += 5 #1.1
  480. elif event.num == 5:
  481. prm[k] -= 5 #1.1
  482. #prm[k] =int(prm[k])
  483. if prm[k] > 4000:
  484. prm[k] = 4000
  485. if prm[k] < 5:
  486. prm[k] =0
  487. if prm[k] == 6: #bug
  488. prm[k] =5
  489. ct.elem[self.attr]["text"] = "START:\n{:0.0f}".format(prm[k])
  490. cprint(prm)
  491. elif self.attr.startswith("WIDTH:"):#SIN":
  492. #global prm
  493. k = "WIDTH"
  494. if event.num == 1:
  495. _stats = [0,25,50,75,10]
  496. if prm[k] in _stats:
  497. idx = _stats.index(prm[k])+1
  498. if idx > len(_stats)-1: #rotate
  499. idx = 0
  500. prm[k] = _stats[idx]
  501. else:
  502. prm[k] = 25
  503. elif event.num == 2:
  504. prm[k] = 50
  505. elif event.num == 3:
  506. prm[k] = 100
  507. elif event.num == 4:
  508. if prm[k] <= 0:
  509. prm[k] = 1
  510. elif prm[k] == 50:
  511. prm[k] = 100
  512. elif prm[k] == 5:
  513. prm[k] = 25
  514. elif prm[k] == 25:
  515. prm[k] = 50
  516. else:
  517. prm[k] += 5 #*=1.1
  518. elif event.num == 5:
  519. if prm[k] == 10:
  520. prm[k] = 5
  521. elif prm[k] == 25:
  522. prm[k] = 10
  523. elif prm[k] == 50:
  524. prm[k] = 25
  525. elif prm[k] == 100:
  526. prm[k] = 50
  527. #else:
  528. # prm[k] -=5 #/=1.1
  529. #prm[k] =int(prm[k])
  530. if prm[k] < 0:
  531. prm[k] = 0
  532. if prm[k] > 100:
  533. prm[k] = 100
  534. if prm[k] == 6: #bug
  535. prm[k] =5
  536. if prm[k] > 25 and prm[k] < 50: #bug
  537. prm[k] =50
  538. if prm[k] > 50 and prm[k] < 75: #bug
  539. prm[k] =75
  540. if prm[k] > 75 and prm[k] < 100: #bug
  541. prm[k] =100
  542. ct.elem[self.attr]["text"] = "WIDTH:\n{:0.0f}".format(prm[k])
  543. cprint(prm)
  544. elif self.attr.startswith("DIR:"):#SIN":
  545. #global prm
  546. k = "DIR"
  547. if event.num == 1:
  548. prm[k] = 1
  549. elif event.num == 3:
  550. prm[k] = -1
  551. elif event.num == 4:
  552. prm[k] = 1
  553. elif event.num == 5:
  554. prm[k] =-1
  555. txt = prm[k]
  556. ct.elem[self.attr]["text"] = "DIR:\n{}".format(prm[k])
  557. cprint(prm)
  558. elif self.attr.startswith("SHUFFLE:"):#SIN":
  559. #global prm
  560. k = "SHUFFLE"
  561. if event.num == 1:
  562. prm[k] = 0
  563. elif event.num == 3:
  564. prm[k] = 1
  565. elif event.num == 4:
  566. prm[k] = 1
  567. elif event.num == 5:
  568. prm[k] =0
  569. if prm[k] == 6: #bug ?
  570. prm[k] =5
  571. ct.elem[self.attr]["text"] = k+":\n{}".format(prm[k])
  572. cprint(prm)
  573. elif self.attr.startswith("INVERT:"):#SIN":
  574. #global prm
  575. k = "INVERT"
  576. if event.num == 1:
  577. prm[k] = 0
  578. elif event.num == 3:
  579. prm[k] = 1
  580. elif event.num == 4:
  581. prm[k] = 1
  582. elif event.num == 5:
  583. prm[k] =0
  584. if prm[k] == 6: #bug ?
  585. prm[k] =5
  586. ct.elem[self.attr]["text"] = k+":\n{}".format(prm[k])
  587. cprint(prm)
  588. elif self.attr.startswith("2D-X:"):#SIN":
  589. #global prm
  590. k = "2D-X"
  591. if event.num == 1:
  592. prm[k] = 1
  593. elif event.num == 3:
  594. prm[k] = 2
  595. elif event.num == 4:
  596. prm[k] += 1
  597. elif event.num == 5:
  598. prm[k] -=1
  599. if prm[k] > 100:
  600. prm[k] = 100
  601. if prm[k] < 1:
  602. prm[k] =1
  603. txt = prm[k]
  604. ct.elem[self.attr]["text"] = "2D-X:\n{}".format(prm[k])
  605. cprint(prm)
  606. elif self.attr.startswith("WING:"):#SIN":
  607. #global prm
  608. k = "WING"
  609. if event.num == 1:
  610. prm[k] = 1
  611. elif event.num == 3:
  612. prm[k] = 2
  613. elif event.num == 4:
  614. prm[k] += 1
  615. elif event.num == 5:
  616. prm[k] -=1
  617. if prm[k] > 100:
  618. prm[k] = 100
  619. if prm[k] < 1:
  620. prm[k] =1
  621. txt = prm[k]
  622. ct.elem[self.attr]["text"] = "WING:\n{}".format(prm[k])
  623. cprint(prm)
  624. elif self.attr.startswith("OFFSET:"):#SIN":
  625. #global prm
  626. k = "OFFSET"
  627. if event.num == 1:
  628. prm[k] = 50
  629. elif event.num == 2:
  630. prm[k] *= 2
  631. elif event.num == 3:
  632. prm[k] = 100
  633. elif event.num == 4:
  634. if prm[k] <= 0:
  635. prm[k] = 1
  636. prm[k] +=5 #*=1.1
  637. elif event.num == 5:
  638. prm[k] -=5 #/=1.1
  639. #prm[k] =int(prm[k])
  640. #if prm[k] > 512:
  641. # prm[k] = 512
  642. if prm[k] < 5:
  643. prm[k] =0
  644. if prm[k] == 6: #bug
  645. prm[k] =5
  646. ct.elem[self.attr]["text"] = "OFFSET:\n{:0.0f}".format(prm[k])
  647. cprint(prm)
  648. elif self.attr.startswith("BASE:"):
  649. k = "BASE"
  650. if event.num == 1:
  651. prm[k] = "-"
  652. elif event.num == 3:
  653. prm[k] = "0"
  654. elif event.num == 4:
  655. prm[k] = "+"
  656. elif event.num == 5:
  657. prm[k] = "0"
  658. ct.elem[self.attr]["text"] = "BASE:\n{}".format(prm[k])
  659. elif self.attr.startswith("2D:"):#SIN":
  660. self.fx(event)
  661. elif self.attr.startswith("FX:"):#SIN":
  662. self.fx(event)
  663. elif self.attr == "FX OFF":
  664. if event.num == 1:
  665. MAIN.FIXTURES.fx_off("all")
  666. MAIN.CONSOLE.fx_off("all")
  667. MAIN.CONSOLE.flash_off("all")
  668. MAIN.master._refresh_fix()
  669. return 0
  670. #if event.num == 1:
  671. elif self.attr == "REC-FX":
  672. cprint("ELSE",self.attr)
  673. MAIN.modes.val(self.attr,1)
  674. return 0
  675. def cb(self,event):
  676. cprint("EVENT_fx cb",self.attr,self.mode,event,color='yellow')
  677. cprint(["type",event.type,"num",event.num])
  678. try:
  679. change = 0
  680. if self.mode.startswith("FX"):
  681. self.command(event)
  682. return 0
  683. except Exception as e:
  684. cprint("== cb EXCEPT",e,color="red")
  685. cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
  686. cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")
  687. return 1