Răsfoiți Sursa

fix: Fixture-Editor -IMPORT -USER -GLOBAL ... add: head,foot ScrolledFrame

micha 1 an în urmă
părinte
comite
8fcc968e8f
2 a modificat fișierele cu 187 adăugiri și 216 ștergeri
  1. 114 177
      _LibreLightDesk.py
  2. 73 39
      tkgui/GUI.py

+ 114 - 177
_LibreLightDesk.py

@@ -2945,10 +2945,8 @@ class BaseCallback():
         self.args = args
 
     def cb(self,**args):
-        print("++",self,"cb()",self.args,self._cb)
+        print("BaseCallback.cb()",self.args,self._cb)
         if self._cb:
-            print()
-            print("cb",self._cb)
             try:
                 self._cb(self.args) 
             except TypeError as e:
@@ -3130,194 +3128,115 @@ def _import_fixture_list(frame,cb=None,master=None,bg="black"):
         r+=1
 
 
-def _load_fixture_list(frame,cb=None,master=None,bg="black"):
-    frame.configure(bg=bg)
-    c=0
-    r=0
-    base = Base()
-    for i in ["source","name","manufacturer","channel's","file","path"]: #,"create"]:
-        b = tk.Label(frame,bg="grey",text=i)
-        b.grid(row=r, column=c, sticky=tk.W) #+tk.E)
-        c+=1
-    r+=1
-    blist = [] #base._list()
-    try:
-        p = HOME+"/LibreLight/fixtures/"
-        ls = os.listdir(p)
-        ls.sort()
-        for l in ls:
-            b = _parse_fixture_name(l)
-            b.append(p)
-            b.insert(0,"user")
-            blist.append(b)
-    except Exception as e:
-        cprint("Exce 877 ",e)
-    try:
-        p="/opt/LibreLight/Xdesk/fixtures/"
-        ls = os.listdir(p )
-        ls.sort()
-        for l in ls:
-            b = _parse_fixture_name(l)
-            b.append(p)
-            b.insert(0,"base")
-            blist.append(b)
-    except Exception as e:
-        cprint("Exce 878 ",e)
-
-    if not blist:
-        blist.append(["MAC-500","martin","Demo"])
-        blist.append(["MAC-2000","martin","Demo"])
-        blist.append(["MAC-VIPER","martin","Demo"])
-        blist.append(["SPARX-7","JB","Demo"])
-        blist.append(["SPARX-11","JB","Demo"])
-        blist.append(["JB-P6","JB","Demo"])
-        blist.append(["JB-P7","JB","Demo"])
-        blist.append(["JB-A7","JB","Demo"])
-        blist.append(["TMH-12","Eurolight","Demo"])
 
-    if len(blist) < 30:
-        for i in range(30-len(blist)):
-            blist.append(["{:0>4}".format(len(blist)+i+1),"",""])
-
-
-    if cb is None: 
-        cb = DummyCallback #("load_show_list.cb")
-    
-    _tmp_name = ""
-    _tmp_flag = 0
-    for i in blist:
-        #print(i)
-        if i[0] != _tmp_name:
-            _tmp_flag = "#aaf"
-            if i[0] == "user":
-                _tmp_flag = "#aaf"
-            if i[0] == "base":
-                _tmp_flag = "#0f0"
+class _LOAD_FIXTURE_LIST():
+    def __init__(self,mode="<name>"):
+        self.mode = mode
 
+    def get(self,frame,cb=None,master=None,bg="black"):
+        frame.configure(bg=bg)
         c=0
-        for j in i:
-            bg="lightgrey"
-            dbg="lightgrey"
-            if i[1] > time.strftime("%Y-%m-%d %X",  time.localtime(time.time()-3600*4)):
-                dbg = "lightgreen"
-            elif i[1] > time.strftime("%Y-%m-%d %X",  time.localtime(time.time()-3600*24*7)):
-                dbg = "green"
-
-            if _tmp_flag:
-                bg = "{}".format(_tmp_flag)
-
-            if c == 1:
-                if base.show_name == i[0]:
-                    bg="green"
-
-                _cb2 = BaseCallback(cb=cb,args={"file":j}).cb
-
-                b = tk.Button(frame,text=j,anchor="w",height=1,bg=bg,command=_cb2)
-
-                if base.show_name == i[0]:
-                    b.config(activebackground=bg)
-                b.grid(row=r, column=c, sticky=tk.W+tk.E)
-            else:#ief c > 0:
-                b = tk.Button(frame,text=j,anchor="w",bg=dbg,relief="sunken")
-                b.config(activebackground=dbg)
-                b.grid(row=r, column=c, sticky=tk.W+tk.E)
+        r=0
+        base = Base()
+        for i in ["source","name","manufacturer","channel's","file","path"]: #,"create"]:
+            b = tk.Label(frame,bg="grey",text=i)
+            b.grid(row=r, column=c, sticky=tk.W) #+tk.E)
             c+=1
         r+=1
