draw.py 25 KB

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