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