#! /usr/bin/python
# -*- coding: utf-8 -*-
"""
This file is part of LibreLight.
LibreLight is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 2 of the License.
LibreLight is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LibreLight. If not, see .
(c) 2012 micha@uxsrv.de
"""
import random
rnd_id = str(random.randint(1000,9000))
rnd_id += " beta 22.10 "
import subprocess
import string
_gcmd=['git', 'rev-parse', '--short', 'HEAD']
try:
r = subprocess.check_output(_gcmd)
rnd_id += r.decode('ascii').strip()
except Exception as e:
rnd_id += " no git"
#rnd_id += " ".join(_gcmd) +str(e)
try:
xtitle = __file__
except:
xtitle = "__file__"
if "/" in xtitle:
xtitle = xtitle.split("/")[-1]
import sys
sys.stdout.write("\x1b]2;"+str(xtitle)+" "+str(rnd_id)+"\x07") # terminal title
import json
import time
import sys
import os
import _thread as thread
import traceback
import tkinter
import tkinter as tk
from tkinter import font
space_font = None
import tkinter.simpledialog
from idlelib.tooltip import Hovertip
_global_short_key = 1
class DialogEvent():
def __init__(self):
self.el = None
self.e_txt = None
self.master = None
def _event(self,event,**args):
print(self,"_event",event)
if 10:#else:
input_event_blocker.set( self.e , self.e_txt)
input_event_blocker.event(event) #,args)
if "keysym" in dir(event):
if event.keysym == "Return":# or event.keysym == "Tab" or event.keysym == "ISO_Left_Tab":
self.master.ok()
elif event.keysym == "Escape":
self.master.close()
else:
self.el.focus()
class Dialog():
def __init__(self):
self.d = tkinter.simpledialog
self._exit = None
self._cb = self.dummy_cb
self.data = {"Value:",None}
#self.tk = tkinter.Toplevel()
def dummy_cb(self,_return):
print("dialog.dummy_cb()",self,_return)
pass
def askstring(self,title="title",prompt="prompt:",initialvalue=""):
old = 0
if old:
title = "*"+title
txt = self.askstring_old(title=title,prompt=prompt,initialvalue=initialvalue)
self._exit = {"Value":txt}
self.data = {"Value":txt}
self._cb(self._exit)
else:
title = "#"+title
self.askstring_new(title=title,prompt=prompt,initialvalue=initialvalue)
def askstring_old(self,title="title",prompt="prompt:",initialvalue=""):
print(self.d)
print(dir(self.d))
txt = self.d.askstring(title=title,prompt=prompt,initialvalue=initialvalue)
return txt
def _close(self):
print("dialog._close()",self._exit)
self.tk.destroy()
def close(self):
self._close()
time.sleep(0.1)
input_event_blocker.unlock()
self._cb(None)
return {} #self._exit
def ok(self):
_data = {}
for k,e in self.data.items():
#print(k,dir(e))
if e is not None:
_data[k] = e.get()
if "Value" not in _data:
_data["Value"] = None
#t=self.e_txt.get()#[:-1]
#if "=" in t:
# t = t.split("=")[0]
#self._exit = t
self._exit = _data
self._close()
time.sleep(0.1)
input_event_blocker.unlock()
print(self,"ok()",self._exit)
self._cb(self._exit)
def _event(self,event,**args):
print(self,"_event",event)
if 0:#else:
input_event_blocker.set( self.e , self.e_txt)
input_event_blocker.event(event) #,args)
if "keysym" in dir(event):
if event.keysym == "Return":# or event.keysym == "Tab" or event.keysym == "ISO_Left_Tab":
self.ok()
if 1:# _global_short_key == 0:
if event.keysym == "Escape":
self.close()
def event(self,event,**args):
print(self,"event",event)
if 1:#else:
input_event_blocker.set( self.e , self.e_txt)
input_event_blocker.event(event) #,args)
if "keysym" in dir(event):
if event.keysym == "Return":# or event.keysym == "Tab" or event.keysym == "ISO_Left_Tab":
self.ok()
if _global_short_key == 0:
if event.keysym == "Escape":
self.close()
def ask_exec_config(self,prompt="",_cb=None,**args):
print(self,"ask_exec_config()")
print([prompt,args])
self.data = {"Value:":None}
self._exit = None
try:
self.close()
except Exception as e:print(e)
#self.tk = tkinter.Tk()
self.tk = tkinter.Toplevel()
#self.tk.withdraw() # do not draw
self.tk.iconify()
self.tk.geometry("450x200") #.format(120+c))
self.tk.title("{} EXEC-CONFIG".format(prompt) )#+" "+":"+str(rnd_id))
self.tk.attributes('-topmost',True)
self.tk.protocol("WM_DELETE_WINDOW", self.close)
self.tk.resizable(0,0)
bg = "#e0e"
bg = "#cd5"
bg = "lightgrey"
self.tk["bg"] = bg
#self.tk.overrideredirect(1)
#self.tk.attributes('-toolwindow', True)
#self.tk.state(newstate='iconic')
self.fo = tk.Frame(self.tk,bd=1) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.fo["bg"] = "red"
self.fo["bg"] = "#eee"#lightgrey"
self.fo.pack(side="top")
self.fl = tk.Frame(self.fo,bd=2) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.fl["bg"] = "green"
self.fl["bg"] = "#eee"#lightgrey"
self.fl.pack(side="left")
self.fm = tk.Frame(self.fo,width=20,bd=2) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.fm["bg"] = "#eee"#lightgrey"
self.fm.pack(side="left",expand=1,fill="y")
self.fr = tk.Frame(self.fo,bd=2) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.fr["bg"] = "blue"
self.fr["bg"] = "#eee"#lightgrey"
self.fr.pack(side="left")
# ------------------------- frame right
from_= 255
to = 0
self.ff = tk.Frame(self.fr,bd=2) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.ff["bg"] = "#99a"
self.ff.pack(side="left")
self.b = tk.Scale(self.ff,bg="lightblue", width=28,from_=from_,to=to,command=self._event)
self.data["Master"] = self.b
self.data["Master"].set(100)
k = "HTP-MASTER"
if "cfg" in args and k in args["cfg"]:
#self.data["Master"].config(state="active")
self.data["Master"].set(int(args["cfg"][k]))
self.data["Master"].config(state="disable")
self.b.pack(side="top") #fill=tk.Y, side=tk.TOP)
self.el = tk.Button(self.ff,text="Master",bg="lightblue",width=4)
myTip = Hovertip(self.el,'HTP-MASTER')
self.el.pack(side="top")
from_= 200
self.ff = tk.Frame(self.fr,bd=2) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.ff["bg"] = "#99a"
self.ff.pack(side="left")
self.b = tk.Scale(self.ff,bg="lightblue",width=28,from_=from_,to=to,command=self._event)
self.data["Size"] = self.b
k = "SIZE-MASTER"
if "cfg" in args and k in args["cfg"]:
#self.data["Size"].config(state="active")
self.data["Size"].set(int(args["cfg"][k]))
self.data["Size"].config(state="disable")
self.b.pack(side="top") #fill=tk.Y, side=tk.TOP)
self.el = tk.Button(self.ff,text="Size",bg="lightblue",width=4)
myTip = Hovertip(self.el,'SIZE-MASTER')
self.el.pack(side="top")
from_= 400
self.ff = tk.Frame(self.fr,bd=2) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.ff["bg"] = "#99a"
self.ff.pack(side="left")
self.b = tk.Scale(self.ff,bg="lightblue", width=28,from_=from_,to=to,command=self._event)
self.data["Speed"] = self.b
k = "SPEED-MASTER"
if "cfg" in args and k in args["cfg"]:
self.data["Speed"].set(int(args["cfg"][k]))
self.data["Speed"].config(state="disable")
self.b.pack(side="top") #fill=tk.Y, side=tk.TOP)
self.el = tk.Button(self.ff,text="Speed",bg="lightblue",width=4)
myTip = Hovertip(self.el,'SPEED-MASTER')
self.el.pack(side="top")
from_= 400
self.ff = tk.Frame(self.fr,bd=2) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.ff["bg"] = "#99a"
self.ff.pack(side="left")
self.b = tk.Scale(self.ff,bg="lightblue", width=28,from_=from_,to=to,command=self._event)
self.data["Offset"] = self.b
k = "OFFSET-MASTER"
if "cfg" in args and k in args["cfg"]:
#self.data["Offset"].config(state="active")
self.data["Offset"].set(int(args["cfg"][k]))
self.data["Offset"].config(state="disable")
self.b.pack(side="top") #fill=tk.Y, side=tk.TOP)
self.el = tk.Button(self.ff,text="Offset",bg="lightblue",width=4)
myTip = Hovertip(self.el,'OFFSET-MASTER')
self.el.pack(side="top")
#self.f = tk.Frame(self.fl) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
#self.f.pack(side="top")
#self.elx = tk.Label(self.f,text="")
#self.elx["bg"] = bg
#self.elx.pack(side="left")
# ----------------------------------- frame left
self.f = tk.Frame(self.fl) #, highlightbackground = "lightgrey", highlightthickness = 1, bd=0)
self.f.pack(side="top")
self.el = tk.Label(self.f,text=str("NR:"),anchor="w",width=8)
self.el["bg"] = bg
self.el.pack(side="left",expand=1,fill="y")
self.el = tk.Label(self.f,text=str(prompt),anchor="w",width=12)
self.el["bg"] = bg
self.el.pack(side="left",expand=1,fill="y")
self.f2 = tk.Frame(self.fl)
self.f2.pack(side="top",expand=1,fill="y")
self.data["Fade"] = tk.StringVar()
self.el = tk.Label(self.f2,text="Fade",anchor="w",width=8)
self.el.pack(side="left")
self.e = tk.Entry(self.f2,state="disable",textvariable=self.data["Fade"],width=12)
print("---",self.data["Fade"].get())
if "cfg" in args and "FADE" in args["cfg"]:
self.data["Fade"].set(str(args["cfg"]["FADE"]))
print("---",self.data["Fade"].get())
#self.e["bg"] = "#eee"
self.e.config(highlightthickness=2)
self.e.config(highlightcolor= "red")
#self.e.icursor(999)
#self.e.selection_range(0, 999)#"end")
self.e.bind("",self._event)
self.e.bind("