tkevent.py 29 KB

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