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.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. import lib.fixlib as fixlib
  13. dialog = dialoglib.Dialog()
  14. class tk_event():
  15. """ global input event Handeler for short cut's ... etc
  16. """
  17. def __init__(self,fix,elem,attr=None,data=None,mode=None):
  18. self.fix = fix
  19. self.data=data
  20. self.attr = attr
  21. self.elem = elem
  22. self.mode = mode
  23. def setup(self,event):
  24. cprint("tk_event.SETUP",[self.mode,self.attr],color="red")
  25. if self.mode != "SETUP":
  26. return 0
  27. if self.attr == "SAVE\nSHOW":
  28. self.elem["bg"] = "orange"
  29. self.elem["text"] = "SAVING..."
  30. self.elem["bg"] = "red"
  31. self.elem.config(activebackground="orange")
  32. MAIN.modes.val(self.attr,1)
  33. MAIN.save_show()
  34. self.elem["bg"] = "lightgrey"
  35. self.elem.config(activebackground="lightgrey")
  36. b = libtk.BLINKI(self.elem)
  37. b.blink()
  38. self.elem["text"] = "SAVE\nSHOW"
  39. elif self.attr == "LOAD\nSHOW":
  40. name = "LOAD-SHOW"
  41. line1 = "PATH: " + showlib.current_show_path()
  42. line2 = "DATE: " + time.strftime("%Y-%m-%d %X", time.localtime(time.time()))
  43. class cb():
  44. def __init__(self,name=""):
  45. self.name=name
  46. cprint(" LOAD-SHOW.init",name)
  47. def cb(self,event=None,**args):
  48. cprint(" LOAD-SHOW.cdb",self.name,event,args)
  49. if self.name != "<exit>":
  50. cprint("-----------------------:")
  51. MAIN.LOAD_SHOW_AND_RESTART(self.name).cb()
  52. pw = libtk.PopupList(name,cb=cb)
  53. print(line1,line2)
  54. frame = pw.sframe(line1=line1,line2=line2)
  55. r = libtk.frame_of_show_list(frame,cb=cb)
  56. elif self.attr == "NEW\nSHOW":
  57. def _cb(data):
  58. if not data:
  59. cprint("err443",self,"_cb",data)
  60. return None
  61. fname = data["Value"]
  62. fpath = showlib.generate_show_path(fname)
  63. cprint("SAVE NEW SHOW",fpath,fname)
  64. if MAIN.save_show_as(fname,new=1):
  65. MAIN.LOAD_SHOW_AND_RESTART(fname).cb()
  66. dialog._cb = _cb
  67. dialog.askstring("CREATE NEW SHOW","CREATE NEW SHOW:")
  68. elif self.attr == "SAVE\nSHOW AS":
  69. #def _cb(fname):
  70. def _cb(data):
  71. if not data:
  72. cprint("err443",self,"_cb",data)
  73. return None
  74. fname = data["Value"]
  75. if MAIN.save_show_as(fname):
  76. MAIN.LOAD_SHOW_AND_RESTART(fname).cb()
  77. dialog._cb = _cb
  78. dialog.askstring("SAVE SHOW AS","SAVE SHOW AS:")
  79. elif self.attr == "SAVE &\nRESTART":
  80. self.elem["bg"] = "orange"
  81. self.elem["text"] = "SAVING..."
  82. self.elem["bg"] = "red"
  83. self.elem.config(activebackground="orange")
  84. MAIN.modes.val(self.attr,1)
  85. MAIN.save_show()
  86. self.elem["text"] = "RESTARTING..."
  87. self.elem["bg"] = "lightgrey"
  88. self.elem.config(activebackground="lightgrey")
  89. MAIN.LOAD_SHOW_AND_RESTART("").cb(force=1)
  90. elif self.attr == "DRAW\nGUI":
  91. old_text = self.elem["text"]
  92. window_manager.top("PATCH")
  93. gui_patch.draw(MAIN.FIXTURES)
  94. gui_fix.draw(MAIN.FIXTURES)
  95. window_manager.top("MAIN.FIXTURES")
  96. MAIN.master._refresh_exec()
  97. self.elem["text"] = old_text
  98. elif self.attr == "PRO\nMODE":
  99. MAIN.save_show()
  100. import lib.restart as restart
  101. restart.pro()
  102. elif self.attr == "EASY\nMODE":
  103. MAIN.save_show()
  104. import lib.restart as restart
  105. restart.easy()
  106. else:
  107. if IS_GUI:
  108. msg="{}\nnot implemented".format(self.attr.replace("\n"," "))
  109. r=tkinter.messagebox.showwarning(message=msg,parent=None)
  110. return 1
  111. def live(self,event):
  112. if self.mode != "LIVE":
  113. return 0
  114. if "FADE" in self.attr or "DELAY" in self.attr:
  115. if self.attr == "FADE":
  116. ct = MAIN.FADE
  117. if self.attr == "DELAY":
  118. ct = MAIN.DELAY
  119. if "PAN/TILT\nFADE" in self.attr:
  120. ct = MAIN.FADE_move
  121. value = ct.val()
  122. #print("EVENT CHANGE ",[self.attr])
  123. cprint("EVENT CHANGE:",self.mode,value,self.attr)
  124. if value < 0:
  125. value = 1
  126. if event.num == 4:
  127. value += 0.1
  128. elif event.num == 5:
  129. value -= 0.1
  130. elif event.num == 1:
  131. if ct._is():
  132. ct.off()# = 0
  133. self.data.commands.elem[self.attr]["bg"] = "grey"
  134. self.elem.config(activebackground="grey")
  135. else:
  136. ct.on()# = 1
  137. self.data.commands.elem[self.attr]["bg"] = "green"
  138. self.elem.config(activebackground="lightgreen")
  139. elif event.num == 2:
  140. value += 1
  141. if value > 10:
  142. value = 1
  143. value = round(value,1)
  144. value = ct.val(value)
  145. if self.attr == "FADE":
  146. self.data.commands.elem[self.attr]["text"] = "FADE:\n{:0.2f}".format(value)
  147. if self.attr == "DELAY":
  148. self.data.commands.elem[self.attr]["text"] = "DELAY:\n{:0.3f}".format(value)
  149. if "PAN/TILT\nFADE" in self.attr:
  150. self.data.commands.elem[self.attr]["text"] = "PAN/TILT\nFADE:{:0.2f}".format(value)
  151. def command(self,event):
  152. if self.mode != "COMMAND":
  153. return 0
  154. if self.attr == "CLEAR":
  155. if event.num == 1:
  156. ok = fixlib.clear(MAIN.FIXTURES.fixtures)
  157. if ok:
  158. MAIN.master._refresh_fix()
  159. MAIN.modes.val(self.attr,0)
  160. elif self.attr == "SAVE":
  161. MAIN.modes.val(self.attr,1)
  162. MAIN.save_show()
  163. #MAIN.EXEC.backup_exec()
  164. #MAIN.FIXTURES.backup_patch()
  165. #time.sleep(1)
  166. MAIN.modes.val(self.attr,0)
  167. elif self.attr == "S-KEY":
  168. if MAIN._global_short_key:
  169. MAIN._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. MAIN._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",MAIN._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. fixlib.encoder(MAIN.FIXTURES.fixtures,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 = fixlib.clear(MAIN.FIXTURES.fixtures)
  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. fixlib.clear(MAIN.FIXTURES.fixtures)
  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 =fixlib.get_active(MAIN.FIXTURES.fixtures)
  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