_LibreLightDesk.py 80 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681
  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. """
  4. (c) 2012 micha@librelight.de
  5. SPDX-License-Identifier: GPL-2.0-only
  6. """
  7. import random
  8. import subprocess
  9. import string
  10. import copy
  11. import traceback
  12. import json
  13. import time
  14. import sys
  15. import os
  16. import _thread as thread
  17. for i in range(30):
  18. print() # boot space
  19. IS_GUI = 0
  20. if __name__ == "__main__":
  21. IS_GUI = 1
  22. import tool.movewin as movewin
  23. import lib.fixlib as fixlib
  24. import lib.libwin as libwin
  25. import lib.libtk as libtk
  26. import lib.libconfig as libconfig
  27. import lib.meta as meta
  28. rnd_id = str(random.randint(100,900))
  29. rnd_id += " beta"
  30. rnd_id2 = ""
  31. rnd_id3 = ""
  32. _ENCODER_WINDOW = None
  33. __run_main = 0
  34. if __name__ == "__main__":
  35. __run_main = 1
  36. else:
  37. import __main__
  38. if "unittest" not in dir(__main__):
  39. __run_main = 1
  40. import tool.git as git
  41. rnd_id += git.get_all()
  42. try:
  43. xtitle = __file__
  44. except:
  45. xtitle = "__file__"
  46. if "/" in xtitle:
  47. xtitle = xtitle.split("/")[-1]
  48. sys.stdout.write("\x1b]2;"+str(xtitle)+" "+str(rnd_id)+"\x07") # terminal title
  49. HOME = os.getenv('HOME')
  50. space_font = None
  51. INIT_OK = 0
  52. _global_short_key = 1
  53. path = "/home/user/LibreLight/"
  54. #os.chdir(path)
  55. f = open(path+"init.txt","r")
  56. lines=f.readlines()
  57. f.close()
  58. out = []
  59. for line in lines:
  60. if line != "EASY\n":
  61. out.append(line)
  62. f = open(path+"init.txt","w")
  63. f.writelines(out)
  64. f.close()
  65. if "--easy" in sys.argv:
  66. f = open(path+"init.txt","a")
  67. f.write("EASY\n")
  68. f.close()
  69. if not os.path.isdir(path+"show/EASY"):
  70. cmd = "cp -vrf '/opt/LibreLight/Xdesk/home/LibreLight/show/EASY' '{}/show/EASY' ".format(path)
  71. print(cmd)
  72. #input()
  73. os.system(cmd)
  74. # check if EASY show exist !
  75. from lib.cprint import cprint
  76. cprint("________________________________")
  77. def cb(**args):
  78. cprint("MAIN.cb DUMMY",**args,color="red")
  79. import lib.zchat as chat
  80. import lib.motion as motion
  81. from collections import OrderedDict
  82. _FIX_FADE_ATTR = ["PAN","TILT","DIM","RED","GREEN","BLUE","WHITE","CYAN","YELLOW","MAGENTA","FOCUS","ZOOM","FROST"]
  83. CUES = OrderedDict()
  84. groups = OrderedDict()
  85. class Modes():
  86. def __init__(self):
  87. self.modes = {}
  88. self.__cfg = {}
  89. self.__cb = None
  90. def val(self,mode,value=None): #like jquery
  91. if value is not None:
  92. return self.set(mode,value)
  93. elif mode in self.modes:
  94. return self.modes[mode]
  95. def list(self,_filter="all"): # actvie
  96. _modes = []
  97. for m in self.modes:
  98. v = self.val(m)
  99. if _filter == "active" and v:
  100. _modes.append(m)
  101. if _filter == "all":
  102. _modes.append(m)
  103. return _modes
  104. def info(self):
  105. for m in self.modes:
  106. print("modes",m,self.val(m))
  107. def get(self,mode,value=None):
  108. return self.val(mode,value)
  109. def __check(self,mode):
  110. if mode not in self.modes:
  111. self.modes[mode] = 0
  112. self.__cfg[mode] = 0
  113. def cfg(self,mode,data={}):
  114. self.__check(mode)
  115. if type(data) is dict:
  116. for k in data:
  117. v = data[k]
  118. if v not in self.__cfg:
  119. self.__cfg[k] = v
  120. return 1
  121. elif type(data) is str:
  122. if data in self.__cfg:
  123. return self.__cfg[data]
  124. def clear(self,protect=[]):
  125. protected = ["BLIND"]
  126. protected.extend(protect)
  127. for m in self.modes:
  128. if m in protected:
  129. continue
  130. self.modes[m] = 0
  131. def set(self,mode,value):
  132. protected = ["BLIND","CLEAR","REC-FX"]
  133. self.__check(mode)
  134. if mode == "CLEAR":
  135. return 1
  136. elif mode == "ESC":
  137. for m in self.modes:
  138. cprint("ESC",m)
  139. if m == "COPY":
  140. EXEC.clear_copy()
  141. if m == "MOVE":
  142. EXEC.clear_move()
  143. if m != "BLIND":
  144. self.modes[m] = 0
  145. self.callback(m)
  146. return 1
  147. if value:
  148. for m in self.modes:
  149. if m not in protected and mode not in protected and m != mode:
  150. #cprint("-#-# clear mode",mode,m,value,color="red")
  151. if self.modes[m]:
  152. self.modes[m]= 0
  153. self.callback(m)
  154. if self.modes[mode] and value == 1:
  155. if modes == "MOVE":
  156. EXEC.clear_move()
  157. if modes == "COPY":
  158. EXEC.clear_copy()
  159. self.modes[mode] = 0 # value
  160. else:
  161. self.modes[mode] = value #1 #value
  162. else:
  163. self.modes[mode] = 0 #value
  164. if modes == "COPY":
  165. EXEC.clear_copy()
  166. if modes == "MOVE":
  167. EXEC.clear_move()
  168. self.callback(mode)
  169. return value
  170. def set_cb(self,cb):
  171. if cb:
  172. self.__cb = cb
  173. def callback(self,mode):
  174. if self.__cb is not None and mode in self.modes:
  175. value = self.modes[mode]
  176. self.__cb(mode=mode,value=value)
  177. modes = Modes()
  178. #modes.val("BLIND", 0)
  179. #modes.modes["BLIND"] = 0
  180. modes.modes["ESC"] = 0
  181. modes.modes["REC"] = 0
  182. modes.modes["EDIT"] = 0
  183. modes.modes["MOVE"] = 0
  184. modes.modes["FLASH"] = 0
  185. modes.modes["GO"] = 0
  186. modes.modes["DEL"] = 0
  187. modes.modes["REC-FX"] = 0
  188. modes.modes["SELECT"] = 0
  189. modes.modes["CFG-BTN"] = 0
  190. modes.modes["LABEL"] = 0
  191. POS = ["PAN","TILT","MOTION"]
  192. COLOR = ["RED","GREEN","BLUE","COLOR"]
  193. BEAM = ["GOBO","G-ROT","PRISMA","P-ROT","FOCUS","SPEED"]
  194. INT = ["DIM","SHUTTER","STROBE","FUNC"]
  195. #client = chat.tcp_sender(port=50001)
  196. def set_exec_fader_cfg(nr,val,label="",color=""):
  197. exec_wing = window_manager.get_obj(name="EXEC-WING")
  198. if not exec_wing:
  199. return
  200. try:
  201. if len(exec_wing.fader_elem) > nr:
  202. exec_wing.fader_elem[nr].attr["text"] = label
  203. cfg = get_exec_btn_cfg(nr+80)
  204. exec_wing.fader_elem[nr].attr["bg"] = cfg["bg"]
  205. exec_wing.fader_elem[nr].attr["fg"] = cfg["fg"]
  206. #exec_wing.fader_elem[nr].attr["fx"] = cfg["fx"]
  207. except Exception as e:
  208. cprint(" set_exec_fader_cfg err:",e,color="red")
  209. print(" ",nr,val,label)
  210. raise e
  211. def set_exec_fader(nr,val,label="",color="",info="info",change=0):
  212. exec_wing = window_manager.get_obj(name="EXEC-WING")
  213. if not exec_wing:
  214. return
  215. try:
  216. exec_wing.set_fader(nr,val,color=color,info=info,change=change)
  217. except Exception as e:
  218. cprint(" - set_exec_fader err:",e,color="red")
  219. print(" ",nr,val,label)
  220. raise e
  221. def set_exec_fader_all():
  222. print()
  223. cprint( "set_exec_fader_all()",color="green")
  224. for nr in range(10):
  225. _label = EXEC.label_exec[nr+80] # = label
  226. print(" set_exec_fader_all._label =",_label)
  227. set_exec_fader(nr,0,label=_label)
  228. set_exec_fader_cfg(nr,0,label=_label)
  229. def refresh_exec_fader_cfg():
  230. cprint( "set_exec_fader_all()",color="green")
  231. for nr in range(10):
  232. _label = EXEC.label_exec[nr+80] # = label
  233. #print("_label",_label)
  234. set_exec_fader_cfg(nr,0,label=_label)
  235. # remote input - start (memcached)
  236. def JCB(x,sock=None):
  237. for i in x:
  238. jv = x[i]
  239. try:
  240. jv = json.loads(jv)
  241. jv = jv[0]
  242. #print(jv)
  243. v = jv["iVAL"]
  244. #exec_wing.set_fader(0,v)
  245. set_exec_fader(0,v)
  246. set_exec_fader(1,200-v)
  247. set_exec_fader(2,int(v/2+10))
  248. except Exception as e:
  249. cprint("exception",e)
  250. print(sys.exc_info()[2])
  251. #print("remote in:",round(time.time(),0),"x",i,v)
  252. if __name__ == "__main__":
  253. r1_server = chat.Server(port=30002)
  254. def server1_loop():
  255. while 1:
  256. r1_server.poll(cb=JCB)
  257. time.sleep(1/90)
  258. thread.start_new_thread(server1_loop,()) # SERVER
  259. import lib.jsbc as JSBC
  260. if __name__ == "__main__":
  261. r_server = chat.Server(port=30003,cb=JSBC.JSCB)
  262. def server_loop():
  263. while 1:
  264. r_server.poll(cb=JSBC.JSCB)
  265. thread.start_new_thread(server_loop,()) # SERVER
  266. import lib.fifo as FIFO
  267. if __name__ == "__main__":
  268. f_server = FIFO.read_loop() #chat.Server(port=30003,cb=JSBC.JSCB)
  269. f_server.loop(sleep=1)
  270. def f_server_read_loop():
  271. time.sleep(10)
  272. print("FIFO read_loop() __ ")
  273. while 1:
  274. try:
  275. data = f_server.read()
  276. for jdata in data:
  277. # JSCB [{'event': 'EXEC', 'EXEC': 161, 'VAL': 0, 'NR-KEY': 1}]
  278. print("FIFO:",jdata)
  279. ok=1
  280. for i in ["event","VAL","EXEC"]:
  281. if i not in jdata:
  282. ok=0
  283. if ok:
  284. if jdata["event"] != "EXEC":
  285. continue
  286. if "EXEC" in jdata:
  287. exec_nr = jdata["EXEC"]
  288. if "VAL" in jdata:
  289. val = jdata["VAL"]
  290. master.exec_go(exec_nr-1,xfade=None,val=val)
  291. else:
  292. time.sleep(0.02)
  293. except KeyboardInterrupt as e:
  294. raise e
  295. except Exception as e:
  296. print("FIFO ERR1",e)
  297. thread.start_new_thread(f_server_read_loop,()) # SERVER
  298. # read memcachd
  299. memcache = None
  300. try:
  301. import memcache
  302. except Exception as e:
  303. cprint("Exception IMPORT ERROR",e)
  304. class MC_FIX():
  305. def __init__(self,server="127.0.0.1",port=11211):
  306. cprint("MC.init() ----------" ,server,port,color="red")
  307. try:
  308. self.mc = memcache.Client(['{}:{}'.format(server,port)], debug=0)
  309. except Exception as e:
  310. cprint("-- Exception",e)
  311. def set(self,index="fix",data=[]):
  312. index = self.mc.get("index")
  313. self.mc.set("fix", data)
  314. class MC_PATCH():
  315. def __init__(self,server="127.0.0.1",port=11211):
  316. cprint("MC.init() ----------" ,server,port,color="red")
  317. try:
  318. self.mc = memcache.Client(['{}:{}'.format(server,port)], debug=0)
  319. except Exception as e:
  320. cprint("-- Exception",e)
  321. def loop(self):
  322. time.sleep(10)
  323. print("start loop MC_PATCH ...")
  324. while 1:
  325. try:
  326. index_patch = []
  327. for fix,val in FIXTURES.fixtures.items():
  328. #print("FIX",fix,val)
  329. val = json.dumps(val).encode()
  330. self.mc.set("PATCH-"+str(fix),val)
  331. index_patch.append(fix)
  332. val = json.dumps(index_patch).encode()
  333. self.mc.set("PATCH-INDEX",val)
  334. except Exception as e:
  335. print(e)
  336. time.sleep(5)
  337. mc_patch = MC_PATCH()
  338. thread.start_new_thread(mc_patch.loop,())
  339. class MC():
  340. def __init__(self,server="127.0.0.1",port=11211):
  341. cprint("MC.init() ----------" ,server,port,color="red")
  342. try:
  343. #self.mc = memcache.Client(['127.0.0.1:11211'], debug=0)
  344. self.mc = memcache.Client(['{}:{}'.format(server,port)], debug=0)
  345. #self.init()
  346. except Exception as e:
  347. cprint("-- Exception",e)
  348. # def init(self):
  349. data = {}
  350. start = time.time()
  351. delta = start
  352. index = self.mc.get("index")
  353. if index:
  354. for i in index:
  355. print(" key",i)
  356. self.last_fader_val = [-1]*512
  357. self.fader_map = []
  358. for i in range(30+1):
  359. self.fader_map.append({"UNIV":0,"DMX":0})
  360. try:
  361. fname = HOME + "/LibreLight/fader.json"
  362. f = open(fname)
  363. lines = f.readlines()
  364. cprint("FADER MAP",fname)
  365. for i,line in enumerate(lines):
  366. jdata = json.loads(line)
  367. print(" fader_map ->>",i,jdata)
  368. self.fader_map[i] = jdata
  369. except Exception as e:
  370. cprint("-- Except Fader_map",e)
  371. #exit()
  372. def ok(self):
  373. if self.mc:
  374. return 1
  375. return 0
  376. def test(self):
  377. if not self.ok():
  378. return
  379. self.mc.set("some_key", "Some value")
  380. self.value = mc.get("some_key")
  381. self.mc.set("another_key", 3)
  382. self.mc.delete("another_key")
  383. def loop(self):
  384. thread.start_new_thread(self._loop,())
  385. if not self.ok():
  386. return
  387. def _exec_fader_loop(self,x):
  388. for i, line in enumerate(self.fader_map):
  389. try:
  390. #print(i,line)
  391. dmx = int(line["DMX"])
  392. if dmx > 0:
  393. val = x[dmx-1]
  394. #print("mc val",val)
  395. #print("dmx_in change:",[i,val])
  396. change = 0
  397. if i < len(self.last_fader_val):
  398. if self.last_fader_val[i] != val:
  399. self.last_fader_val[i] = val
  400. print("dmx_in change:",[i,val])
  401. change = 1
  402. set_exec_fader(nr=i,val=val,color="#aaa",info="dmx_in",change=change)
  403. except Exception as e:
  404. cprint("MC exc:",e,color="red")
  405. traceback.print_exc()
  406. pass
  407. def _loop(self):
  408. time.sleep(6)
  409. cprint("++++++++++ start.memcachd read loop",self )
  410. ip = libconfig.load_remote_ip()
  411. print("IP:",ip)
  412. #input()
  413. while 1:
  414. send = 0
  415. #print("+")
  416. try:
  417. #ip="10.10.10.13:0"
  418. #ip="ltp-out:0"
  419. x=self.mc.get(ip)
  420. #print(ip,len(x))
  421. if x:
  422. #print(ip,x)
  423. #val = x[501-1]
  424. #val = x[141-1]
  425. self._exec_fader_loop(x)
  426. time.sleep(1/10)
  427. except Exception as e:
  428. cprint("exc", e)
  429. time.sleep(1)
  430. _mc=MC()
  431. _mc.loop()
  432. def message_buss_loop():
  433. while 1:
  434. try:
  435. mc = memcache.Client(['127.0.0.1:11211'], debug=0)
  436. break
  437. except Exception as e:
  438. cprint("--1 message_buss_loop Exc",[e])
  439. time.sleep(2)
  440. while 1:
  441. try:
  442. key="MODES"
  443. cfg = {}
  444. for k,v in modes.modes.items():
  445. if v:
  446. cfg[k] = v
  447. cfg["S-KEY"] = _global_short_key
  448. mc.set(key,json.dumps(cfg))
  449. except Exception as e:
  450. cprint("--2 message_buss_loop Exc:",[e])
  451. time.sleep(2)
  452. time.sleep(0.2)
  453. thread.start_new_thread(message_buss_loop,())
  454. console = chat.Client() #port=50001)
  455. def jclient_send(data):
  456. t_start = time.time()
  457. jtxt = data
  458. jdatas = []
  459. print("jclient_send.type(data)",type(data))
  460. for jdata in data:
  461. #print("xxffrr",jdata)
  462. if type(jdata) not in [dict,OrderedDict]:
  463. cprint("jclient_send, error jdata not dict like ",[jdata,type(jdata)],color="red")
  464. continue
  465. if "CMD" in jdata:
  466. try:
  467. jdatas.append(jdata)
  468. except Exception as e:
  469. cprint("jclient_send, Exception DMX ",color="red")
  470. cprint("",jdata,color="red")
  471. cprint("-----",color="red")
  472. elif "DMX" in jdata:
  473. try:
  474. #print(jdata)
  475. jdata["DMX"] = int(jdata["DMX"])
  476. dmx = jdata["DMX"]
  477. if "ATTR" not in jdata:
  478. # for fx off
  479. jdatas.append(jdata)
  480. else:
  481. fix = "00000"
  482. attr = "00000"
  483. if "FIX" in jdata:
  484. fix = jdata["FIX"]
  485. if "ATTR" in jdata:
  486. attr = jdata["ATTR"]
  487. dmx_fine = fixlib.get_dmx(FIXTURES.fixtures,fix,attr+"-FINE")
  488. if jdata["DMX"] != dmx_fine and dmx > 0 and dmx_fine > 0:
  489. jdata["DMX-FINE"] = dmx_fine
  490. if "DMX-FINE" in jdata:
  491. if jdata["DMX-FINE"] <= 0:
  492. del jdata["DMX-FINE"]
  493. if jdata["ATTR"].startswith("_"):
  494. pass # ignore attr._ACTIVE
  495. else:#
  496. jdata["time"] = int(t_start*1000)/1000
  497. jdatas.append(jdata)
  498. #cprint("-- ",jdata,color="red")
  499. except Exception as e:
  500. cprint("jclient_send, Exception 4 DMX ",color="red")
  501. cprint("",jdata,color="red")
  502. cprint(e,color="red")
  503. #pt Exception as e:
  504. exc_type, exc_obj, exc_tb = sys.exc_info()
  505. fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
  506. print(exc_type, fname, exc_tb.tb_lineno)
  507. cprint("-----",color="red")
  508. jtxt = jdatas
  509. jtxt = json.dumps(jtxt)
  510. jtxt = jtxt.encode()
  511. console.send( jtxt ) #b"\00 ")
  512. cprint("{:0.04} sec.".format(time.time()-t_start),color="yellow")
  513. cprint("{:0.04} tick".format(time.time()),color="yellow")
  514. def _highlight(fix,_attr="DIM"):
  515. " patch test button "
  516. cprint("highlight",fix,"1")
  517. if fix not in FIXTURES.fixtures:
  518. return None
  519. d = FIXTURES.fixtures[fix]
  520. #for k,v in d.items():
  521. # cprint("-",k,v)
  522. DMX = d["DMX"] + d["UNIVERS"]*512
  523. if "ATTRIBUT" in d:
  524. ATTR= d["ATTRIBUT"]
  525. data = {"VALUE":200,"DMX":1}
  526. attr = ""
  527. if _attr in ATTR:
  528. attr = _attr
  529. else:
  530. return #stop
  531. cprint(attr,ATTR[attr])
  532. old_val = ATTR[attr]["VALUE"]
  533. data["DMX"] = DMX + ATTR[attr]["NR"]-1
  534. cprint(attr,ATTR[attr])
  535. cprint(data)
  536. for i in range(3):
  537. cprint("highlight",fix,"0")
  538. data["VALUE"] = 100
  539. jclient_send([data])
  540. time.sleep(0.1)
  541. cprint("highlight",fix,"1")
  542. data["VALUE"] = 234
  543. jclient_send([data])
  544. time.sleep(0.3)
  545. cprint("highlight",fix,"0")
  546. data["VALUE"] = old_val
  547. jclient_send([data])
  548. def highlight2(fix,attr="DIM"):
  549. def x():
  550. highlight(fix,attr=attr)
  551. return x
  552. def highlight(fix):
  553. cprint("highlight",fix)
  554. thread.start_new_thread(_highlight,(fix,"DIM"))
  555. thread.start_new_thread(_highlight,(fix,"RED"))
  556. thread.start_new_thread(_highlight,(fix,"GREEN"))
  557. thread.start_new_thread(_highlight,(fix,"BLUE"))
  558. class FX_handler():
  559. def __init__():
  560. pass
  561. class dummy_event():
  562. def __init__(self):
  563. self.num =0
  564. self.type = 4 #press 5 release
  565. self.set_value=-1
  566. from lib import matrix
  567. import lib.fxlib as fxlib
  568. def process_matrix(xfixtures):
  569. meta.fx_x = meta.fx_prm["2D-X"]
  570. meta.fx_mod = meta.fx_x_modes[meta.fx_prm["2D:MODE"]]
  571. r = _process_matrix(xfixtures,meta.fx_x,meta.fx_mod)
  572. return r
  573. def _process_matrix(xfixtures,fx_x,fx_mod):
  574. fix_count = len(xfixtures)
  575. cprint("----",fx_x,fx_mod)
  576. if fx_x > 1 and fix_count > fx_x:
  577. try:
  578. w=fx_x
  579. h=int(fix_count/fx_x)
  580. if fx_mod == "spiral":
  581. _map = matrix.spiral(w,h)
  582. elif fx_mod == "up_down":
  583. _map = matrix.up_down(w,h)
  584. elif fx_mod == "left_right":
  585. _map = matrix.left_right(w,h)
  586. elif fx_mod == "left":
  587. _map = matrix.left(w,h)
  588. elif fx_mod == "right":
  589. _map = matrix.right(w,h)
  590. elif fx_mod == "up":
  591. _map = matrix.up(w,h)
  592. elif fx_mod == "down":
  593. _map = matrix.down(w,h)
  594. else:
  595. return xfixtures # do nothing
  596. matrix.mprint(xfixtures,w,h)
  597. out = ["0"]*(w*h)
  598. for i,f in enumerate(xfixtures):
  599. if i < w*h:
  600. j = int(_map[i])
  601. cprint(["i:",i,"f:",f,"j:",j])
  602. out[j] = f
  603. matrix.mprint(out,w,h)
  604. xfixtures = out
  605. except Exception as e:
  606. cprint("matrix exception",e)
  607. return xfixtures
  608. def check_backup_path():
  609. pass
  610. def save_show_to_backup():
  611. pass
  612. def check_save_path(basepath="",show_name=""):
  613. if basepath and show_name:
  614. cwd = os.getcwd()
  615. try:
  616. print("cwd:",cwd)
  617. cd = "/".join(basepath.split("/")[:-3])
  618. os.chdir(cd)
  619. mkdir = "/".join(basepath.split("/")[-3:])
  620. mkdir += str(show_name)
  621. CMD="mkdir -p '{}'".format(mkdir)
  622. print("CMD:",cd,";",CMD)
  623. os.system(CMD)
  624. finally:
  625. os.chdir(cwd)
  626. return True
  627. def show_path_list():
  628. print()
  629. print("libwin ", libwin.showlib.SHOW_DIR)
  630. print("movewin ", movewin.SHOW_PATH)
  631. print("EXEC ", EXEC.base.show_path)
  632. print("FIXTURES", FIXTURES.base.show_path)
  633. print()
  634. def show_path_reset():
  635. print("show_path_reset()")
  636. name = showlib.current_show_name()
  637. SHOW_DIR = showlib.BASE_PATH+"/show/"
  638. show_path_set(SHOW_DIR,name)
  639. def show_path_set(path,name):
  640. SHOW_PATH = path + str(name)
  641. SHOW_DIR = path
  642. libwin.showlib.SHOW_DIR = SHOW_DIR
  643. #movewin.showlib.SHOW_DIR = SHOW_DIR
  644. movewin.SHOW_PATH = SHOW_PATH
  645. EXEC.base.show_path = SHOW_PATH
  646. FIXTURES.base.show_path = SHOW_PATH
  647. def save_show_to_usb():
  648. cprint("*** "*20,color="yellow")
  649. CMD = "df | grep /media/$USER"
  650. CMD = "ls /media/$USER/"
  651. CMD = "mount | grep /media/$USER | cut -d ' ' -f 3"
  652. r = os.popen(CMD)
  653. usbs = r.readlines()
  654. print("USB's:",usbs)
  655. for usb in usbs:
  656. usb = usb.strip()
  657. print(usb)
  658. cwd = os.getcwd()
  659. _show_name = showlib.current_show_name()
  660. #_usbstick_path = "/media/user/"+str(usb)+"/LibreLight/show/"
  661. _usbstick_path = ""+str(usb)+"/LibreLight/show/"
  662. SHOW_DIR = libwin.showlib.SHOW_DIR
  663. try:
  664. if check_save_path(basepath=_usbstick_path,show_name=_show_name):
  665. #show_path_list()
  666. show_path_set(path=_usbstick_path,name=_show_name)
  667. a=EXEC.backup_exec()
  668. b=FIXTURES.backup_patch()
  669. c=libwin.save_window_geo()
  670. d=movewin.store_all_sdl()
  671. except FileNotFoundError as e:
  672. cprint("EXC",e,color="red")
  673. finally:
  674. show_path_reset()
  675. print(SHOW_DIR,showlib.current_show_path())
  676. cprint(" ","*** "*20,color="yellow")
  677. if a and b and d: # and c
  678. #show_path_list()
  679. cprint("SAVE SHOW OK",[a,b,c,d],_usbstick_path,color="green")
  680. cprint("--- "*20,color="yellow")
  681. def save_show(fpath=None,new=0):
  682. # show_path_list()
  683. if fpath:
  684. a=EXEC.backup_exec(save_as=fpath,new=new)
  685. b=FIXTURES.backup_patch(save_as=fpath,new=new)
  686. c=libwin.save_window_geo(save_as=fpath)
  687. d=movewin.store_all_sdl()
  688. else:
  689. print()
  690. print()
  691. cprint("SAVE SHOW ..",color="yellow")
  692. a=EXEC.backup_exec()
  693. b=FIXTURES.backup_patch()
  694. c=libwin.save_window_geo()
  695. d=movewin.store_all_sdl()
  696. if 1:
  697. save_show_to_usb()
  698. if a and b and d: # and c
  699. #show_path_list()
  700. cprint("SAVE SHOW OK",[fpath,new],[a,b,c,d],color="green")
  701. print()
  702. print()
  703. print()
  704. return 1
  705. cprint("SAVE SHOW FAIL",[fpath,new],[a,b,c,d],color="red")
  706. print()
  707. print()
  708. print()
  709. def save_show_as(fname,new=0):
  710. print()
  711. print()
  712. fpath = showlib.generate_show_path(fname)
  713. info = "SAVE SHOW AS"
  714. if new:
  715. info = "SAVE (NEW) SHOW AS"
  716. cprint(info,fpath,fname,color="green")
  717. if showlib.create_new_show_path(fpath):
  718. return save_show(fpath,new)
  719. import lib.showlib as showlib
  720. class cb():
  721. def __init__(self,win):
  722. self.win = win
  723. def _callback(self,event):
  724. clobj=event.widget
  725. ## undermouse=find_withtag(master.CURRENT)
  726. undermouse=self.win.find_closest(self.win.CURRENT)
  727. cprint( repr(undermouse))
  728. def callback(self,event):
  729. cprint(__file__,self,"callback",event)
  730. cnv = self.win
  731. item = cnv.find_closest(cnv.canvasx(event.x), cnv.canvasy(event.y))[0]
  732. tags = cnv.gettags(item)
  733. #cnv.itemconfigure(self.tag, text=tags[0])
  734. cprint(tags,item)
  735. color = cnv.itemcget(item, "fill")
  736. cnv.itemconfig("all", width=1)#filla="green")
  737. cnv.itemconfig(item, width=3)#filla="green")
  738. cprint(color)
  739. cprint( hex_to_rgb(color[1:]))
  740. import copy
  741. def get_exec_btn_cfg(nr):
  742. k = nr
  743. if 1:
  744. _bg = "grey"
  745. _ba = "grey"
  746. _fg = "lightgrey"
  747. _text = "N/V"
  748. txt = "None/nNone"
  749. txt1 = "None/nNone"
  750. if nr >= 0:
  751. if nr != k:
  752. return #continue
  753. label = ""
  754. if k in EXEC.label_exec:
  755. label = EXEC.label_exec[k]
  756. ifval = 0
  757. fx_only = 0
  758. fx_color = 0
  759. if k in EXEC.val_exec and len(EXEC.val_exec[k]) :
  760. sdata = EXEC.val_exec[k]
  761. have_fx = 0
  762. have_val = 0
  763. fix_count = 0
  764. BTN="go"
  765. if "CFG" in sdata:#["BUTTON"] = "GO"
  766. if "BUTTON" in sdata["CFG"]:
  767. BTN = sdata["CFG"]["BUTTON"]
  768. txt="{} {} {}\n{}".format(k+1,BTN,len(sdata)-1,label)
  769. _text = txt
  770. if len(sdata) > 1:
  771. ifval = 1
  772. val_color = 0
  773. for fix in sdata:
  774. if fix == "CFG":
  775. continue
  776. fix_count += 1
  777. for attr in sdata[fix]:
  778. if attr.startswith("_"):
  779. continue
  780. if "FX2" in sdata[fix][attr]:
  781. if sdata[fix][attr]["FX2"]:
  782. fx_color = 1
  783. have_fx += 1
  784. if "FX" in sdata[fix][attr]:
  785. if sdata[fix][attr]["FX"]:
  786. fx_color = 1
  787. have_fx += 1
  788. if "VALUE" in sdata[fix][attr]:
  789. if sdata[fix][attr]["VALUE"] is not None:
  790. val_color = 1
  791. have_val += 1
  792. #if val_color:
  793. # have_val += 1
  794. #if fx_color:
  795. # have_fx += 1
  796. if val_color:
  797. _bg = "gold"
  798. _ba = "#ffaa55"
  799. if fx_color:
  800. _fg = "blue"
  801. else:
  802. if fx_color:
  803. fx_only = 1
  804. else:
  805. _bg = "grey"
  806. _ba = "#aaa"
  807. sdata["CFG"]["HAVE-FX"] = have_fx
  808. sdata["CFG"]["HAVE-VAL"] = have_val
  809. sdata["CFG"]["FIX-COUNT"] = fix_count
  810. if "\n" in txt:
  811. txt1 = txt.split("\n")[0]
  812. _fg = "black"
  813. if ifval:
  814. if fx_only:
  815. _bg = "cyan"
  816. _ba = "#55d4ff"
  817. if "SEL" in txt1:
  818. _bg = "#77f"
  819. else:
  820. _bg = "grey"
  821. _fg = "darkgrey"
  822. if "SEL" in txt1:
  823. _fg = "blue"
  824. elif "ON" in txt1:
  825. _fg = "#040"
  826. elif "GO" in txt1:
  827. _fg = "#555"
  828. if "FL" in txt1:
  829. _fg = "#00e"
  830. out = {} # default
  831. out["fx"] = ""
  832. out["bg"] = "lightgrey"
  833. out["ba"] = "grey"
  834. out["fg"] = "grey"
  835. out["text"] = "?"
  836. out["fx"] = fx_color
  837. out["bg"] = _bg
  838. out["ba"] = _ba
  839. out["fg"] = _fg
  840. out["text"] = _text
  841. return out
  842. import lib.execlib as execlib
  843. class MASTER():
  844. def __init__(self):
  845. self.base = showlib.Base ()
  846. self.load()
  847. self._XX = 0
  848. self.all_attr =["DIM","PAN","TILT"] # encoder
  849. self.elem_attr = {}
  850. for i in range(8*8*8):
  851. if i not in EXEC.val_exec:
  852. name = "Preset:"+str(i+1)+":\nXYZ"
  853. #self.exec[i] = [i]
  854. EXEC.val_exec[i] = OrderedDict() # FIX
  855. EXEC.val_exec[i]["CFG"] = OrderedDict() # CONFIG
  856. EXEC.label_exec[i] = "-"
  857. modes.set_cb(self.xcb)
  858. def jclient_send(self,data):
  859. # namespace wraper
  860. if not modes.val("BLIND"):
  861. jclient_send(data)
  862. def button_refresh(self,name,color,color2=None,text="",fg=None):
  863. #cprint("button_refresh",name,color)
  864. if color2 is None:
  865. color2 = color
  866. if text:
  867. text = "\n"+str(text)
  868. elem=None
  869. for ct in [meta.commands,meta.fx_cfg,meta.fx_main,meta.fx_moves]:
  870. elem = ct.elem
  871. try:
  872. if name in elem:
  873. #print(" in xx.elem OK ",[name,color,name,text,color2])
  874. if name in ["BLIND","CLEAR"] and color == "lightgrey":
  875. color = "grey"
  876. color2 = "grey"
  877. elem[name]["bg"] = color
  878. elem[name]["text"] = name+ text
  879. elem[name].config(activebackground=color2)
  880. if fg:
  881. elem[name]["fg"] = fg
  882. except Exception as e:
  883. cprint(" master.button_refresh",self,e)
  884. cprint(" ",elem)
  885. def dialog_cfg_return(self,nr):
  886. # buffer nr
  887. def _cb(data):
  888. cfg = EXEC._btn_cfg(nr)
  889. button = EXEC.btn_cfg(nr)
  890. label = EXEC.label(nr)
  891. if not data:
  892. cprint("err443",self,"_cb",data)
  893. return None
  894. cprint("btn_cfg._cb()",data)
  895. print( "dialog_cfg_retrun",data)
  896. if data:
  897. if "Button" in data and type(data["Button"]) is str:
  898. txt = data["Button"]
  899. EXEC.btn_cfg(nr,txt)
  900. if "Label" in data and type(data["Label"]) is str:
  901. txt = data["Label"]
  902. EXEC.label(nr,txt)
  903. if "Delay" in data and type(data["Delay"]) is str:
  904. txt = data["Delay"]
  905. try:
  906. txt = float(txt)
  907. if "DELAY" in cfg:
  908. cfg["DELAY"] = round(txt,2)
  909. except e as Exception:
  910. print("DELAY Exception",e)
  911. if "in-Fade" in data and type(data["in-Fade"]) is str:
  912. txt = data["in-Fade"]
  913. try:
  914. txt = float(txt)
  915. if "FADE" in cfg:
  916. cfg["FADE"] = round(txt,2)
  917. except e as Exception:
  918. print("in-Fade Exception",e)
  919. if "out-Fade" in data and type(data["out-Fade"]) is str:
  920. txt = data["out-Fade"]
  921. try:
  922. txt = float(txt)
  923. cfg["OUT-FADE"] = round(txt,2)
  924. except e as Exception:
  925. print("out-Fade Exception",e)
  926. modes.val("CFG-BTN",0)
  927. master._refresh_exec(nr=nr)
  928. return _cb
  929. def btn_cfg(self,nr,testing=0):
  930. cfg = EXEC._btn_cfg(nr)
  931. button = EXEC.btn_cfg(nr)
  932. label = EXEC.label(nr)
  933. dialog._cb = self.dialog_cfg_return(nr) # return cb()
  934. if 1: # testing:
  935. dialog.ask_exec_config(str(nr+1),button=button,label=label,cfg=cfg)
  936. else:
  937. dialog.askstring("CFG-BTN","GO=GO FL=FLASH\nSEL=SELECT EXE:"+str(nr+1),initialvalue=txt)
  938. def label(self,nr):
  939. txt = EXEC.label(nr)
  940. def _cb(data):
  941. if not data:
  942. cprint("err443",self,"_cb",data)
  943. return None
  944. txt = data["Value"]
  945. cprint("label._cb()",nr,txt)
  946. if txt:
  947. EXEC.label(nr,txt)
  948. modes.val("LABEL", 0)
  949. master._refresh_exec(nr=nr)
  950. dialog._cb= _cb #_x(nr)
  951. dialog.askstring("LABEL","EXE:"+str(nr+1),initialvalue=txt)
  952. def button_clear(self):
  953. modes.clear()
  954. txt=""
  955. for m in modes.modes:
  956. if not modes.modes[m]:
  957. self.button_refresh(m,color="lightgrey",text=txt)
  958. def xcb(self,mode,value=None):
  959. cprint(" Master.xcb mode:",str(mode).rjust(10," "),value,color="yellow",end="")
  960. if value:
  961. cprint("===== ON ======",color="green")
  962. txt = ""
  963. if mode == "REC-FX":
  964. modes.modes["REC"] = 1 # HACK !
  965. self.button_refresh("REC",color="red",text=txt)#,fg="blue")
  966. self.button_refresh(mode,color="red",text=txt)#,fg="blue")
  967. if value == 2:
  968. if mode in ["MOVE","COPY"]:
  969. txt="to"
  970. self.button_refresh(mode,color="orange",text=txt)#,fg="blue")
  971. else:
  972. if mode in ["MOVE","COPY"]:
  973. txt="from"
  974. self.button_refresh(mode,color="red",text=txt)#,fg="blue",text="from")
  975. else:
  976. cprint("===== OFF ======",color="red")
  977. if mode == "REC":
  978. modes.val("REC-FX",0)
  979. if mode == "REC-FX":
  980. modes.modes["REC"] = 0 # HACK !
  981. self.button_refresh("REC",color="lightgrey")#,fg="black")
  982. self.button_refresh(mode,color="lightgrey")#,fg="black")
  983. #modes.info()
  984. def load(self,fname=""):
  985. pass
  986. def exit(self):
  987. cprint("__del__",self)
  988. def refresh_exec(self):
  989. refresher_exec.reset() # = tkrefresh.Refresher()
  990. def _refresh_exec(self,nr=-1):
  991. s = time.time()
  992. cprint("EXEC.refresh_exec()")
  993. refresher_exec.reset() # = tkrefresh.Refresher()
  994. self._XX +=1
  995. self._nr_ok = 0
  996. ERR=""
  997. for nr in EXEC.val_exec:
  998. cfg = get_exec_btn_cfg(nr)
  999. time.sleep(0.01)
  1000. def refresh_fix(self):
  1001. refresher_fix.reset() # = tkrefresh.Refresher()
  1002. self._refresh_fix_menu()
  1003. def _refresh_fix_menu(self):
  1004. #cprint("_refresh_fix_menu")
  1005. s=time.time(); _XXX=0
  1006. menu_buff = {"DIM":0,"DIM-SUB":0,"FIX":0,"FIX-SUB":0}
  1007. elem_buffer = []
  1008. for fix in FIXTURES.fixtures:
  1009. sdata = FIXTURES.fixtures[fix]
  1010. elem_attr_fix = None
  1011. if fix in self.elem_attr:
  1012. elem_attr_fix = self.elem_attr[fix]
  1013. if "DIM" in sdata["ATTRIBUT"] and "_ACTIVE" in sdata["ATTRIBUT"] and len(sdata["ATTRIBUT"]) == 2:
  1014. KEY = "DIM-SUB"
  1015. else:
  1016. KEY = "FIX-SUB"
  1017. FIX = 0
  1018. DIM = 0
  1019. for attr in sdata["ATTRIBUT"]:
  1020. _buff = {}
  1021. row = sdata["ATTRIBUT"][attr]
  1022. if attr.endswith("-FINE"):
  1023. continue
  1024. b_attr = attr
  1025. if b_attr == "_ACTIVE":
  1026. b_attr = "S"
  1027. if row["ACTIVE"]:
  1028. menu_buff[KEY] += 1
  1029. if b_attr == "S":
  1030. if KEY == "DIM-SUB":
  1031. DIM =1
  1032. else:
  1033. FIX =1
  1034. menu_buff["FIX"] += FIX
  1035. menu_buff["DIM"] += DIM
  1036. menu_buff["FIX-SUB"] -= menu_buff["FIX"]
  1037. _color = ""
  1038. if menu_buff["FIX-SUB"]:
  1039. #print("orange", (menu_buff["FIX-SUB"] % menu_buff["FIX"]) == 0)
  1040. if menu_buff["FIX-SUB"] % menu_buff["FIX"] == 0 and menu_buff["FIX"] > 1:
  1041. #_color = "#aff"
  1042. _color = "orange"
  1043. _color = "yellow"
  1044. else:
  1045. #_color = "yellow"
  1046. _color = "orange"
  1047. elif menu_buff["FIX"]:
  1048. _color = "orange"
  1049. gui_menu.config("FIX-LIST","bg",_color)
  1050. gui_menu.config("FIX-LIST","activebackground",_color)
  1051. gui_menu.update("FIX-LIST","{} : {}".format(menu_buff["FIX"],menu_buff["FIX-SUB"]))
  1052. menu_buff["DIM-SUB"] -= menu_buff["DIM"]
  1053. if menu_buff["DIM-SUB"]:
  1054. gui_menu.config("DIMMER","bg","yellow")
  1055. gui_menu.config("DIMMER","activebackground","yellow")
  1056. elif menu_buff["DIM"]:
  1057. gui_menu.config("DIMMER","bg","orange")
  1058. gui_menu.config("DIMMER","activebackground","orange")
  1059. else:
  1060. gui_menu.config("DIMMER","bg","")
  1061. gui_menu.config("DIMMER","activebackground","")
  1062. gui_menu.update("DIMMER","{} : {}".format(menu_buff["DIM"],menu_buff["DIM-SUB"]))
  1063. #cprint("fix:",_XXX,round(time.time()-s),color="red"); _XXX += 1
  1064. def _refresh_fix(self):
  1065. cprint("_refresh_fix")
  1066. s=time.time(); _XXX=0
  1067. menu_buff = {"DIM":0,"DIM-SUB":0,"FIX":0,"FIX-SUB":0}
  1068. elem_buffer = []
  1069. for fix in FIXTURES.fixtures:
  1070. sdata = FIXTURES.fixtures[fix]
  1071. elem_attr_fix = None
  1072. if fix in self.elem_attr:
  1073. elem_attr_fix = self.elem_attr[fix]
  1074. if "DIM" in sdata["ATTRIBUT"] and "_ACTIVE" in sdata["ATTRIBUT"] and len(sdata["ATTRIBUT"]) == 2:
  1075. KEY = "DIM-SUB"
  1076. else:
  1077. KEY = "FIX-SUB"
  1078. FIX = 0
  1079. DIM = 0
  1080. for attr in sdata["ATTRIBUT"]:
  1081. _buff = {}
  1082. row = sdata["ATTRIBUT"][attr]
  1083. if attr.endswith("-FINE"):
  1084. continue
  1085. b_attr = attr
  1086. if b_attr == "_ACTIVE":
  1087. b_attr = "S"
  1088. elem = None
  1089. if elem_attr_fix:
  1090. if b_attr not in elem_attr_fix:
  1091. continue
  1092. elem = elem_attr_fix[b_attr]
  1093. if not elem:
  1094. continue
  1095. if "elem" not in _buff:
  1096. _buff["elem"] = elem
  1097. if not attr.startswith("_"):
  1098. v2 = row["VALUE"]
  1099. #_text = "{} {}".format(str(attr).rjust(4,"0"),str(v2).rjust(4,"0")) # ~0.2 sec
  1100. _text = "{} {}".format(attr,v2)
  1101. _buff["text"] = _text
  1102. if row["ACTIVE"]:
  1103. _buff["bg"] = "yellow"
  1104. _buff["abg"] = "yellow"
  1105. menu_buff[KEY] += 1
  1106. if b_attr == "S":
  1107. if KEY == "DIM-SUB":
  1108. DIM =1
  1109. else:
  1110. FIX =1
  1111. else:
  1112. _buff["bg"] = "grey"
  1113. _buff["abg"] = "grey"
  1114. if "FX" not in row: # insert FX2 excetption
  1115. row["FX"] = "" #OrderedDict()
  1116. if "FX2" not in row: # insert FX2 excetption
  1117. row["FX2"] = {} #OrderedDict()
  1118. #print("row",fix,row)
  1119. if row["FX"]:
  1120. _buff["fg"] = "blue"
  1121. elif row["FX2"]:
  1122. _buff["fg"] = "red"
  1123. else:
  1124. _buff["fg"] = "black"
  1125. elem_buffer.append(_buff)
  1126. menu_buff["FIX"] += FIX
  1127. menu_buff["DIM"] += DIM
  1128. try:
  1129. for row in elem_buffer:
  1130. elem = row["elem"]
  1131. if not elem:
  1132. continue
  1133. for e in row:
  1134. if e == "elem":
  1135. continue
  1136. v = row[e]
  1137. if e == "abg":
  1138. elem.config(activebackground=v)
  1139. else:
  1140. elem[e] = v
  1141. w = window_manager.get_win("FIXTURES")
  1142. if w:
  1143. w.update_idle_task()
  1144. except Exception as e:
  1145. cprint("exc434",e,color="red")
  1146. cprint("fix:",_XXX,round(time.time()-s,2),color="red");_XXX += 1
  1147. cprint(gui_menu)
  1148. #menu_buff["FIX-SUB"] -= menu_buff["FIX"]
  1149. #if menu_buff["FIX-SUB"]:
  1150. # gui_menu.config("FIXTURES","bg","yellow")
  1151. # gui_menu.config("FIXTURES","activebackground","yellow")
  1152. #elif menu_buff["FIX"]:
  1153. # gui_menu.config("FIXTURES","bg","orange")
  1154. # gui_menu.config("FIXTURES","activebackground","orange")
  1155. #else:
  1156. # gui_menu.config("FIXTURES","bg","")
  1157. # gui_menu.config("FIXTURES","activebackground","")
  1158. #gui_menu.update("FIXTURES","{} : {}".format(menu_buff["FIX"],menu_buff["FIX-SUB"]))
  1159. #menu_buff["DIM-SUB"] -= menu_buff["DIM"]
  1160. #if menu_buff["DIM-SUB"]:
  1161. # gui_menu.config("DIMMER","bg","yellow")
  1162. # gui_menu.config("DIMMER","activebackground","yellow")
  1163. #elif menu_buff["DIM"]:
  1164. # gui_menu.config("DIMMER","bg","orange")
  1165. # gui_menu.config("DIMMER","activebackground","orange")
  1166. #else:
  1167. # gui_menu.config("DIMMER","bg","")
  1168. # gui_menu.config("DIMMER","activebackground","")
  1169. #gui_menu.update("DIMMER","{} : {}".format(menu_buff["DIM"],menu_buff["DIM-SUB"]))
  1170. cprint("fix:",_XXX,round(time.time()-s),color="red"); _XXX += 1
  1171. def exec_rec(self,nr):
  1172. cprint("Master.exec_rec","-- EXEC RECORD ------------------------------")
  1173. _filter=""
  1174. if modes.val("REC-FX"):
  1175. _filter="ONLY-FX"
  1176. data = fixlib.get_active(FIXTURES.fixtures,_filter=_filter)
  1177. EXEC.rec(nr,data)
  1178. sdata=data
  1179. EXEC.val_exec[nr] = sdata
  1180. modes.val("REC-FX",0)
  1181. modes.val("REC",0)
  1182. cfg = get_exec_btn_cfg(nr)
  1183. #master._refresh_exec()
  1184. return 1
  1185. def exec_edit(self,nr):
  1186. cprint("Master.exec_edit","-- EXEC EDIT ------------------------------")
  1187. fixlib.clear(MAIN.FIXTURES.fixtures)
  1188. self.exec_select(nr)
  1189. event=None
  1190. self.exec_go(nr,xfade=0,event=event,val=255,button="go")
  1191. modes.val("EDIT", 0)
  1192. master.refresh_fix()
  1193. refresher_fix.reset() # = tkrefresh.Refresher()
  1194. def exec_select(self,nr):
  1195. cprint("Master.exec_select","-- EXEC SELECT ------------------------------")
  1196. sdata = EXEC.val_exec[nr]
  1197. cmd = ""
  1198. for fix in sdata:
  1199. if fix == "CFG":
  1200. continue
  1201. for attr in sdata[fix]:
  1202. #v2 = sdata[fix][attr]["VALUE"]
  1203. #v2_fx = sdata[fix][attr]["FX"]
  1204. #print( self.data.elem_attr)
  1205. #if fix in self.elem_attr:
  1206. # if attr in self.elem_attr[fix]:
  1207. # elem = self.elem_attr[fix][attr]
  1208. FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["ACTIVE"] = 1
  1209. FIXTURES.fixtures[fix]["ATTRIBUT"]["_ACTIVE"]["ACTIVE"] = 1
  1210. #elem["bg"] = "yellow"
  1211. def exec_go(self,nr,val=None,xfade=None,event=None,button="",ptfade=None):
  1212. s=time.time()
  1213. t_start = time.time()
  1214. if xfade is None and meta.FADE._is():
  1215. xfade = meta.FADE.val()
  1216. if ptfade is None and meta.FADE_move._is():
  1217. ptfade = meta.FADE_move.val()
  1218. print()
  1219. cprint("Master.exec_go","-- EXEC GO FADE -----",nr,val)
  1220. rdata = EXEC.get_raw_map(nr)
  1221. if not rdata:
  1222. return 0
  1223. cfg = EXEC.get_cfg(nr)
  1224. if not cfg:
  1225. cprint(" NO CFG",cfg,nr)
  1226. return 0
  1227. xFLASH = 0
  1228. value=None
  1229. cprint(" exec_go",nr,cfg)
  1230. if modes.val("SELECT") or ( "BUTTON" in cfg and cfg["BUTTON"] == "SEL") and val and not button: #FLASH
  1231. self.exec_select(nr)
  1232. elif modes.val("FLASH") or ( "BUTTON" in cfg and cfg["BUTTON"] == "FL") and not button: #FLASH
  1233. xFLASH = 1
  1234. xfade = 0
  1235. if type(val) is not type(None) and val == 0 :
  1236. value = "off"
  1237. xfade=0
  1238. if "OUT-FADE" in cfg:
  1239. xfade=cfg["OUT-FADE"]
  1240. if event:
  1241. if str(event.type) == "ButtonRelease" or event.type == '5' :
  1242. value = "off"
  1243. xfade=0
  1244. if "OUT-FADE" in cfg:
  1245. xfade=cfg["OUT-FADE"]
  1246. cprint(" exec_go() FLUSH",value,color="red")
  1247. #print(";",rdata)
  1248. print(" cfg:",cfg)
  1249. fcmd = FIXTURES.update_raw(rdata,update=0)
  1250. #print(":",fcmd) # raw dmx
  1251. self._exec_go(rdata,cfg,fcmd,value,xfade=xfade,xFLASH=xFLASH,nr=nr)
  1252. elif not val:
  1253. cprint("exec_go() STOP",value,color="red")
  1254. elif button == "on" or ( modes.val("ON") or ( "BUTTON" in cfg and cfg["BUTTON"] in ["on","ON"])):
  1255. fcmd = FIXTURES.update_raw(rdata)
  1256. self._exec_go(rdata,cfg,fcmd,value,xfade=0,xFLASH=xFLASH)
  1257. elif button == "go" or ( modes.val("GO") or ( "BUTTON" in cfg and cfg["BUTTON"] in ["go","GO"])):
  1258. fcmd = FIXTURES.update_raw(rdata)
  1259. e=time.time()
  1260. #print("_GO TIME:","{:0.02f}".format(e-s),int(e*10)/10)
  1261. self._exec_go(rdata,cfg,fcmd,value,xfade=xfade,xFLASH=xFLASH,ptfade=ptfade,nr=nr)
  1262. e=time.time()
  1263. #print("GO TIME:","{:0.02f}".format(e-s),int(e*10)/10)
  1264. return
  1265. if not (modes.val("FLASH") or ( "BUTTON" in cfg and cfg["BUTTON"] == "FL")): #FLASH
  1266. self.refresh_exec()
  1267. self.refresh_fix()
  1268. cprint("exec_go",time.time()-t_start)
  1269. def _exec_go(self,rdata,cfg,fcmd,value=None,xfade=None,event=None,xFLASH=0,ptfade=0,nr=None):
  1270. if xfade is None and meta.FADE._is():
  1271. xfade = meta.FADE.val()
  1272. xdelay=None
  1273. if xdelay is None and meta.DELAY._is():
  1274. xdelay = meta.DELAY.val()
  1275. if ptfade is None and meta.FADE_move._is():
  1276. ptfade = meta.FADE_move.val()
  1277. cprint("EXEC._exec_go() len=",len(rdata),cfg)
  1278. if xfade is None:
  1279. xfade = cfg["FADE"]
  1280. if ptfade is None:
  1281. ptfade = cfg["FADE"]
  1282. #vcmd = reshape_exec( rdata ,value,[],xfade=xfade,fx=1)
  1283. #cprint(rdata,color="red")
  1284. vcmd = execlib.reshape_exec( rdata ,value,xfade=xfade,ptfade=ptfade,DELAY=xdelay)
  1285. cmd = []
  1286. delay=0
  1287. for i,v in enumerate(fcmd):
  1288. #print("go",i,v)
  1289. if xFLASH:
  1290. vcmd[i]["FLASH"] = 1
  1291. DMX = fcmd[i]["DMX"]
  1292. if "VALUE" in vcmd[i] and type(vcmd[i]["VALUE"]) is type(float):
  1293. vcmd[i]["VALUE"] = round(vcmd[i]["VALUE"],3)
  1294. if value is not None:
  1295. vcmd[i]["VALUE"] = value
  1296. if value == "off":
  1297. if "FX2" in vcmd:
  1298. vcmd[i]["FX2"]["TYPE"] = value
  1299. if "FIX" in fcmd:
  1300. vcmd[i]["FIX"] = fcmd["FIX"]
  1301. if DMX and vcmd[i]:
  1302. vcmd[i]["DMX"] = DMX
  1303. if type(nr) is not type(None):
  1304. vcmd[i]["EXEC"] = str(int(nr)+1)
  1305. cmd.append(vcmd[i])
  1306. if cmd and not modes.val("BLIND"):
  1307. jclient_send(cmd)
  1308. def render(self):
  1309. #Xroot.bind("<Key>",tk_event(fix=0,elem=None,attr="ROOT",data=self,mode="ROOT").cb)
  1310. #self.draw_input()
  1311. pass
  1312. ##draw_sub_dim
  1313. import tkgui.dialog as dialoglib
  1314. dialog = dialoglib.Dialog()
  1315. from tkgui.draw import *
  1316. from tkgui.GUI import *
  1317. import tkgui.MENUE as MENUE
  1318. class LOAD_SHOW_AND_RESTART():
  1319. def __init__(self,fname=""):
  1320. self.fname=fname
  1321. self.base = showlib.Base()
  1322. def cb(self,event=None,force=0):
  1323. print()
  1324. print()
  1325. print()
  1326. cprint("LOAD_SHOW_AND_RESTART.cb force={} name={}".format(force,self.fname),color="red" )
  1327. if not self.fname and not force:
  1328. return 0
  1329. if self.base.show_name == self.fname and not force:
  1330. cprint("filename is the same",self.fname)
  1331. return 0
  1332. if not force:
  1333. self.base._set(self.fname)
  1334. cprint("LOAD SHOW:",event,self.fname)
  1335. BASE_PATH = "/opt/LibreLight/Xdesk/"
  1336. cmd="_LibreLightDesk.py"
  1337. arg = ""
  1338. print("fork",[BASE_PATH,cmd,arg])
  1339. if "--easy" in sys.argv:
  1340. arg = "--easy"
  1341. movewin.process_kill(BASE_PATH+"tksdl/")
  1342. os.execl("/usr/bin/python3", BASE_PATH, cmd,arg)
  1343. sys.exit()
  1344. lf_nr = 0
  1345. from tkinter import PhotoImage
  1346. _shift_key = 0
  1347. class WindowManager():
  1348. def __init__(self):
  1349. self.windows = {}
  1350. self.obj = {}
  1351. self.nr= 0
  1352. self.first=""
  1353. self.window_init_buffer = {}
  1354. def update(self,w,name="",obj=None):
  1355. name = str(name)
  1356. for k in self.windows:
  1357. if k == name:
  1358. self.windows[str(name)] = w
  1359. self.obj[str(name)] = obj
  1360. def new(self,w,name="",obj=None,wcb=None):
  1361. name = str(name)
  1362. if wcb and name:
  1363. self.window_init_buffer[name] = wcb
  1364. if not self.first:
  1365. if name:
  1366. self.first = name
  1367. else:
  1368. self.first = str(self.nr)
  1369. if w:
  1370. w.tk.state(newstate='normal')
  1371. w.tk.attributes('-topmost',True)
  1372. if name:
  1373. self.windows[str(name)] = w
  1374. self.obj[str(name)] = obj
  1375. else:
  1376. self.windows[str(self.nr)] = w
  1377. self.obj[str(self.nr)] = obj
  1378. self.nr+=1
  1379. def mainloop(self):
  1380. self.windows[self.first].mainloop()
  1381. def get_win(self,name):
  1382. #cprint(".get_win(name) =",name)
  1383. name = str(name)
  1384. if name in self.windows:
  1385. out = self.windows[name]
  1386. #cprint(out)
  1387. return out
  1388. def get(self,name):
  1389. return get_win(name)
  1390. def get_obj(self,name):
  1391. name = str(name)
  1392. if name in self.windows:
  1393. out = self.obj[name]
  1394. return out
  1395. def create(self,name):
  1396. #cprint( "create WindowContainer",name)
  1397. if name in self.window_init_buffer:
  1398. c = self.window_init_buffer[name]
  1399. w,obj,cb_ok = c.create()
  1400. window_manager.update(w,name,obj)
  1401. if cb_ok:
  1402. cb_ok()
  1403. resize = 1
  1404. if "resize" in c.args:
  1405. if not c.args["resize"]:
  1406. resize = 0
  1407. #if resize:
  1408. libwin.get_cur_window_geo(_filter=name,win=w)
  1409. if name in ["ENCODER"]:
  1410. global _ENCODER_WINDOW
  1411. _ENCODER_WINDOW = w
  1412. if name in ["DIMMER","FIXTURES"]:
  1413. refresher_fix.reset() # = tkrefresh.Refresher()
  1414. def _check_window_is_open(self,name):
  1415. try:
  1416. win = self.windows[name]
  1417. if "tk" not in dir(win):
  1418. return 0
  1419. return win.tk.winfo_exists()
  1420. except Exception as e:
  1421. cprint("_check_window_is_open err",e,color="red")
  1422. def top(self,name):
  1423. name = str(name)
  1424. if name not in self.windows:
  1425. cprint(name," not in self.windows",self.windows.keys())
  1426. return
  1427. if not self._check_window_is_open(name):
  1428. cprint(" ",name," window is closed ! ")
  1429. self.create(name)
  1430. w = self.windows[name]
  1431. if not str(type(w)).startswith("<class 'function'>"):
  1432. w.tk.deiconify()
  1433. w.tk.attributes('-topmost',True)
  1434. w.tk.attributes('-topmost',False)
  1435. w.tk.update_idletasks()
  1436. else:
  1437. print(" 2.2-",w)
  1438. w()
  1439. class Console():
  1440. def __init__(self):
  1441. pass
  1442. def flash_off(self,fix):
  1443. pass
  1444. def fx_off(self,fix):
  1445. cprint("Console.fx_off()",fix)
  1446. if not fix or fix == "all":
  1447. j = []
  1448. if 0:
  1449. jdata = {'VALUE': None, 'args': [], 'FX': 'alloff::::', 'FADE': 2, 'DMX': '0'}
  1450. j.append(jdata)
  1451. jdata = {'VALUE': None, 'args': [], 'FX': 'alloff::::', 'FADE': 2,'FLASH':1, 'DMX': '0'}
  1452. j.append(jdata)
  1453. else:
  1454. jdata = {'VALUE': None, 'args': [], 'FX2': {"TYPE":"alloff"}, 'FADE': 2,'FLASH':1, 'DMX': '1'}
  1455. j.append(jdata)
  1456. if not modes.val("BLIND"):
  1457. jclient_send(j)
  1458. return 0
  1459. window_manager = WindowManager()
  1460. CONSOLE = Console()
  1461. EXEC = execlib.EXEC()
  1462. def refresh_exec_mc():
  1463. time.sleep(10)
  1464. while 1:
  1465. try:
  1466. pass#
  1467. execlib.exec_set_mc(EXEC.label_exec,EXEC.val_exec)
  1468. except Exception as e:
  1469. print("refresh_exec_mc ERR",e)
  1470. time.sleep(5) # extra time
  1471. time.sleep(3) # refresh time
  1472. thread.start_new_thread(refresh_exec_mc,())
  1473. FIXTURES = fixlib.Fixtures()
  1474. def LOAD_SHOW():
  1475. EXEC.load_exec()
  1476. FIXTURES.load_patch()
  1477. LOAD_SHOW()
  1478. master = MASTER()
  1479. def menu_loop():
  1480. time.sleep(5)
  1481. while 1:
  1482. time.sleep(1)
  1483. master._refresh_fix_menu()
  1484. thread.start_new_thread(menu_loop,())
  1485. print("main",__name__)
  1486. import lib.tkrefresh as tkrefresh
  1487. refresher_fix = tkrefresh.Refresher()
  1488. refresher_fix.time_delta = 0.50
  1489. refresher_fix.name = "fix"
  1490. refresher_fix.reset()
  1491. refresher_fix.cb = master._refresh_fix
  1492. refresher_exec = tkrefresh.Refresher()
  1493. refresher_exec.time_delta = 10 #0
  1494. refresher_exec.name = "exec"
  1495. refresher_exec.reset()
  1496. refresher_exec.cb = master._refresh_exec
  1497. refresher_exec = tkrefresh.Refresher()
  1498. refresher_exec.time_delta = 10 #0
  1499. refresher_exec.name = "exec-fader"
  1500. refresher_exec.reset()
  1501. refresher_exec.cb = refresh_exec_fader_cfg
  1502. def loops(**args):
  1503. time.sleep(5) # wait until draw all window's
  1504. cprint("-> run loops")
  1505. thread.start_new_thread(refresher_fix.loop,())
  1506. thread.start_new_thread(refresher_exec.loop,())
  1507. thread.start_new_thread(loops,())
  1508. class window_create_sdl_buffer():
  1509. def __init__(self,args,cls,data,cb_ok=None,scroll=0,gui=None):
  1510. self.args = args.copy()
  1511. self.cls = cls
  1512. self.cb_ok = cb_ok
  1513. self.data = data
  1514. self.scroll = scroll
  1515. self.gui = gui
  1516. def create(self,hidde=0):
  1517. cprint()
  1518. return [self.cls,self.cls,None] #w,obj,cb_ok
  1519. def open_sdl_window():
  1520. cprint("open_sdl_window ... delay 1sec",color="yellow")
  1521. time.sleep(1)
  1522. #if "--easy" not in sys.argv:
  1523. movewin.startup_all_sdl()
  1524. thread.start_new_thread(open_sdl_window,())
  1525. mc_fix = MC_FIX()
  1526. def mc_fix_loop():
  1527. global master
  1528. time.sleep(5)
  1529. c=0
  1530. while 1:
  1531. try:
  1532. if c >= 1:
  1533. #master._refresh_exec()
  1534. c=0
  1535. for nr in EXEC.val_exec:
  1536. cfg = get_exec_btn_cfg(nr)
  1537. except Exception as e:
  1538. print("MC_FIX EXCEPTION",e)
  1539. #raise e
  1540. c+=1
  1541. try:
  1542. data = FIXTURES.fixtures
  1543. mc_fix.set(index="fix",data=data)
  1544. except Exception as e:
  1545. print("MC_FIX EXCEPTION",e)
  1546. time.sleep(1/10)
  1547. thread.start_new_thread(mc_fix_loop,())
  1548. if __run_main:
  1549. cprint("main")
  1550. TOP = libtk._POS_TOP + 15
  1551. L0 = libtk._POS_LEFT
  1552. L1 = libtk._POS_LEFT + 95
  1553. L2 = libtk._POS_LEFT + 920
  1554. W1 = 810
  1555. H1 = 550
  1556. HTB = 23 # hight of the titlebar from window manager
  1557. geo_list = libwin.read_window_geo()
  1558. #geo = libwin.filter_window_geo(geo_list,name)
  1559. #args = {"title":name,"master":0,"width":600,"height":113,"left":L1+5,"top":TOP+5+HTB*2+H1}
  1560. #geo = libwin.filter_window_geo(geo_list,name)
  1561. #if geo:
  1562. # args.update(geo)
  1563. data = []
  1564. #data.append({"text":"COMMAND"})
  1565. #data.append({"text":"CONFIG"})
  1566. data.append({"text":"PATCH"})
  1567. data.append({"text":"DIMMER"})
  1568. data.append({"text":"FIXTURES"})
  1569. data.append({"text":"FIX-LIST","tip":"YELLOW = 'EVEN' SELECTION OK\nORANGE = 'ODD' SELECTION, SHURE ?"})
  1570. #data.append({"text":"EXEC-BTN","name":"EXEC-BTN"})
  1571. data.append({"text":"EXEC-BTN","name":"EXEC-BTN"})
  1572. data.append({"text":"EXEC-WING"})
  1573. data.append({"text":"---"})
  1574. data.append({"text":"SETUP"})
  1575. data.append({"text":"COMMAND"})
  1576. data.append({"text":"LIVE"})
  1577. data.append({"text":"FX"})
  1578. data.append({"text":"FX3","name":"FX3-beta"})
  1579. data.append({"text":"ENCODER"})
  1580. data.append({"text":"COLORPICKER","name":"COLOR"})
  1581. data.append({"text":"---"})
  1582. data.append({"text":"FIXTURE-EDITOR","name":"FIX-EDIT"})
  1583. data.append({"text":"SDL-MIDI"})
  1584. data.append({"text":"CLOCK"})
  1585. data.append({"text":"RAY-DMX"})
  1586. data.append({"text":"SDL-VPU"})
  1587. data.append({"text":"---"})
  1588. data.append({"text":"Nodescanner","name":"NodeScan"})
  1589. data.append({"text":"TK-Ping"})
  1590. data.append({"text":"SDL-OSZI"})
  1591. data.append({"text":"---"})
  1592. data.append({"text":"- DEMO -"})
  1593. data.append({"text":"---"})
  1594. data.append({"text":"SDL-STAGE"})
  1595. data.append({"text":"SDL-Shader"})
  1596. data.append({"text":"TABLE"})
  1597. data.append({"text":"---"})
  1598. data.append({"text":"- NEW -"})
  1599. data.append({"text":"R-FIX-LIST"})
  1600. data.append({"text":"XWING"})
  1601. data.append({"text":"CONFIG"})
  1602. data.append({"text":"---"})
  1603. data.append({"text":"- OLD -"})
  1604. data.append({"text":"SDL-DMX"})
  1605. #data.append({"text":"TK-EXEC"})
  1606. #data.append({"text":"EXEC-BTN","name":"EXEC-BTN"})
  1607. #data.append({"text":"MASTER-WING"})
  1608. name="MAIN"
  1609. args = {"title":"MAIN","master":1,"width":80,"height":H1,"left":L0,"top":TOP,"resize":1}
  1610. geo = libwin.filter_window_geo(geo_list,name)
  1611. if geo:
  1612. args.update(geo)
  1613. cls = MENUE.GUI_menu
  1614. cb_ok = None
  1615. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  1616. window_manager.new(None,name,wcb=c)
  1617. window_manager.top(name)
  1618. gui_menu_gui = window_manager.get_win(name)
  1619. gui_menu = window_manager.get_obj(name)
  1620. master._refresh_fix()
  1621. # =======================================================================
  1622. if 0:
  1623. name="EXEC-BTN"
  1624. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1625. geo = libwin.filter_window_geo(geo_list,name)
  1626. if geo:
  1627. args.update(geo)
  1628. data = EXEC
  1629. cls = draw_exec #GUI_ExecWingLayout
  1630. cb_ok = None #set_exec_fader_all
  1631. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1632. window_manager.new(None,name,wcb=c)
  1633. if libwin.split_window_show(geo_list,_filter=name):
  1634. window_manager.top(name)
  1635. #print(dir(cls))
  1636. #print(cls)
  1637. #sys.exit()
  1638. # =======================================================================
  1639. name="SDL-MIDI"
  1640. def sdl_starter():
  1641. cmd="nohup /usr/bin/python3 /opt/LibreLight/Xdesk/tksdl/midi.py > /dev/null 2>&1 &"
  1642. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tksdl/midi.py " #&"
  1643. print(cmd)
  1644. #os.popen(cmd)
  1645. def xyz123(cmd):
  1646. os.system(cmd)
  1647. thread.start_new_thread(xyz123,(cmd,))
  1648. return [None,None,None]
  1649. #class window_create_sdl_buffer():
  1650. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1651. geo = libwin.filter_window_geo(geo_list,name)
  1652. if geo:
  1653. args.update(geo)
  1654. data = []
  1655. cls = sdl_starter #: None #GUI_CONF
  1656. cb_ok = None
  1657. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1658. window_manager.new(None,name,wcb=c)
  1659. if libwin.split_window_show(geo_list,_filter=name):
  1660. window_manager.top(name)
  1661. # =======================================================================
  1662. name="SDL-VPU"
  1663. def sdl_starter():
  1664. cmd="python3 /opt/LibreLight/Xdesk/vpu/watchdog_vpu.py -single"
  1665. print(cmd)
  1666. def xyz123(cmd):
  1667. os.system(cmd)
  1668. thread.start_new_thread(xyz123,(cmd,))
  1669. return [None,None,None]
  1670. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1671. geo = libwin.filter_window_geo(geo_list,name)
  1672. if geo:
  1673. args.update(geo)
  1674. data = []
  1675. cls = sdl_starter #: None #GUI_CONF
  1676. cb_ok = None
  1677. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1678. window_manager.new(None,name,wcb=c)
  1679. if libwin.split_window_show(geo_list,_filter=name):
  1680. window_manager.top(name)
  1681. # =======================================================================
  1682. name="SDL-OSZI"
  1683. def sdl_starter():
  1684. cmd="python3 /opt/LibreLight/ASP/monitor/oszi_grid.py"
  1685. print(cmd)
  1686. def xyz123(cmd):
  1687. os.system(cmd)
  1688. thread.start_new_thread(xyz123,(cmd,))
  1689. return [None,None,None]
  1690. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1691. geo = libwin.filter_window_geo(geo_list,name)
  1692. if geo:
  1693. args.update(geo)
  1694. data = []
  1695. cls = sdl_starter #: None #GUI_CONF
  1696. cb_ok = None
  1697. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1698. window_manager.new(None,name,wcb=c)
  1699. if libwin.split_window_show(geo_list,_filter=name):
  1700. window_manager.top(name)
  1701. # =======================================================================
  1702. name="SDL-DMX"
  1703. def sdl_starter():
  1704. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tksdl/dmx.py " #&"
  1705. print(cmd)
  1706. def xyz123(cmd):
  1707. os.system(cmd)
  1708. thread.start_new_thread(xyz123,(cmd,))
  1709. return [None,None,None]
  1710. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1711. geo = libwin.filter_window_geo(geo_list,name)
  1712. if geo:
  1713. args.update(geo)
  1714. data = []
  1715. cls = sdl_starter #: None #GUI_CONF
  1716. cb_ok = None
  1717. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1718. window_manager.new(None,name,wcb=c)
  1719. if libwin.split_window_show(geo_list,_filter=name):
  1720. window_manager.top(name)
  1721. # =======================================================================
  1722. name="R-FIX-LIST"
  1723. def sdl_starter():
  1724. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tkray/fix.py " #&"
  1725. print(cmd)
  1726. def xyz123(cmd):
  1727. os.system(cmd)
  1728. thread.start_new_thread(xyz123,(cmd,))
  1729. return [None,None,None]
  1730. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1731. geo = libwin.filter_window_geo(geo_list,name)
  1732. if geo:
  1733. args.update(geo)
  1734. data = []
  1735. cls = sdl_starter #: None #GUI_CONF
  1736. cb_ok = None
  1737. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1738. window_manager.new(None,name,wcb=c)
  1739. if libwin.split_window_show(geo_list,_filter=name):
  1740. window_manager.top(name)
  1741. # =======================================================================
  1742. name="RAY-DMX"
  1743. def sdl_starter():
  1744. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tkray/dmx.py " #&"
  1745. print(cmd)
  1746. def xyz123(cmd):
  1747. os.system(cmd)
  1748. thread.start_new_thread(xyz123,(cmd,))
  1749. return [None,None,None]
  1750. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1751. geo = libwin.filter_window_geo(geo_list,name)
  1752. if geo:
  1753. args.update(geo)
  1754. data = []
  1755. cls = sdl_starter #: None #GUI_CONF
  1756. cb_ok = None
  1757. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1758. window_manager.new(None,name,wcb=c)
  1759. if libwin.split_window_show(geo_list,_filter=name):
  1760. window_manager.top(name)
  1761. # =======================================================================
  1762. name="EXEC-BTN" #"TK-EXEC"
  1763. def sdl_starter():
  1764. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tkgui/EXEC-BTN.py " #&"
  1765. print(cmd)
  1766. def xyz123(cmd):
  1767. os.system(cmd)
  1768. thread.start_new_thread(xyz123,(cmd,))
  1769. return [None,None,None]
  1770. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1771. geo = libwin.filter_window_geo(geo_list,name)
  1772. if geo:
  1773. args.update(geo)
  1774. data = []
  1775. cls = sdl_starter #: None #GUI_CONF
  1776. cb_ok = None
  1777. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1778. window_manager.new(None,name,wcb=c)
  1779. if libwin.split_window_show(geo_list,_filter=name):
  1780. window_manager.top(name)
  1781. # =======================================================================
  1782. # =======================================================================
  1783. name="TK-Ping" #"TK-EXEC"
  1784. def sdl_starter():
  1785. cmd="nohup /usr/bin/python3 /opt/LibreLight/Xdesk/tool/TK-Ping.py > /dev/null 2>&1 " #&"
  1786. print(cmd)
  1787. def xyz123(cmd):
  1788. os.system(cmd)
  1789. thread.start_new_thread(xyz123,(cmd,))
  1790. return [None,None,None]
  1791. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1792. geo = libwin.filter_window_geo(geo_list,name)
  1793. if geo:
  1794. args.update(geo)
  1795. data = []
  1796. cls = sdl_starter #: None #GUI_CONF
  1797. cb_ok = None
  1798. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1799. window_manager.new(None,name,wcb=c)
  1800. if libwin.split_window_show(geo_list,_filter=name):
  1801. window_manager.top(name)
  1802. # =======================================================================
  1803. # =======================================================================
  1804. name="Nodescanner" #"TK-EXEC"
  1805. def sdl_starter():
  1806. cmd="nohup /usr/bin/python3 /opt/LibreLight/Xdesk/tool/TK-Nodescanner.py > /dev/null 2>&1 " #&"
  1807. print(cmd)
  1808. def xyz123(cmd):
  1809. os.system(cmd)
  1810. thread.start_new_thread(xyz123,(cmd,))
  1811. return [None,None,None]
  1812. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1813. geo = libwin.filter_window_geo(geo_list,name)
  1814. if geo:
  1815. args.update(geo)
  1816. data = []
  1817. cls = sdl_starter #: None #GUI_CONF
  1818. cb_ok = None
  1819. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1820. window_manager.new(None,name,wcb=c)
  1821. if libwin.split_window_show(geo_list,_filter=name):
  1822. window_manager.top(name)
  1823. # =======================================================================
  1824. # =======================================================================
  1825. name="XWING" #"TK-EXEC"
  1826. def sdl_starter():
  1827. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tkgui/EXEC-XWING.py " #&"
  1828. print(cmd)
  1829. def xyz123(cmd):
  1830. os.system(cmd)
  1831. thread.start_new_thread(xyz123,(cmd,))
  1832. return [None,None,None]
  1833. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1834. geo = libwin.filter_window_geo(geo_list,name)
  1835. if geo:
  1836. args.update(geo)
  1837. data = []
  1838. cls = sdl_starter #: None #GUI_CONF
  1839. cb_ok = None
  1840. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1841. window_manager.new(None,name,wcb=c)
  1842. if libwin.split_window_show(geo_list,_filter=name):
  1843. window_manager.top(name)
  1844. # =======================================================================
  1845. name="SDL-STAGE"
  1846. def sdl_starter():
  1847. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk//3d/stage_3d.py " #&"
  1848. print(cmd)
  1849. def xyz123(cmd):
  1850. os.system(cmd)
  1851. thread.start_new_thread(xyz123,(cmd,))
  1852. return [None,None,None]
  1853. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1854. geo = libwin.filter_window_geo(geo_list,name)
  1855. if geo:
  1856. args.update(geo)
  1857. data = []
  1858. cls = sdl_starter #: None #GUI_CONF
  1859. cb_ok = None
  1860. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1861. window_manager.new(None,name,wcb=c)
  1862. if libwin.split_window_show(geo_list,_filter=name):
  1863. window_manager.top(name)
  1864. # =======================================================================
  1865. name="SDL-Shader"
  1866. def sdl_starter():
  1867. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk//3d/demo_shaders.py " #&"
  1868. print(cmd)
  1869. #os.popen(cmd)
  1870. def xyz123(cmd):
  1871. os.system(cmd)
  1872. thread.start_new_thread(xyz123,(cmd,))
  1873. return [None,None,None]
  1874. #class window_create_sdl_buffer():
  1875. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1876. geo = libwin.filter_window_geo(geo_list,name)
  1877. if geo:
  1878. args.update(geo)
  1879. data = []
  1880. cls = sdl_starter #: None #GUI_CONF
  1881. cb_ok = None
  1882. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1883. window_manager.new(None,name,wcb=c)
  1884. if libwin.split_window_show(geo_list,_filter=name):
  1885. window_manager.top(name)
  1886. # =======================================================================
  1887. name="FIX-LIST"
  1888. def sdl_starter():
  1889. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tksdl/fix.py " #&"
  1890. print(cmd)
  1891. #os.popen(cmd)
  1892. def xyz123(cmd):
  1893. os.system(cmd)
  1894. thread.start_new_thread(xyz123,(cmd,))
  1895. return [None,None,None]
  1896. #class window_create_sdl_buffer():
  1897. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1898. geo = libwin.filter_window_geo(geo_list,name)
  1899. if geo:
  1900. args.update(geo)
  1901. data = []
  1902. cls = sdl_starter #: None #GUI_CONF
  1903. cb_ok = None
  1904. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1905. window_manager.new(None,name,wcb=c)
  1906. if libwin.split_window_show(geo_list,_filter=name):
  1907. window_manager.top(name)
  1908. # =======================================================================
  1909. name="CONFIG"
  1910. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1911. geo = libwin.filter_window_geo(geo_list,name)
  1912. if geo:
  1913. args.update(geo)
  1914. data = []
  1915. cls = GUI_CONF
  1916. cb_ok = None
  1917. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1918. window_manager.new(None,name,wcb=c)
  1919. if libwin.split_window_show(geo_list,_filter=name):
  1920. window_manager.top(name)
  1921. # =======================================================================
  1922. name="DIMMER"
  1923. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1924. geo = libwin.filter_window_geo(geo_list,name)
  1925. if geo:
  1926. args.update(geo)
  1927. cls = GUI_DIM
  1928. data = FIXTURES
  1929. ok_cb=None
  1930. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1931. window_manager.new(None,name,wcb=c)
  1932. if libwin.split_window_show(geo_list,_filter=name):
  1933. window_manager.top(name)
  1934. # =======================================================================
  1935. name="FIXTURES"
  1936. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1937. geo = libwin.filter_window_geo(geo_list,name)
  1938. if geo:
  1939. args.update(geo)
  1940. cls = GUI_FIX
  1941. ok_cb=None
  1942. data = FIXTURES
  1943. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1944. window_manager.new(None,name,wcb=c)
  1945. if libwin.split_window_show(geo_list,_filter=name):
  1946. window_manager.top(name)
  1947. # =======================================================================
  1948. name="FIXTURE-EDITOR"
  1949. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
  1950. geo = libwin.filter_window_geo(geo_list,name)
  1951. if geo:
  1952. args.update(geo)
  1953. data=[]
  1954. for i in range(12*6):
  1955. data.append({"text"+str(i):"test"})
  1956. import tkgui.fix as guifix
  1957. cls = guifix.GUI_FixtureEditor
  1958. cb_ok = None
  1959. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  1960. window_manager.new(None,name,wcb=c)
  1961. # =======================================================================
  1962. name="MASTER-WING"
  1963. args = {"title":name,"master":0,"width":75,"height":405,"left":L0,"top":TOP+H1-220,"resize":0}
  1964. geo = libwin.filter_window_geo(geo_list,name)
  1965. if geo:
  1966. args.update(geo)
  1967. data=[]
  1968. for i in range(2):
  1969. data.append({"MASTER"+str(i):"MASTER"})
  1970. cls = GUI_MasterWingLayout #(w1,data)
  1971. cb_ok = None
  1972. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  1973. window_manager.new(None,name,wcb=c)
  1974. if libwin.split_window_show(geo_list,_filter=name):
  1975. window_manager.top(name)
  1976. # =======================================================================
  1977. name="EXEC-WING"
  1978. args = {"title":name,"master":0,"width":600,"height":415,"left":L1,"top":TOP+H1+HTB*2,"H1":H1,"W1":W1}
  1979. geo = libwin.filter_window_geo(geo_list,name)
  1980. if geo:
  1981. args.update(geo)
  1982. data=[]
  1983. for i in range(10*3):
  1984. data.append({"EXEC"+str(i):"EXEC"})
  1985. cls = GUI_ExecWingLayout
  1986. cb_ok = set_exec_fader_all
  1987. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  1988. window_manager.new(None,name,wcb=c)
  1989. if libwin.split_window_show(geo_list,_filter=name):
  1990. window_manager.top(name)
  1991. # =======================================================================
  1992. name="ENCODER"
  1993. args = {"title":name,"master":0,"width":620,"height":113,"left":L0+710,"top":TOP+H1+15+HTB*2}
  1994. geo = libwin.filter_window_geo(geo_list,name)
  1995. if geo:
  1996. args.update(geo)
  1997. cls = draw_enc #(master,w.tk)#Xroot)
  1998. cb_ok = None
  1999. data = FIXTURES #master
  2000. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2001. window_manager.new(None,name,wcb=c)
  2002. if libwin.split_window_show(geo_list,_filter=name):
  2003. window_manager.top(name)
  2004. # =======================================================================
  2005. name = "SETUP"
  2006. args = {"title":name +" SHOW:"+master.base.show_name,
  2007. "master":0,"width":445,"height":42,"left":L1+10+W1,"top":TOP,"resize":10}
  2008. args["title"] = "SETUP SHOW:"+master.base.show_name
  2009. geo = libwin.filter_window_geo(geo_list,name)
  2010. try:
  2011. geo["width"] = args["width"]
  2012. geo["height"] = args["height"]
  2013. except:pass
  2014. if geo:
  2015. args.update(geo)
  2016. cls = draw_setup #(master,w.tk)
  2017. data = []
  2018. cb_ok = None
  2019. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2020. window_manager.new(None,name,wcb=c)
  2021. if libwin.split_window_show(geo_list,_filter=name):
  2022. window_manager.top(name)
  2023. # =======================================================================
  2024. name = "COMMAND"
  2025. args = {"title":name,"master":0,"width":415,"height":130,"left":L1+10+W1,"top":TOP+81,"resize":10}
  2026. geo = libwin.filter_window_geo(geo_list,name)
  2027. if geo:
  2028. args.update(geo)
  2029. cls = draw_command #(master,w.tk)
  2030. data = []
  2031. cb_ok = None
  2032. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2033. window_manager.new(None,name,wcb=c)
  2034. if libwin.split_window_show(geo_list,_filter=name):
  2035. window_manager.top(name)
  2036. # =======================================================================
  2037. name = "LIVE"
  2038. args = {"title":name,"master":0,"width":415,"height":42,"left":L1+10+W1,"top":TOP+235,"resize":10}
  2039. geo = libwin.filter_window_geo(geo_list,name)
  2040. if geo:
  2041. args.update(geo)
  2042. cls = draw_live #(master,w.tk)
  2043. data = []
  2044. cb_ok = None
  2045. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2046. window_manager.new(None,name,wcb=c)
  2047. if libwin.split_window_show(geo_list,_filter=name):
  2048. window_manager.top(name)
  2049. # =======================================================================
  2050. name = "CLOCK"
  2051. args = {"title":name,"master":0,"width":335,"height":102,"left":L1+10+W1+80,"top":TOP+H1+HTB+160,"resize":0}
  2052. geo = libwin.filter_window_geo(geo_list,name)
  2053. if geo:
  2054. args.update(geo)
  2055. cclock = X_CLOCK()
  2056. cls = cclock.draw_clock
  2057. data = []
  2058. cb_ok = None
  2059. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2060. window_manager.new(None,name,wcb=c)
  2061. if libwin.split_window_show(geo_list,_filter=name):
  2062. window_manager.top(name)
  2063. # =======================================================================
  2064. name="FX"
  2065. args = {"title":name,"master":0,"width":415,"height":297+30,"left":L1+10+W1,"top":TOP+302,"resize":1}
  2066. geo = libwin.filter_window_geo(geo_list,name)
  2067. if geo:
  2068. args.update(geo)
  2069. cls = draw_fx #(master,w.tk)
  2070. data = []
  2071. cb_ok = None
  2072. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2073. window_manager.new(None,name,wcb=c)
  2074. if libwin.split_window_show(geo_list,_filter=name):
  2075. window_manager.top(name)
  2076. # =======================================================================
  2077. name="FX3" #"TK-EXEC"
  2078. def sdl_starter():
  2079. cmd="/usr/bin/python3 /opt/LibreLight/Xdesk/tkgui/FX3.py " #&"
  2080. print(cmd)
  2081. def xyz123(cmd):
  2082. os.system(cmd)
  2083. thread.start_new_thread(xyz123,(cmd,))
  2084. return [None,None,None]
  2085. args = {"title":name,"master":0,"width":380,"height":500,"left":L1,"top":TOP}
  2086. geo = libwin.filter_window_geo(geo_list,name)
  2087. if geo:
  2088. args.update(geo)
  2089. data = []
  2090. cls = sdl_starter #: None #GUI_CONF
  2091. cb_ok = None
  2092. c = window_create_sdl_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  2093. window_manager.new(None,name,wcb=c)
  2094. if libwin.split_window_show(geo_list,_filter=name):
  2095. window_manager.top(name)
  2096. # =======================================================================
  2097. name="PATCH"
  2098. args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP,"foot":1,"head":1}
  2099. geo = libwin.filter_window_geo(geo_list,name)
  2100. if geo:
  2101. args.update(geo)
  2102. cls = GUI_PATCH
  2103. data = FIXTURES
  2104. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=1)
  2105. window_manager.new(None,name,wcb=c) #,obj)
  2106. if libwin.split_window_show(geo_list,_filter=name):
  2107. window_manager.top(name)
  2108. # =======================================================================
  2109. name="COLORPICKER"
  2110. args = {"title":name,"master":0,"width":600,"height":113,"left":L1+5,"top":TOP+5+HTB*2+H1}
  2111. geo = libwin.filter_window_geo(geo_list,name)
  2112. if geo:
  2113. args.update(geo)
  2114. cls = draw_colorpicker #(master,w.tk,FIXTURES,master)
  2115. data = [FIXTURES,master]
  2116. cb_ok = None #FIXTURES
  2117. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2118. window_manager.new(None,name,wcb=c)
  2119. if libwin.split_window_show(geo_list,_filter=name):
  2120. window_manager.top(name)
  2121. # =======================================================================
  2122. name="TABLE"
  2123. args = {"title":name,"master":0,"width":600,"height":113,"left":L1+5,"top":TOP+5+HTB*2+H1}
  2124. geo = libwin.filter_window_geo(geo_list,name)
  2125. if geo:
  2126. args.update(geo)
  2127. #cls = draw_colorpicker #(master,w.tk,FIXTURES,master)
  2128. cls = TableFrame #(root=w.tk)#,left=80,top=620)
  2129. data = [FIXTURES,master]
  2130. cb_ok = None #FIXTURES
  2131. c = libtk.window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,gui=master,scroll=0)
  2132. window_manager.new(None,name,wcb=c)
  2133. if libwin.split_window_show(geo_list,_filter=name):
  2134. window_manager.top(name)
  2135. def wm_mainloop():
  2136. try:
  2137. window_manager.mainloop()
  2138. finally:
  2139. print()
  2140. print()
  2141. cmd="xset -display :0.0 r rate 240 20"
  2142. os.system(cmd)
  2143. cprint(" - EXIT -",color="red")
  2144. BASE_PATH = "/opt/LibreLight/Xdesk/"
  2145. movewin.process_kill(BASE_PATH+"tksdl/")
  2146. modes.val("EXIT",1) # set MODES EXIT
  2147. time.sleep(2)
  2148. del modes.modes["EXIT"] #val("EXIT",0) # set MODES EXIT
  2149. time.sleep(1)
  2150. master.exit()
  2151. sys.exit()
  2152. wm_mainloop() #window_manager.mainloop()
  2153. # thread.start_new_thread(wm_mainloop,()) # break TKINTER !!!
  2154. while 1:
  2155. print("loop..")
  2156. time.sleep(1)
  2157. cmd="xset -display :0.0 r rate 240 20"
  2158. os.system(cmd)
  2159. print("FOCUS_OUT", cmd)
  2160. #os.system(cmd) # DISABLED