tkevent.py 30 KB

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