tkevent.py 28 KB

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