tkevent.py 31 KB

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