+        blist = [] #base._list()
 
+        if self.mode == "USER":
+            try:
+                p = HOME+"/LibreLight/fixtures/"
+                ls = os.listdir(p)
+                ls.sort()
+                for l in ls:
+                    b = _parse_fixture_name(l)
+                    b.append(p)
+                    b.insert(0,"user")
+                    blist.append(b)
+            except Exception as e:
+                cprint("Exce 877 ",e)
 
-def _load_fixture_list(frame,cb=None,master=None,bg="black"):
-    frame.configure(bg=bg)
-    c=0
-    r=0
-    base = Base()
-    for i in ["source","name","manufacturer","channel's","file","path"]: #,"create"]:
-        b = tk.Label(frame,bg="grey",text=i)
-        b.grid(row=r, column=c, sticky=tk.W) #+tk.E)
-        c+=1
-    r+=1
-    blist = [] #base._list()
-    try:
-        p = HOME+"/LibreLight/fixtures/"
-        ls = os.listdir(p)
-        ls.sort()
-        for l in ls:
-            b = _parse_fixture_name(l)
-            b.append(p)
-            b.insert(0,"user")
-            blist.append(b)
-    except Exception as e:
-        cprint("Exce 877 ",e)
-    try:
-        p="/opt/LibreLight/Xdesk/fixtures/"
-        ls = os.listdir(p )
-        ls.sort()
-        for l in ls:
-            b = _parse_fixture_name(l)
-            b.append(p)
-            b.insert(0,"base")
-            blist.append(b)
-    except Exception as e:
-        cprint("Exce 878 ",e)
+        elif self.mode == "GLOBAL":
+            try:
+                p="/opt/LibreLight/Xdesk/fixtures/"
+                ls = os.listdir(p )
+                ls.sort()
+                for l in ls:
+                    b = _parse_fixture_name(l)
+                    b.append(p)
+                    b.insert(0,"base")
+                    blist.append(b)
+            except Exception as e:
+                cprint("Exce 878 ",e)
 
-    if not blist:
-        blist.append(["MAC-500","martin","Demo"])
-        blist.append(["MAC-2000","martin","Demo"])
-        blist.append(["MAC-VIPER","martin","Demo"])
-        blist.append(["SPARX-7","JB","Demo"])
-        blist.append(["SPARX-11","JB","Demo"])
-        blist.append(["JB-P6","JB","Demo"])
-        blist.append(["JB-P7","JB","Demo"])
-        blist.append(["JB-A7","JB","Demo"])
-        blist.append(["TMH-12","Eurolight","Demo"])
+        elif self.mode == "IMPORT":
+            path = "/home/user/LibreLight/show"
+            for sname in os.listdir(path):
+                try:
+                    fname = path+"/"+sname+"/patch.sav"
+                    if os.path.isfile(fname):
+                        f = open(fname)
+                        lines = f.readlines()
+                        f.close()
+
+                        for line in lines:
+                            line = line.split("\t")
+                            line = json.loads(line[2])
+                            print(line)
+                            name = line["NAME"]
+                            blist.append([name,fname,path])
+                            print(":",i,name,fname)
+                except Exception as e:
+                    print("exception",e)
 
-    if len(blist) < 30:
-        for i in range(30-len(blist)):
-            blist.append(["{:0>4}".format(len(blist)+i+1),"",""])
 
+        if cb is None: 
+            cb = DummyCallback #("load_show_list.cb")
+        
+        _tmp_name = ""
+        _tmp_flag = 0
 
