#!/usr/bin/env python
#SPAN-GLES V2.0
#13 May 2011
#AUTHOR MARTYN CRABTREE <email@marteq.net>
#COPYRIGHT 2011 MARTYN CRABTREE






import os

import socket
socket.setdefaulttimeout(5)


import sys
import urllib
import re


import pygtk
pygtk.require('2.0')
import gtk
import time


import gobject


import string
import unicodedata  


selectionMode="CLIPBOARD"   
strLanguage="English"
strOldClipText=""
homeDir=os.path.expanduser("~")
execPath=sys.path[0]

lstDictionary=[]
lstDictionarySans=[]
lstLine=[]

red_tag=""
green_tag=""
blue_tag=""

winWidth=0
winHeight=0
winX=0
winY=0

def readOptions():

    global selectionMode
    
    if os.path.exists(homeDir+"/.spangles20-user.config"):
        
        in_file = open(homeDir+"/.spangles20-user.config","r")
        text = in_file.read()

        [line1,line2,line3,line4,line5,line6,line7,line8,line9,line10,line11,line12,line13]=string.split(text, "\n")

        if line1=="web":
            objSpangles.tbuttonFetchMode.set_active(True)
        else:
            objSpangles.tbuttonFetchMode.set_active(False)

        if line2=="spanish":
            objSpangles.tbuttonLanguage.set_active(True)

        if line3=="clipboard":
            objSpangles.radbutOptions1.set_active(True)  
            selectionMode="CLIPBOARD"
        else:
            objSpangles.radbutOptions2.set_active(True)  
            selectionMode="PRIMARY"
            

        intTimeout=int(line4)
        objSpangles.sbuttonOptions.set_value(intTimeout)
        socket.setdefaulttimeout(float(line4))

        if line5=="on":         
            objSpangles.radbutOptions3.set_active(True)  
        else:
            objSpangles.radbutOptions4.set_active(True)  



        if line6=="yahoo_on":
            objSpangles.checkOptions1.set_active(True)  
        else:
            objSpangles.checkOptions1.set_active(False)  

        if line7=="ft_on":
            objSpangles.checkOptions2.set_active(True)  
        else:
            objSpangles.checkOptions2.set_active(False)  

        if line8=="google_on":
            objSpangles.checkOptions3.set_active(True)  
        else:
            objSpangles.checkOptions3.set_active(False)  

        intWidth=int(line9)
        intHeight=int(line10)
        objSpangles.windowMain.resize(intWidth,intHeight)

        intX=int(line11)
        intY=int(line12)
        objSpangles.windowMain.move(intX,intY)

        in_file.close()    
    return

def writeOptions():

    out_file = open(homeDir+"/.spangles20-user.config","w")
    
    if objSpangles.tbuttonFetchMode.get_active()==True: 
        out_file.write("web\n")
    else:
        out_file.write("dictionary\n")

    if objSpangles.tbuttonLanguage.get_active()==True:  
        out_file.write("spanish\n")
    else:
        out_file.write("english\n")
        
    if objSpangles.radbutOptions1.get_active()==True:  
        out_file.write("clipboard\n")
    else:
        out_file.write("highlight\n")

    intTimeout=objSpangles.sbuttonOptions.get_value_as_int()    
    strTimeout=repr(intTimeout)+"\n"
    out_file.write(strTimeout)
    
    if objSpangles.radbutOptions3.get_active()==True:           
        out_file.write("on\n")
    else:
        out_file.write("off\n")


    if objSpangles.checkOptions1.get_active()==True:
        out_file.write("yahoo_on\n")
    else:
        out_file.write("yahoo_off\n")

    if objSpangles.checkOptions2.get_active()==True:
        out_file.write("ft_on\n")
    else:
        out_file.write("ft_off\n")

    if objSpangles.checkOptions3.get_active()==True:
        out_file.write("google_on\n")
    else:
        out_file.write("google_off\n")

    strWidth=repr(winWidth)+"\n"
    out_file.write(strWidth)
    strHeight=repr(winHeight)+"\n"
    out_file.write(strHeight)

    strX=repr(winX)+"\n"
    out_file.write(strX)
    strY=repr(winY)+"\n"
    out_file.write(strY)

    out_file.close()

    return

