tkevent.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  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. dialog = dialoglib.Dialog()
  15. class tk_event():
  16. """ global input event Handeler for short cut's ... etc
  17. """
  18. def __init__(self,fix,elem,attr=None,data=None,mode=None):
  19. self.fix = fix
  20. self.data=data
  21. self.attr = attr
  22. self.elem = elem
  23. self.mode = mode
  24. def setup(self,event):
  25. cprint("tk_event.SETUP",[self.mode,self.attr],color="red")
  26. if self.mode != "SETUP":
  27. return 0
  28. if self.attr == "SAVE\nSHOW":
  29. self.elem["bg"] = "orange"
  30. self.elem["text"] = "SAVING..."
  31. self.elem["bg"] = "red"
  32. self.elem.config(activebackground="orange")
  33. MAIN.save_show()
  34. MAIN.modes.val(self.attr,1)
  35. self.elem["bg"] = "lightgrey"
  36. self.elem.config(activebackground="lightgrey")
  37. b = libtk.BLINKI(self.elem)
  38. b.blink()
  39. self.elem["text"] = "SAVE\nSHOW"
  40. def xxyy():
  41. time.sleep(3)
  42. MAIN.modes.val(self.attr,0)
  43. thread.start_new_thread(xxyy,())
  44. elif self.attr == "LOAD\nSHOW":
  45. name = "LOAD-SHOW"
  46. line1 = "PATH: " + showlib.current_show_path()
  47. line2 = "DATE: " + time.strftime("%Y-%m-%d %X", time.localtime(time.time()))
  48. class cb():
  49. def __init__(self,name=""):
  50. self.name=name
  51. cprint(" LOAD-SHOW.init",name)
  52. def cb(self,event=None,**args):
  53. cprint(" LOAD-SHOW.cdb",self.name,event,args)
  54. if self.name != "<exit>":
  55. cprint("-----------------------:")
  56. MAIN.LOAD_SHOW_AND_RESTART(self.name).cb()
  57. pw = libtk.PopupList(name,cb=cb)
  58. print(line1,line2)
  59. frame = pw.sframe(line1=line1,line2=line2)
  60. r = libtk.frame_of_show_list(frame,cb=cb)
  61. elif self.attr == "NEW\nSHOW":
  62. def _cb(data):
  63. if not data:
  64. cprint("err443",self,"_cb",data)
  65. return None
  66. fname = data["Value"]
  67. fpath = showlib.generate_show_path(fname)
  68. cprint("SAVE NEW SHOW",fpath,fname)
  69. if MAIN.save_show_as(fname,new=1):
  70. MAIN.LOAD_SHOW_AND_RESTART(fname).cb()
  71. dialog._cb = _cb
  72. dialog.askstring("CREATE NEW SHOW","CREATE NEW SHOW:")
  73. elif self.attr == "SAVE\nSHOW AS":
  74. #def _cb(fname):
  75. def _cb(data):
  76. if not data:
  77. cprint("err443",self,"_cb",data)
  78. return None
  79. fname = data["Value"]
  80. if MAIN.save_show_as(fname):
  81. MAIN.LOAD_SHOW_AND_RESTART(fname).cb()
  82. dialog._cb = _cb
  83. dialog.askstring("SAVE SHOW AS","SAVE SHOW AS:")
  84. elif self.attr == "SAVE &\nRESTART":
  85. self.elem["bg"] = "orange"
  86. self.elem["text"] = "SAVING..."
  87. self.elem["bg"] = "red"
  88. self.elem.config(activebackground="orange")
  89. MAIN.save_show()
  90. self.elem["text"] = "RESTARTING..."
  91. self.elem["bg"] = "lightgrey"
  92. self.elem.config(activebackground="lightgrey")
  93. MAIN.modes.val(self.attr,1)
  94. MAIN.LOAD_SHOW_AND_RESTART("").cb(force=1)
  95. elif self.attr == "DRAW\nGUI":
  96. old_text = self.elem["text"]
  97. window_manager.top("PATCH")
  98. gui_patch.draw(MAIN.FIXTURES)
  99. gui_fix.draw(MAIN.FIXTURES)
  100. window_manager.top("MAIN.FIXTURES")
  101. MAIN.master._refresh_exec()
  102. self.elem["text"] = old_text
  103. elif self.attr == "PRO\nMODE":
  104. MAIN.save_show()
  105. MAIN.modes.val(self.attr,1)
  106. time.sleep(1)
  107. import lib.restart as restart
  108. restart.pro()
  109. elif self.attr == "EASY\nMODE":
  110. MAIN.save_show()
  111. MAIN.modes.val(self.attr,1)
  112. time.sleep(1)
  113. import lib.restart as restart
  114. restart.easy()
  115. else:
  116. if IS_GUI:
  117. msg="{}\nnot implemented".format(self.attr.replace("\n"," "))
  118. r=tkinter.messagebox.showwarning(message=msg,parent=None)
  119. return 1
  120. def live(self,event):
  121. if self.mode != "LIVE":
  122. return 0
  123. if "FADE" in self.attr or "DELAY" in self.attr:
  124. if self.attr == "FADE":
  125. ct = MAIN.FADE
  126. if self.attr == "DELAY":
  127. ct = MAIN.DELAY
  128. if "PAN/TILT\nFADE" in self.attr:
  129. ct = MAIN.FADE_move
  130. value = ct.val()
  131. #print("EVENT CHANGE ",[self.attr])
  132. cprint("EVENT CHANGE:",self.mode,value,self.attr)
  133. if value < 0:
  134. value = 1
  135. if event.num == 4:
  136. value += 0.1
  137. elif event.num == 5:
  138. value -= 0.1
  139. elif event.num == 1:
  140. if ct._is():
  141. ct.off()# = 0
  142. self.data.commands.elem[self.attr]["bg"] = "grey"
  143. self.elem.config(activebackground="grey")
  144. else:
  145. ct.on()# = 1
  146. self.data.commands.elem[self.attr]["bg"] = "green"
  147. self.elem.config(activebackground="lightgreen")
  148. elif event.num == 2:
  149. value += 1
  150. if value > 10:
  151. value = 1
  152. value = round(value,1)
  153. value = ct.val(value)
  154. if self.attr == "FADE":
  155. self.data.commands.elem[self.attr]["text"] = "FADE:\n{:0.2f}".format(value)
  156. if self.attr == "DELAY":
  157. self.data.commands.elem[self.attr]["text"] = "DELAY:\n{:0.3f}".format(value)
  158. if "PAN/TILT\nFADE" in self.attr:
  159. self.data.commands.elem[self.attr]["text"] = "PAN/TILT\nFADE:{:0.2f}".format(value)
  160. def command(self,event):
  161. if self.mode != "COMMAND":
  162. return 0
  163. if self.attr == "CLEAR":
  164. if event.num == 1:
  165. ok = fixlib.clear(MAIN.FIXTURES.fixtures)
  166. if ok:
  167. MAIN.master._refresh_fix()
  168. MAIN.modes.val(self.attr,0)
  169. elif self.attr == "SAVE":
  170. MAIN.modes.val(self.attr,1)
  171. MAIN.save_show()
  172. #MAIN.EXEC.backup_exec()
  173. #MAIN.FIXTURES.backup_patch()
  174. #time.sleep(1)
  175. MAIN.modes.val(self.attr,0)
  176. elif self.attr == "S-KEY":
  177. if MAIN._global_short_key:
  178. MAIN._global_short_key = 0
  179. MAIN.master.commands.elem["S-KEY"]["bg"] = "red"
  180. MAIN.master.commands.elem["S-KEY"]["activebackground"] = "red"
  181. else:
  182. MAIN._global_short_key = 1
  183. MAIN.master.commands.elem["S-KEY"]["bg"] = "green"
  184. MAIN.master.commands.elem["S-KEY"]["activebackground"] = "green"
  185. cprint("s-key",MAIN._global_short_key)
  186. else:
  187. if event.num == 1:
  188. cprint("ELSE",self.attr)
  189. MAIN.modes.val(self.attr,1)
  190. return 0
  191. def encoder(self,event):
  192. cprint("tk_event","ENC",self.fix,self.attr,self.mode)
  193. cprint("SHIFT_KEY",MAIN._shift_key,"??????????")
  194. if self.mode == "ENCODER":
  195. if self._encoder(event):
  196. MAIN.master.refresh_fix() # delayed
  197. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  198. if self.mode == "ENCODER2":
  199. if self._encoder(event):
  200. MAIN.master.refresh_fix() # delayed
  201. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  202. if self.mode == "INVERT":
  203. cprint("INVERT",event)
  204. if self._encoder(event):
  205. MAIN.master.refresh_fix() # delayed
  206. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  207. def _encoder(self,event):
  208. cprint("-- tk_event","_ENC",self.fix,self.attr,self.mode)
  209. cprint("-- SHIFT_KEY",MAIN._shift_key,"??????????")
  210. val=""
  211. if event.num == 1:
  212. val ="click"
  213. elif event.num == 4:
  214. val ="++"
  215. if MAIN._shift_key:
  216. val = "+"
  217. elif event.num == 5:
  218. val ="--"
  219. if MAIN._shift_key:
  220. val = "-"
  221. #print("SHIFT",val,MAIN._shift_key)
  222. if val:
  223. fixlib.encoder(MAIN.FIXTURES.fixtures,fix=self.fix,attr=self.attr,xval=val)
  224. return 1
  225. def cb(self,event):
  226. cprint("EVENT cb",self.attr,self.mode,event,color='yellow')
  227. cprint(["type",event.type,"num",event.num])
  228. MAIN.INIT_OK = 1
  229. try:
  230. change = 0
  231. if "keysym" in dir(event):
  232. if "Escape" == event.keysym:
  233. ok = fixlib.clear(MAIN.FIXTURES.fixtures)
  234. MAIN.master._refresh_fix()
  235. cprint()
  236. return 0
  237. if self.mode == "SETUP":
  238. self.setup(event)
  239. elif self.mode == "COMMAND":
  240. self.command(event)
  241. elif self.mode == "LIVE":
  242. self.live(event)
  243. elif self.mode == "ENCODER":
  244. self.encoder(event)
  245. MAIN.master.refresh_fix()
  246. elif self.mode == "ENCODER2":
  247. self.encoder(event)
  248. elif self.mode == "INVERT":
  249. self.encoder(event)
  250. elif self.mode == "FX":
  251. cprint("tk_event CALLING FX WRONG EVENT OBJECT !!",color="red")
  252. elif self.mode == "ROOT":
  253. if event.keysym=="Escape":
  254. pass
  255. elif self.mode == "INPUT":
  256. cprint("INP",self.data.entry.get())
  257. if event.keycode == 36:
  258. x=self.data.entry.get()
  259. #client.send(x)
  260. elif self.mode == "INPUT2":
  261. cprint("INP2",self.data.entry2.get())
  262. if event.keycode == 36:
  263. x=self.data.entry2.get()
  264. #client.send(x)
  265. elif self.mode == "INPUT3":
  266. cprint("INP3",self.data.entry3.get())
  267. if event.keycode == 36:
  268. x=self.data.entry3.get()
  269. #client.send(x)
  270. elif self.mode == "EXEC":
  271. nr = self.attr #int(self.attr.split(":")[1])-1
  272. if event.num == 3: # right click for testing
  273. if str(event.type) == '4': #4 ButtonPress
  274. if MAIN.modes.val("CFG-BTN"):
  275. MAIN.master.btn_cfg(nr,testing=1)
  276. if event.num == 1:
  277. if str(event.type) == '4': #4 ButtonPress
  278. if MAIN.modes.val("REC"):
  279. self.data.exec_rec(nr)
  280. MAIN.modes.val("REC",0)
  281. time.sleep(0.05)
  282. MAIN.master._refresh_exec(nr=nr)
  283. elif MAIN.modes.val("DEL"):
  284. ok=MAIN.EXEC.delete(nr)
  285. if ok:
  286. MAIN.modes.val("DEL",0)
  287. #MAIN.master.refresh_exec()
  288. MAIN.master._refresh_exec(nr=nr)
  289. elif MAIN.modes.val("COPY"):
  290. ok=MAIN.EXEC.copy(nr)
  291. if ok:
  292. MAIN.modes.val("COPY",0)
  293. MAIN.master._refresh_exec(nr=nr)
  294. elif MAIN.modes.val("MOVE"):
  295. ok,cnr,bnr=MAIN.EXEC.move(nr)
  296. if ok:
  297. #MAIN.modes.val("MOVE",0) # keep MOVE on
  298. MAIN.master._refresh_exec(nr=nr)
  299. MAIN.master._refresh_exec(nr=bnr)
  300. elif MAIN.modes.val("CFG-BTN"):
  301. MAIN.master.btn_cfg(nr)
  302. #MAIN.master._refresh_exec(nr=nr)
  303. elif MAIN.modes.val("LABEL"):#else:
  304. MAIN.master.label(nr)
  305. #MAIN.master._refresh_exec(nr=nr)
  306. elif MAIN.modes.val("EDIT"):
  307. fixlib.clear(MAIN.FIXTURES.fixtures)
  308. self.data.exec_select(nr)
  309. self.data.exec_go(nr,xfade=0,event=event,val=255,button="go")
  310. MAIN.modes.val("EDIT", 0)
  311. MAIN.master.refresh_fix()
  312. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  313. elif MAIN.modes.val("SELECT"):
  314. self.data.exec_select(nr)
  315. else:
  316. self.data.exec_go(nr,event=event,val=255)
  317. else:
  318. self.data.exec_go(nr,xfade=0,event=event,val=0)
  319. #cprint(" == "*10)
  320. MAIN.master.refresh_fix()
  321. MAIN.refresher_fix.reset() # = tkrefresh.Refresher()
  322. if event.num == 3:
  323. if not MAIN.modes.val("REC"):
  324. if str(event.type) == '4': #4 ButtonPress
  325. self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=255)
  326. else:
  327. self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=0)
  328. cprint()
  329. return 0
  330. elif self.mode == "INPUT":
  331. cprint()
  332. return 0
  333. except Exception as e:
  334. cprint("== cb EXCEPT",e,color="red")
  335. cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
  336. cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")
  337. cprint()
  338. return 1
  339. class tk_event_fx():
  340. """ global input event Handeler for short cut's ... etc
  341. """
  342. def __init__(self,fix,elem,attr=None,data=None,mode=None):
  343. self.fix = fix
  344. self.data = data
  345. self.attr = attr
  346. self.elem = elem
  347. self.mode = mode
  348. def fx(self,event):
  349. cprint("Xevent.fx",self.attr,self.fix,event)
  350. fx2 = {}
  351. if self.attr == "FX:RED":
  352. if event.num == 4:
  353. cprint("FX:COLOR CHANGE",MAIN.fx_prm,color="red")
  354. txt = "FX:RED"
  355. MAIN.fx_prm["MODE"] += 1
  356. if MAIN.fx_prm["MODE"] >= len(MAIN.fx_modes):
  357. MAIN.fx_prm["MODE"]=0
  358. txt = "FX:\n"+MAIN.fx_modes[MAIN.fx_prm["MODE"]]
  359. MAIN.master.fx_color.elem["FX:RED"]["text"] = txt
  360. elif event.num == 5:
  361. cprint("FX:COLOR CHANGE",MAIN.fx_prm,color="red")
  362. txt = "FX:RED"
  363. MAIN.fx_prm["MODE"] -= 1
  364. if MAIN.fx_prm["MODE"] < 0:
  365. MAIN.fx_prm["MODE"]= len(MAIN.fx_modes)-1
  366. txt = "FX:\n"+MAIN.fx_modes[MAIN.fx_prm["MODE"]]
  367. MAIN.master.fx_color.elem["FX:RED"]["text"] = txt
  368. if self.attr.startswith("2D"):
  369. if event.num == 4:
  370. cprint("2D-X: CHANGE",MAIN.fx_prm,color="red")
  371. txt = "2D-X:"
  372. MAIN.fx_prm["2D:MODE"] += 1
  373. if MAIN.fx_prm["2D:MODE"] >= len(MAIN.fx_x_modes):
  374. MAIN.fx_prm["2D:MODE"]=0
  375. txt = "2D:MODE\n"+MAIN.fx_x_modes[MAIN.fx_prm["2D:MODE"]]
  376. MAIN.master.fx.elem["2D:MODE"]["text"] = txt
  377. elif event.num == 5:
  378. cprint("2D-X: CHANGE",MAIN.fx_prm,color="red")
  379. txt = "2D-X:"
  380. MAIN.fx_prm["2D:MODE"] -= 1
  381. if MAIN.fx_prm["2D:MODE"] < 0:
  382. MAIN.fx_prm["2D:MODE"]= len(MAIN.fx_x_modes)-1
  383. txt = "2D:MODE\n"+MAIN.fx_x_modes[MAIN.fx_prm["2D:MODE"]]
  384. MAIN.master.fx.elem["2D:MODE"]["text"] = txt
  385. elif event.num == 1:
  386. xfixtures = []
  387. fix_active =fixlib.get_active(MAIN.FIXTURES.fixtures)
  388. for fix in fix_active:
  389. if fix == "CFG":
  390. continue
  391. xfixtures.append(fix)
  392. if not xfixtures:
  393. cprint("470 fx() ... init no fixture selected",color="red")
  394. return 0
  395. xfixtures = MAIN.process_matrix(xfixtures)
  396. wing_buffer = fxlib.process_wings(xfixtures,MAIN.fx_prm)
  397. fxlib.process_effect(
  398. wing_buffer,MAIN.fx_prm,MAIN.fx_prm_move,MAIN.modes,
  399. MAIN.jclient_send,MAIN.master,
  400. MAIN.FIXTURES,fx_name=self.attr
  401. )
  402. def command(self,event,mode=""):
  403. cprint("tkevent.tk_event_fx.command")
  404. cprint(" ",self.mode)
  405. if self.mode == "FX":
  406. prm = MAIN.fx_prm
  407. ct = self.data.fx
  408. if self.mode == "FX-MOVE":
  409. prm = MAIN.fx_prm_move
  410. ct = self.data.fx_moves
  411. if 1:
  412. if self.attr.startswith("SIZE:"):#SIN":
  413. #global MAIN.fx_prm
  414. k = "SIZE"
  415. if event.num == 1:
  416. _stats = [0,30,100,255]
  417. if prm[k] in _stats:
  418. idx = _stats.index(prm[k])+1
  419. if idx > len(_stats)-1: #rotate
  420. idx = 0
  421. prm[k] = _stats[idx]
  422. else:
  423. prm[k] = _stats[1]
  424. elif event.num == 3:
  425. prm[k] =100
  426. elif event.num == 4:
  427. if prm[k] <= 0:
  428. prm[k] = 1
  429. prm[k] +=5
  430. elif event.num == 5:
  431. prm[k] -=5
  432. #prm[k] =int(prm[k])
  433. if prm[k] > 4000:
  434. prm[k] = 4000
  435. if prm[k] < 0:
  436. prm[k] =0
  437. if prm[k] == 6: #bug
  438. prm[k] =5
  439. ct.elem[self.attr]["text"] = "SIZE:\n{:0.0f}".format(prm[k])
  440. cprint(" ",prm)
  441. elif self.attr.startswith("SPEED:"):#SIN":
  442. #global prm
  443. k = "SPEED"
  444. if event.num == 1:
  445. _stats = [0,5,25,30,100,255]
  446. if prm[k] in _stats:
  447. idx = _stats.index(prm[k])+1
  448. if idx > len(_stats)-1: #rotate
  449. idx = 0
  450. prm[k] = _stats[idx]
  451. else:
  452. prm[k] = 0
  453. elif event.num == 3:
  454. prm[k] = 10
  455. elif event.num == 4:
  456. if prm[k] <= 0:
  457. prm[k] = 0.06
  458. elif prm[k] < 5:
  459. prm[k] *=1.2
  460. else:
  461. prm[k] +=5 #1.1
  462. elif event.num == 5:
  463. if prm[k] <= 5:
  464. prm[k] *=0.8
  465. else:
  466. prm[k] -= 5 #1.1
  467. #prm[k] =int(prm[k])
  468. if prm[k] > 4000:
  469. prm[k] = 4000
  470. if prm[k] < 0.05:
  471. prm[k] =0
  472. if prm[k] > 5 and prm[k] < 10: #bug
  473. prm[k] =5
  474. if prm[k] < 0:
  475. ct.elem[self.attr]["text"] = "SPEED:\noff".format(prm[k])
  476. else:
  477. ct.elem[self.attr]["text"] = "SPEED:\n{:0.02f}".format(prm[k])
  478. cprint(" ",prm)
  479. elif self.attr.startswith("START:"):#SIN":
  480. #global prm
  481. k = "START"
  482. if event.num == 1:
  483. pass
  484. elif event.num == 2:
  485. pass
  486. elif event.num == 4:
  487. if prm[k] <= 0:
  488. prm[k] = 1
  489. prm[k] += 5 #1.1
  490. elif event.num == 5:
  491. prm[k] -= 5 #1.1
  492. #prm[k] =int(prm[k])
  493. if prm[k] > 4000:
  494. prm[k] = 4000
  495. if prm[k] < 5:
  496. prm[k] =0
  497. if prm[k] == 6: #bug
  498. prm[k] =5
  499. ct.elem[self.attr]["text"] = "START:\n{:0.0f}".format(prm[k])
  500. cprint(" ",prm)
  501. elif self.attr.startswith("WIDTH:"):#SIN":
  502. #global prm
  503. k = "WIDTH"
  504. if event.num == 1:
  505. _stats = [0,25,50,75,10]
  506. if prm[k] in _stats:
  507. idx = _stats.index(prm[k])+1
  508. if idx > len(_stats)-1: #rotate
  509. idx = 0
  510. prm[k] = _stats[idx]
  511. else:
  512. prm[k] = 25
  513. elif event.num == 2:
  514. prm[k] = 50
  515. elif event.num == 3:
  516. prm[k] = 100
  517. elif event.num == 4:
  518. if prm[k] <= 0:
  519. prm[k] = 1
  520. elif prm[k] == 50:
  521. prm[k] = 100
  522. elif prm[k] == 5:
  523. prm[k] = 25
  524. elif prm[k] == 25:
  525. prm[k] = 50
  526. else:
  527. prm[k] += 5 #*=1.1
  528. elif event.num == 5:
  529. if prm[k] == 10:
  530. prm[k] = 5
  531. elif prm[k] == 25:
  532. prm[k] = 10
  533. elif prm[k] == 50:
  534. prm[k] = 25
  535. elif prm[k] == 100:
  536. prm[k] = 50
  537. #else:
  538. # prm[k] -=5 #/=1.1
  539. #prm[k] =int(prm[k])
  540. if prm[k] < 0:
  541. prm[k] = 0
  542. if prm[k] > 100:
  543. prm[k] = 100
  544. if prm[k] == 6: #bug
  545. prm[k] =5
  546. if prm[k] > 25 and prm[k] < 50: #bug
  547. prm[k] =50
  548. if prm[k] > 50 and prm[k] < 75: #bug
  549. prm[k] =75
  550. if prm[k] > 75 and prm[k] < 100: #bug
  551. prm[k] =100
  552. ct.elem[self.attr]["text"] = "WIDTH:\n{:0.0f}".format(prm[k])
  553. cprint(" ",prm)
  554. elif self.attr.startswith("DIR:"):#SIN":
  555. #global prm
  556. k = "DIR"
  557. if event.num == 1:
  558. prm[k] = 1
  559. elif event.num == 3:
  560. prm[k] = -1
  561. elif event.num == 4:
  562. prm[k] = 1
  563. elif event.num == 5:
  564. prm[k] =-1
  565. txt = prm[k]
  566. ct.elem[self.attr]["text"] = "DIR:\n{}".format(prm[k])
  567. cprint(" ",prm)
  568. elif self.attr.startswith("SHUFFLE:"):#SIN":
  569. #global prm
  570. k = "SHUFFLE"
  571. if event.num == 1:
  572. prm[k] = 0
  573. elif event.num == 3:
  574. prm[k] = 1
  575. elif event.num == 4:
  576. prm[k] = 1
  577. elif event.num == 5:
  578. prm[k] =0
  579. if prm[k] == 6: #bug ?
  580. prm[k] =5
  581. ct.elem[self.attr]["text"] = k+":\n{}".format(prm[k])
  582. cprint(" ",prm)
  583. elif self.attr.startswith("INVERT:"):#SIN":
  584. #global prm
  585. k = "INVERT"
  586. if event.num == 1:
  587. prm[k] = 0
  588. elif event.num == 3:
  589. prm[k] = 1
  590. elif event.num == 4:
  591. prm[k] = 1
  592. elif event.num == 5:
  593. prm[k] =0
  594. if prm[k] == 6: #bug ?
  595. prm[k] =5
  596. ct.elem[self.attr]["text"] = k+":\n{}".format(prm[k])
  597. cprint(" ",prm)
  598. elif self.attr.startswith("2D-X:"):#SIN":
  599. #global prm
  600. k = "2D-X"
  601. if event.num == 1:
  602. prm[k] = 1
  603. elif event.num == 3:
  604. prm[k] = 2
  605. elif event.num == 4:
  606. prm[k] += 1
  607. elif event.num == 5:
  608. prm[k] -=1
  609. if prm[k] > 100:
  610. prm[k] = 100
  611. if prm[k] < 1:
  612. prm[k] =1
  613. txt = prm[k]
  614. ct.elem[self.attr]["text"] = "2D-X:\n{}".format(prm[k])
  615. cprint(" ",prm)
  616. elif self.attr.startswith("WING:"):#SIN":
  617. #global prm
  618. k = "WING"
  619. if event.num == 1:
  620. prm[k] = 1
  621. elif event.num == 3:
  622. prm[k] = 2
  623. elif event.num == 4:
  624. prm[k] += 1
  625. elif event.num == 5:
  626. prm[k] -=1
  627. if prm[k] > 100:
  628. prm[k] = 100
  629. if prm[k] < 1:
  630. prm[k] =1
  631. txt = prm[k]
  632. ct.elem[self.attr]["text"] = "WING:\n{}".format(prm[k])
  633. cprint(" ",prm)
  634. elif self.attr.startswith("OFFSET:"):#SIN":
  635. #global prm
  636. k = "OFFSET"
  637. if event.num == 1:
  638. prm[k] = 50
  639. elif event.num == 2:
  640. prm[k] *= 2
  641. elif event.num == 3:
  642. prm[k] = 100
  643. elif event.num == 4:
  644. if prm[k] <= 0:
  645. prm[k] = 1
  646. prm[k] +=5 #*=1.1
  647. elif event.num == 5:
  648. prm[k] -=5 #/=1.1
  649. #prm[k] =int(prm[k])
  650. #if prm[k] > 512:
  651. # prm[k] = 512
  652. if prm[k] < 5:
  653. prm[k] =0
  654. if prm[k] == 6: #bug
  655. prm[k] =5
  656. ct.elem[self.attr]["text"] = "OFFSET:\n{:0.0f}".format(prm[k])
  657. cprint(" ",prm)
  658. elif self.attr.startswith("BASE:"):
  659. k = "BASE"
  660. if event.num == 1:
  661. prm[k] = "-"
  662. elif event.num == 3:
  663. prm[k] = "0"
  664. elif event.num == 4:
  665. prm[k] = "+"
  666. elif event.num == 5:
  667. prm[k] = "0"
  668. ct.elem[self.attr]["text"] = "BASE:\n{}".format(prm[k])
  669. elif self.attr.startswith("2D:"):#SIN":
  670. self.fx(event)
  671. elif self.attr.startswith("FX:"):#SIN":
  672. self.fx(event)
  673. elif self.attr == "FX OFF":
  674. if event.num == 1:
  675. MAIN.FIXTURES.fx_off("all")
  676. MAIN.CONSOLE.fx_off("all")
  677. MAIN.CONSOLE.flash_off("all")
  678. MAIN.master._refresh_fix()
  679. return 0
  680. #if event.num == 1:
  681. elif self.attr == "REC-FX":
  682. cprint(" ",self.attr)
  683. MAIN.modes.val(self.attr,1)
  684. #MAIN.modes.val(self.attr,1)
  685. #MAIN.modes.val("REC",1)
  686. return 0
  687. def cb(self,event):
  688. cprint("tkevent.EVENT_fx.cb:",self.attr,self.mode,event,color='yellow')
  689. cprint(["type",event.type,"num",event.num])
  690. try:
  691. change = 0
  692. if self.mode.startswith("FX"):
  693. self.command(event)
  694. return 0
  695. except Exception as e:
  696. cprint("== cb EXCEPT",e,color="red")
  697. cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
  698. cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")
  699. return 1