-    if cb is None: 
-        cb = DummyCallback #("load_show_list.cb")
-    
-    _tmp_name = ""
-    _tmp_flag = 0
-    for i in blist:
-        #print(i)
-        if i[0] != _tmp_name:
-            _tmp_flag = "#aaf"
-            if i[0] == "user":
+        blist = blist[:50]
+        for i in blist:
+            #print(i)
+            if i[0] != _tmp_name:
                 _tmp_flag = "#aaf"
-            if i[0] == "base":
-                _tmp_flag = "#0f0"
+                if i[0] == "user":
+                    _tmp_flag = "#aaf"
+                if i[0] == "base":
+                    _tmp_flag = "#0f0"
 
-        c=0
-        for j in i:
-            bg="lightgrey"
-            dbg="lightgrey"
-            if i[1] > time.strftime("%Y-%m-%d %X",  time.localtime(time.time()-3600*4)):
-                dbg = "lightgreen"
-            elif i[1] > time.strftime("%Y-%m-%d %X",  time.localtime(time.time()-3600*24*7)):
-                dbg = "green"
+            c=0
+            for j in i:
+                bg="lightgrey"
+                dbg="lightgrey"
+                if i[1] > time.strftime("%Y-%m-%d %X",  time.localtime(time.time()-3600*4)):
+                    dbg = "lightgreen"
+                elif i[1] > time.strftime("%Y-%m-%d %X",  time.localtime(time.time()-3600*24*7)):
+                    dbg = "green"
 
-            if _tmp_flag:
-                bg = "{}".format(_tmp_flag)
+                if _tmp_flag:
+                    bg = "{}".format(_tmp_flag)
 
-            if c == 1:
-                if base.show_name == i[0]:
-                    bg="green"
+                if c == 1:
+                    if base.show_name == i[0]:
+                        bg="green"
 
-                _cb2 = BaseCallback(cb=cb,args={"file":j}).cb
+                    _cb2 = BaseCallback(cb=cb,args={"file":j}).cb
 
-                b = tk.Button(frame,text=j,anchor="w",height=1,bg=bg,command=_cb2)
+                    b = tk.Button(frame,text=j,anchor="w",height=1,bg=bg,command=_cb2)
 
-                if base.show_name == i[0]:
-                    b.config(activebackground=bg)
-                b.grid(row=r, column=c, sticky=tk.W+tk.E)
-            else:#ief c > 0:
-                b = tk.Button(frame,text=j,anchor="w",bg=dbg,relief="sunken")
-                b.config(activebackground=dbg)
-                b.grid(row=r, column=c, sticky=tk.W+tk.E)
-            c+=1
-        r+=1
+                    if base.show_name == i[0]:
+                        b.config(activebackground=bg)
+                    b.grid(row=r, column=c, sticky=tk.W+tk.E)
+                else:#ief c > 0:
+                    b = tk.Button(frame,text=j,anchor="w",bg=dbg,relief="sunken")
+                    b.config(activebackground=dbg)
+                    b.grid(row=r, column=c, sticky=tk.W+tk.E)
+                c+=1
+            r+=1
 
 
 
@@ -4624,14 +4543,32 @@ class window_create_buffer():
 
         obj = None
         w = Window(self.args)
+        out = []
+        f = None
+        h = None
 
         if self.scroll:
-            w1 = ScrollFrame(w.tk,width=self.args["width"],height=self.args["height"])
+            head = None
+            foot = None
+            if "head" in self.args:
+                head = self.args["head"]
+            if "foot" in self.args:
+                foot = self.args["foot"]
+            w1 = ScrollFrame(w.tk,width=self.args["width"],height=self.args["height"],foot=foot,head=head)
+            if type(w1) is list:
+                try:
+                    h = w1[0]
+                    f = w1[2]
+                except:pass
+
+                w1 = w1[1]
         else:
             w1 = tk.Frame(w.tk,width=self.args["width"],height=self.args["height"])
             w1.pack()
-
-        obj=self.cls(self.gui,w1,self.data) 
+        try:
+            obj=self.cls(self.gui,w1,self.data,foot=f,head=h) 
+        except:
+            obj=self.cls(self.gui,w1,self.data) 
         return w,obj,self.cb_ok
 
 
@@ -4895,7 +4832,7 @@ if __run_main:
 
 
     name="PATCH"
-    args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
+    args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP,"foot":1,"head":1}
     geo = split_window_position(pos_list,name)
     if geo:
         args.update(geo)

+ 73 - 39
tkgui/GUI.py

