#!/usr/bin/python3 import os import time import json import sys sys.path.insert(0,"/opt/LibreLight/Xdesk/") import tkinter tk = tkinter import __main__ as MAIN from lib.cprint import cprint import lib.libwin as libwin import lib.showlib as showlib import lib.libconfig as libconfig import lib.fixlib as fixlib import tkgui.dialog as dialoglib dialog = dialoglib.Dialog() #for i in dir(MAIN): # print(i) #_config = MAIN._load_config() _config = libconfig._load_config() _POS_LEFT = 0 _POS_TOP = 15 try: for row in _config: #print(" config:",row) if "POS_LEFT" in row: _POS_LEFT = int(row["POS_LEFT"]) if "POS_TOP" in row: _POS_TOP = int(row["POS_TOP"]) 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 test_command(a1="",a2=""): print([a1,a2]) def online_help(page): print("INIT:online_help",page) try: #page = page.replace("&","") #page = page.replace("=","") page = page.replace("/","") import webbrowser def _cb(): print("online_help",page) webbrowser.open("http://librelight.de/wiki/doku.php?id="+page ) return _cb except Exception as e: print("online_help Exception",e) raise e def _cb(): print("error online_help",page) return _cb class ELEM_FADER(): def __init__(self,frame,nr,cb=None,fader_cb=None,**args): self.frame = frame self.nr= nr self.id=nr self.elem = [] self._cb = cb self._fader_cb = fader_cb self.width = 0 if "width" in args: self.width = int(args["width"]) width=11 frameS = tk.Frame(self.frame,bg="#005",width=width) frameS.pack(fill=tk.Y, side=tk.LEFT) self.frame=frameS def fader_event(self,a1="",a2=""): if self._fader_cb: self._fader_cb(a1,a2,nr=self.nr) def event(self,a1="",a2=""): if self._cb: self._cb([self,"event",a1,a2]) def set_nr(self,_event=None): txt= self.elem_nr["text"] def _cb(data): if not data: print("err443",self,"_cb",data) return None txt = data["Value"] self._set_nr(txt) if self._cb: self._cb([self,"set_nr",txt]) dialog._cb = _cb dialog.askstring("ATTR","set NR:",initialvalue=txt) def _check_fine(self,txt): if txt.endswith(" FINE"): txt = txt.replace(" FINE","-FINE") while " -" in txt: txt = txt.replace(" -","-") return txt def set_attr(self,_event=None): txt= self.attr["text"] def _cb(data): if not data: print("err443",self,"_cb",data) return None txt = data["Value"] txt = self._check_fine(txt) #print(self,"set_attr._cb()",txt) self._set_attr(txt) if self._cb: self._cb([self,"set_attr",txt]) dialog._cb = _cb dialog.askstring("ATTR","set attr:",initialvalue=txt) def set_label(self,name=""): #print("set_label",self.b,name) self.label["text"] = name if self._cb: self._cb([self,"set_label",name]) def set_mode(self,_event=None): txt= self.mode["text"] def _cb(data): if not data: print("err443",self,"_cb",data) return None txt = data["Value"] print(self,"set_mode._cb()",txt) #w = MAIN.WindowContainer("config",master=1,width=200,height=140,left=L1,top=TOP) #w.pack() self._set_mode(txt) #w.show() if self._cb: self._cb([self,"set_mode",txt]) dialog._cb = _cb dialog.askstring("MODE S/F:","SWITCH or FADE",initialvalue=txt) def _set_nr(self,txt=""): if type(txt) is str: try: x = int(txt) if x <= 0: txt = "off" self.attr["bg"] = "#fa0" self.elem_nr["bg"] = "#fa0" else: self.attr["bg"] = "lightblue" self.elem_nr["bg"] = "lightblue" except:pass self.elem_nr["text"] = "{}".format(txt) if self._cb: self._cb([self,"_set_nr",txt]) def _set_attr(self,txt=""): self._set_mode("-") if type(txt) is str: self.attr["text"] = "{}".format(txt) if txt.startswith("EMPTY"): self.attr["bg"] = "#fa0" else: if txt in MAIN._FIX_FADE_ATTR: self._set_mode("F") else: self._set_mode("S") if self._cb: self._cb([self,"_set_attr",txt]) def _set_mode(self,txt=""): if type(txt) is str: txt = txt[0].upper() self.mode["text"] = "{}".format(txt) #print("_set_mode",[self]) if self._cb: self._cb([self,"_set_mode",txt]) def _refresh(self): pass def pack(self,init=None,from_=255,to=0,**args): width=11 r=0 c=0 j=0 self.font8 = ("FreeSans",8) frameS=self.frame w = self.width self.b = tk.Button(frameS,bg="#ffa",text="{}".format(self.nr), width=4,command=test_command,font=self.font8 ) self.b.pack(fill=tk.BOTH, side=tk.TOP) self.label = self.b self.elem.append(self.b) self.b = tk.Scale(frameS,bg="#ffa", width=28+w,from_=from_,to=to,command=self.fader_event) self.elem_fader = self.b self.b.pack(fill=tk.Y, side=tk.TOP) if init is not None: self.b.set(init) self.elem.append(self.b) self.b = tk.Button(frameS,bg="lightblue",text="0", width=4,command=self.set_nr,font=self.font8 ) self.elem_nr=self.b self.b.pack(fill=tk.BOTH, side=tk.TOP) self.elem.append(self.b) self.b = tk.Button(frameS,bg="lightblue",text="", width=5,command=self.set_attr,font=self.font8 ) self.attr=self.b self.b.pack(fill=tk.BOTH, side=tk.TOP) self.elem.append(self.b) f = tk.Frame(frameS) #f.pack() self.b = tk.Button(frameS,bg="lightblue",text="", width=4,command=self.set_mode,font=self.font8 ) self.mode=self.b self.b.pack(fill=tk.BOTH, side=tk.TOP) #self.b.pack(fill=tk.BOTH, side=tk.LEFT) self.elem.append(self.b) #self.b = tk.Button(frameS,bg="lightblue",text="+>", width=4,command=self.set_mode,font=self.font8 ) #self.xmode=self.b #self.b.pack(fill=tk.BOTH, side=tk.TOP) #self.elem.append(self.b) self.b = tk.Label(frameS,bg="black",text="", width=4,font=self.font8 ) self.b.pack(fill=tk.BOTH, side=tk.TOP) self.elem.append(self.b) 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("",scroll(canvas).config) canvas.bind("