فهرست منبع

refactor: Preset to execlib.EXEC, WindowContainer,win.._buffer..

micha 11 ماه پیش
والد
کامیت
9a6a5fd9cc
11فایلهای تغییر یافته به همراه589 افزوده شده و 648 حذف شده
  1. 87 522
      _LibreLightDesk.py
  2. 1 1
      lib/baselib.py
  3. 319 4
      lib/execlib.py
  4. 0 1
      lib/fixlib.py
  5. 2 2
      lib/jsbc.py
  6. 118 13
      lib/libtk.py
  7. 1 1
      lib/mytklib.py
  8. 19 22
      lib/tkevent.py
  9. 31 72
      tkgui/GUI.py
  10. 1 0
      tkgui/dialog.py
  11. 10 10
      tkgui/draw.py

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 87 - 522
_LibreLightDesk.py


+ 1 - 1
lib/baselib.py

@@ -277,7 +277,7 @@ def test():
         print(" - ",i)
 
     print("-- "*20)
-    xpath = SHOW_DIR + "/" + dl[0][1] +"/presets.sav"
+    xpath = SHOW_DIR + "/" + dl[0][1] +"/presets.sav" # exec.sav
     print(xpath)
     x= _read_sav_file(xpath)
     print("len.x",len(x))

+ 319 - 4
lib/execlib.py

@@ -1,14 +1,18 @@
 #/usr/bin/python3
 
+import copy
+import __main__ as MAIN
+from lib.cprint import cprint
+from collections import OrderedDict
 
-def reshape_preset(data ,value=None,xfade=0,flash=0,ptfade=0,DELAY=None):
+def reshape_exec(data ,value=None,xfade=0,flash=0,ptfade=0,DELAY=None):
 
     f=0 #fade
 
     out = []
     delay=0
     for row in data:
-        #cprint("reshape_preset in:",row)
+        #cprint("reshape_exec in:",row)
         line = {}
         line["DELAY"]=delay
         if type(value) is float:
@@ -63,11 +67,322 @@ def reshape_preset(data ,value=None,xfade=0,flash=0,ptfade=0,DELAY=None):
             line["FADE"] = f
         
         if 0:
-            cprint("reshape_preset j",line,color="red") 
-        #cprint("reshape_preset out:",line)
+            cprint("reshape_exec j",line,color="red") 
+        #cprint("reshape_exec out:",line)
         out.append(line)
 
         if DELAY:
             if DELAY._is():
                 delay+=DELAY.val()/100 #0.02
     return out