@@ -167,11 +167,29 @@ class _TableFrame():
         return self.bframe
 
 
-def ScrollFrame(root,width=50,height=100,bd=1,bg="black"):
-    #print("ScrollFrame init",width,height)
-    aframe=tk.Frame(root) #,relief=tk.GROOVE)#,width=width,height=height,bd=bd)
-    #aframe.place(x=0,y=0)
-    aframe.pack(side="left",fill="both",expand=1) #x=0,y=0)
+def ScrollFrame(root,width=50,height=100,bd=1,bg="black",head=None,foot=None):
+    rframe=tk.Frame(root) 
+    rframe.pack(side="top",fill="both",expand=1) #x=0,y=0)
+
+    # frame grid start =========
+    if head:
+        height -= 25
+        hframe=tk.Frame(rframe) 
+        #l = tk.Label(hframe,text="frame")
+        #l.pack()
+        hframe.pack(side="top",fill="x",expand=0) #x=0,y=0)
+
+    aframe=tk.Frame(rframe) 
+    aframe.pack(side="top",fill="both",expand=1) #x=0,y=0)
+
+    if foot:
+        height -= 25
+        fframe=tk.Frame(rframe) 
+        #l = tk.Label(fframe,text="frame")
+        #l.pack()
+        fframe.pack(side="top",fill="x",expand=0) #x=0,y=0)
+        # frame grid end ==========
+
 
     canvas=tk.Canvas(aframe,width=width-24,height=height)
     if bg == "":
@@ -186,9 +204,13 @@ def ScrollFrame(root,width=50,height=100,bd=1,bg="black"):
     canvas.pack(side="left",expand=1,fill="both")
     canvas.create_window((0,0),window=bframe,anchor='nw')
     bframe.bind("<Configure>",scroll(canvas).config)
+
     canvas.bind("<Button>",Event("XXX").event)
     canvas.bind("<Key>",Event("XXX").event)
     canvas.bind("<KeyRelease>",Event("XXX").event)
+    if head or foot:
+        return [hframe,bframe,fframe]
+
     return bframe
 
 class GUIHandler():
@@ -532,11 +554,16 @@ class _SET_PATCH():
 
 class GUI_PATCH():
     #def __init__(self,gui,yframe):
-    def __init__(self,gui,yframe,data):
+    def __init__(self,gui,yframe,data,head=None,foot=None):
         self.gui = gui
         self.yframe = yframe
         self.data = data
+
+        self._head = head
+        self._foot = foot
+
         self.draw()
+
     def draw(self): #,gui,yframe):
         FIXTURES = self.data
         gui = self.gui
@@ -557,7 +584,7 @@ class GUI_PATCH():
         i=0
         c=0
         r=0
-        def head(i,c,r):
+        def head(i,c,r,xframe=None):
             b = tk.Button(xframe,bg="grey", text="Z:{} ID".format(z+1),width=6,anchor="e")
             #b.bind("<Button>",Xevent(fix=fix,elem=b).cb)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
@@ -567,25 +594,25 @@ class GUI_PATCH():
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
             rgb  = "#aaa"
-            b = tk.Button(xframe,bg=rgb, text="TYPE",width=3)
+            b = tk.Button(xframe,bg=rgb, text="TYPE",width=8)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
-            b = tk.Button(xframe,bg=rgb, text="Uni",width=1)
+            b = tk.Button(xframe,bg=rgb, text="Uni",width=3)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
-            b = tk.Button(xframe,bg=rgb, text="DMX",width=1)
+            b = tk.Button(xframe,bg=rgb, text="DMX",width=2)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
-            b = tk.Button(xframe,bg=rgb, text="CH's",width=1)
+            b = tk.Button(xframe,bg=rgb, text="CH's",width=4)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
-            b = tk.Button(xframe,bg=rgb, text="from - to",width=1)
+            b = tk.Button(xframe,bg=rgb, text="from - to",width=8)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
-            b = tk.Button(xframe,bg=rgb, text="DMX-SUM",width=10)
+            b = tk.Button(xframe,bg=rgb, text="DMX-SUM",width=6)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
-            b = tk.Button(xframe,bg=rgb, text="TEST",width=1)
+            b = tk.Button(xframe,bg=rgb, text="TEST",width=4)
             b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
             b = tk.Button(xframe,bg=rgb, text="DMX Collision!",width=12)
