#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

"""
This program is under license GPL2 (see LICENSE file)

Ahutors: 
    Riccardo Attilio Galli  <riccardo@sideralis.org>
    Federico Emanuele Galli <fede@sideralis.org>
    
WebPage:
    http://www.sideralis.org
"""

__version__='1.0'

import os,sys,atexit

os.chdir(os.path.abspath(sys.path[0]))

if sys.platform=='win32':
    prog_path= ('library.zip' in sys.path[0]) and os.path.dirname(sys.path[0]) or sys.path[0] 
    os.environ['PATH']=os.environ['PATH'].strip()
    if not os.environ['PATH'][-1]==';': os.environ['PATH']+=';'
    for i in ('bin','lib'):
        os.environ['PATH']+= ("%s; " %  os.path.join(prog_path,i))

try:  
    import gtk,gobject
except ImportError,e:
    print >> sys.stderr, "gtk+ >=2.6.0 e/o pygtk>=2.6.0 assenti"
    sys.exit(-1)

from MainLibrary import Rubrica,get_settings_path,Preferences


#########################

### Firstly, let's load the preferences, and sets internationalization
prefs=Preferences()
prefs.load()
atexit.register(prefs.save)

lang_code=prefs.lang
os.environ['LANG'] = lang_code
os.environ['LANGUAGE'] = lang_code
os.environ['LC_MESSAGES'] = lang_code
import locale
win_code= str(sys.platform=='win32' and lang_code.replace('_','-').lower() or lang_code)
#locale.setlocale(locale.LC_ALL, win_code)
locale.setlocale(locale.LC_ALL)
import gettext
gettext.install('sidesms',localedir='locale')

import gtk.glade
gtk.glade.bindtextdomain('sidesms', 'locale')
gtk.glade.textdomain('sidesms')
########################

from singleInstance import isSingleInstance
if not isSingleInstance():
    dialog=gtk.MessageDialog(None,False,gtk.MESSAGE_ERROR,
        gtk.BUTTONS_OK,
        _(u"Applicazione gi� avviata.")#\n        "Se non risultasse vero, cancellate il file\n%s" % os.path.join(get_settings_path(),'.app_started'))
    )
    dialog.run()
    dialog.destroy()
    sys.exit(1)

### check for updates ###
from UpdateWindow import site_has_update,UpdateWindow

if prefs.check4updates and site_has_update():
    dialog=UpdateWindow()
    dialog.run()
    dialog.destroy()
#########################


### 3,2,1 let's Jam ###

from SMSTrayWindow import SMSTrayWindow
from RubricaWindow import RubricaWindow
from HistoryWindow import HistoryWindow
from MainWindow import MainWindow

rubrica=Rubrica()

### window creation ###
mainWin=MainWindow(rubrica)
rubricaWin=RubricaWindow(rubrica,mainWin) #mainwin e' utilizzata per determinare 
                                          #  dimensioni e posizione iniziale
historyWin=HistoryWindow(rubrica)
#######################

### connecting some signals... ###

def on_rubrica_window_needed(win,bool):
    if bool:
        rubricaWin.show_all()
        rubricaWin.deiconify()
        mainWin.set_rubricaBtn_active(True) #serve se la rubrica e' stata aperta dalla traybar
    else: rubricaWin.hide()

rubricaWin.connect('contact-activated',mainWin.on_contact_activated)
rubricaWin.connect('contact-inserted', mainWin.on_contact_inserted)
rubricaWin.connect('contact-removed',  mainWin.on_contact_removed)

rubricaWin.connect('window-closed',lambda *x: mainWin.set_rubricaBtn_active(False))

mainWin.connect('message-sent',lambda obj,msg: historyWin.add_message(msg))
mainWin.connect('history-window-needed',lambda *x: historyWin.show())
mainWin.connect('rubrica-window-needed',on_rubrica_window_needed)
######################

### and now others, with trayWin this time ###
trayWin=SMSTrayWindow(rubrica)
trayWin.connect('window-closed',lambda *x: rubrica.save())
trayWin.connect('window-closed',historyWin.save_history)
trayWin.connect('window-closed',mainWin.on_delete_event)

trayWin.connect('history-window-needed',lambda *x:historyWin.show())
trayWin.connect('rubrica-window-needed',on_rubrica_window_needed)

def on_mouse_button_pressed(widget,event):
    if event.button!=1: return
    mainWin.present() #mostra la finestra anche se cambio desktop
    if mainWin.minimized:
        if mainWin.rubricaBtn.get_active():
            rubricaWin.deiconify() #deiconifica comunque
        mainWin.deiconify()
    else:
        mainWin.iconify()
        rubricaWin.iconify()
trayWin.connect('button-press-event',on_mouse_button_pressed)

rubricaWin.connect('contact-inserted',trayWin.on_rubrica_changed)
rubricaWin.connect('contact-removed',trayWin.on_rubrica_changed)

def on_send_sms_to_pressed(trayWin,nick):
    mainWin.present()
    mainWin.deiconify() #inutile?
    mainWin.send_sms_to(nick)
trayWin.connect('send-sms-to',on_send_sms_to_pressed)
###########################################################

### set up preferences ###
mainWin.set_main_menu_visible(prefs.main_menu_visible)
if prefs.traybar_visible:
    trayWin.show_tray_icon()
else: trayWin.hide_tray_icon()

prefs.connect('data-changed',mainWin.on_preferences_changed)
prefs.connect('data-changed',trayWin.on_preferences_changed)
prefs.connect('data-changed',rubricaWin.on_preferences_changed)
############################

mainWin.show()
mainWin.connect('delete-event',lambda *x: trayWin.emit('delete-event',gtk.gdk.Event(gtk.gdk.DELETE)))
trayWin.run()