+
+
+import lib.baselib as baselib
+
+
+
+def EXEC_CFG_CHECKER(sdata):
+    "repair CFG  "
+    ok = 0
+    if "CFG" not in sdata:
+        sdata["CFG"] = OrderedDict()
+        ok += 1
+    if "FADE" not in sdata["CFG"]:
+        sdata["CFG"]["FADE"] = 4
+        ok += 1
+    if "DELAY" not in sdata["CFG"]:
+        sdata["CFG"]["DELAY"] = 0
+        ok += 1
+    if "BUTTON" not in sdata["CFG"]:
+        sdata["CFG"]["BUTTON"] = "GO"
+        ok += 1
+    if "HTP-MASTER" not in sdata["CFG"]:
+        sdata["CFG"]["HTP-MASTER"] = 100 #%
+        ok += 1
+    if "SIZE-MASTER" not in sdata["CFG"]:
+        sdata["CFG"]["SIZE-MASTER"] = 100 #%
+        ok += 1
+    if "SPEED-MASTER" not in sdata["CFG"]:
+        sdata["CFG"]["SPEED-MASTER"] = 100 #%
+        ok += 1
+    if "OFFSET-MASTER" not in sdata["CFG"]:
+        sdata["CFG"]["OFFSET-MASTER"] = 100 #%
+        ok += 1
+
+    #try:del sdata["CFG"]["SPEED-MASTER"] #= 100 #%
+    #except:pass
+
+    return ok
+
+
+class EXEC(): #Presets():
+    def __init__(self):
+        self.base = baselib.Base()
+        self._last_copy = None
+        self._last_move = None
+        self.fx_buffer = {}
+
+    def load_exec(self): 
+        filename="exec"
+        filename="presets" # preset.sav
+        d,l = self.base._load(filename)
+        for i in d:
+            sdata = d[i]
+            ok = EXEC_CFG_CHECKER(sdata)
+
+        self.val_exec = d
+        self.label_exec = l
+
+    def check_cfg(self,nr=None):
+        cprint("EXEC.check_cfg()",nr)#,color="red")
+        ok = 0
+        if nr is not None:
+            if nr in self.val_exec:
+                sdata = self.val_exec[nr]
+                ok += self._check_cfg(sdata)
+            else:
+                cprint("nr not in data ",nr,color="red")
+        else:
+            for nr in self.val_exec:
+                sdata = self.val_exec[nr]
+                ok += self._check_cfg(sdata)
+        return ok
+
+    def _check_cfg(self,sdata):
+        cprint("EXEC._check_cfg()")#,color="red")
+
+        ok = EXEC_CFG_CHECKER(sdata)
+
+        if ok:
+            cprint("REPAIR CFG's",ok,sdata["CFG"],color="red")
+        return ok
+        
+    def backup_exec(self,save_as="",new=0):
+        filename = "exec" # new
+        filename = "presets" # preset.sav
+        data   = self.val_exec
+        labels = self.label_exec
+        if new:
+            data  = [] #*512
+            labls = [""]*512
+        r=self.base._backup(filename,data,labels,save_as)
+        return r
+        
+
+    def get_cfg(self,nr):
+        cprint("EXEC.get_cfg()",nr)
+        self.check_cfg(nr)
+        if nr not in self.val_exec:
+            cprint("get_cfg",self,"error get_cfg no nr:",nr,color="red")
+            return {}
+        if "CFG" in self.val_exec[nr]:
+            return self.val_exec[nr]["CFG"]
+
+    def clean(self,nr):
+        
+        if nr not in self.val_exec:
+            self.val_exec[nr] = OrderedDict()
+            #self.val_exec[nr]["VALUE"] = 0
+            #self.val_exec[nr]["FX"] = ""
+
+
+        sdata = self.val_exec[nr]
+        for fix in sdata:
+            #print("exec.clear()",nr,fix,sdata[fix])
+            for attr in sdata[fix]:
+                row = sdata[fix][attr]
+                if fix == "CFG":
+                    continue
+
+                if "VALUE" not in row:
+                    row["VALUE"] = None
+                if "FX" not in row:
+                    row["FX"] = "" 
+                if "FX2" not in row:
+                    row["FX2"] = OrderedDict()
+                elif row["FX2"]:
+                    for k in ["SIZE","SPEED","START","OFFSET"]:
+                        row["FX2"][k] = int( row["FX2"][k] )
+                    row["FX"] = "" 
+
+
+                if "FX" in row and row["FX"] and not row["FX2"]: # rebuild old FX to Dict-FX2
+                    #"off:0:0:0:16909:-:"
+                    x = row["FX"].split(":")
+                    cprint("-fx",x,len(x))
+                    #'FX2': {'TYPE': 'sinus', 'SIZE': 200, 'SPEED': 30, 'START': 0, 'OFFSET': 2805, 'BASE': '-'}}
+                    if len(x) >= 6:
+                        row["FX2"]["TYPE"] = x[0] 
+                        row["FX2"]["SIZE"] =  int(x[1])
+                        row["FX2"]["SPEED"] = int(x[2]) 
+                        row["FX2"]["START"] = int(x[3]) 
+                        row["FX2"]["OFFSET"] = int(x[4]) 
+                        row["FX2"]["BASE"] = x[5] 
+                    row["FXOLD"] = row["FX"]
+                    row["FX"] = ""
+                #cprint("exec.clear()",nr,fix,row)
+
+            
+    def get_raw_map(self,nr):
+        self.clean(nr)
+
+        cprint("get_raw_map",nr)
+        sdata = self.val_exec[nr]
+        cmd = ""
+        out = []
+        dmx=-1
+        for fix in sdata:
+            if fix == "CFG":
+                #print("CFG",nr,sdata[fix])
+                continue
+
+            for attr in sdata[fix]:
+                x = {}
+                #print("RAW",attr)
+                x["FIX"]   = fix
+                x["ATTR"]  = attr
+
+                x["VALUE"] = sdata[fix][attr]["VALUE"]
+                x["FX"]    = sdata[fix][attr]["FX"]
+                x["FX2"]    = sdata[fix][attr]["FX2"]
+                #x["DMX"]  = sdata[fix][attr]["NR"] 
+
+                out.append(x)
+        return out
+
+    def get_btn_txt(self,nr):
+        sdata=self.val_exec[nr]
+        BTN="go"
+        if "CFG" in sdata:
+            if "BUTTON" in sdata["CFG"]:
+                BTN = sdata["CFG"]["BUTTON"]
+        _label = self.label_exec[nr] # = label
+        #txt=str(nr+1)+":"+str(BTN)+":"+str(len(sdata)-1)+"\n"+_label
+        #txt=str(nr+1)+" "+str(BTN)+" "+str(len(sdata)-1)+"\n"+_label
+        txt="{} {} {}\n{}".format(nr+1,BTN,len(sdata)-1,_label)
+        cprint("get_btn_txt",nr,[txt])
+        return txt
+
+    def _btn_cfg(self,nr,txt=None):
+        if nr not in self.val_exec:
+            return ""
+        if "CFG" not in self.val_exec[nr]:
+            self.val_exec[nr]["CFG"] = OrderedDict()
+        return self.val_exec[nr]["CFG"]
+
+    def btn_cfg(self,nr,txt=None):
+        if nr not in self.val_exec:
+            return ""
+        if "CFG" not in self.val_exec[nr]:
+            self.val_exec[nr]["CFG"] = OrderedDict()
+        if "BUTTON" not in self.val_exec[nr]["CFG"]:
+            self.val_exec[nr]["CFG"]["BUTTON"] = ""
+
+        if type(txt) is str:
+            self.val_exec[nr]["CFG"]["BUTTON"] = txt
+        if self.val_exec[nr]["CFG"]["BUTTON"] is None:
+            self.val_exec[nr]["CFG"]["BUTTON"] = ""
+
+        MAIN.master._refresh_exec(nr=nr)
+        cprint("EEE", self.val_exec[nr]["CFG"]["BUTTON"] )
+        return self.val_exec[nr]["CFG"]["BUTTON"] 
+
+    def label(self,nr,txt=None):
+        if nr not in self.label_exec:
+            return ""
+        if type(txt) is str:
+            self.label_exec[nr] = txt
+            cprint("set label",nr,[txt])
+        cprint("??? ?? set label",nr,[txt])
+        return self.label_exec[nr] 
+
+    def clear_move(self):
+        cprint("EXEC.clear_move()",end=" ")
+        self.clear_copy()
+        
+    def clear_copy(self):
+        cprint("EXEC.clear_copy()",end=" ")
+        if self._last_copy is not None:
+            cprint("=OK=",color="red")
+            self._last_copy = None
+        else:
+            cprint("=NONE=",color="green")
+
+    def copy(self,nr,overwrite=1):
+        cprint("EXEC._copy",nr,"last",self._last_copy)
+        if nr >= 0:
+            if self._last_copy is not None:
+                if MAIN.modes.val("COPY"):
+                    MAIN.modes.val("COPY",3)
+                ok = self._copy(self._last_copy,nr,overwrite=overwrite)
+                return ok #ok
+            else:
+                if MAIN.modes.val("COPY"):
+                    MAIN.modes.val("COPY",2)
+                self._last_copy = nr
+                cprint("EXEC.copy START ",color="red")
+                return 0
+        return 1 # on error reset move
+    def _copy(self,nr_from,nr_to,overwrite=1):
+        cprint("EXEC._copy",nr_from,"to",nr_to)
+        self.check_cfg(nr_from)
+        if type(self._last_copy) is None:
+            cprint("EXEC._copy last nr is None",color="red")
+            return 0
+        cprint("------ EXEC._copy", nr_from in self.val_exec , nr_to in self.val_exec)
+        if nr_from in self.val_exec and nr_to in self.val_exec:
+            fdata = self.val_exec[nr_from]
+            tdata = self.val_exec[nr_to]
+            #cprint(fdata)
+            flabel = self.label_exec[nr_from]
+            tlabel = self.label_exec[nr_to]
+            self.val_exec[nr_to] = copy.deepcopy(fdata)
+            self.label_exec[nr_to] = flabel
+            if not overwrite: #default
+                cprint("overwrite",overwrite)
+                self.val_exec[nr_from] = copy.deepcopy(tdata)
+                self.label_exec[nr_from] = tlabel
+            #self.label_exec[nr_from] = "MOVE"
+            self.clear_copy()
+            cprint("EXEC.copy OK",color="green")
+            return 1
+
+    def move(self,nr):
+        cprint("EXEC.move",self._last_copy,"to",nr)
+        if nr >= 0: 
+            last = self._last_copy
+
+            if MAIN.modes.val("MOVE"):
+                MAIN.modes.val("MOVE",2)
+            ok= self.copy(nr,overwrite=0)
+            if ok and last >= 0:
+                if MAIN.modes.val("MOVE"):
+                    MAIN.modes.val("MOVE",3)
+                cprint("EXEC.move OK",color="red")
+                #self.delete(last)
+                return ok,nr,last #ok
+            
+        return 0,nr,last # on error reset move
+    def delete(self,nr):
+        cprint("EXEC.delete",nr)
+        ok=0
+        if nr in self.val_exec:
+            self.val_exec[nr] = OrderedDict()
+            self.label_exec[nr] = "-"
+            ok = 1
+        self.check_cfg(nr)
+        return ok
+
+    def rec(self,nr,data,arg=""):
+        cprint("rec",self,"rec()",len(data),arg)
+        self.check_cfg(nr)
+        self._check_cfg(data) #by ref
+
+        odata=self.val_exec[nr]
+        #print("odata",odata)
+        if "CFG" in odata:
+            if "BUTTON" in odata["CFG"]:
+                data["CFG"]["BUTTON"] = odata["CFG"]["BUTTON"]  
+        self.val_exec[nr] = data
+        return 1
+           

+ 0 - 1
lib/fixlib.py

@@ -334,7 +334,6 @@ class Fixtures():
             sdata = FIXTURE_CHECK_SDATA(i,sdata)
 
             self.fixtures[str(i)] = sdata
-        #PRESETS.label_presets = l
         self._re_sort()
         self.fx_off("all")
 

+ 2 - 2
lib/jsbc.py

@@ -83,9 +83,9 @@ def JSCB(x,sock=None):
                         if "EXEC" in msg:
                             exec_nr = int(msg["EXEC"])
                         if val >= 0 and exec_nr > 0:
-                            print("PRESET_GOOO",exec_nr,val)
+                            print("EXEC_GOOO",exec_nr,val)
                             s = time.time()
-                            MAIN.master.preset_go(exec_nr-1,xfade=None,val=val)
+                            MAIN.master.exec_go(exec_nr-1,xfade=None,val=val)
                             e = time.time()
                             #print("time:",e-s,e)
                             #print("TIME:",int((e-s)*1000),int(e*10)-1_703_800_000)

+ 118 - 13
lib/libtk.py

@@ -56,6 +56,69 @@ except Exception as e:
     cprint("Exception:",e)
 
 
+
+class Event():
+    def __init__(self,name):
+        self.name=name
+        #print("init",self)
+    def event(self,event):
+        print(self.name,event)
+
+class scroll():
+    def __init__(self,canvas):
+        self.canvas=canvas
+    def config(self,event):
+        canvas = self.canvas
+        canvas.configure(scrollregion=canvas.bbox("all"))#,width=400,height=200)
+
+
+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 == "":
+        bg="orange"
+    canvas["bg"] = bg # "black" #"green"
+    bframe=tk.Frame(canvas,width=width,height=height,relief=tk.GROOVE)
+    bframe["bg"] = "blue"
+    scrollbar=tk.Scrollbar(aframe,orient="vertical",command=canvas.yview,width=20)
+    canvas.configure(yscrollcommand=scrollbar.set)
+
+    scrollbar.pack(side="right",fill="y")
+    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
+
+
 def frame_of_show_list(frame,cb=None):
     c=0
     r=0
@@ -154,14 +217,14 @@ class DummyCallback():
     def cb(self,event=None):
         cprint("DummyCallback.cb",[self.name,event])
 
-class Window():
+class WindowContainer():
     def __init__(self,args): #title="title",master=0,width=100,height=100,left=None,top=None,exit=0,cb=None,resize=1):
         global MAIN #lf_nr
         self.args = {"title":"title","master":0,"width":100,"height":100,"left":None,"top":None,"exit":0,"cb":None,"resize":1}
         self.args.update(args)
         
-        cprint("Window.init()",self.args["title"],color="yellow")
-        #cprint("Window.init()",id(self.args),color="yellow")
+        cprint("WindowContainer.init()",self.args["title"],color="yellow")
+        #cprint("WindowContainer.init()",id(self.args),color="yellow")
         #cprint("  ",self.args,color="yellow")
 
         ico_path="./icon/"
@@ -183,7 +246,7 @@ class Window():
             try:
                 self.tk.iconphoto(False, tk.PhotoImage(file=ico_path+"main.png"))
             except Exception as e:
-                cprint(" Exception GUIWindow.__init__",e)
+                cprint(" Exception GUIWindowContainer.__init__",e)
         else:
             # addtional WINDOW
             self.tk = tkinter.Toplevel()
@@ -236,7 +299,7 @@ class Window():
             tkinter.Tk.update_idletasks(MAIN.gui_menu_gui.tk)
 
     def close(self,event=None):
-        cprint("Window.close",self.args["title"],color="red")
+        cprint("WindowContainer.close",self.args["title"],color="red")
         #cprint("  ",self.title)
         #cprint("  ",self.args)
 
@@ -246,7 +309,7 @@ class Window():
         try:
             self.tk.destroy()
         except Exception as e:
-            cprint("Window.close err",e,color="red")
+            cprint("WindowContainer.close err",e,color="red")
 
     def title(self,title=None):
         if title is None:
@@ -340,7 +403,7 @@ class Window():
                 elif "m" == event.keysym:
                     x=MAIN.modes.val("MOVE",1)
                     if not x:
-                        MAIN.PRESETS.clear_move()
+                        MAIN.EXEC.clear_move()
                 elif "s" == event.keysym:
                     MAIN.modes.val("SELECT",1)
             elif event.keysym in ["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]:
@@ -348,14 +411,14 @@ class Window():
                 nr = nr-1+81  
                 cprint("F-KEY",value,nr,event.keysym)
                 #print(event)
-                MAIN.master.preset_go(nr-1,xfade=None,val=value)
+                MAIN.master.exec_go(nr-1,xfade=None,val=value)
             elif event.keysym in ["1","2","3","4","5","6","7","8","9","0"]:
                 nr = int( event.keysym)
                 if nr == 0:
                     nr = 10
                 nr = nr-1+161  
                 cprint("NUM-KEY",value,nr)
-                MAIN.master.preset_go(nr-1,xfade=None,val=value)
+                MAIN.master.exec_go(nr-1,xfade=None,val=value)
             elif "numbersign" == event.keysym and value: # is char "#"
                 cprint("numbersign !!")
                 MAIN.save_show()
@@ -373,12 +436,54 @@ class Window():
                 CONSOLE.fx_off("all")
                 CONSOLE.flash_off("all")
             elif "Delete" == event.keysym:
-                #MAIN.PRESETS.delete(nr)
+                #MAIN.EXEC.delete(nr)
                 if value:
                     MAIN.modes.val("DEL",1)
 
         #cprint("oipo "*10,round(int(time.time()-sstart)*1000,2))
  
+class window_create_buffer():
+    # könnte auch direkt im WindowContainer object eingebaut werden !?
+
+    def __init__(self,args,cls,data,cb_ok=None,scroll=0,gui=None):
+        self.args   = args.copy()
+        self.cls    = cls
+        self.cb_ok  = cb_ok
+        self.data   = data
+        self.scroll = scroll
+        self.gui    = gui
+
+    def create(self,hidde=0):
+
+        obj = None
+        w = WindowContainer(self.args)
+        out = []
+        f = None
+        h = None
+
+        if self.scroll:
+            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()
+        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
 
 class PopupList():
     def __init__(self,name="<NAME>",master=0,width=400,height=450,exit=1,left=_POS_LEFT+400,top=_POS_TOP+100,cb=None,bg="black"):
@@ -388,9 +493,9 @@ class PopupList():
         self.cb = cb
         if cb is None: 
             cb = DummyCallback #("load_show_list.cb")
-        #w = Window(self.name,master=master,width=width,height=height,exit=exit,left=left,top=top,cb=cb)
+        #w = WindowContainer(self.name,master=master,width=width,height=height,exit=exit,left=left,top=top,cb=cb)
         args = {"title":self.name,"master":master,"width":width,"height":height,"exit":exit,"left":left,"top":top,"cb":cb}
-        w = Window(args)
+        w = WindowContainer(args)
         self.w = w
         w.show()
     def sframe(self,line1="<line1>",line2="<line2>",data=[]):
@@ -424,7 +529,7 @@ class PopupList():
         #frame = tk.Frame(xframe,heigh=2800)
         #frame.pack(fill=tk.BOTH,expand=1, side=tk.TOP)
 
-        frame = MAIN.ScrollFrame(xframe,width=300,height=500,bd=1,bg=self.bg)
+        frame = ScrollFrame(xframe,width=300,height=500,bd=1,bg=self.bg)
         #frame.pack(side="left") #fill=tk.BOTH,expand=1, side=tk.TOP) 
         #self.frame = frame
         self.w.tk.state(newstate='normal')

+ 1 - 1
lib/mytklib.py

@@ -144,7 +144,7 @@ class MiniButton:
     def config(self,**args):
         self._configure(**args)
     def bind(self,etype="<Button>",cb=None):
-        #bb.bind("<ButtonRelease>",MAIN.tk_event(fix=0,elem=b,attr=k,data=self,mode="PRESET").cb)
+        #bb.bind("<ButtonRelease>",MAIN.tk_event(fix=0,elem=b,attr=k,data=self,mode="EXEC").cb)
         if cb:
             self.bb.bind(etype,cb)
     def grid(self,row=0, column=0, sticky=""):

+ 19 - 22
lib/tkevent.py

@@ -198,7 +198,7 @@ class tk_event():
         elif self.attr == "SAVE":
             MAIN.modes.val(self.attr,1)
             MAIN.save_show()
-            #MAIN.PRESETS.backup_presets()
+            #MAIN.EXEC.backup_exec()
             #MAIN.FIXTURES.backup_patch()
             #time.sleep(1)
             MAIN.modes.val(self.attr,0)
@@ -224,9 +224,8 @@ class tk_event():
 
 
     def encoder(self,event):
-        global _shift_key
         cprint("tk_event","ENC",self.fix,self.attr,self.mode)
-        cprint("SHIFT_KEY",_shift_key,"??????????")
+        cprint("SHIFT_KEY",MAIN._shift_key,"??????????")
 
         if self.mode == "ENCODER":
             if self._encoder(event):
@@ -245,22 +244,21 @@ class tk_event():
                 MAIN.refresher_fix.reset() # = Refresher()
 
     def _encoder(self,event):
-        global _shift_key
 
         cprint("-- tk_event","_ENC",self.fix,self.attr,self.mode)
-        cprint("-- SHIFT_KEY",_shift_key,"??????????")
+        cprint("-- SHIFT_KEY",MAIN._shift_key,"??????????")
         val=""
         if event.num == 1:
             val ="click"
         elif event.num == 4:
             val ="++"
-            if _shift_key:
+            if MAIN._shift_key:
                 val = "+"
         elif event.num == 5:
             val ="--"
-            if _shift_key:
+            if MAIN._shift_key:
                 val = "-"
-        #print("SHIFT",val,_shift_key)
+        #print("SHIFT",val,MAIN._shift_key)
         if val:
             MAIN.FIXTURES.encoder(fix=self.fix,attr=self.attr,xval=val)
             return 1       
@@ -271,8 +269,7 @@ class tk_event():
         cprint("EVENT cb",self.attr,self.mode,event,color='yellow')
         cprint(["type",event.type,"num",event.num])
 
-        global INIT_OK
-        INIT_OK = 1
+        MAIN.INIT_OK = 1
         try:
             change = 0
             if "keysym" in dir(event):
@@ -320,7 +317,7 @@ class tk_event():
                     x=self.data.entry3.get()
                     #client.send(x)
 
-            elif self.mode == "PRESET":
+            elif self.mode == "EXEC":
                 nr = self.attr #int(self.attr.split(":")[1])-1
 
                 if event.num == 3: # right click for testing
@@ -331,23 +328,23 @@ class tk_event():
                 if event.num == 1:
                     if str(event.type) == '4': #4 ButtonPress
                         if MAIN.modes.val("REC"):
-                            self.data.preset_rec(nr)
+                            self.data.exec_rec(nr)
                             MAIN.modes.val("REC",0)
                             time.sleep(0.05)
                             MAIN.master._refresh_exec(nr=nr)
                         elif MAIN.modes.val("DEL"):
-                            ok=MAIN.PRESETS.delete(nr)
+                            ok=MAIN.EXEC.delete(nr)
                             if ok:
                                 MAIN.modes.val("DEL",0)
                                 #MAIN.master.refresh_exec()
                                 MAIN.master._refresh_exec(nr=nr)
                         elif MAIN.modes.val("COPY"):
-                            ok=MAIN.PRESETS.copy(nr)
+                            ok=MAIN.EXEC.copy(nr)
                             if ok:
                                 MAIN.modes.val("COPY",0)
                                 MAIN.master._refresh_exec(nr=nr)
                         elif MAIN.modes.val("MOVE"):
-                            ok,cnr,bnr=MAIN.PRESETS.move(nr)
+                            ok,cnr,bnr=MAIN.EXEC.move(nr)
                             if ok:
                                 #MAIN.modes.val("MOVE",0) # keep MOVE on
                                 MAIN.master._refresh_exec(nr=nr)
@@ -361,18 +358,18 @@ class tk_event():
 
                         elif MAIN.modes.val("EDIT"):
                             MAIN.FIXTURES.clear()
-                            self.data.preset_select(nr)
-                            self.data.preset_go(nr,xfade=0,event=event,val=255,button="go")
+                            self.data.exec_select(nr)
+                            self.data.exec_go(nr,xfade=0,event=event,val=255,button="go")
                             MAIN.modes.val("EDIT", 0)
                             MAIN.master.refresh_fix()
                             MAIN.refresher_fix.reset() # = Refresher()
 
                         elif MAIN.modes.val("SELECT"):
-                            self.data.preset_select(nr)
+                            self.data.exec_select(nr)
                         else:
-                            self.data.preset_go(nr,event=event,val=255)
+                            self.data.exec_go(nr,event=event,val=255)
                     else:
-                        self.data.preset_go(nr,xfade=0,event=event,val=0)
+                        self.data.exec_go(nr,xfade=0,event=event,val=0)
                         #cprint(" == "*10)
                         MAIN.master.refresh_fix()
                         MAIN.refresher_fix.reset() # = Refresher()
@@ -381,9 +378,9 @@ class tk_event():
                 if event.num == 3:
                     if not MAIN.modes.val("REC"):
                         if str(event.type) == '4': #4 ButtonPress
-                            self.data.preset_go(nr,xfade=0,ptfade=0,event=event,val=255)
+                            self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=255)
                         else:
