|  | @@ -195,8 +195,8 @@ class _FadeTime():
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  FADE = _FadeTime()  #2 #0.1 #1.13
 | 
	
		
			
				|  |  |  fx_move_prm = {"SIZE":20,"SPEED":100,"OFFSET":50,"BASE":"-","START":0}
 | 
	
		
			
				|  |  | -fx_prm = {"SIZE":200,"SPEED":30,"OFFSET":255,"BASE":"-","START":0,"MODE":0,"MO":0,"DIR":1,"WING":2}
 | 
	
		
			
				|  |  | -fx_modes = [":RED",":GREEN",":BLUE",":MAG",":YELLOW",":CYAN"]
 | 
	
		
			
				|  |  | +fx_prm = {"SIZE":200,"SPEED":30,"OFFSET":255,"BASE":"-","START":0,"MODE":0,"MO":0,"DIR":1,"INVERT":0,"WING":2,"WIDTH":25}
 | 
	
		
			
				|  |  | +fx_modes = ["RED","GREEN","BLUE","MAG","YELLOW","CYAN"]
 | 
	
		
			
				|  |  |  fx_mo = ["sinus","on","on2","bump","bump2","fade","cosinus"]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def build_cmd(dmx,val,args=[],flash=0,xpfx="",attr=""):
 | 
	
	
		
			
				|  | @@ -437,7 +437,7 @@ class Xevent():
 | 
	
		
			
				|  |  |              fx_prm["MODE"] += 1
 | 
	
		
			
				|  |  |              if fx_prm["MODE"] > len(fx_modes):
 | 
	
		
			
				|  |  |                  fx_prm["MODE"]=0
 | 
	
		
			
				|  |  | -            txt = "FX:"+fx_modes[fx_prm["MODE"]]
 | 
	
		
			
				|  |  | +            txt = "FX:\n"+fx_modes[fx_prm["MODE"]]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              master.elem_fx_commands["FX:RED"]["text"] = txt
 | 
	
		
			
				|  |  |          elif event.num == 5:
 | 
	
	
		
			
				|  | @@ -446,7 +446,7 @@ class Xevent():
 | 
	
		
			
				|  |  |              fx_prm["MODE"] -= 1
 | 
	
		
			
				|  |  |              if fx_prm["MODE"] < 0:
 | 
	
		
			
				|  |  |                  fx_prm["MODE"]= len(fx_modes)-1
 | 
	
		
			
				|  |  | -            txt = "FX:"+fx_modes[fx_prm["MODE"]]
 | 
	
		
			
				|  |  | +            txt = "FX:\n"+fx_modes[fx_prm["MODE"]]
 | 
	
		
			
				|  |  |              master.elem_fx_commands["FX:RED"]["text"] = txt
 | 
	
		
			
				|  |  |          elif event.num == 1:
 | 
	
		
			
				|  |  |              cmd = ""
 | 
	
	
		
			
				|  | @@ -466,6 +466,9 @@ class Xevent():
 | 
	
		
			
				|  |  |              if fx_prm["DIR"] < 0:
 | 
	
		
			
				|  |  |                  xfixtures = xfixtures[::-1]
 | 
	
		
			
				|  |  |                  x=-1
 | 
	
		
			
				|  |  | +            if not xfixtures:
 | 
	
		
			
				|  |  | +                cprint("470 fx() ... init no fixture selected",color="red")
 | 
	
		
			
				|  |  | +                return 0
 | 
	
		
			
				|  |  |              wings = []
 | 
	
		
			
				|  |  |              if fx_prm["WING"]:
 | 
	
		
			
				|  |  |                  l = len(xfixtures)
 | 
	
	
		
			
				|  | @@ -492,7 +495,10 @@ class Xevent():
 | 
	
		
			
				|  |  |                  print("wing",wing)
 | 
	
		
			
				|  |  |                  wlen = len(wing)
 | 
	
		
			
				|  |  |                  coffset= 0 # 1024/wlen * (offset/255)
 | 
	
		
			
				|  |  | -                offset = 0
 | 
	
		
			
				|  |  | +                if fx_prm["DIR"]:
 | 
	
		
			
				|  |  | +                    offset = 0
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    offset = 1024
 | 
	
		
			
				|  |  |                  for fix in wing:
 | 
	
		
			
				|  |  |                      data = FIXTURES.fixtures[fix]
 | 
	
		
			
				|  |  |                      #print( "ADD FX",fix)
 | 
	
	
		
			
				|  | @@ -509,6 +515,8 @@ class Xevent():
 | 
	
		
			
				|  |  |                          cspeed = fx_prm["SPEED"]
 | 
	
		
			
				|  |  |                          cstart = fx_prm["START"]
 | 
	
		
			
				|  |  |                          cbase  = fx_prm["BASE"]
 | 
	
		
			
				|  |  | +                        width  = fx_prm["WIDTH"]
 | 
	
		
			
				|  |  | +                        invert = fx_prm["INVERT"]
 | 
	
		
			
				|  |  |                          #cstart = start
 | 
	
		
			
				|  |  |                          coffset= round(offset,1)
 | 
	
		
			
				|  |  |                          #cbase  = base
 | 
	
	
		
			
				|  | @@ -575,7 +583,7 @@ class Xevent():
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                  ffxb= fx_mo[fx_prm["MO"]] 
 | 
	
		
			
				|  |  |                                  ffx= "off" #fx_mo[fx_prm["MO"]] 
 | 
	
		
			
				|  |  | -                                if ":RED" in fx_modes[fx_prm["MODE"]]:#
 | 
	
		
			
				|  |  | +                                if "RED" in fx_modes[fx_prm["MODE"]]:#
 | 
	
		
			
				|  |  |                                      base="-"
 | 
	
		
			
				|  |  |                                      if attr == "RED":
 | 
	
		
			
				|  |  |                                          #coffset=0
 | 
	
	
		
			
				|  | @@ -585,11 +593,11 @@ class Xevent():
 | 
	
		
			
				|  |  |                                          fx = ffxb# "off"
 | 
	
		
			
				|  |  |                                      if attr == "BLUE":
 | 
	
		
			
				|  |  |                                          fx =  ffxb#"off"
 | 
	
		
			
				|  |  | -                                elif ":GREEN" in fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#in self.attr:
 | 
	
		
			
				|  |  | +                                elif "GREEN" in fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#in self.attr:
 | 
	
		
			
				|  |  |                                      base="-"
 | 
	
		
			
				|  |  |                                      if attr == "RED":
 | 
	
		
			
				|  |  |                                          fx =  ffxb#"off" 
 | 
	
		
			
				|  |  | -                                elif ":GREEN" in fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#in self.attr:
 | 
	
		
			
				|  |  | +                                elif "GREEN" in fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#in self.attr:
 | 
	
		
			
				|  |  |                                      if attr == "GREEN":
 | 
	
		
			
				|  |  |                                          fx = ffxb# "off"
 | 
	
		
			
				|  |  |                                          #cspeed=0
 | 
	
	
		
			
				|  | @@ -597,7 +605,7 @@ class Xevent():
 | 
	
		
			
				|  |  |                                          fx=ffx
 | 
	
		
			
				|  |  |                                      if attr == "BLUE":
 | 
	
		
			
				|  |  |                                          fx =  ffxb#"off"
 | 
	
		
			
				|  |  | -                                elif ":BLUE" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  | +                                elif "BLUE" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  |                                      base="-"
 | 
	
		
			
				|  |  |                                      if attr == "RED":
 | 
	
		
			
				|  |  |                                          fx = ffxb# "off" 
 | 
	
	
		
			
				|  | @@ -608,7 +616,7 @@ class Xevent():
 | 
	
		
			
				|  |  |                                          #cspeed=0
 | 
	
		
			
				|  |  |                                          #coffset=0
 | 
	
		
			
				|  |  |                                          fx=ffx
 | 
	
		
			
				|  |  | -                                elif ":YELLOW" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  | +                                elif "YELLOW" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  |                                      base="-"
 | 
	
		
			
				|  |  |                                      if attr == "RED":
 | 
	
		
			
				|  |  |                                          fx = ffxb# "off" 
 | 
	
	
		
			
				|  | @@ -622,7 +630,7 @@ class Xevent():
 | 
	
		
			
				|  |  |                                          fx=ffx
 | 
	
		
			
				|  |  |                                      if attr == "BLUE":
 | 
	
		
			
				|  |  |                                          fx = "off"
 | 
	
		
			
				|  |  | -                                elif ":CYAN" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  | +                                elif "CYAN" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  |                                      base="-"
 | 
	
		
			
				|  |  |                                      if attr == "RED":
 | 
	
		
			
				|  |  |                                          fx = ffxb# "off" 
 | 
	
	
		
			
				|  | @@ -636,7 +644,7 @@ class Xevent():
 | 
	
		
			
				|  |  |                                          #cspeed=0
 | 
	
		
			
				|  |  |                                          #coffset=0
 | 
	
		
			
				|  |  |                                          fx=ffx
 | 
	
		
			
				|  |  | -                                elif ":MAG" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  | +                                elif "MAG" in  fx_modes[fx_prm["MODE"]]:#fx_prm["MODE"]:#self.attr:
 | 
	
		
			
				|  |  |                                      base="-"
 | 
	
		
			
				|  |  |                                      if attr == "RED":
 | 
	
		
			
				|  |  |                                          fx = ffxb# "off" 
 | 
	
	
		
			
				|  | @@ -688,8 +696,10 @@ class Xevent():
 | 
	
		
			
				|  |  |                              fjdata["TYPE"]  = fxtype
 | 
	
		
			
				|  |  |                              fjdata["SIZE"] = round(csize,2)
 | 
	
		
			
				|  |  |                              fjdata["SPEED"] = round(cspeed,2)
 | 
	
		
			
				|  |  | +                            fjdata["WIDTH"] = int(width)
 | 
	
		
			
				|  |  |                              fjdata["START"] = cstart
 | 
	
		
			
				|  |  |                              fjdata["OFFSET"]= round(coffset,2)
 | 
	
		
			
				|  |  | +                            fjdata["INVERT"]= int(invert)
 | 
	
		
			
				|  |  |                              fjdata["BASE"]  = cbase
 | 
	
		
			
				|  |  |                              jdata["FX2"] = fjdata
 | 
	
		
			
				|  |  |                              data["ATTRIBUT"][attr]["FX2"] = fjdata
 | 
	
	
		
			
				|  | @@ -743,7 +753,7 @@ class Xevent():
 | 
	
		
			
				|  |  |                      fx_prm[k] = 4000
 | 
	
		
			
				|  |  |                  if fx_prm[k] < 0:
 | 
	
		
			
				|  |  |                      fx_prm[k] =0
 | 
	
		
			
				|  |  | -                self.data.elem_fx_commands[self.attr]["text"] = "SZ:{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "SZ:\n{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("SP:"):#SIN":
 | 
	
		
			
				|  |  |                  #global fx_prm
 | 
	
		
			
				|  |  |                  k = "SPEED"
 | 
	
	
		
			
				|  | @@ -765,9 +775,9 @@ class Xevent():
 | 
	
		
			
				|  |  |                      fx_prm[k] =0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if fx_prm[k] < 0.1:
 | 
	
		
			
				|  |  | -                    self.data.elem_fx_commands[self.attr]["text"] = "SP:off".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                    self.data.elem_fx_commands[self.attr]["text"] = "SP:\noff".format(fx_prm[k])
 | 
	
		
			
				|  |  |                  else:
 | 
	
		
			
				|  |  | -                    self.data.elem_fx_commands[self.attr]["text"] = "SP:{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                    self.data.elem_fx_commands[self.attr]["text"] = "SP:\n{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("ST:"):#SIN":
 | 
	
		
			
				|  |  |                  #global fx_prm
 | 
	
		
			
				|  |  |                  k = "START"
 | 
	
	
		
			
				|  | @@ -788,7 +798,7 @@ class Xevent():
 | 
	
		
			
				|  |  |                  if fx_prm[k] < 0:
 | 
	
		
			
				|  |  |                      fx_prm[k] =0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                self.data.elem_fx_commands[self.attr]["text"] = "ST:{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "ST:\n{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("MO:"):# on,sinus,bump
 | 
	
		
			
				|  |  |                  #global fx_prm
 | 
	
		
			
				|  |  |                  k = "MO"
 | 
	
	
		
			
				|  | @@ -805,7 +815,28 @@ class Xevent():
 | 
	
		
			
				|  |  |                      if fx_prm[k] >= len(fx_mo):
 | 
	
		
			
				|  |  |                          fx_prm[k] = 0
 | 
	
		
			
				|  |  |                  txt = fx_mo[fx_prm[k]] 
 | 
	
		
			
				|  |  | -                self.data.elem_fx_commands[self.attr]["text"] = "MO:{}".format(txt)
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "MO:\n{}".format(txt)
 | 
	
		
			
				|  |  | +            elif self.attr.startswith("WIDTH:"):#SIN":
 | 
	
		
			
				|  |  | +                #global fx_prm
 | 
	
		
			
				|  |  | +                k = "WIDTH"
 | 
	
		
			
				|  |  | +                if event.num == 1:
 | 
	
		
			
				|  |  | +                    pass
 | 
	
		
			
				|  |  | +                elif event.num == 2:
 | 
	
		
			
				|  |  | +                    pass
 | 
	
		
			
				|  |  | +                elif event.num == 4:
 | 
	
		
			
				|  |  | +                    if fx_prm[k] <= 0:
 | 
	
		
			
				|  |  | +                        fx_prm[k] = 1
 | 
	
		
			
				|  |  | +                    fx_prm[k] *=1.1
 | 
	
		
			
				|  |  | +                elif event.num == 5:
 | 
	
		
			
				|  |  | +                    fx_prm[k] /=1.1
 | 
	
		
			
				|  |  | +                #fx_prm[k] =int(fx_prm[k])
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +                if fx_prm[k] > 100:
 | 
	
		
			
				|  |  | +                    fx_prm[k] = 100
 | 
	
		
			
				|  |  | +                if fx_prm[k] < 0:
 | 
	
		
			
				|  |  | +                    fx_prm[k] =0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "WIDTH:\n{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("DIR:"):#SIN":
 | 
	
		
			
				|  |  |                  #global fx_prm
 | 
	
		
			
				|  |  |                  k = "DIR"
 | 
	
	
		
			
				|  | @@ -818,7 +849,19 @@ class Xevent():
 | 
	
		
			
				|  |  |                  elif event.num == 5:
 | 
	
		
			
				|  |  |                      fx_prm[k] =-1
 | 
	
		
			
				|  |  |                  txt = fx_prm[k] 
 | 
	
		
			
				|  |  | -                self.data.elem_fx_commands[self.attr]["text"] = "DIR:{}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "DIR:\n{}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +            elif self.attr.startswith("INVERT:"):#SIN":
 | 
	
		
			
				|  |  | +                #global fx_prm
 | 
	
		
			
				|  |  | +                k = "INVERT"
 | 
	
		
			
				|  |  | +                if event.num == 1:
 | 
	
		
			
				|  |  | +                    pass
 | 
	
		
			
				|  |  | +                elif event.num == 2:
 | 
	
		
			
				|  |  | +                    pass
 | 
	
		
			
				|  |  | +                elif event.num == 4:
 | 
	
		
			
				|  |  | +                    fx_prm[k] = 1
 | 
	
		
			
				|  |  | +                elif event.num == 5:
 | 
	
		
			
				|  |  | +                    fx_prm[k] =0
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = k+":\n{}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("WING:"):#SIN":
 | 
	
		
			
				|  |  |                  #global fx_prm
 | 
	
		
			
				|  |  |                  k = "WING"
 | 
	
	
		
			
				|  | @@ -830,13 +873,13 @@ class Xevent():
 | 
	
		
			
				|  |  |                      fx_prm[k] += 1
 | 
	
		
			
				|  |  |                  elif event.num == 5:
 | 
	
		
			
				|  |  |                      fx_prm[k] -=1
 | 
	
		
			
				|  |  | -                if fx_prm[k] > 10:
 | 
	
		
			
				|  |  | -                    fx_prm[k] = 10
 | 
	
		
			
				|  |  | +                if fx_prm[k] > 100:
 | 
	
		
			
				|  |  | +                    fx_prm[k] = 100
 | 
	
		
			
				|  |  |                  if fx_prm[k] < 1:
 | 
	
		
			
				|  |  |                      fx_prm[k] =1
 | 
	
		
			
				|  |  |                      
 | 
	
		
			
				|  |  |                  txt = fx_prm[k] 
 | 
	
		
			
				|  |  | -                self.data.elem_fx_commands[self.attr]["text"] = "WING:{}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "WING:\n{}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("OF:"):#SIN":
 | 
	
		
			
				|  |  |                  #global fx_prm
 | 
	
		
			
				|  |  |                  k = "OFFSET"
 | 
	
	
		
			
				|  | @@ -852,12 +895,12 @@ class Xevent():
 | 
	
		
			
				|  |  |                      fx_prm[k] /=1.2
 | 
	
		
			
				|  |  |                  #fx_prm[k] =int(fx_prm[k])
 | 
	
		
			
				|  |  |                  
 | 
	
		
			
				|  |  | -                if fx_prm[k] > 255:
 | 
	
		
			
				|  |  | -                    fx_prm[k] = 255
 | 
	
		
			
				|  |  | +                if fx_prm[k] > 512:
 | 
	
		
			
				|  |  | +                    fx_prm[k] = 512
 | 
	
		
			
				|  |  |                  if fx_prm[k] < 0:
 | 
	
		
			
				|  |  |                      fx_prm[k] =0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                self.data.elem_fx_commands[self.attr]["text"] = "OF:{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "OF:\n{:0.0f}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("BS:"):
 | 
	
		
			
				|  |  |                  k = "BASE"
 | 
	
		
			
				|  |  |                  if event.num == 1:
 | 
	
	
		
			
				|  | @@ -868,7 +911,7 @@ class Xevent():
 | 
	
		
			
				|  |  |                      fx_prm[k] = "+"
 | 
	
		
			
				|  |  |                  elif event.num == 5:
 | 
	
		
			
				|  |  |                      fx_prm[k] = "-"
 | 
	
		
			
				|  |  | -                self.data.elem_fx_commands[self.attr]["text"] = "BS:{}".format(fx_prm[k])
 | 
	
		
			
				|  |  | +                self.data.elem_fx_commands[self.attr]["text"] = "BS:\n{}".format(fx_prm[k])
 | 
	
		
			
				|  |  |              elif self.attr.startswith("FX:"):#SIN":
 | 
	
		
			
				|  |  |                  self.fx(event)
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1057,10 +1100,21 @@ class Base():
 | 
	
		
			
				|  |  |      def __init__(self):
 | 
	
		
			
				|  |  |          show_name = "GloryCamp2021"
 | 
	
		
			
				|  |  |          #show_name = "JMS"
 | 
	
		
			
				|  |  | -        #show_name = "Dimmer"
 | 
	
		
			
				|  |  |          show_name = "DemoShow"
 | 
	
		
			
				|  |  | +        #show_name = "Dimmer"
 | 
	
		
			
				|  |  |          self.home = os.environ['HOME'] 
 | 
	
		
			
				|  |  |          self.show_path = self.home +"/LibreLight/"
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            f = open(self.show_path+"init.txt","r")
 | 
	
		
			
				|  |  | +            for line in f.readlines():
 | 
	
		
			
				|  |  | +                cprint(line)
 | 
	
		
			
				|  |  | +                if not line.startswith("#"):
 | 
	
		
			
				|  |  | +                    show_name = line.strip()
 | 
	
		
			
				|  |  | +                    show_name = show_name.replace(".","")
 | 
	
		
			
				|  |  | +                    show_name = show_name.replace("\\","")
 | 
	
		
			
				|  |  | +                    show_name = show_name.replace("/","")
 | 
	
		
			
				|  |  | +        except Exception as e:
 | 
	
		
			
				|  |  | +            cprint("shownamw exception",color="red")
 | 
	
		
			
				|  |  |          if not os.path.isdir(self.show_path):
 | 
	
		
			
				|  |  |              os.mkdir(self.show_path)
 | 
	
		
			
				|  |  |          self.show_path += "/show/"
 | 
	
	
		
			
				|  | @@ -1196,10 +1250,10 @@ class GUI(Base):
 | 
	
		
			
				|  |  |          self.elem_attr = {}
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          self.fx_commands =["STONY_FX","FX OFF","\n"
 | 
	
		
			
				|  |  | -                ,"FX:CIR","FX:PAN","FX:TILT","\n"
 | 
	
		
			
				|  |  | +                ,"FX:CIR","FX:PAN","FX:TILT","MO:ON""\n"
 | 
	
		
			
				|  |  |                  ,"MSZ:","MSP:","MST:","MOF:","MBS:-","\n"
 | 
	
		
			
				|  |  | -                ,"FX:DIM","FX:RED", "MO:on","DIR:1","WING:2","\n"
 | 
	
		
			
				|  |  | -                ,"SZ:","SP:","ST:","OF:","BS:-","\n"
 | 
	
		
			
				|  |  | +                ,"FX:DIM","FX:\nRED", "WIDTH:\n25","DIR:\n1","INVERT:\n0","WING:\n2","\n"
 | 
	
		
			
				|  |  | +                ,"SZ:\n","SP:\n","ST:\n","OF:\n","BS:\n-","\n"
 | 
	
		
			
				|  |  |                  , "FX:SIN","FX:COS","FX:BUM","FX:BUM2","FX:FD","FX:ON","FX:ON2" ]
 | 
	
		
			
				|  |  |          self.commands =["\n","ESC","CFG-BTN","LABEL","BACKUP","DEL","\n"
 | 
	
		
			
				|  |  |                  ,"SELECT","FLASH","GO","FADE","MOVE","\n"
 | 
	
	
		
			
				|  | @@ -1362,6 +1416,9 @@ class GUI(Base):
 | 
	
		
			
				|  |  |                          elem["bg"] = "grey"
 | 
	
		
			
				|  |  |                          elem.config(activebackground="grey")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                    if "FX2" not in sdata["ATTRIBUT"][attr]: # insert FX2 excetption
 | 
	
		
			
				|  |  | +                        sdata["ATTRIBUT"][attr]["FX2"] = OrderedDict()
 | 
	
		
			
				|  |  | +                        
 | 
	
		
			
				|  |  |                      if sdata["ATTRIBUT"][attr]["FX"]:
 | 
	
		
			
				|  |  |                          elem["fg"] = "blue"
 | 
	
		
			
				|  |  |                      elif sdata["ATTRIBUT"][attr]["FX2"]:
 | 
	
	
		
			
				|  | @@ -1451,7 +1508,7 @@ class GUI(Base):
 | 
	
		
			
				|  |  |              self.refresh_exec()
 | 
	
		
			
				|  |  |              self.refresh_fix()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def _preset_go(self,rdata,cfg,fcmd,value,xfade=None,event=None,xFLASH=0):
 | 
	
		
			
				|  |  | +    def _preset_go(self,rdata,cfg,fcmd,value=None,xfade=None,event=None,xFLASH=0):
 | 
	
		
			
				|  |  |          if xfade is None and FADE._is():
 | 
	
		
			
				|  |  |              xfade = FADE.val()
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1470,6 +1527,12 @@ class GUI(Base):
 | 
	
		
			
				|  |  |                  DMX = fcmd[i]["DMX"]
 | 
	
		
			
				|  |  |                  if "VALUE" in vcmd[i] and type(vcmd[i]["VALUE"]) is float:
 | 
	
		
			
				|  |  |                      vcmd[i]["VALUE"] = round(vcmd[i]["VALUE"],3)
 | 
	
		
			
				|  |  | +                if value is not None:
 | 
	
		
			
				|  |  | +                    vcmd[i]["VALUE"] = value 
 | 
	
		
			
				|  |  | +                if value == "off":
 | 
	
		
			
				|  |  | +                    if "FX2" in vcmd:
 | 
	
		
			
				|  |  | +                        vcmd[i]["FX2"]["TYPE"] = value
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  if DMX and vcmd[i]:
 | 
	
		
			
				|  |  |                      vcmd[i]["DMX"] = DMX
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1686,6 +1749,7 @@ class GUI(Base):
 | 
	
		
			
				|  |  |              
 | 
	
		
			
				|  |  |              b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
 | 
	
		
			
				|  |  |              if comm not in self.elem_fx_commands:
 | 
	
		
			
				|  |  | +                comm = comm.replace("\n","")
 | 
	
		
			
				|  |  |                  self.elem_fx_commands[comm] = b
 | 
	
		
			
				|  |  |                  self.val_fx_commands[comm] = 0
 | 
	
		
			
				|  |  |              b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=self,mode="COMMAND").cb)
 | 
	
	
		
			
				|  | @@ -1709,20 +1773,20 @@ class GUI(Base):
 | 
	
		
			
				|  |  |                  b["text"] = comm #"BS:{}".format(fx_prm["BASE"])
 | 
	
		
			
				|  |  |                  b["bg"] = "lightgreen"
 | 
	
		
			
				|  |  |              elif comm == "SZ:":
 | 
	
		
			
				|  |  | -                b["text"] = "SZ:{:0.0f}".format(fx_prm["SIZE"])
 | 
	
		
			
				|  |  | +                b["text"] = "SZ:\n{:0.0f}".format(fx_prm["SIZE"])
 | 
	
		
			
				|  |  |                  b["bg"] = "lightgreen"
 | 
	
		
			
				|  |  |              elif comm == "SP:":
 | 
	
		
			
				|  |  | -                b["text"] = "SP:{:0.0f}".format(fx_prm["SPEED"])
 | 
	
		
			
				|  |  | +                b["text"] = "SP:\n{:0.0f}".format(fx_prm["SPEED"])
 | 
	
		
			
				|  |  |                  b["bg"] = "lightgreen"
 | 
	
		
			
				|  |  |              elif comm == "ST:":
 | 
	
		
			
				|  |  |                  b["bg"] = "lightgreen"
 | 
	
		
			
				|  |  | -                b["text"] = "ST:{:0.0f}".format(fx_prm["START"])
 | 
	
		
			
				|  |  | +                b["text"] = "ST:\n{:0.0f}".format(fx_prm["START"])
 | 
	
		
			
				|  |  |              elif comm == "OF:":
 | 
	
		
			
				|  |  |                  b["bg"] = "lightgreen"
 | 
	
		
			
				|  |  | -                b["text"] = "OF:{:0.0f}".format(fx_prm["OFFSET"])
 | 
	
		
			
				|  |  | +                b["text"] = "OF:\n{:0.0f}".format(fx_prm["OFFSET"])
 | 
	
		
			
				|  |  |              elif comm == "BS:-":
 | 
	
		
			
				|  |  |                  b["bg"] = "lightgreen"
 | 
	
		
			
				|  |  | -                b["text"] = "BS:{}".format(fx_prm["BASE"])
 | 
	
		
			
				|  |  | +                b["text"] = "BS:\n{}".format(fx_prm["BASE"])
 | 
	
		
			
				|  |  |              elif comm[0] == "M":
 | 
	
		
			
				|  |  |                  b["text"] = comm #"BS:{}".format(fx_prm["BASE"])
 | 
	
		
			
				|  |  |                  b["bg"] = "lightgrey"
 | 
	
	
		
			
				|  | @@ -1730,7 +1794,7 @@ class GUI(Base):
 | 
	
		
			
				|  |  |              if comm:
 | 
	
		
			
				|  |  |                  b.grid(row=r, column=c, sticky=tk.W+tk.E)
 | 
	
		
			
				|  |  |              c+=1
 | 
	
		
			
				|  |  | -            if c >=5:
 | 
	
		
			
				|  |  | +            if c >=6:
 | 
	
		
			
				|  |  |                  c=0
 | 
	
		
			
				|  |  |                  r+=1
 | 
	
		
			
				|  |  |      def draw_command(self,xframe):
 | 
	
	
		
			
				|  | @@ -2787,7 +2851,7 @@ master.draw_patch(w1)
 | 
	
		
			
				|  |  |  window_manager.new(w,name)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  name="FX"
 | 
	
		
			
				|  |  | -w = GUIWindow(name,master=0,width=350,height=250,left=920,top=305)
 | 
	
		
			
				|  |  | +w = GUIWindow(name,master=0,width=410,height=250,left=920,top=305)
 | 
	
		
			
				|  |  |  #frame_fx = w.tk
 | 
	
		
			
				|  |  |  master.draw_fx(w.tk)
 | 
	
		
			
				|  |  |  window_manager.new(w,name)
 |