draw.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806
  1. import tkinter as tk
  2. import traceback
  3. from __main__ import *
  4. class MiniButton:
  5. def __init__(self,root,width=72,height=38,text="button"):
  6. self.text=text
  7. self.rb = tk.Frame(root, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
  8. self.bb = tk.Canvas(self.rb, highlightbackground = "black", highlightthickness = 1, bd=1,relief=tk.RAISED)
  9. self.bb.configure(width=width, height=height)
  10. self.fg = "#002"
  11. self.label = []
  12. self.bind("<Enter>", self.on_enter)
  13. self.bind("<Leave>", self.on_leave)
  14. # !! BLOCK's other bindings like GO
  15. #self.bind("<Button-1>", self.on_b1)
  16. #self.bind("<ButtonPress>", self.on_press)
  17. #self.bind("<ButtonRelease>", self.on_release)
  18. #self.bind("<ButtonRelease-1>", self.on_release)
  19. self.activebackground="lightgrey"
  20. self.defaultBackground="grey"
  21. def on_b1(self, e):
  22. print("on_b1",e)
  23. #self.bb.config(background=self.activebackground)
  24. self.bb.config(relief=tk.SUNKEN)#abackground=self.activebackground)
  25. return 1
  26. def on_press(self, e):
  27. print("on_press",e)
  28. #self.bb.config(background=self.activebackground)
  29. self.bb.config(relief=tk.SUNKEN)#abackground=self.activebackground)
  30. return 1
  31. def on_release(self, e):
  32. print("on_release",e)
  33. #self.bb.config(background=self.activebackground)
  34. self.bb.config(relief=tk.RAISED)#abackground=self.activebackground)
  35. return 1
  36. def on_enter(self, e):
  37. #print("on_enter",e)
  38. #self.bb.config(background=self.activebackground)
  39. self.bb.config(relief=tk.FLAT)#abackground=self.activebackground)
  40. return 1
  41. def on_leave(self, e):
  42. #print("on_leave",e)
  43. self.bb.config(background=self.defaultBackground)
  44. self.bb.config(relief=tk.RAISED)#abackground=self.activebackground)
  45. return 1
  46. def _label(self,text="1\n2\n3\n"):
  47. z = 0
  48. self.bb.delete("label")
  49. self.label = []
  50. for t in text.split("\n"):
  51. self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label")
  52. #self.l["color"] = self.fg
  53. self.label.append(self.l)
  54. z+=1
  55. def _configure(self,**args):
  56. if "text" in args:
  57. if self.text != args["text"]:
  58. self.text = args["text"]
  59. self._label(self.text)
  60. if "bg" in args:
  61. #print(dir(self.bb))
  62. self.bb.configure(bg=args["bg"])
  63. self.defaultBackground=args["bg"]
  64. if "fg" in args:
  65. #print(dir(self.bb))
  66. self.fg=args["fg"]
  67. #if len(self.label):
  68. # self.label[0].configure(color="red") #args["fg"])
  69. #self.defaultBackground=args["fg"]
  70. def configure(self,**args):
  71. self._configure(**args)
  72. def config(self,**args):
  73. self._configure(**args)
  74. def bind(self,etype="<Button>",cb=None):
  75. #bb.bind("<ButtonRelease>",Xevent(fix=0,elem=b,attr=k,data=self,mode="PRESET").cb)
  76. if cb:
  77. self.bb.bind(etype,cb)
  78. def grid(self,row=0, column=0, sticky=""):
  79. self.bb.pack() #(row=row, column=column, sticky=sticky)
  80. self.rb.grid(row=row, column=column, sticky=sticky)
  81. class ExecButton(MiniButton):
  82. def __init__(self,root,width=72,height=38,text="button"):
  83. #self.text = "1\n2\n3\n"
  84. super().__init__(root,width,height,text)
  85. self.x9font = tk.font.Font(family="FreeSans", size=9, weight="bold")
  86. self.x8font = tk.font.Font(family="FreeSans", size=8, weight="bold")
  87. self.x7font = tk.font.Font(family="FreeSans", size=7, weight="bold")
  88. self.x6font = tk.font.Font(family="FreeSans", size=6, weight="bold")
  89. self.x5font = tk.font.Font(family="FreeSans", size=5, weight="bold")
  90. #print(self,"init()",[self.text])
  91. def config(self,**args):
  92. self._configure(**args)
  93. self._label()
  94. def configure(self,**args):
  95. self._configure(**args)
  96. self._label()
  97. def dbg_info(self):
  98. print(self,"_label()",[self.text])
  99. for i in dir(self.bb):
  100. print("-",i)
  101. def _label(self,text=None):
  102. if type(text) is str:
  103. if self.text == text:
  104. return
  105. self.text = text
  106. else:
  107. text = self.text[:]
  108. self.bb.delete("label")
  109. txt2 = text
  110. try:
  111. text = text.split("\n")[1]
  112. except:pass
  113. if "grün" in text.lower() or "green" in text.lower():
  114. self.l = self.bb.create_rectangle(10,29,20,39,fill="green",tag="label")
  115. elif "purple" in text.lower() or "purple" in text.lower():
  116. self.l = self.bb.create_rectangle(10,29,20,39,fill="#800080",tag="label")
  117. elif "lime" in text.lower() or "lime" in text.lower():
  118. self.l = self.bb.create_rectangle(10,29,20,39,fill="#00ff00",tag="label")
  119. elif "blau" in text.lower() or "blue" in text.lower():
  120. self.l = self.bb.create_rectangle(10,29,20,39,fill="blue",tag="label")
  121. elif "rot" in text.lower() or "red" in text.lower():
  122. self.l = self.bb.create_rectangle(10,29,20,39,fill="red",tag="label")
  123. elif "orange" in text.lower():# or "yellow" in text.lower():
  124. self.l = self.bb.create_rectangle(10,29,20,39,fill="orange",tag="label")
  125. elif "weiß" in text.lower() or "white" in text.lower():
  126. self.l = self.bb.create_rectangle(10,29,20,39,fill="white",tag="label")
  127. elif "cyan" in text.lower():# or "yellow" in text.lower():
  128. self.l = self.bb.create_rectangle(10,29,20,39,fill="cyan",tag="label")
  129. elif "gelb" in text.lower() or "yellow" in text.lower():
  130. self.l = self.bb.create_rectangle(10,29,20,39,fill="yellow",tag="label")
  131. elif "pink" in text.lower() or "pink" in text.lower():
  132. self.l = self.bb.create_rectangle(10,29,20,39,fill="#ff69b4",tag="label")
  133. elif "mage" in text.lower() or "mage" in text.lower():
  134. self.l = self.bb.create_rectangle(10,29,20,39,fill="magenta",tag="label")
  135. if "nebel" in text.lower() or "smoke" in text.lower() or "haze" in text.lower():
  136. self.l = self.bb.create_rectangle(10,29,60,39,fill="white",tag="label")
  137. if "mh " in text.lower() or " mh" in text.lower() :
  138. self.l = self.bb.create_rectangle(30,29,35,32,fill="black",tag="label")
  139. self.l = self.bb.create_rectangle(28,34,37,39,fill="black",tag="label")
  140. if "off" in text.lower():
  141. self.l = self.bb.create_rectangle(50,30,55,35,fill="black",tag="label")
  142. if "dim" in text.lower() or "front" in text.lower() or "on" in text.lower():
  143. #self.l = self.bb.create_line(56,30,60,28,fill="black",tag="label")
  144. self.l = self.bb.create_rectangle(50,30,55,35,fill="white",tag="label")
  145. #self.l = self.bb.create_line(56,36,58,36,fill="black",tag="label")
  146. if "circle" in text.lower():
  147. self.l = self.bb.create_oval(30,29,40,39,fill="",tag="label")
  148. if "pan" in text.lower():
  149. self.l = self.bb.create_line(20,34 ,45,34,fill="black",arrow=tk.BOTH,tag="label")
  150. if "tilt" in text.lower():
  151. self.l = self.bb.create_line(30,25 ,30,43,fill="black",arrow=tk.BOTH,tag="label")
  152. text = txt2
  153. z = 0
  154. for t in text.split("\n"):
  155. ts = 10
  156. _max = 7
  157. if z==1 and len(t) >= _max:
  158. ts = int(10 - (len(t)-_max)/1.5)
  159. if ts < 5:
  160. ts = 5
  161. xfont = self.x9font
  162. if 1:
  163. if ts == 9:
  164. xfont = self.x9font
  165. elif ts == 8:
  166. xfont = self.x8font
  167. elif ts == 7:
  168. xfont = self.x7font
  169. elif ts == 6:
  170. xfont = self.x7font
  171. elif ts == 5:
  172. xfont = self.x7font
  173. if len(t) > 14:
  174. t2 = t[:14]
  175. t3 = t[14:]
  176. self.l = self.bb.create_text(37,z*10+9-2,text=t2,anchor="c",tag="label",fill=self.fg,font=xfont)
  177. self.l = self.bb.create_text(37,z*10+9+6,text=t3,anchor="c",tag="label",fill=self.fg,font=xfont)
  178. else:
  179. self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg,font=xfont)
  180. #self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg)
  181. else:
  182. self.l = self.bb.create_text(37,z*10+9,text=t,anchor="c",tag="label",fill=self.fg)
  183. z+=1
  184. #self.bb.update(0)
  185. #self.bb.after(0)
  186. def draw_command(gui,xframe):
  187. frame_cmd=xframe
  188. i=0
  189. c=0
  190. r=0
  191. frame = tk.Frame(frame_cmd,bg="black")
  192. frame.pack(fill=tk.X, side=tk.TOP)
  193. # b = tk.Button(frame,bg="lightblue", text="COMM.",width=6)
  194. #b.bind("<Button>",Xevent(fix=fix,elem=b).cb)
  195. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  196. #r+=1
  197. c+=1
  198. for comm in gui.commands.commands:
  199. if comm == "\n":
  200. c=0
  201. r+=1
  202. continue
  203. v=0
  204. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
  205. if comm not in gui.commands.elem:
  206. gui.commands.elem[comm] = b
  207. gui.commands.val[comm] = 0
  208. if comm == "BLIND":
  209. b["bg"] = "grey"
  210. myTip = Hovertip(b,'BLIND MODE\nNO CHANGE on DMX-OUTPUT')
  211. if comm == "CLEAR":
  212. b["bg"] = "grey"
  213. myTip = Hovertip(b,'CLEAR ALL SELECTED\nFIXTURES ATTRIBUTES')
  214. if comm == "REC-FX":
  215. b["bg"] = "grey"
  216. myTip = Hovertip(b,'RECORD ONLY FX\nINTO EXEC')
  217. if comm == "FADE":
  218. b["bg"] = "green"
  219. myTip = Hovertip(b,'adjust fade time')
  220. if comm == "S-KEY":
  221. b["bg"] = "green"
  222. myTip = Hovertip(b,'keyboard short-key\non or off')
  223. if comm == "FX OFF":
  224. b["bg"] = "magenta"
  225. if comm == "SIZE:":
  226. b["text"] = "SIZE:{:0.0f}".format(fx_prm["SIZE"])
  227. if comm == "SPEED:":
  228. b["text"] = "SPEED:{:0.0f}".format(fx_prm["SPEED"])
  229. if comm == "DELAY":
  230. b["text"] = "FADE:\n{:0.02f}".format(DELAY.val())
  231. if comm == "FADE":
  232. b["text"] = "FADE:\n{:0.02f}".format(FADE.val())
  233. if comm == "START:":
  234. b["text"] = "START:{:0.0f}".format(fx_prm["START"])
  235. if comm == "OFFSET:":
  236. b["text"] = "OFFSET:{:0.0f}".format(fx_prm["OFFSET"])
  237. if comm == "FX-X:":
  238. b["text"] = "FX-X:{}".format(fx_prm["FX-X"])
  239. if comm == "BASE:":
  240. b["text"] = "BASE:{}".format(fx_prm["BASE"])
  241. b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=gui,mode="COMMAND").cb)
  242. if comm:
  243. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  244. c+=1
  245. if c >=8:
  246. c=0
  247. r+=1
  248. def draw_exec(gui,xframe,PRESETS):
  249. draw_preset(gui,xframe,PRESETS)
  250. def draw_preset(gui,xframe,PRESETS):
  251. i=0
  252. c=0
  253. r=0
  254. root = xframe
  255. frame = tk.Frame(root,bg="black")
  256. frame.pack(fill=tk.X, side=tk.TOP)
  257. #time.sleep(0.1)
  258. gui.elem_presets = {}
  259. i=0
  260. for k in PRESETS.val_presets:
  261. if i%(10*8)==0 or i ==0:
  262. c=0
  263. #b = tk.Label(frame,bg="black", text="" )
  264. b = tk.Canvas(frame,bg="black", height=4,bd=0,width=6,highlightthickness=0) #,bd="black")
  265. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  266. r+=1
  267. c=0
  268. b = tk.Button(frame,bg="lightblue", text="EXEC " )
  269. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  270. c+=1
  271. b = tk.Button(frame,bg="lightblue", text="BANK " + str(int(i/(8*8))+1) )
  272. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  273. c+=1
  274. b = tk.Button(frame,bg="lightblue", text="NAME" )
  275. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  276. r+=1
  277. c=0
  278. i+=1
  279. v=0
  280. label = ""
  281. #if k in PRESETS.label_presets:
  282. # label = PRESETS.label_presets[k]
  283. # #print([label])
  284. sdata=PRESETS.val_presets[k]
  285. BTN="go"
  286. if "CFG" in sdata:#["BUTTON"] = "GO"
  287. if "BUTTON" in sdata["CFG"]:
  288. BTN = sdata["CFG"]["BUTTON"]
  289. #bb = tk.Frame(frame, highlightbackground = "red", highlightthickness = 1, bd=0)
  290. #bb = tk.Canvas(frame, highlightbackground = "black", highlightthickness = 1, bd=1)
  291. #bb.configure(width=70, height=38)
  292. txt=str(k+1)+":"+str(BTN)+":"+str(len(sdata)-1)+"\n"+label
  293. b = ExecButton(frame,text=txt)
  294. #b = tk.Button(bb,bg="grey", text=txt,width=7,height=2)
  295. b.bind("<Button>",Xevent(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
  296. b.bind("<ButtonRelease>",Xevent(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
  297. if k not in gui.elem_presets:
  298. gui.elem_presets[k] = b
  299. #b.pack(expand=1)
  300. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  301. b.config(text="xx")
  302. c+=1
  303. if c >=10:
  304. c=0
  305. r+=1
  306. time.sleep(0.1)
  307. gui._refresh_exec()
  308. #gui.refresh_exec()
  309. #gui.refresh_exec()
  310. print("##################################")
  311. def draw_input(gui):
  312. i=0
  313. c=0
  314. r=0
  315. frame = tk.Frame(root2,bg="black")
  316. frame.pack(fill=tk.X, side=tk.TOP)
  317. b = tk.Label(frame,bg="black", text="------------------------ ---------------------------------------")
  318. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  319. r=0
  320. frame = tk.Frame(root2,bg="black")
  321. frame.pack(fill=tk.X, side=tk.TOP)
  322. b = tk.Label(frame, text="send:")
  323. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  324. c+=1
  325. b = tk.Entry(frame,bg="grey", text="",width=50)
  326. gui.entry = b
  327. b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb)
  328. b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb)
  329. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  330. b.insert("end","d0:127,fx241:sinus:50:50:10,fx243:cosinus:50:50:10,d201:127,fx201:sinus:50:300:10")
  331. r+=1
  332. b = tk.Entry(frame,bg="grey", text="",width=20)
  333. gui.entry2 = b
  334. b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT2").cb)
  335. b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT2").cb)
  336. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  337. b.insert("end","d1:0:4")
  338. r+=1
  339. b = tk.Entry(frame,bg="grey", text="",width=20)
  340. gui.entry3 = b
  341. b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb)
  342. #b.bind("<B1-Motion>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb)
  343. b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb)
  344. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  345. b.insert("end","fx:alloff:::")
  346. def draw_colorpicker(gui,xframe,FIXTURES,master):
  347. import lib.colorpicker as colp
  348. class _CB():
  349. def __init__(gui,FIXTURES,master):
  350. gui.old_color = (0,0,0)
  351. def cb(gui,event,data):
  352. print("CB.cb",gui,event,data)
  353. cprint("colorpicker CB")
  354. if "color" not in data:
  355. return 0
  356. if gui.old_color == data["color"]:
  357. pass #return 0
  358. #gui.old_color = data["color"]
  359. color = data["color"]
  360. print("e",event,data)
  361. print("e",dir(event))#.keys())
  362. try:
  363. print("e.state",event.state)
  364. except:pass
  365. set_fade = FADE.val() #fade
  366. event_ok = 0
  367. event_num = 0
  368. event_state = 0
  369. if event is None:
  370. event_ok = 1
  371. event_num = 3
  372. elif event.num == 1:
  373. event_ok = 1
  374. event_num = event.num
  375. elif event.num == 3:
  376. event_ok = 1
  377. event_num = event.num
  378. elif event.num==2:
  379. event_ok = 1
  380. event_num = event.num
  381. elif event.state in [256,1024]:
  382. event_ok = 1
  383. event_state = event.state
  384. if "color" in data and event_ok:
  385. cr=None
  386. cg=None
  387. cb=None
  388. cw=0
  389. ca=0
  390. set_fade=0
  391. if event_num == 1:
  392. if FADE._is():
  393. set_fade=FADE.val() #fade
  394. cr = color[0]
  395. cg = color[1]
  396. cb = color[2]
  397. elif event_num == 3:
  398. cr = color[0]
  399. cg = color[1]
  400. cb = color[2]
  401. elif event_num == 2:
  402. cr= "click"
  403. cg= "click"
  404. cb= "click"
  405. cw= "click"
  406. ca= "click"
  407. elif event_state == 256:
  408. cr = color[0]
  409. cg = color[1]
  410. cb = color[2]
  411. if cr is not None:
  412. FIXTURES.encoder(fix=0,attr="RED",xval=cr,xfade=set_fade)
  413. if cg is not None:
  414. FIXTURES.encoder(fix=0,attr="GREEN",xval=cg,xfade=set_fade)
  415. if cb is not None:
  416. FIXTURES.encoder(fix=0,attr="BLUE",xval=cb,xfade=set_fade)
  417. FIXTURES.encoder(fix=0,attr="WHITE",xval=cw,xfade=set_fade)
  418. FIXTURES.encoder(fix=0,attr="AMBER",xval=ca,xfade=set_fade)
  419. master.refresh_fix()
  420. print("PICK COLOR:",data["color"])
  421. _cb=_CB(FIXTURES,master)
  422. colp.colorpicker(xframe,width=580,height=113, xcb=_cb.cb)
  423. return 0
  424. canvas=tk.Canvas(xframe,width=600,height=113)
  425. canvas["bg"] = "yellow" #"green"
  426. canvas.pack()
  427. # RGB
  428. x=0
  429. y=0
  430. j=0
  431. d = 20
  432. for i in range(0,d+1):
  433. fi = int(i*255/d)
  434. f = 255-fi
  435. if i > d/2:
  436. pass#break
  437. color = '#%02x%02x%02x' % (f, fi, fi)
  438. print( "farbe", i*10, j, f,fi,fi,color)
  439. r = canvas.create_rectangle(x, y, x+20, y+20, fill=color)
  440. x+=20
  441. def draw_enc(gui,xframe):
  442. for widget in xframe.winfo_children():
  443. widget.destroy()
  444. root2 = xframe
  445. i=0
  446. c=0
  447. r=0
  448. frame = tk.Frame(xframe,bg="black")
  449. frame.pack( side=tk.LEFT,expand=0,fill="both")
  450. b = tk.Button(frame,bg="lightblue", text="ENCODER",width=6)
  451. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  452. c+=1
  453. #b = tk.Button(frame,bg="lightblue", text="",width=6)
  454. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  455. #c+=1
  456. #b = tk.Button(frame,bg="lightblue", text="",width=6)
  457. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  458. #c+=1
  459. #b = tk.Button(frame,bg="lightblue", text="",width=6)
  460. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  461. #c+=1
  462. #b = tk.Button(frame,bg="lightblue", text="",width=6)
  463. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  464. #c+=1
  465. #b = tk.Button(frame,bg="lightblue", text="",width=6)
  466. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  467. ##c+=1
  468. #for attr in ["xx"]*23: # gui.all_attr:
  469. eat = gui.all_attr
  470. if len(eat) < 24:
  471. for i in range(24-len(eat)):
  472. eat.append("")
  473. for attr in eat:
  474. if attr.endswith("-FINE"):
  475. continue
  476. v=0
  477. if attr.startswith("_"):
  478. continue
  479. b = tk.Button(frame,bg="#6e6e6e", text=str(attr)+'',width=7)#, anchor="w")
  480. if attr == "DIM":
  481. b = tk.Button(frame,bg="#ff7f00", text=str(attr)+'',width=7)#, anchor="w")
  482. b.bind("<Button>",Xevent(fix=0,elem=b,attr=attr,data=gui,mode="ENCODER2").cb)
  483. b.grid(row=r, column=c, sticky=tk.W+tk.E ,ipadx=0,ipady=0,padx=0,pady=0)#,expand=True)
  484. c+=1
  485. if c >=8:
  486. c=0
  487. r+=1
  488. b = tk.Button(frame,bg="#bfff00", text="INV-ATTR",width=6)
  489. myTip = Hovertip(b,'INVERT ATTRIBUT SELECTION')
  490. b.bind("<Button>",Xevent(fix="SEL",elem=b,attr="INV-ATTR",data=gui,mode="INVERT").cb)
  491. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  492. c+=1
  493. #b = tk.Button(frame,bg="#00a7ff", text="INV-FIX",width=6)
  494. #myTip = Hovertip(b,'INVERT FIXTURE SELECTION')
  495. #b.bind("<Button>",Xevent(fix="ALL",elem=b,attr="INV-FIX",data=gui,mode="INVERT").cb)
  496. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  497. #c+=1
  498. def _draw_fx(frame,c,r,gui,mode="FX"):
  499. ct = gui.fx
  500. prm = fx_prm
  501. if mode=="FX-MOVE":
  502. ct = gui.fx_moves
  503. prm = fx_prm_move
  504. elif mode=="FX-GENERIC":
  505. ct = gui.fx_generic
  506. prm = fx_prm #_generic
  507. for comm in ct.commands:
  508. if comm == "\n\n":
  509. b = tk.Label(frame,bg="black", text="-",font=space_font)
  510. b.grid(row=r, column=c,pady=0,padx=0, sticky=tk.W+tk.E)
  511. c=0
  512. r+=1
  513. continue
  514. if comm == "\n":
  515. c=0
  516. r+=1
  517. continue
  518. v=0
  519. if "PAN/TILT" in comm:
  520. b = tk.Button(frame,bg="grey", text=str(comm),width=6,height=2)
  521. else:
  522. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
  523. if comm not in ct.elem:
  524. #comm = comm.replace("\n","")
  525. ct.elem[comm] = b
  526. ct.val[comm] = 0
  527. b.bind("<Button>",Xevent_fx(fix=0,elem=b,attr=comm,data=gui,mode=mode).cb)
  528. if comm == "REC-FX":
  529. b["bg"] = "grey"
  530. elif comm == "FX OFF":
  531. b["bg"] = "magenta"
  532. elif comm[:3] == "FX:":
  533. b["text"] = comm
  534. b["bg"] = "#ffbf00"
  535. elif comm[:3] == "MO:":
  536. b["text"] = comm
  537. b["bg"] = "lightgreen"
  538. elif comm.startswith( "SIZE:"):
  539. b["text"] = "SIZE:\n{:0.0f}".format(prm["SIZE"])
  540. b["bg"] = "lightgreen"
  541. elif comm.startswith( "SPEED:"):
  542. b["text"] = "SPEED:\n{:0.0f}".format(prm["SPEED"])
  543. b["bg"] = "lightgreen"
  544. elif comm.startswith("START:"):
  545. b["bg"] = "lightgreen"
  546. b["text"] = "START:\n{:0.0f}".format(prm["START"])
  547. elif comm.startswith( "OFFSET:"):
  548. b["bg"] = "lightgreen"
  549. b["text"] = "OFFSET:\n{:0.0f}".format(prm["OFFSET"])
  550. elif comm[:3] == "BASE:":
  551. b["bg"] = "lightgreen"
  552. b["text"] = "BASE:\n{}".format(prm["BASE"])
  553. elif comm[0] == "M":
  554. b["text"] = comm
  555. b["bg"] = "lightgrey"
  556. if comm:
  557. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  558. c+=1
  559. if c >=6:
  560. c=0
  561. r+=1
  562. return c,r
  563. def draw_fx(gui,xframe):
  564. frame_fx=xframe
  565. i=0
  566. c=0
  567. r=0
  568. frame = tk.Frame(frame_fx,bg="black")
  569. frame.pack(fill=tk.X, side=tk.TOP)
  570. b = tk.Button(frame,bg="lightblue", text="FX.",width=6)
  571. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  572. c+=1
  573. c,r = _draw_fx(frame,c,r,gui,mode="FX-MOVE")
  574. r+=1
  575. b = tk.Canvas(frame,bg="black", height=4,bd=0,width=6,highlightthickness=0) #,bd="black")
  576. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  577. r+=1
  578. c=0
  579. c,r = _draw_fx(frame,c,r,gui,mode="FX")
  580. b = tk.Canvas(frame,bg="black", height=4,bd=0,width=6,highlightthickness=0) #,bd="black")
  581. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  582. r+=1
  583. c=0
  584. c,r = _draw_fx(frame,c,r,gui,mode="FX-GENERIC")
  585. def draw_setup(gui,xframe):
  586. frame_cmd=xframe
  587. i=0
  588. c=0
  589. r=0
  590. frame = tk.Frame(frame_cmd,bg="black")
  591. frame.pack(fill=tk.X, side=tk.TOP)
  592. #b = tk.Button(frame,bg="lightblue", text="SETUP",width=6)
  593. #b.bind("<Button>",Xevent(fix=fix,elem=b).cb)
  594. #b.grid(row=r, column=c, sticky=tk.W+tk.E)
  595. #r+=1
  596. c+=1
  597. for comm in ["SAVE\nSHOW","LOAD\nSHOW","NEW\nSHOW","SAVE\nSHOW AS","SAVE &\nRESTART","DRAW\nGUI"]:
  598. if comm == "\n":
  599. c=0
  600. r+=1
  601. continue
  602. v=0
  603. if comm == "SAVE\nSHOW":
  604. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=5,height=2)
  605. elif comm == "LOAD\nSHOW":
  606. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=5,height=2)
  607. elif comm == "SAVE\nSHOW AS":
  608. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
  609. elif comm == "SAVE &\nRESTART":
  610. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
  611. elif comm == "DRAW\nGUI":
  612. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
  613. else:
  614. b = tk.Button(frame,bg="grey", text=str(comm),width=5,height=2)
  615. if comm not in gui.commands.elem:
  616. gui.commands.elem[comm] = b
  617. gui.commands.val[comm] = 0
  618. b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=gui,mode="SETUP").cb)
  619. if comm == "BASE:":
  620. b["text"] = "BASE:{}".format(prm["BASE"])
  621. if comm:
  622. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  623. c+=1
  624. if c >=7:
  625. c=0
  626. r+=1
  627. def _loop_clock(b):
  628. xfont = tk.font.Font(family="FreeSans", size=65, weight="bold")
  629. xfont1 = tk.font.Font(family="FreeSans", size=25, weight="bold")
  630. while 1:
  631. #b["text"] =
  632. d = time.strftime("%Y-%m-%d")
  633. s = time.strftime("%X")
  634. b.delete("all")
  635. b.create_text(170,41,text=s,fill="#aa0" ,font=xfont)
  636. b.create_text(160,91,text=d,fill="#aa0" ,font=xfont1)
  637. time.sleep(1)
  638. #exit()
  639. def draw_clock(gui,xframe):
  640. frame_cmd=xframe
  641. frame = tk.Frame(frame_cmd,bg="black")
  642. frame.pack(fill=tk.X, side=tk.TOP)
  643. comm = "xx"
  644. xfont = tk.font.Font(family="FreeSans", size=25, weight="bold")
  645. b = tk.Canvas(frame,bg="black", height=105,bd=0,width=6,highlightthickness=0) #,bd="black")
  646. #b = tk.Button(frame,bg="lightgrey", text=str(comm),width=26,height=2,font=xfont)
  647. #b.config(activebackground="lightgreen")
  648. #b.config(background="lightgreen")
  649. b.pack(fill="both",expand=1) #row=0, column=0, sticky=tk.W+tk.E)
  650. #b["text"] = time.strftime("%Y-%m-%d %X")
  651. thread.start_new_thread(_loop_clock,(b,))
  652. def draw_live(gui,xframe):
  653. frame_cmd=xframe
  654. i=0
  655. c=0
  656. r=0
  657. frame = tk.Frame(frame_cmd,bg="black")
  658. frame.pack(fill=tk.X, side=tk.TOP)
  659. c+=1
  660. for comm in ["FADE","DELAY","PAN/TILT\nFADE","PAN/TILT\nDELAY"]:
  661. if comm == "\n":
  662. c=0
  663. r+=1
  664. continue
  665. v=0
  666. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
  667. if comm not in gui.commands.elem:
  668. gui.commands.elem[comm] = b
  669. gui.commands.val[comm] = 0
  670. b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=gui,mode="LIVE").cb)
  671. if "FADE" == comm:
  672. b["text"] = "FADE:\n{:0.2}".format(FADE.val())
  673. if "DELAY" == comm:
  674. b["text"] = "DELAY:\n{:0.2}".format(DELAY.val())
  675. if "PAN/TILT\nFADE" == comm:
  676. b["text"] = "PAN/TILT\nFADE:{:0.2}".format(FADE_move.val())
  677. if "FADE" in comm:
  678. b["bg"] = "green"
  679. b.config(activebackground="lightgreen")
  680. if comm:
  681. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  682. c+=1
  683. if c >=5:
  684. c=0
  685. r+=1