def readDictionary(strFilename):
    

    global lstLine
    global lstDictionary
    global lstDictionarySans
    
    
    inFile = open(strFilename,"r")

    while True:
        fileLineIn = inFile.readline()
        if len(fileLineIn)==0:
            break

        
        fileLineIn=fileLineIn[:-1]

        [engWord,spaWord]=string.split(fileLineIn, ":")

        
        engWord=engWord[:-1]
        spaWord=spaWord[1:]

        
        lstLine.append(engWord)
        lstLine.append(spaWord)
        lstDictionary.append(lstLine)
        
        lstLine=[]
        
        
        engWordSans=removeAccents(engWord)
        spaWordSans=removeAccents(spaWord)
        
        
        engWordSans=string.lower(engWordSans)
        spaWordSans=string.lower(spaWordSans)
        
        
        indexWS=engWordSans.find(" ")
        if indexWS<>-1:
            engWordSans=engWordSans[:indexWS]

        indexWS=spaWordSans.find(" ")
        if indexWS<>-1:
            spaWordSans=spaWordSans[:indexWS]

        
        lstLine.append(engWordSans)
        lstLine.append(spaWordSans)
        lstDictionarySans.append(lstLine)
        lstLine=[]
        
    inFile.close
    

def removeAccents(strAccented):
    
    stringSans=unicode(strAccented, 'utf-8')

    
    
    return ''.join((c for c in unicodedata.normalize('NFD', stringSans) if unicodedata.category(c) != 'Mn'))
    
def searchEnglish(inpTerm):
    count=0
    intMatches=0
    for lstLineSans in lstDictionarySans:
        if lstLineSans[0]==inpTerm:
            intMatches+=1
            lstLineAccent=lstDictionary[count]
            
            
            
            strBuffer=lstLineAccent[0]+" : "+lstLineAccent[1]+"\n"
            
            objSpangles.tbufferMain.insert_at_cursor(strBuffer)
        count+=1
    return intMatches


def searchSpanish(inpTerm):
    count=0
    intMatches=0
    for lstLineSans in lstDictionarySans:
        if lstLineSans[1]==inpTerm:
            intMatches+=1
            lstLineAccent=lstDictionary[count]
            
            
 
            strBuffer=lstLineAccent[1]+" : "+lstLineAccent[0]+"\n"
            
            objSpangles.tbufferMain.insert_at_cursor(strBuffer)
        count+=1
    return intMatches            

def webTranslateF(text, strDirection):
    
    if strDirection=="english":
        strShort="english/spanish"
    else:
        strShort="spanish/english"

    urllib.FancyURLopener.version="Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110429 Firefox/4.0.1"
    urlExtend= urllib.urlencode({"langpair":strShort, "text":text})
    
    
    try:
        resultPage = urllib.urlopen('http://ets.freetranslation.com/?language='+strShort+'&mode=html&charset=UTF-8&sequence=core&srctext='+text)
        
        
    except IOError, e:
        return "Timeout Error"

    content = resultPage.read()
    resultPage.close()
    
    
    
    objFoundText = re.search("Machine Translation ----------------<br>\n(.*?)\n</p>", content)
    
    try:
        strConverted = objFoundText.groups()[0]
    except AttributeError,e:
        return "Translate Error"
    
    
    strConverted=strConverted.replace("&quot;",'"')
    strConverted=strConverted.replace("&#39;","'")
    strConverted=strConverted.replace("&lt;","<")
    strConverted=strConverted.replace("&gt;",">")

    return strConverted

def webTranslateG(text, strDirection):
    
    if strDirection=="english":
        strShort="en|es"
    else:
        strShort="es|en"

    urllib.FancyURLopener.version="Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110429 Firefox/4.0.1"
    urlExtend= urllib.urlencode({"langpair":strShort, "text":text})
    
    
    try:
        resultPage = urllib.urlopen('http://www.google.com/translate_t?langpair='+strShort+'&text='+text)
        
        
    except IOError, e:
        return "Timeout Error"

    content = resultPage.read()
    resultPage.close()
    
    
    
    objFoundText = re.search("onmouseout=\"this.style.backgroundColor='#fff'\">(.*?)</span>", content)
    
    try:
        strConverted = objFoundText.groups()[0]
    except AttributeError,e:
        return "Translate Error"
    
    
    strConverted=strConverted.replace("&quot;",'"')
    strConverted=strConverted.replace("&#39;","'")
    strConverted=strConverted.replace("&lt;","<")
    strConverted=strConverted.replace("&gt;",">")
    
    return strConverted

