#!/usr/bin/python3

import _thread as thread
import time
import copy

from collections import OrderedDict

import tkinter 
tk = tkinter 

from idlelib.tooltip import Hovertip

#import tkgui.dialog  as dialoglib
#dialog = dialoglib.Dialog()

import __main__ as MAIN

from lib.cprint import *


import lib.mytklib as mytklib
#import lib.fixlib  as fixlib
#import lib.showlib as showlib
#import lib.libtk   as libtk
#import lib.tkevent as tkevent



class BEvent():
    def __init__(self,data,cb):
        self._data = data
        self._cb = cb
    def cb(self,event):
        #print(self,event)
        self._cb(event,self._data)





class GUI_menu():
    def __init__(self,root,frame ,data,title="tilte"):
        global tk
        global INIT_OK
        self.frame = frame
        
        self.data = data
        self.elem = {}
        self.root = root
        self.draw()

    def draw(self):
        cprint("***",self,"draw")
        r=0
        c=0
        i=1
        self.b = tk.Label(self.frame,bg="lightblue", text="MAIN:MENU",width=8,height=1)
        self.TITLE = self.b
        self.b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")
        BUF = []
        for j in range(3):
            BUF.append([""]*40)
        print(BUF)
        r=0
        h = 2
        for row in self.data:
            print("  draw",row)
            text="<TXT>"
            frame = self.frame 
            #row = data[i]
            if row["text"] == "---":
                h=1

            if "name" in row:
                text = row["name"]
            else:
                text = row["text"]


            if "- DEMO -"  == text:
                c=2
                r=1
            b = tk.Button(frame,bg="lightgrey", text=text,width=8,height=h)
            self.b = b

            if "tip" in row:
                from idlelib.tooltip import Hovertip
                myTip = Hovertip(self.b,row["tip"])

            self.b.bind("<Button>",BEvent({"NR":i,"text":row["text"]},self.on_top).cb)
            BUF[c][r] = b
            #self.b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")
            row["elem"] = self.b
            self.elem[row["text"]] = row

            r+=1
            i+=1
    
        r=1
        c=0
        for rows in BUF:
            h=2
            for b in rows:
                #print("b",type(b))
                text=""
                if r > 6:
                    h=1
                if type(b) is str:
                    b = tk.Button(self.frame,bg="lightgrey", text=text,width=8,height=h)
                    b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")
                else:
                    b["height"] = h
                    b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")

                r+=1
            c+=1
            r=1
        
        self.BUF = BUF
        self.frame.pack()
        INIT_OK = 1
        self.start_loop()

    def start_loop(self):
        print(self,"--- start_bg_loop ----- xxxx")
        thread.start_new_thread(mytklib.tk_btn_bg_loop,(self.TITLE,))

    def on_top(self,event,data={}):
        print("menue.on_top",data)
        MAIN.window_manager.top(data["text"])

    def update(self,button,text):
        #print(self,button,text)
        for k in self.elem:
            v=self.elem[k]
            #print(self,k,v)
            if button == k:
                v["elem"]["text"] = k+"\n"+text

    def config(self,button,attr,value):
        #print("config",self,button,attr,value)
        for k in self.elem:
            v=self.elem[k]
            #print(self,k,v)
            if button == k:
                #print(dir(v["elem"]))
                if attr == "bg":
                    if value == "":
                        value = "lightgrey"
                    v["elem"][attr] = str(value)
                if attr == "activebackground":
                    if value == "":
                        value = "lightgrey"
                    v["elem"][attr] = str(value)