draw.py 30 KB

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