-                            self.data.preset_go(nr,xfade=0,ptfade=0,event=event,val=0)
+                            self.data.exec_go(nr,xfade=0,ptfade=0,event=event,val=0)
                         
                 cprint()
                 return 0

+ 31 - 72
tkgui/GUI.py

@@ -16,25 +16,15 @@ import __main__ as MAIN
 
 from lib.cprint import *
 
+
 import lib.mytklib as mytklib
-import lib.fixlib as fixlib
+import lib.fixlib  as fixlib
 import lib.baselib as baselib
-import lib.libtk as libtk
+import lib.libtk   as libtk
+import lib.tkevent as tkevent
 
-class Event():
-    def __init__(self,name):
-        self.name=name
-        #print("init",self)
-    def event(self,event):
-        print(self.name,event)
         
 
-class scroll():
-    def __init__(self,canvas):
-        self.canvas=canvas
-    def config(self,event):
-        canvas = self.canvas
-        canvas.configure(scrollregion=canvas.bbox("all"))#,width=400,height=200)
 
 
 class LOAD_FIXTURE():
@@ -100,9 +90,9 @@ class _TableFrame():
         self.canvas.pack(side="left",expand=1,fill="both")
         self.canvas.create_window((0,0),window=self.bframe,anchor='nw')
         self.bframe.bind("<Configure>",scroll(self.canvas).config)
