tkevent.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788
  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.showlib as showlib
  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: " + showlib.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 = showlib.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 = MAIN.FADE
  116. if self.attr == "DELAY":
  117. ct = MAIN.DELAY
  118. if "PAN/TILT\nFADE" in self.attr:
  119. ct = MAIN.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. if MAIN._global_short_key:
  168. MAIN._global_short_key = 0
  169. MAIN.master.commands.elem["S-KEY"]["bg"] = "red"
  170. MAIN.master.commands.elem["S-KEY"]["activebackground"] = "red"
  171. else:
  172. MAIN._global_short_key = 1
  173. MAIN.master.commands.elem["S-KEY"]["bg"] = "green"
  174. MAIN.master.commands.elem["S-KEY"]["activebackground"] = "green"
  175. cprint("s-key",MAIN._global_short_key)
  176. else:
  177. if event.num == 1:
  178. cprint("ELSE",self.attr)
  179. MAIN.modes.val(self.attr,1)
  180. return 0
  181. def encoder(self,event):
  182. cprint("tk_event","ENC",self.fix,self.attr,self.mode)
  183. cprint("SHIFT_KEY",MAIN._shift_key,"??????????")
  184. if self.mode == "ENCODER":
  185. if self._encoder(event):
  186. MAIN.master.refresh_fix() # delayed
  187. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  188. if self.mode == "ENCODER2":
  189. if self._encoder(event):
  190. MAIN.master.refresh_fix() # delayed
  191. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  192. if self.mode == "INVERT":
  193. cprint("INVERT",event)
  194. if self._encoder(event):
  195. MAIN.master.refresh_fix() # delayed
  196. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  197. def _encoder(self,event):
  198. cprint("-- tk_event","_ENC",self.fix,self.attr,self.mode)
  199. cprint("-- SHIFT_KEY",MAIN._shift_key,"??????????")
  200. val=""
  201. if event.num == 1:
  202. val ="click"
  203. elif event.num == 4:
  204. val ="++"
  205. if MAIN._shift_key:
  206. val = "+"
  207. elif event.num == 5:
  208. val ="--"
  209. if MAIN._shift_key:
  210. val = "-"
  211. #print("SHIFT",val,MAIN._shift_key)
  212. if val:
  213. MAIN.FIXTURES.encoder(fix=self.fix,attr=self.attr,xval=val)
  214. return 1
  215. def cb(self,event):
  216. cprint("EVENT cb",self.attr,self.mode,event,color='yellow')
  217. cprint(["type",event.type,"num",event.num])
  218. MAIN.INIT_OK = 1
  219. try:
  220. change = 0
  221. if "keysym" in dir(event):
  222. if "Escape" == event.keysym:
  223. ok = MAIN.FIXTURES.clear()
  224. MAIN.master._refresh_fix()
  225. cprint()
  226. return 0
  227. if self.mode == "SETUP":
  228. self.setup(event)
  229. elif self.mode == "COMMAND":
  230. self.command(event)
  231. elif self.mode == "LIVE":
  232. self.live(event)
  233. elif self.mode == "ENCODER":
  234. self.encoder(event)
  235. MAIN.master.refresh_fix()
  236. elif self.mode == "ENCODER2":
  237. self.encoder(event)
  238. elif self.mode == "INVERT":
  239. self.encoder(event)
  240. elif self.mode == "FX":
  241. cprint("tk_event CALLING FX WRONG EVENT OBJECT !!",color="red")
  242. elif self.mode == "ROOT":
  243. if event.keysym=="Escape":
  244. pass
  245. elif self.mode == "INPUT":
  246. cprint("INP",self.data.entry.get())
  247. if event.keycode == 36:
  248. x=self.data.entry.get()
  249. #client.send(x)
  250. elif self.mode == "INPUT2":
  251. cprint("INP2",self.data.entry2.get())
  252. if event.keycode == 36:
  253. x=self.data.entry2.get()
  254. #client.send(x)
  255. elif self.mode == "INPUT3":
  256. cprint("INP3",self.data.entry3.get())
  257. if event.keycode == 36:
  258. x=self.data.entry3.get()
  259. #client.send(x)
  260. elif self.mode == "EXEC":
  261. nr = self.attr #int(self.attr.split(":")[1])-1
  262. if event.num == 3: # right click for testing
  263. if str(event.type) == '4': #4 ButtonPress
  264. if MAIN.modes.val("CFG-BTN"):
  265. MAIN.master.btn_cfg(nr,testing=1)
  266. if event.num == 1:
  267. if str(event.type) == '4': #4 ButtonPress
  268. if MAIN.modes.val("REC"):
  269. self.data.exec_rec(nr)
  270. MAIN.modes.val("REC",0)
  271. time.sleep(0.05)
  272. MAIN.master._refresh_exec(nr=nr)
  273. elif MAIN.modes.val("DEL"):
  274. ok=MAIN.EXEC.delete(nr)
  275. if ok:
  276. MAIN.modes.val("DEL",0)
  277. #MAIN.master.refresh_exec()
  278. MAIN.master._refresh_exec(nr=nr)
  279. elif MAIN.modes.val("COPY"):
  280. ok=MAIN.EXEC.copy(nr)
  281. if ok:
  282. MAIN.modes.val("COPY",0)
  283. MAIN.master._refresh_exec(nr=nr)
  284. elif MAIN.modes.val("MOVE"):
  285. ok,cnr,bnr=MAIN.EXEC.move(nr)
  286. if ok:
  287. #MAIN.modes.val("MOVE",0) # keep MOVE on
  288. MAIN.master._refresh_exec(nr=nr)
  289. MAIN.master._refresh_exec(nr=bnr)
  290. elif MAIN.modes.val("CFG-BTN"):
  291. MAIN.master.btn_cfg(nr)
  292. #MAIN.master._refresh_exec(nr=nr)
  293. elif MAIN.modes.val("LABEL"):#else:
  294. MAIN.master.label(nr)
  295. #MAIN.master._refresh_exec(nr=nr)
  296. elif MAIN.modes.val("EDIT"):
  297. MAIN.FIXTURES.clear()
  298. self.data.exec_select(nr)
  299. self.data.exec_go(nr,xfade=0,event=event,val=255,button="go")
  300. MAIN.modes.val("EDIT", 0)
  301. MAIN.master.refresh_fix()
  302. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  303. elif MAIN.modes.val("SELECT"):
  304. self.data.exec_select(nr)
  305. else:
  306. self.data.exec_go(nr,event=event,val=255)
  307. else:
  308. self.data.exec_go(nr,xfade=0,event=event,val=0)
  309. #cprint(" == "*10)
  310. MAIN.master.refresh_fix()
  311. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  312. if event.num == 3:
  313. if not MAIN.modes.val("REC"):
  314. if str(event.type) == '4': #4 ButtonPress
  315. self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=255)
  316. else:
  317. self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=0)
  318. cprint()
  319. return 0
  320. elif self.mode == "INPUT":
  321. cprint()
  322. return 0
  323. except Exception as e:
  324. cprint("== cb EXCEPT",e,color="red")
  325. cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
  326. cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")
  327. cprint()
  328. return 1
  329. class tk_event_fx():
  330. """ global input event Handeler for short cut's ... etc
  331. """
  332. def __init__(self,fix,elem,attr=None,data=None,mode=None):
  333. self.fix = fix
  334. self.data = data
  335. self.attr = attr
  336. self.elem = elem
  337. self.mode = mode
  338. def fx(self,event):
  339. cprint("Xevent.fx",self.attr,self.fix,event)
  340. fx2 = {}
  341. if self.attr == "FX:RED":
  342. if event.num == 4:
  343. cprint("FX:COLOR CHANGE",MAIN.fx_prm,color="red")
  344. txt = "FX:RED"
  345. MAIN.fx_prm["MODE"] += 1
  346. if MAIN.fx_prm["MODE"] >= len(MAIN.fx_modes):
  347. MAIN.fx_prm["MODE"]=0
  348. txt = "FX:\n"+MAIN.fx_modes[MAIN.fx_prm["MODE"]]
  349. MAIN.master.fx_color.elem["FX:RED"]["text"] = txt
  350. elif event.num == 5:
  351. cprint("FX:COLOR CHANGE",MAIN.fx_prm,color="red")
  352. txt = "FX:RED"
  353. MAIN.fx_prm["MODE"] -= 1
  354. if MAIN.fx_prm["MODE"] < 0:
  355. MAIN.fx_prm["MODE"]= len(MAIN.fx_modes)-1
  356. txt = "FX:\n"+MAIN.fx_modes[MAIN.fx_prm["MODE"]]
  357. MAIN.master.fx_color.elem["FX:RED"]["text"] = txt
  358. if self.attr.startswith("2D"):
  359. if event.num == 4:
  360. cprint("2D-X: CHANGE",MAIN.fx_prm,color="red")
  361. txt = "2D-X:"
  362. MAIN.fx_prm["2D:MODE"] += 1
  363. if MAIN.fx_prm["2D:MODE"] >= len(fx_x_modes):
  364. MAIN.fx_prm["2D:MODE"]=0
  365. txt = "2D:MODE\n"+fx_x_modes[MAIN.fx_prm["2D:MODE"]]
  366. MAIN.master.fx.elem["2D:MODE"]["text"] = txt
  367. elif event.num == 5:
  368. cprint("2D-X: CHANGE",MAIN.fx_prm,color="red")
  369. txt = "2D-X:"
  370. MAIN.fx_prm["2D:MODE"] -= 1
  371. if MAIN.fx_prm["2D:MODE"] < 0:
  372. MAIN.fx_prm["2D:MODE"]= len(fx_x_modes)-1
  373. txt = "2D:MODE\n"+fx_x_modes[MAIN.fx_prm["2D:MODE"]]
  374. MAIN.master.fx.elem["2D:MODE"]["text"] = txt
  375. elif event.num == 1:
  376. xfixtures = []
  377. fix_active =MAIN.FIXTURES.get_active()
  378. for fix in fix_active:
  379. if fix == "CFG":
  380. continue
  381. xfixtures.append(fix)
  382. if not xfixtures:
  383. cprint("470 fx() ... init no fixture selected",color="red")
  384. return 0
  385. xfixtures = MAIN.process_matrix(xfixtures)
  386. wing_buffer = fxlib.process_wings(xfixtures,MAIN.fx_prm)
  387. fxlib.process_effect(
  388. wing_buffer,MAIN.fx_prm,MAIN.fx_prm_move,MAIN.modes,
  389. MAIN.jclient_send,MAIN.master,
  390. MAIN.FIXTURES,fx_name=self.attr
  391. )
  392. def command(self,event,mode=""):
  393. cprint("fx_command",self.mode)
  394. if self.mode == "FX":
  395. prm = MAIN.fx_prm
  396. ct = self.data.fx
  397. if self.mode == "FX-MOVE":
  398. prm = MAIN.fx_prm_move
  399. ct = self.data.fx_moves
  400. if 1:
  401. if self.attr.startswith("SIZE:"):#SIN":
  402. #global MAIN.fx_prm
  403. k = "SIZE"
  404. if event.num == 1:
  405. _stats = [0,30,100,255]
  406. if prm[k] in _stats:
  407. idx = _stats.index(prm[k])+1
  408. if idx > len(_stats)-1: #rotate
  409. idx = 0
  410. prm[k] = _stats[idx]
  411. else:
  412. prm[k] = _stats[1]
  413. elif event.num == 3:
  414. prm[k] =100
  415. elif event.num == 4:
  416. if prm[k] <= 0:
  417. prm[k] = 1
  418. prm[k] +=5
  419. elif event.num == 5:
  420. prm[k] -=5
  421. #prm[k] =int(prm[k])
  422. if prm[k] > 4000:
  423. prm[k] = 4000
  424. if prm[k] < 0:
  425. prm[k] =0
  426. if prm[k] == 6: #bug
  427. prm[k] =5
  428. ct.elem[self.attr]["text"] = "SIZE:\n{:0.0f}".format(prm[k])
  429. cprint(prm)
  430. elif self.attr.startswith("SPEED:"):#SIN":
  431. #global prm
  432. k = "SPEED"
  433. if event.num == 1:
  434. _stats = [0,5,25,30,100,255]
  435. if prm[k] in _stats:
  436. idx = _stats.index(prm[k])+1
  437. if idx > len(_stats)-1: #rotate
  438. idx = 0
  439. prm[k] = _stats[idx]
  440. else:
  441. prm[k] = 0
  442. elif event.num == 3:
  443. prm[k] = 10
  444. elif event.num == 4:
  445. if prm[k] <= 0:
  446. prm[k] = 0.06
  447. elif prm[k] < 5:
  448. prm[k] *=1.2
  449. else:
  450. prm[k] +=5 #1.1
  451. elif event.num == 5:
  452. if prm[k] <= 5:
  453. prm[k] *=0.8
  454. else:
  455. prm[k] -= 5 #1.1
  456. #prm[k] =int(prm[k])
  457. if prm[k] > 4000:
  458. prm[k] = 4000
  459. if prm[k] < 0.05:
  460. prm[k] =0
  461. if prm[k] > 5 and prm[k] < 10: #bug
  462. prm[k] =5
  463. if prm[k] < 0:
  464. ct.elem[self.attr]["text"] = "SPEED:\noff".format(prm[k])
  465. else:
  466. ct.elem[self.attr]["text"] = "SPEED:\n{:0.02f}".format(prm[k])
  467. cprint(prm)
  468. elif self.attr.startswith("START:"):#SIN":
  469. #global prm
  470. k = "START"
  471. if event.num == 1:
  472. pass
  473. elif event.num == 2:
  474. pass
  475. elif event.num == 4:
  476. if prm[k] <= 0:
  477. prm[k] = 1
  478. prm[k] += 5 #1.1
  479. elif event.num == 5:
  480. prm[k] -= 5 #1.1
  481. #prm[k] =int(prm[k])
  482. if prm[k] > 4000:
  483. prm[k] = 4000
  484. if prm[k] < 5:
  485. prm[k] =0
  486. if prm[k] == 6: #bug
  487. prm[k] =5
  488. ct.elem[self.attr]["text"] = "START:\n{:0.0f}".format(prm[k])
  489. cprint(prm)
  490. elif self.attr.startswith("WIDTH:"):#SIN":
  491. #global prm
  492. k = "WIDTH"
  493. if event.num == 1:
  494. _stats = [0,25,50,75,10]
  495. if prm[k] in _stats:
  496. idx = _stats.index(prm[k])+1
  497. if idx > len(_stats)-1: #rotate
  498. idx = 0
  499. prm[k] = _stats[idx]
  500. else:
  501. prm[k] = 25
  502. elif event.num == 2:
  503. prm[k] = 50
  504. elif event.num == 3:
  505. prm[k] = 100
  506. elif event.num == 4:
  507. if prm[k] <= 0:
  508. prm[k] = 1
  509. elif prm[k] == 50:
  510. prm[k] = 100
  511. elif prm[k] == 5:
  512. prm[k] = 25
  513. elif prm[k] == 25:
  514. prm[k] = 50
  515. else:
  516. prm[k] += 5 #*=1.1
  517. elif event.num == 5:
  518. if prm[k] == 10:
  519. prm[k] = 5
  520. elif prm[k] == 25:
  521. prm[k] = 10
  522. elif prm[k] == 50:
  523. prm[k] = 25
  524. elif prm[k] == 100:
  525. prm[k] = 50
  526. #else:
  527. # prm[k] -=5 #/=1.1
  528. #prm[k] =int(prm[k])
  529. if prm[k] < 0:
  530. prm[k] = 0
  531. if prm[k] > 100:
  532. prm[k] = 100
  533. if prm[k] == 6: #bug
  534. prm[k] =5
  535. if prm[k] > 25 and prm[k] < 50: #bug
  536. prm[k] =50
  537. if prm[k] > 50 and prm[k] < 75: #bug
  538. prm[k] =75
  539. if prm[k] > 75 and prm[k] < 100: #bug
  540. prm[k] =100
  541. ct.elem[self.attr]["text"] = "WIDTH:\n{:0.0f}".format(prm[k])
  542. cprint(prm)
  543. elif self.attr.startswith("DIR:"):#SIN":
  544. #global prm
  545. k = "DIR"
  546. if event.num == 1:
  547. prm[k] = 1
  548. elif event.num == 3:
  549. prm[k] = -1
  550. elif event.num == 4:
  551. prm[k] = 1
  552. elif event.num == 5:
  553. prm[k] =-1
  554. txt = prm[k]
  555. ct.elem[self.attr]["text"] = "DIR:\n{}".format(prm[k])
  556. cprint(prm)
  557. elif self.attr.startswith("SHUFFLE:"):#SIN":
  558. #global prm
  559. k = "SHUFFLE"
  560. if event.num == 1:
  561. prm[k] = 0
  562. elif event.num == 3:
  563. prm[k] = 1
  564. elif event.num == 4:
  565. prm[k] = 1
  566. elif event.num == 5:
  567. prm[k] =0
  568. if prm[k] == 6: #bug ?
  569. prm[k] =5
  570. ct.elem[self.attr]["text"] = k+":\n{}".format(prm[k])
  571. cprint(prm)
  572. elif self.attr.startswith("INVERT:"):#SIN":
  573. #global prm
  574. k = "INVERT"
  575. if event.num == 1:
  576. prm[k] = 0
  577. elif event.num == 3:
  578. prm[k] = 1
  579. elif event.num == 4:
  580. prm[k] = 1
  581. elif event.num == 5:
  582. prm[k] =0
  583. if prm[k] == 6: #bug ?
  584. prm[k] =5
  585. ct.elem[self.attr]["text"] = k+":\n{}".format(prm[k])
  586. cprint(prm)
  587. elif self.attr.startswith("2D-X:"):#SIN":
  588. #global prm
  589. k = "2D-X"
  590. if event.num == 1:
  591. prm[k] = 1
  592. elif event.num == 3:
  593. prm[k] = 2
  594. elif event.num == 4:
  595. prm[k] += 1
  596. elif event.num == 5:
  597. prm[k] -=1
  598. if prm[k] > 100:
  599. prm[k] = 100
  600. if prm[k] < 1:
  601. prm[k] =1
  602. txt = prm[k]
  603. ct.elem[self.attr]["text"] = "2D-X:\n{}".format(prm[k])
  604. cprint(prm)
  605. elif self.attr.startswith("WING:"):#SIN":
  606. #global prm
  607. k = "WING"
  608. if event.num == 1:
  609. prm[k] = 1
  610. elif event.num == 3:
  611. prm[k] = 2
  612. elif event.num == 4:
  613. prm[k] += 1
  614. elif event.num == 5:
  615. prm[k] -=1
  616. if prm[k] > 100:
  617. prm[k] = 100
  618. if prm[k] < 1:
  619. prm[k] =1
  620. txt = prm[k]
  621. ct.elem[self.attr]["text"] = "WING:\n{}".format(prm[k])
  622. cprint(prm)
  623. elif self.attr.startswith("OFFSET:"):#SIN":
  624. #global prm
  625. k = "OFFSET"
  626. if event.num == 1:
  627. prm[k] = 50
  628. elif event.num == 2:
  629. prm[k] *= 2
  630. elif event.num == 3:
  631. prm[k] = 100
  632. elif event.num == 4:
  633. if prm[k] <= 0:
  634. prm[k] = 1
  635. prm[k] +=5 #*=1.1
  636. elif event.num == 5:
  637. prm[k] -=5 #/=1.1
  638. #prm[k] =int(prm[k])
  639. #if prm[k] > 512:
  640. # prm[k] = 512
  641. if prm[k] < 5:
  642. prm[k] =0
  643. if prm[k] == 6: #bug
  644. prm[k] =5
  645. ct.elem[self.attr]["text"] = "OFFSET:\n{:0.0f}".format(prm[k])
  646. cprint(prm)
  647. elif self.attr.startswith("BASE:"):
  648. k = "BASE"
  649. if event.num == 1:
  650. prm[k] = "-"
  651. elif event.num == 3:
  652. prm[k] = "0"
  653. elif event.num == 4:
  654. prm[k] = "+"
  655. elif event.num == 5:
  656. prm[k] = "0"
  657. ct.elem[self.attr]["text"] = "BASE:\n{}".format(prm[k])
  658. elif self.attr.startswith("2D:"):#SIN":
  659. self.fx(event)
  660. elif self.attr.startswith("FX:"):#SIN":
  661. self.fx(event)
  662. elif self.attr == "FX OFF":
  663. if event.num == 1:
  664. MAIN.FIXTURES.fx_off("all")
  665. MAIN.CONSOLE.fx_off("all")
  666. MAIN.CONSOLE.flash_off("all")
  667. MAIN.master._refresh_fix()
  668. return 0
  669. #if event.num == 1:
  670. elif self.attr == "REC-FX":
  671. cprint("ELSE",self.attr)
  672. MAIN.modes.val(self.attr,1)
  673. return 0
  674. def cb(self,event):
  675. cprint("EVENT_fx cb",self.attr,self.mode,event,color='yellow')
  676. cprint(["type",event.type,"num",event.num])
  677. try:
  678. change = 0
  679. if self.mode.startswith("FX"):
  680. self.command(event)
  681. return 0
  682. except Exception as e:
  683. cprint("== cb EXCEPT",e,color="red")
  684. cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
  685. cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")
  686. return 1