#!/usr/bin/python
# LICENSE: GPL2
# (c) 2015 Kamil Wartanowicz
# (c) 2015 Szymon Mielczarek

import os, sys
import Tkinter as tk
import subprocess as sub

# Note: python-tk package needs to be installed on Linux machine

RESOURCE_DIR = 'res'
MIM_DIR = 'mim'
FGCOLOR = '#FFFFFF'
BGCOLOR = '#1F67B1'
HIGHLIGHT_BGCOLOR = '#3E7BBC'
TITLE_FONT = "Verdana 16"
LABEL1_FONT = "Verdana 10 bold"
LABEL2_FONT = "Verdana 7"

MIM_OPTIONS = [
    {'script': 'mim_live.py',
     'text1': 'Live',             'text2': 'USIM Live',  'icon': "live.gif"},
    {'script': 'mim_soft.py',
     'text1': 'Soft',             'text2': 'USIM Soft with SAT',  'icon': "soft.gif"},
    {'script': 'mim_live_live.py',
     'text1': 'Live, Live',       'text2': 'USIM Live, USIM Live with AUTH',  'icon': "live_live.gif"},
    {'script': 'mim_live_soft_sat.py',
     'text1': 'Live, Soft SAT',   'text2': 'USIM Live, SAT Soft',  'icon': "live_soft.gif"},
    {'script': 'mim_soft_live_reg.py',
     'text1': 'Soft, Live',       'text2': 'USIM Soft with SAT, USIM Live with AUTH and REG',  'icon': "soft_live.gif"},
    {'script': 'mim_soft_live_auth.py',
     'text1': 'Soft, Live',       'text2': 'USIM Soft with SAT, USIM Live with AUTH ins',  'icon': "soft_live.gif"},
    {'script': 'mim_live_live_soft_sat.py',
     'text1': 'Live, Live, Soft SAT','text2': 'USIM Live, USIM Live, SAT Soft', 'icon': "live_live_soft.gif"}
]

def runScript(event, root, scriptName):
    print scriptName
    root.destroy() # close Tk window and mainloop
    absPath = os.path.abspath(scriptName)
    sub.call(['python', absPath], shell=False)

def retag(tag, *args):
    '''Add the given tag as the first bindtag for every widget passed in'''
    for widget in args:
        widget.bindtags((tag,) + widget.bindtags())

def on_enter(event, widgets, color):
    event.widget.configure(bg=color)
    for w in widgets:
        w.configure(bg=color)

def on_leave(event, widgets, color):
    event.widget.configure(bg=color)
    for w in widgets:
        w.configure(bg=color)

def main():
    root = tk.Tk()

    lbl = tk.Label(root, text="Choose an option", fg=FGCOLOR, bg=BGCOLOR, font=TITLE_FONT)
    lbl.pack(pady=(10,0))

    # Main frame
    fraMain = tk.Frame(root)
    fraMain.pack(padx=10, pady=10)

    optionsNum = len(MIM_OPTIONS)
    imgIcons = [None] * optionsNum
    lblImages = [None] * optionsNum
    lblText1 = [None] * optionsNum
    lblText2 = [None] * optionsNum
    fraFields = [None] * optionsNum
    i = 0
    for r in MIM_OPTIONS:
        fraFields[i] = tk.Frame(fraMain, bg=BGCOLOR)
        # Images
        imgIcons[i] = tk.PhotoImage(file=(os.path.join(RESOURCE_DIR, r['icon'])))
        lblImages[i] = tk.Label(fraFields[i], image=imgIcons[i], bg=BGCOLOR)
        lblImages[i].pack(side=tk.LEFT, padx=5, pady=5)
        # Labels
        lblText1[i] = tk.Label(fraFields[i], text=r['text1'], fg=FGCOLOR, bg=BGCOLOR, font=LABEL1_FONT)
        lblText1[i].pack(pady=(10,0), anchor=tk.W) #side=tk.LEFT,
        lblText2[i] = tk.Label(fraFields[i], text=r['text2'], fg=FGCOLOR, bg=BGCOLOR, font=LABEL2_FONT)
        lblText2[i].pack(anchor=tk.W, padx=(0,3)) #side=tk.BOTTOM,
        # Frames
        fraFields[i].bind("<Enter>", lambda event, i=i: on_enter(event, [lblImages[i], lblText1[i], lblText2[i]], HIGHLIGHT_BGCOLOR))
        fraFields[i].bind("<Leave>", lambda event, i=i: on_leave(event, [lblImages[i], lblText1[i], lblText2[i]], BGCOLOR))
        fraFields[i].pack(fill=tk.BOTH)

        name = r['script']
        tag = "special" + str(i)
        retag(tag, fraFields[i], lblImages[i], lblText1[i], lblText2[i])
        root.bind_class(tag, "<Button-1>", lambda event, name=name: runScript(event, root, os.path.join(MIM_DIR, name)))
        i = i + 1

    root.configure(bg=BGCOLOR)
    root.resizable(width=tk.FALSE, height=tk.FALSE)
    if os.name != 'posix':
    #workaround, do not load icon on unix
        try:
            root.iconbitmap(os.path.join(RESOURCE_DIR, 'live.ico'))
        except tk.TclError:
            print 'No ico file found'
    root.title("simLAB")
    root.mainloop()

if __name__ == '__main__':
    main()