-        self.canvas.bind("<Button>",Event("XXX").event)
-        self.canvas.bind("<Key>",Event("XXX").event)
-        self.canvas.bind("<KeyRelease>",Event("XXX").event)
+        self.canvas.bind("<Button>",libtk.Event("XXX").event)
+        self.canvas.bind("<Key>",libtk.Event("XXX").event)
+        self.canvas.bind("<KeyRelease>",libtk.Event("XXX").event)
 
         
         #self.bframe=tk.Frame(self.frame,relief=tk.GROOVE,bg="magenta")#,width=width,height=height,bd=bd)
@@ -178,51 +168,6 @@ class _TableFrame():
         return self.bframe
 
 
-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 == "":
-        bg="orange"
-    canvas["bg"] = bg # "black" #"green"
-    bframe=tk.Frame(canvas,width=width,height=height,relief=tk.GROOVE)
-    bframe["bg"] = "blue"
-    scrollbar=tk.Scrollbar(aframe,orient="vertical",command=canvas.yview,width=20)
-    canvas.configure(yscrollcommand=scrollbar.set)
-
-    scrollbar.pack(side="right",fill="y")
-    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():
     def __init__(self):
@@ -811,6 +756,22 @@ class GUI_PATCH():
             r+=1
 
 
+class BaseCallback():
+    def __init__(self,cb=None,args={}):
+        self._cb=cb
+        self.args = args
+
+    def cb(self,**args):
+        print("BaseCallback.cb()")
+        print("  ",self.args)
+        print("  ",self._cb)
+        if self._cb:
+            if self.args:
+                self._cb(args=self.args) 
+            else:
+                self._cb() 
+
+
 
 
 def GUI_LOAD_FIXTURE_LIST(frame,data={"EMPTY":"None"},cb=None,bg="black"):
@@ -863,7 +824,7 @@ def GUI_LOAD_FIXTURE_LIST(frame,data={"EMPTY":"None"},cb=None,bg="black"):
             if c == 3:
                 bg="grey"
                 dbg="grey"
-                _cb2 = MAIN.BaseCallback(cb=cb,args={"key":k,"val":v,"data":row}).cb
+                _cb2 = BaseCallback(cb=cb,args={"key":k,"val":v,"data":row}).cb
                 b = tk.Button(frame,text=v,anchor="w",height=1,bg=bg,command=_cb2)
             else: 
                 b = tk.Button(frame,text=v,anchor="w",bg=dbg,relief="flat",height=1)
@@ -1030,7 +991,7 @@ class GUI_FixtureEditor():
         self.b_info = tk.Label(self.frame,bg="#fff",text="") #,font=self.font8 )
         self.b_info.pack(fill=None, side=tk.LEFT)
         # DATA
