tkevent.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897
  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_fx3(self,event,mode=""):
  419. prm = []
  420. ct = ""
  421. print(" --", self.attr)
  422. fx3_grid = MAIN.meta.fx3_grid # OptionBuffer()
  423. if self.attr not in fx3_grid:
  424. fx_data = {}
  425. if self.attr == "PLAY":
  426. for k,v in fx3_grid.items():
  427. vv = v.val()
  428. k_name , k_nr = k.split(":")
  429. if k_nr not in fx_data:
  430. fx_data[k_nr] = {}
  431. fx_data[k_nr][k_name] = vv
  432. #print("**",k,vv,v)
  433. for k,v in fx_data.items():
  434. print("HH",k,v)
  435. print()
  436. return
  437. fx_func = MAIN.meta.OptionBuffer()
  438. if self.attr.startswith("ATTR:"):
  439. col = self.attr.split(":")[1]
  440. fx_func1 = fx3_grid["GRP:"+str(col)]
  441. GRP = fx_func1.val()
  442. if GRP != self.ATTR_GRP:
  443. self.ATTR_GRP = GRP
  444. fx_func1.val(GRP)
  445. fx3_grid[self.attr] = MAIN.meta.Optionbuffer_create_ATTR(GRP)
  446. fx_func = fx3_grid[self.attr]
  447. fx_func.data["wrap"] = 1
  448. else:
  449. fx_func = fx3_grid[self.attr]
  450. fx_func.data["wrap"] = 1
  451. print("func",fx_func,fx_func.val())
  452. if event.num == 3:
  453. fx_func.reset()
  454. elif event.num == 4:
  455. fx_func.inc()
  456. elif event.num == 5:
  457. fx_func.dec()
  458. v=fx_func.val()
  459. #print(v)
  460. #print(self.elem)
  461. self.elem["text"] = v
  462. return
  463. def command(self,event,mode=""):
  464. cprint("tkevent.tk_event_fx.command")
  465. cprint(" ",self.mode)
  466. prm = None
  467. ct = None
  468. if self.mode == "FX":
  469. prm = MAIN.meta.fx_prm
  470. ct = MAIN.meta.fx_cfg
  471. if self.mode == "FX-MOVE":
  472. prm = MAIN.meta.fx_prm_move
  473. ct = MAIN.meta.fx_moves
  474. if self.mode == "FX-3":
  475. return self.command_fx3(event,mode=mode)
  476. if 1:
  477. cprint("---", self.attr,"!!",prm ,color="red")
  478. if self.attr.startswith("SIZE:"):#SIN":
  479. #global MAIN.meta.fx_prm
  480. k = "SIZE"
  481. p = prm[k]
  482. if event.num == 1:
  483. _stats = [0,30,100,255]
  484. if p in _stats:
  485. idx = _stats.index(p)+1
  486. if idx > len(_stats)-1: #rotate
  487. idx = 0
  488. p = _stats[idx]
  489. else:
  490. p = _stats[1]
  491. elif event.num == 3:
  492. p =100
  493. elif event.num == 4:
  494. if p <= 0:
  495. p = 1
  496. p +=5
  497. elif event.num == 5:
  498. p -=5
  499. #p =int(p)
  500. if p > 4000:
  501. p = 4000
  502. if p < 0:
  503. p =0
  504. if p == 6: #bug
  505. p =5
  506. ct.elem[self.attr]["text"] = "SIZE:\n{:0.0f}".format(p)
  507. cprint(" ",prm)
  508. prm[k] = p
  509. elif self.attr.startswith("SPEED:"):#SIN":
  510. #global prm
  511. k = "SPEED"
  512. p = prm[k]
  513. if event.num == 1:
  514. _stats = [0,5,25,30,100,255]
  515. if p in _stats:
  516. idx = _stats.index(p)+1
  517. if idx > len(_stats)-1: #rotate
  518. idx = 0
  519. p = _stats[idx]
  520. else:
  521. p = 0
  522. elif event.num == 3:
  523. p = 10
  524. elif event.num == 4:
  525. if p <= 0:
  526. p = 0.06
  527. elif p < 5:
  528. p *=1.2
  529. else:
  530. p +=5 #1.1
  531. elif event.num == 5:
  532. if p <= 5:
  533. p *=0.8
  534. else:
  535. p -= 5 #1.1
  536. #p =int(p)
  537. if p > 4000:
  538. p = 4000
  539. if p < 0.05:
  540. p =0
  541. if p > 5 and p < 10: #bug
  542. p =5
  543. if p < 0:
  544. ct.elem[self.attr]["text"] = "SPEED:\noff".format(p)
  545. else:
  546. ct.elem[self.attr]["text"] = "SPEED:\n{:0.02f}".format(p)
  547. cprint(" ",prm)
  548. prm[k] = p
  549. elif self.attr.startswith("START:"):#SIN":
  550. #global prm
  551. k = "START"
  552. p = prm[k]
  553. if event.num == 1:
  554. pass
  555. elif event.num == 2:
  556. pass
  557. elif event.num == 4:
  558. if p <= 0:
  559. p = 1
  560. p += 5 #1.1
  561. elif event.num == 5:
  562. p -= 5 #1.1
  563. #p =int(p)
  564. if p > 4000:
  565. p = 4000
  566. if p < 5:
  567. p =0
  568. if p == 6: #bug
  569. p =5
  570. ct.elem[self.attr]["text"] = "START:\n{:0.0f}".format(p)
  571. cprint(" ",prm)
  572. prm[k] = p
  573. elif self.attr.startswith("WIDTH:"):#SIN":
  574. #global prm
  575. k = "WIDTH"
  576. p = prm[k]
  577. if event.num == 1:
  578. _stats = [0,25,50,75,10]
  579. if p in _stats:
  580. idx = _stats.index(p)+1
  581. if idx > len(_stats)-1: #rotate
  582. idx = 0
  583. p = _stats[idx]
  584. else:
  585. p = 25
  586. elif event.num == 2:
  587. p = 50
  588. elif event.num == 3:
  589. p = 100
  590. elif event.num == 4:
  591. if p <= 0:
  592. p = 1
  593. elif p == 50:
  594. p = 100
  595. elif p == 5:
  596. p = 25
  597. elif p == 25:
  598. p = 50
  599. else:
  600. p += 5 #*=1.1
  601. elif event.num == 5:
  602. if p == 10:
  603. p = 5
  604. elif p == 25:
  605. p = 10
  606. elif p == 50:
  607. p = 25
  608. elif p == 100:
  609. p = 50
  610. #else:
  611. # p -=5 #/=1.1
  612. #p =int(p)
  613. if p < 0:
  614. p = 0
  615. if p > 100:
  616. p = 100
  617. if p == 6: #bug
  618. p =5
  619. if p > 25 and p < 50: #bug
  620. p =50
  621. if p > 50 and p < 75: #bug
  622. p =75
  623. if p > 75 and p < 100: #bug
  624. p =100
  625. ct.elem[self.attr]["text"] = "WIDTH:\n{:0.0f}".format(p)
  626. cprint(" ",prm)
  627. prm[k] = p
  628. elif self.attr.startswith("DIR:"):#SIN":
  629. #global prm
  630. k = "DIR"
  631. p = prm[k]
  632. if event.num == 1:
  633. p = 1
  634. elif event.num == 3:
  635. p = -1
  636. elif event.num == 4:
  637. p = 1
  638. elif event.num == 5:
  639. p =-1
  640. txt = p
  641. ct.elem[self.attr]["text"] = "DIR:\n{}".format(p)
  642. cprint(" ",prm)
  643. prm[k] = p
  644. elif self.attr.startswith("SHUFFLE:"):#SIN":
  645. #global prm
  646. k = "SHUFFLE"
  647. print("OOO", [self.mode,k , prm] )
  648. p = prm[k]
  649. if event.num == 1:
  650. p = 0
  651. elif event.num == 3:
  652. p = 1
  653. elif event.num == 4:
  654. p = 1
  655. elif event.num == 5:
  656. p =0
  657. if p == 6: #bug ?
  658. p =5
  659. ct.elem[self.attr]["text"] = k+":\n{}".format(p)
  660. cprint(" ",prm)
  661. prm[k] = p
  662. elif self.attr.startswith("INVERT:"):#SIN":
  663. #global prm
  664. k = "INVERT"
  665. p = prm[k]
  666. if event.num == 1:
  667. p = 0
  668. elif event.num == 3:
  669. p = 1
  670. elif event.num == 4:
  671. p = 1
  672. elif event.num == 5:
  673. p =0
  674. if p == 6: #bug ?
  675. p =5
  676. ct.elem[self.attr]["text"] = k+":\n{}".format(p)
  677. cprint(" ",prm)
  678. prm[k] = p
  679. elif self.attr.startswith("2D-X:"):#SIN":
  680. #global prm
  681. k = "2D-X"
  682. p = prm[k]
  683. if event.num == 1:
  684. p = 1
  685. elif event.num == 3:
  686. p = 2
  687. elif event.num == 4:
  688. p += 1
  689. elif event.num == 5:
  690. p -=1
  691. if p > 100:
  692. p = 100
  693. if p < 1:
  694. p =1
  695. txt = p
  696. ct.elem[self.attr]["text"] = "2D-X:\n{}".format(p)
  697. cprint(" ",prm)
  698. prm[k] = p
  699. elif self.attr.startswith("WING:"):#SIN":
  700. #global prm
  701. k = "WING"
  702. p = prm[k]
  703. if event.num == 1:
  704. p = 1
  705. elif event.num == 3:
  706. p = 2
  707. elif event.num == 4:
  708. p += 1
  709. elif event.num == 5:
  710. p -=1
  711. if p > 100:
  712. p = 100
  713. if p < 1:
  714. p =1
  715. txt = p
  716. ct.elem[self.attr]["text"] = "WING:\n{}".format(p)
  717. cprint(" ",prm)
  718. prm[k] = p
  719. elif self.attr.startswith("OFFSET:"):#SIN":
  720. #global prm
  721. k = "OFFSET"
  722. p = prm[k]
  723. if event.num == 1:
  724. p = 50
  725. elif event.num == 2:
  726. p *= 2
  727. elif event.num == 3:
  728. p = 100
  729. elif event.num == 4:
  730. if p <= 0:
  731. p = 1
  732. p +=5 #*=1.1
  733. elif event.num == 5:
  734. p -=5 #/=1.1
  735. #p =int(p)
  736. #if p > 512:
  737. # p = 512
  738. if p < 5:
  739. p =0
  740. if p == 6: #bug
  741. p =5
  742. ct.elem[self.attr]["text"] = "OFFSET:\n{:0.0f}".format(p)
  743. cprint(" ",prm)
  744. prm[k] = p
  745. elif self.attr.startswith("BASE:"):
  746. k = "BASE"
  747. p = prm[k]
  748. if event.num == 1:
  749. p = "-"
  750. elif event.num == 3:
  751. p = "0"
  752. elif event.num == 4:
  753. p = "+"
  754. elif event.num == 5:
  755. p = "0"
  756. ct.elem[self.attr]["text"] = "BASE:\n{}".format(p)
  757. prm[k] = p
  758. elif self.attr.startswith("2D:"):#SIN":
  759. self.fx(event)
  760. elif self.attr.startswith("FX:"):#SIN":
  761. self.fx(event)
  762. elif self.attr == "FX OFF":
  763. if event.num == 1:
  764. MAIN.FIXTURES.fx_off("all")
  765. MAIN.CONSOLE.fx_off("all")
  766. MAIN.CONSOLE.flash_off("all")
  767. MAIN.master._refresh_fix()
  768. return 0
  769. #if event.num == 1:
  770. elif self.attr == "REC-FX":
  771. cprint(" ",self.attr)
  772. MAIN.modes.val(self.attr,1)
  773. #MAIN.modes.val(self.attr,1)
  774. #MAIN.modes.val("REC",1)
  775. return 0
  776. def cb(self,event):
  777. cprint("tkevent.EVENT_fx.cb:",self.attr,self.mode,event,color='yellow')
  778. cprint(["type",event.type,"num",event.num])
  779. try:
  780. change = 0
  781. if self.mode.startswith("FX"):
  782. self.command(event)
  783. return 0
  784. except Exception as e:
  785. cprint("== cb EXCEPT",e,color="red")
  786. cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
  787. cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")
  788. return 1