tkevent.py 29 KB

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