@@ -611,9 +638,15 @@ class GUI_PATCH():
                 else:
                     dmx_collision[k] = 0
         z=0
+        print("F:H:",self._head,self._foot)
+        if self._head:
+            #l = tk.Label(self._head,text="llklk")
+            #l.pack()
+            head(0,0,0,xframe=self._head)
+
         for fix in FIXTURES.fixtures:
-            if z % 20 == 0:
-                i,c,r = head(i,c,r)
+            #if z % 20 == 0:
+            #    i,c,r = head(i,c,r,xframe=xframe)
             z+=1
             collision = []
             i+=1
@@ -752,6 +785,7 @@ class GUI_FixtureEditor():
         self.dmx=1
         self.univ=0
         self.elem=[]
+        self.pw = None
         self.header=[]
         self.data = data
         self.title = title
@@ -804,14 +838,14 @@ class GUI_FixtureEditor():
         self.b.pack(fill=None, side=tk.LEFT)
 
         self.b = tk.Button(self.frame,bg="lightblue",text="IMPORT", width=5)#,command=self.event) #bv.change_dmx)
-        self.b["command"] = self.import_fixture_list
+        self.b["command"] = self.open_fixture_list_import
         self.b.pack( side=tk.LEFT)
 
         self.b = tk.Button(self.frame,bg="lightblue",text="USER", width=5)#,command=self.event) #bv.change_dmx)
-        self.b["command"] = self.open_fixture_list
+        self.b["command"] = self.open_fixture_list_user
         self.b.pack( side=tk.LEFT)
         self.b = tk.Button(self.frame,bg="lightblue",text="GLOBAL", width=5)#,command=self.event) #bv.change_dmx)
-        self.b["command"] = self.open_fixture_list
+        self.b["command"] = self.open_fixture_list_global
         self.b.pack( side=tk.LEFT)
 
 
@@ -953,25 +987,19 @@ class GUI_FixtureEditor():
         print("save_fix",self,event)
         self.count_ch()
 
-    def import_fixture_list(self):
-        name = "FIXTURE-IMPORT"
-        line1="Fixture Import from SHOW"
-        line2="CHOOS to EDIT >> DEMO MODUS"
-        line3="CHOOS to EDIT >> DEMO MODUS"
-
-        cb = LOAD_FIXTURE(self,"IMPORT").cb
-        self.pw = _M.PopupList(name,width=600,cb=cb,left=_M._POS_LEFT+620,bg="#333")
-        frame = self.pw.sframe(line1=line1,line2=line2) #,line3=line3)
-        def cb(**args):
-            self._cb(args,name="import_fixture_list")
-            if self.pw:
-                self.pw.w.tk.destroy()
-            #self.load_EMPTY()
-            self.load_MH()
-        r=_M._import_fixture_list(frame,cb=cb,master=self,bg="#333")
 
-    def open_fixture_list(self):
-        name = "FIXTURE-LIB"
+    def open_fixture_list_global(self):
+        self.close_fixture_list()
+        self._open_fixture_list(mode="GLOBAL")
+    def open_fixture_list_import(self):
+        self.close_fixture_list()
+        self._open_fixture_list(mode="IMPORT")
+    def open_fixture_list_user(self):
+        self.close_fixture_list()
+        self._open_fixture_list(mode="USER")
+        
+    def _open_fixture_list(self,mode=""):
+        name = "FIXTURE-{}".format(mode)
         line1="Fixture Library"
         line2="CHOOS to EDIT >> DEMO MODUS"
         line3="CHOOS to EDIT >> DEMO MODUS"
@@ -981,12 +1009,18 @@ class GUI_FixtureEditor():
         frame = self.pw.sframe(line1=line1,line2=line2) #,line3=line3)
 
         def cb(**args):
+            print("open_fixture_list")
             self._cb(args,name="open_fixture_list") 
             if self.pw:
                 self.pw.w.tk.destroy()
             #self.load_EMPTY()
-            self.load_DIM()
-        r=_M._load_fixture_list(frame,cb=cb,master=self,bg="#333")
+            if mode == "IMPORT":
+                self.load_MH()
+            else:
+                self.load_DIM()
+
+        tmp = _M._LOAD_FIXTURE_LIST(mode=mode)
+        r=tmp.get(frame,cb=cb,master=self,bg="#333")
 
     def close_fixture_list(self):
         if self.pw: