tkevent.py 29 KB

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