tkevent.py 29 KB

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