-        self.frame = ScrollFrame(root,bg="#003",width=2000 ,height=1000,bd=2) # fader frame
+        self.frame = libtk.ScrollFrame(root,bg="#003",width=2000 ,height=1000,bd=2) # fader frame
 
 
         self.r=0
@@ -1647,7 +1608,7 @@ class ELEM_FADER():
                 return None
             txt = data["Value"]
             print(self,"set_mode._cb()",txt)
-            #w = MAIN.Window("config",master=1,width=200,height=140,left=L1,top=TOP)
+            #w = MAIN.WindowContainer("config",master=1,width=200,height=140,left=L1,top=TOP)
             #w.pack()
             self._set_mode(txt)
             #w.show()
@@ -1806,7 +1767,7 @@ class EXEC_FADER():
                 return None
             txt = data["Value"]
             print(self,"set_mode._cb()",txt)
-            #w = MAIN.Window("config",master=1,width=200,height=140,left=L1,top=TOP)
+            #w = MAIN.WindowContainer("config",master=1,width=200,height=140,left=L1,top=TOP)
             #w.pack()
             self._set_mode(txt)
             #w.show()
@@ -1828,12 +1789,10 @@ class EXEC_FADER():
         nr = self.id+80
         if event.state > 0:
             value = 0
-            #PRESETS.go(self.id+80)
-            MAIN.master.preset_go(nr-1,xfade=None,val=value)
+            MAIN.master.exec_go(nr-1,xfade=None,val=value)
         else:
             value = 1
-            #PRESETS.go(self.id+80)
-            MAIN.master.preset_go(nr-1,xfade=None,val=value)
+            MAIN.master.exec_go(nr-1,xfade=None,val=value)
 
     def pack(self,init=None,from_=255,to=0,**args):
         width=11
@@ -1860,8 +1819,8 @@ class EXEC_FADER():
             #b = self.b
             #k = ""
             #gui = MAIN.master
-            #self.b.bind("<Button>",tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
-            #self.b.bind("<ButtonRelease>",tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
+            #self.b.bind("<Button>",tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="EXEC").cb)
+            #self.b.bind("<ButtonRelease>",tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="EXEC").cb)
             self.attr=self.b
             self.b.pack(fill=tk.BOTH, side=tk.TOP)
             self.elem.append(self.b)

+ 1 - 0
tkgui/dialog.py

@@ -4,6 +4,7 @@ import os
 import time
 
 import tkinter
+import tkinter.simpledialog
 tk = tkinter 
 from idlelib.tooltip import Hovertip
 

+ 10 - 10
tkgui/draw.py

@@ -88,11 +88,11 @@ def draw_command(gui,xframe,data):
             c=0
             r+=1
 
-def draw_exec(gui,xframe,PRESETS):
-    draw_preset(gui,xframe,PRESETS)
+def draw_exec(gui,xframe,EXEC):
+    draw_exec(gui,xframe,EXEC)
 
 
-def draw_preset(gui,xframe,PRESETS):
+def draw_exec(gui,xframe,EXEC):
     
     i=0
     c=0
@@ -102,9 +102,9 @@ def draw_preset(gui,xframe,PRESETS):
     frame = tk.Frame(root,bg="black")
     frame.pack(fill=tk.X, side=tk.TOP)
 
-    gui.elem_presets = {}
+    gui.elem_exec = {}
     i=0
-    for k in PRESETS.val_presets:
+    for k in EXEC.val_exec:
         if i%(10*8)==0 or i ==0:
             c=0
             b = tk.Canvas(frame,bg="black", height=4,bd=0,width=6,highlightthickness=0) #,bd="black")
@@ -125,7 +125,7 @@ def draw_preset(gui,xframe,PRESETS):
         v=0
         label = ""
 
-        sdata=PRESETS.val_presets[k]
+        sdata=EXEC.val_exec[k]
         BTN="go"
         if "CFG" in sdata:#["BUTTON"] = "GO"
             if "BUTTON" in sdata["CFG"]:
@@ -136,11 +136,11 @@ def draw_preset(gui,xframe,PRESETS):
 
         b = mytklib.ExecButton(frame,text=txt)
 
-        b.bind("<Button>",       tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
-        b.bind("<ButtonRelease>",tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb)
+        b.bind("<Button>",       tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="EXEC").cb)
+        b.bind("<ButtonRelease>",tkevent.tk_event(fix=0,elem=b,attr=k,data=gui,mode="EXEC").cb)
         
-        if k not in gui.elem_presets:
-            gui.elem_presets[k] = b
+        if k not in gui.elem_exec:
+            gui.elem_exec[k] = b
         b.grid(row=r, column=c, sticky=tk.W+tk.E)
 
         b.config(text="xx")

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است