def webTranslateY(text, strDirection):
    


    
    


    text=text.replace("\n",' ')

    if strDirection=="english":
        strShort="en_es"
    else:
        strShort="es_en"

    urllib.FancyURLopener.version="Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110429 Firefox/4.0.1"
    
    urlExtend= urllib.urlencode({"lp":strShort, "trtext":text,"ei":"UTF-8","doit":"done","fr":"bf-res","intl":"1","tt":"urltext"})


    try:
        
        
        resultPage = urllib.urlopen("http://babelfish.yahoo.com/translate_txt?lp="+strShort+"&ei=utf8&eo=utf8&trtext="+text)


    except IOError, e:
        return "Timeout Error"

    content = resultPage.read()
    resultPage.close()
    
    
    
    
    objFoundText = re.search('<div style="padding:0.6em;">(.*?)</div>', content)
    try:
        strConverted = objFoundText.groups()[0]
    except AttributeError,e:
        return "Translate Error"
    
    
    strConverted=strConverted.replace("&quot;",'"')
    strConverted=strConverted.replace("&#39;","'")
    strConverted=strConverted.replace("&lt;","<")
    strConverted=strConverted.replace("&gt;",">")
    
    
    return strConverted


class Spangles:

    

    
    
    def timerHandler(self):
        global strOldClipText
        global selectionMode
        global winWidth,winHeight
        global winX,winY
        
        winWidth,winHeight=objSpangles.windowMain.get_size()
        winX,winY=objSpangles.windowMain.get_position()
        
        
        clipboard = gtk.clipboard_get(selection=selectionMode)  

        
        text = clipboard.wait_for_text()

        if (text!=strOldClipText) and (text!=None):
            self.entryMain.set_text(text)
            self.entryHandler(self)     
            strOldClipText=text            

        

        return True
        
    def clipboardHandler(self,clipboard, text, data):
        

        print "clipboard Handler activated!"
        
        if text=="":
            return False
        
        print self
        print clipboard
        print text
        print data
        
        clipboard.request_text(self.clipboardHandler, user_data=None)
        return True
    
   
    
    def entryHandler(self,widget,data=None):
        
        if self.radbutOptions3.get_active()==True:                  
            self.windowMain.present_with_time(int(time.time()))     
            self.windowMain.window.focus()     
            
        
        
        self.tbufferMain.set_text("")
        
        strEntry=self.entryMain.get_text()
        if strEntry=="":
            self.tbufferMain.set_text("Please enter some text")
            return

        if self.tbuttonFetchMode.get_active()==False:
        
        
            strEntry=removeAccents(strEntry)
            strEntry=string.lower(strEntry)
                        
            
            new_s = ''
            for char in strEntry:
                if char in string.letters:  
                    new_s += char
            strEntry=new_s            
            
            
            
           
            if self.tbuttonLanguage.get_active() ==False:
                intMatches=searchEnglish(strEntry)      
                
                
                if (intMatches==0) and (strEntry<>""):
                    
                    if strEntry[-1]=="s":           
                        strEntry=strEntry[0:-1]     
                        intMatches=searchEnglish(strEntry)
                        
                        
                        if (intMatches==0) and (strEntry[-1]=='e'):
                            strEntry=strEntry[0:-1]     
                            intMatches=searchEnglish(strEntry)
                        
                        
            else:
                intMatches=searchSpanish(strEntry)      

                
                if (intMatches==0) and (strEntry<>""):
                    
                    if strEntry[-1]=="s":           
                        strEntry=strEntry[0:-1]     
                        intMatches=searchSpanish(strEntry)
                        
                        
                        if (intMatches==0) and (strEntry[-1]=='e'):
                            strEntry=strEntry[0:-1]     
                            intMatches=searchSpanish(strEntry)

                    
                    if (intMatches==0) and (strEntry[-1]=='a'):
                        strEntry=strEntry[0:-1]+'o'
                        
                        intMatches=searchSpanish(strEntry)

            if intMatches==0:
                self.tbufferMain.insert_at_cursor("Nothing found")        
            
        
        else:
            self.tbufferMain.set_text("")
            
            self.windowMain.set_sensitive(False) 
            self.tbufferMain.set_text("Translating Online\nPlease Wait...")

            
            while gtk.events_pending():
                gtk.main_iteration(False)

            
            if self.tbuttonLanguage.get_active() ==False:
                self.tbufferMain.set_text("")

                if self.checkOptions1.get_active()==True:
                    strTran=webTranslateY(strEntry,"english")+'\n'
                    position = self.tbufferMain.get_end_iter()
                    self.tbufferMain.insert_with_tags( position, strTran,red_tag) 
                if self.checkOptions2.get_active()==True:
                    strTran=webTranslateF(strEntry,"english")+'\n'
                    position = self.tbufferMain.get_end_iter()
                    self.tbufferMain.insert_with_tags( position, strTran,green_tag) 
                if self.checkOptions3.get_active()==True:
                    strTran=webTranslateG(strEntry,"english")
                    position = self.tbufferMain.get_end_iter()
                    self.tbufferMain.insert_with_tags( position, strTran,blue_tag) 

            
            else:
                self.tbufferMain.set_text("")

                if self.checkOptions1.get_active()==True:
                    strTran=webTranslateY(strEntry,"spanish")+'\n'
                    position = self.tbufferMain.get_end_iter()
                    self.tbufferMain.insert_with_tags( position, strTran,red_tag) 
                if self.checkOptions2.get_active()==True:
                    strTran=webTranslateF(strEntry,"spanish")+'\n'
                    position = self.tbufferMain.get_end_iter()
                    self.tbufferMain.insert_with_tags( position, strTran,green_tag) 
                if self.checkOptions3.get_active()==True:
                    strTran=webTranslateG(strEntry,"spanish")
                    position = self.tbufferMain.get_end_iter()
                    self.tbufferMain.insert_with_tags( position, strTran,blue_tag) 

            self.windowMain.set_sensitive(True)         
            
            
            if self.radbutOptions3.get_active()==True:      
                self.windowMain.set_focus(self.entryMain)   


    def destroy(self, widget, data=None):


        writeOptions()
        gtk.main_quit()
        
    def delete_event(self, widget, event, data=None):
        
        return False

    def destroyOptions(self, widget, data=None):        
        
        self.windowOptions.hide()
        return True
        
    def delete_eventOptions(self, widget, event, data=None):    
        global selectionMode
        
        
        socket.setdefaulttimeout(self.sbuttonOptions.get_value_as_int())
        
        if self.radbutOptions1.get_active()==True:      
            selectionMode="CLIPBOARD"
        else:
            selectionMode="PRIMARY"
        
        self.windowOptions.hide()
        return True

    def delete_eventAbout(self, widget, event, data=None):
        self.windowAbout.hide()
        return True
        

    def delete_eventLearn(self, widget, event, data=None):
        self.windowLearn.hide()
        return True

    def delete_eventLearnLearn(self, widget, event, data=None):
        
        
        
        
        global lstDictionary
        global lstDictionarySans
        
        engWord=self.entryLearn1.get_text()
        spaWord=self.entryLearn2.get_text()
        
        if engWord=="" or spaWord=="":      
            return True
        
        fileUserDict = open(homeDir+"/.spangles-user.dict","a")
        strWriteString=engWord+" : "+spaWord+"\n"
        fileUserDict.write(strWriteString)
        fileUserDict.close()

        lstLine=[]
        lstLine.append(engWord)
        lstLine.append(spaWord)
        lstDictionary.append(lstLine)   

        
        
        
        engWordSans=removeAccents(engWord)
        spaWordSans=removeAccents(spaWord)
        
        engWordSans=string.lower(engWordSans)
        spaWordSans=string.lower(spaWordSans)
        
        indexWS=engWordSans.find(" ")
        if indexWS<>-1:
            engWordSans=engWordSans[:indexWS]
        indexWS=spaWordSans.find(" ")
        if indexWS<>-1:
            spaWordSans=spaWordSans[:indexWS]
        
        lstLine=[]
        lstLine.append(engWordSans)
        lstLine.append(spaWordSans)
        lstDictionarySans.append(lstLine)

        self.windowLearn.hide()
        
        if self.tbuttonFetchMode.get_active() ==False:
            self.entryHandler(self,widget)   
        return True

        
    def toggleFetchMode(self,widget,data=None):
        if self.tbuttonFetchMode.get_active() ==True:
            self.tbuttonFetchMode.set_label("Online")
            self.entryHandler(self,widget)   
        else:
            self.tbuttonFetchMode.set_label("Offline")
            self.entryHandler(self,widget)   
            
    def toggleLanguage(self,widget, data=None):
        if self.tbuttonLanguage.get_active() ==True:
            self.tbuttonLanguage.set_label("Spanish")
            self.entryHandler(self,widget)   
        else:
            self.tbuttonLanguage.set_label("English")
            self.entryHandler(self,widget)   

    def optionsHandler(self,widget,data=None):
        self.windowOptions.show()
        return

    def aboutHandler(self,widget,data=None):
        
        self.windowAbout.show()
        return

    def learnHandler(self,widget,data=None):
        strEntryMain=self.entryMain.get_text()

        if len(strEntryMain)<>"":
            if self.tbuttonLanguage.get_active() ==False:
                self.entryLearn1.set_text(strEntryMain)   
                self.entryLearn2.set_text("")
            else:
                self.entryLearn1.set_text("")             
                self.entryLearn2.set_text(strEntryMain)
                
        self.windowLearn.show()
        return

    
    def __init__(self):
        global red_tag, green_tag,blue_tag

        self.windowMain = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.vBox=gtk.VBox(homogeneous=False, spacing=0)
        self.hbBox=gtk.HButtonBox()
        self.tbuttonFetchMode = gtk.ToggleButton("Offline")
        self.tbuttonLanguage = gtk.ToggleButton("English")
        self.buttonAbout = gtk.Button("About")
        self.swinMain=gtk.ScrolledWindow(hadjustment=None, vadjustment=None)
        self.tviewMain=gtk.TextView(buffer=None)
        self.tbufferMain=self.tviewMain.get_buffer()    
        red_tag = self.tbufferMain.create_tag(foreground="#AA0000")
        green_tag = self.tbufferMain.create_tag(foreground="#00AA00")
        blue_tag = self.tbufferMain.create_tag(foreground="#0000AA")
        self.entryMain=gtk.Entry(max=0)
        self.hbBox2=gtk.HButtonBox()
        self.buttonTranslate = gtk.Button("Translate")
        self.buttonLearn=gtk.Button("Learn")
        self.buttonOptions=gtk.Button("Options")
        
        
        self.windowOptions = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.vboxOptions=gtk.VBox(homogeneous=False, spacing=0)
        self.hboxOptions=gtk.HBox()
        self.labelOptions1=gtk.Label(str="OPTIONS")
        self.hsepOptions1=gtk.HSeparator()
        self.labelOptions2=gtk.Label(str="\nTranslator Timeout (seconds):\n ")
        self.sbuttonOptions=gtk.SpinButton(adjustment=None, climb_rate=0.0, digits=0)
        self.hsepOptions2=gtk.HSeparator()
        
        self.hboxOptions3=gtk.HBox()
        self.labelOptions4=gtk.Label(str="\nPopup Window:\n")
        self.radbutOptions3=gtk.RadioButton(group=None, label="On", use_underline=True)
        self.radbutOptions4=gtk.RadioButton(group=self.radbutOptions3, label="Off", use_underline=True)
        self.hsepOptions4=gtk.HSeparator()
        
        self.hboxOptions2=gtk.HBox()
        self.labelOptions3=gtk.Label(str="\nSelection Method:\n")
        self.radbutOptions1=gtk.RadioButton(group=None, label="Clipboard", use_underline=True)
        self.radbutOptions2=gtk.RadioButton(group=self.radbutOptions1, label="Highlight", use_underline=True)
        
        self.hsepOptions3=gtk.HSeparator()        
        self.checkOptions1=gtk.CheckButton(label="Yahoo Babelfish", use_underline=True)
        self.checkOptions2=gtk.CheckButton(label="FreeTranslation.com", use_underline=True)
        self.checkOptions3=gtk.CheckButton(label="Google Translate", use_underline=True)

        self.hsepOptions5=gtk.HSeparator()        
        self.hbOptions=gtk.HButtonBox()
        self.buttonOkOptions = gtk.Button("OK")
        self.buttonCancelOptions = gtk.Button("Cancel")
        self.labelOptions5=gtk.Label(str="Select Services:")
        
        
        self.windowAbout = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.vboxAbout=gtk.VBox(homogeneous=False, spacing=0)
        self.labelAbout1=gtk.Label(str="SPAN-GLES 2.0")
        self.hsepAbout1=gtk.HSeparator()


        self.labelAbout2=gtk.Label(str="\nA Spanish <--> English Translator\n\n See man page \
for manual and license. \n\n(c) Copyright 2011 Martyn Crabtree\n")
        self.labelAbout3=gtk.Label(str="filler\n")
        self.buttonOkAbout = gtk.Button("OK")
        
        
        self.windowLearn = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.vboxLearn=gtk.VBox(homogeneous=False, spacing=0)
        self.labelLearn1=gtk.Label(str="English:")
        self.entryLearn1=gtk.Entry(max=0)
        self.labelLearn2=gtk.Label(str="Spanish:")
        self.entryLearn2=gtk.Entry(max=0)
        self.hsepLearn=gtk.HSeparator()
        self.hbLearn=gtk.HButtonBox()
        self.buttonLearnLearn = gtk.Button("Learn")
        self.buttonCancelLearn = gtk.Button("Cancel")


        
        self.tbuttonFetchMode.set_tooltip_text("Online u Offline")
        self.tbuttonLanguage.set_tooltip_text("Ingles o Espanol")
        self.buttonAbout.set_tooltip_text("Informacion")
        self.buttonLearn.set_tooltip_text("Aprender")
        self.buttonOptions.set_tooltip_text("Opciones")
        self.buttonTranslate.set_tooltip_text("Traducir")

        self.buttonLearnLearn.set_tooltip_text("Aprender")
        self.buttonCancelLearn.set_tooltip_text("Cancelar")

        self.labelOptions2.set_tooltip_text("Interrupcion Programada del Traductor (segundos)")    
        self.labelOptions3.set_tooltip_text("Metodo de Seleccion")
        self.labelOptions4.set_tooltip_text("Ventana Emergente")  
        self.radbutOptions1.set_tooltip_text("Portapapeles")    
        self.radbutOptions2.set_tooltip_text("Seleccionar")     
        self.radbutOptions3.set_tooltip_text("Si")
        self.radbutOptions4.set_tooltip_text("No")

        self.swinMain.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
        self.tviewMain.set_border_width(5)
        self.tviewMain.set_editable(False)
        self.tviewMain.set_wrap_mode(gtk.WRAP_WORD)
        
        
        
        
        
        
        self.windowOptions.set_modal(True)
        self.windowOptions.set_keep_above(True)
        self.windowOptions.set_position(gtk.WIN_POS_CENTER)
        self.windowOptions.set_transient_for(self.windowMain)
        self.sbuttonOptions.set_editable(True)
        self.sbuttonOptions.set_range(5, 300)
        self.sbuttonOptions.set_increments(5,10)
        self.sbuttonOptions.set_value(5)

        
        self.windowAbout.set_modal(True)
        self.windowAbout.set_keep_above(True)
        self.windowAbout.set_position(gtk.WIN_POS_CENTER)
        self.windowAbout.set_transient_for(self.windowMain)
        self.labelAbout2.set_justify(gtk.JUSTIFY_CENTER)
        
        
        self.windowLearn.set_modal(True)
        self.windowLearn.set_keep_above(True)
        self.windowLearn.set_position(gtk.WIN_POS_CENTER)
        self.windowLearn.set_transient_for(self.windowMain)



        self.windowMain.add(self.vBox)
        self.vBox.pack_start(self.hbBox, expand=False, fill=False, padding=0)
        self.hbBox.pack_start(self.buttonLearn, expand=True, fill=True, padding=0)
        self.hbBox.pack_start(self.buttonOptions, expand=True, fill=True, padding=0)
        self.hbBox.pack_start(self.buttonAbout, expand=True, fill=True, padding=0)
        self.vBox.pack_start(self.swinMain, expand=True, fill=True, padding=0)
        self.swinMain.add(self.tviewMain)
        self.vBox.pack_start(self.entryMain, expand=False, fill=False, padding=0)
        self.vBox.pack_start(self.hbBox2, expand=False, fill=False, padding=0)
        self.hbBox2.pack_start(self.tbuttonFetchMode, expand=True, fill=True, padding=0)
        self.hbBox2.pack_start(self.tbuttonLanguage, expand=True, fill=True, padding=0)
        self.hbBox2.pack_start(self.buttonTranslate, expand=True, fill=True, padding=0)
        
        
        self.windowOptions.add(self.vboxOptions)
        self.vboxOptions.pack_start(self.labelOptions1, expand=False, fill=False, padding=0)
        self.vboxOptions.pack_start(self.hsepOptions1, expand=False, fill=False, padding=0)
        
        self.vboxOptions.pack_start(self.hboxOptions3, expand=False, fill=True)
        self.hboxOptions3.pack_start(self.labelOptions4, expand=True, fill=True)
        self.hboxOptions3.pack_start(self.radbutOptions3, expand=True, fill=True)
        self.hboxOptions3.pack_start(self.radbutOptions4, expand=True, fill=True)
        self.vboxOptions.pack_start(self.hsepOptions4, expand=False, fill=False)
               
        self.vboxOptions.pack_start(self.hboxOptions, expand=True, fill=True)
        self.hboxOptions.pack_start(self.labelOptions2, expand=True, fill=True)
        self.hboxOptions.pack_start(self.sbuttonOptions, expand=True, fill=True)
        self.vboxOptions.pack_start(self.hsepOptions3, expand=False, fill=False)        

        self.vboxOptions.pack_start(self.hboxOptions2, expand=False, fill=True)
        self.hboxOptions2.pack_start(self.labelOptions3, expand=True, fill=True)
        self.hboxOptions2.pack_start(self.radbutOptions1, expand=True, fill=True)
        self.hboxOptions2.pack_start(self.radbutOptions2, expand=True, fill=True)
        self.vboxOptions.pack_start(self.hsepOptions2, expand=False, fill=False)

        self.vboxOptions.pack_start(self.labelOptions5, expand=False, fill=False, padding=0)
        self.vboxOptions.pack_start(self.checkOptions1, expand=False, fill=False, padding=0)
        self.vboxOptions.pack_start(self.checkOptions2, expand=False, fill=False, padding=0)
        self.vboxOptions.pack_start(self.checkOptions3, expand=False, fill=False, padding=0)
        self.vboxOptions.pack_start(self.hsepOptions5, expand=False, fill=False, padding=0)

        self.vboxOptions.pack_start(self.hbOptions, expand=False, fill=False, padding=0)
        self.hbOptions.pack_start(self.buttonOkOptions, expand=True, fill=True, padding=0)
        

        
        self.windowAbout.add(self.vboxAbout)
        self.vboxAbout.pack_start(self.labelAbout1, expand=False, fill=False, padding=0)
        self.vboxAbout.pack_start(self.hsepAbout1, expand=False, fill=False, padding=0)
        self.vboxAbout.pack_start(self.labelAbout2, expand=False, fill=False, padding=0)
        self.vboxAbout.pack_start(self.labelAbout3, expand=False, fill=False, padding=0)
        self.vboxAbout.pack_start(self.buttonOkAbout, expand=False, fill=False, padding=0)
        
        self.windowLearn.add(self.vboxLearn)
        self.vboxLearn.pack_start(self.labelLearn1, expand=False, fill=False, padding=0)
        self.vboxLearn.pack_start(self.entryLearn1, expand=False, fill=False, padding=0)
        self.vboxLearn.pack_start(self.labelLearn2, expand=False, fill=False, padding=0)
        self.vboxLearn.pack_start(self.entryLearn2, expand=False, fill=False, padding=0)        
        self.vboxLearn.pack_start(self.hsepLearn, expand=False, fill=False, padding=0)        
        self.vboxLearn.pack_start(self.hbLearn, expand=False, fill=False, padding=0)        
        self.hbLearn.pack_start(self.buttonLearnLearn, expand=False, fill=False, padding=0)        
        self.hbLearn.pack_start(self.buttonCancelLearn, expand=False, fill=False, padding=0)        
                

        self.windowMain.connect("delete_event", self.delete_event)
        self.windowMain.connect("destroy", self.destroy)
        self.tbuttonFetchMode.connect("toggled", self.toggleFetchMode, None)
        self.tbuttonLanguage.connect("toggled", self.toggleLanguage, None)
        self.entryMain.connect("activate",self.entryHandler,None)
        self.buttonTranslate.connect("clicked", self.entryHandler, None)
        self.buttonOptions.connect("clicked",self.optionsHandler,None)
        self.buttonAbout.connect("clicked",self.aboutHandler,None)
        self.buttonLearn.connect("clicked",self.learnHandler,None)
        
        self.windowOptions.connect("delete_event", self.delete_eventOptions)
        self.windowOptions.connect("destroy", self.destroyOptions)
        self.buttonOkOptions.connect("clicked", self.delete_eventOptions, None)         
        self.buttonCancelOptions.connect("clicked", self.delete_eventOptions, None)     
        
        self.windowAbout.connect("delete_event", self.delete_eventAbout)
        self.buttonOkAbout.connect("clicked", self.delete_eventAbout, None)
        
        self.windowLearn.connect("delete_event", self.delete_eventLearn)
        self.buttonLearnLearn.connect("clicked", self.delete_eventLearnLearn, None)
        self.buttonCancelLearn.connect("clicked", self.delete_eventLearn, None)
        self.entryLearn1.connect("activate",self.delete_eventLearnLearn,None)
        self.entryLearn2.connect("activate",self.delete_eventLearnLearn,None)


        self.buttonCancelLearn.show()
        self.buttonLearnLearn.show()
        self.hbLearn.show()
        self.hsepLearn.show()
        self.entryLearn2.show()
        self.labelLearn2.show()
        self.entryLearn1.show()
        self.labelLearn1.show()
        self.vboxLearn.show()
        
        self.buttonOkAbout.show()
        self.labelAbout3.show()
        self.labelAbout2.show()
        self.hsepAbout1.show()
        self.labelAbout1.show()
        self.vboxAbout.show()
        
        self.buttonCancelOptions.show()
        self.buttonOkOptions.show()
        self.hbOptions.show()
        self.hsepOptions3.show()
        
        self.labelOptions4.show()
        self.hboxOptions3.show()
        self.radbutOptions3.show()
        self.radbutOptions4.show()
        self.hsepOptions4.show()
        
        self.labelOptions3.show()
        self.hboxOptions2.show()
        self.radbutOptions1.show()
        self.radbutOptions2.show()
        
        self.labelOptions5.show()
        self.checkOptions1.show()
        self.checkOptions2.show()
        self.checkOptions3.show()
        self.hsepOptions5.show()
        
        self.hsepOptions2.show()
        self.sbuttonOptions.show()
        self.labelOptions2.show()
        self.hboxOptions.show()
        self.hsepOptions1.show()
        self.labelOptions1.show()
        self.vboxOptions.show()
        
        self.buttonOptions.show()
        self.buttonLearn.show()
        self.buttonTranslate.show()
        self.hbBox2.show()
        self.entryMain.show()
        self.tviewMain.show()
        self.swinMain.show()
        self.buttonAbout.show()
        self.tbuttonFetchMode.show()
        self.tbuttonLanguage.show()
        self.hbBox.show()
        self.vBox.show()
        self.windowMain.show()

    def main(self):
        self.checkOptions1.set_active(True) 
        self.checkOptions2.set_active(True) 
        self.checkOptions3.set_active(True) 

        readOptions()
        
        gobject.timeout_add (1 * 500, self.timerHandler)
        self.windowMain.set_icon_from_file(execPath+"/span-gles.png")
        self.labelAbout3.set_markup("<a href='http://www.marteq.net/spangles.html'>www.marteq.net/spangles.html</a>\n")


        



        strDictionary=execPath+"/spangles-main.dict"
        readDictionary(strDictionary)   
        
        if os.path.exists(homeDir+"/.spangles-user.dict")==False: 
            out_file = open(homeDir+"/.spangles-user.dict","w")   
            out_file.close()
 
        strDictionary=homeDir+"/.spangles-user.dict"
        readDictionary(strDictionary)   

        gtk.main()


if __name__ == "__main__":
    objSpangles = Spangles()
    objSpangles.main()
