tkevent.py 28 KB

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