#!/usr/bin/python

# vim:ts=4:et:sw=4:tw=80
import hildon
import gtk
import pango
import gobject
import os

load_opt = {'DISABLED' : 0, 'STARTUP' : 1, 'PYAPP' : 2 }

class PyLauncherGUI(hildon.Program):
    def callback(self, widget, data=None):
        widget_is_active = widget.get_active()
        if widget_is_active:
            self.opt = data

    def __init__(self):
        hildon.Program.__init__(self)

        self.window = hildon.Window()
        gtk.set_application_name('Python Launcher')
        self.add_window(self.window)

        self.window.connect('destroy', self.onExit)

        self._createMenu()
        self._createPanel()
        self._readConfig()

        self.window.show_all()

    def _createMenu(self):
        self.menu = gtk.Menu()

        # Main Menu
        self.mnuItmFile = gtk.MenuItem('_File')
        self.mnuItmHelp = gtk.MenuItem('_Help')

        self.mnuFile = gtk.Menu()
        self.mnuHelp = gtk.Menu()

        self.mnuItmFile.set_submenu(self.mnuFile)
        self.mnuItmHelp.set_submenu(self.mnuHelp)

        # Menu File
        self.mnuItmFileExit = gtk.MenuItem('_Exit')
        self.mnuFile.add(self.mnuItmFileExit)
        self.mnuItmFileExit.connect_object('activate', self.onExit, 'file.exit')

        # Menu Help
        self.mnuItmHelpAbout =  gtk.MenuItem('_About...')
        self.mnuHelp.add(self.mnuItmHelpAbout)
        self.mnuItmHelpAbout.connect_object('activate', self.onAbout, 'help.about')

        self.menu.add(self.mnuItmFile)
        self.menu.add(self.mnuItmHelp)

        self.set_common_menu (self.menu);

    def onExit(self, widget):
        gtk.main_quit()

    def onApply(self, widget, data=None):
        if self.loaded_opt != self.opt:
            opt_file = open(self.opt_filename, 'w+')
            opt_file.write(str(self.opt))
            opt_file.close()

            if self.opt == load_opt['STARTUP']:
                os.system('/usr/bin/python-launcher-daemon')
            elif self.opt == load_opt['DISABLED']:
                os.system('/usr/bin/python-launcher-daemon -s')

    def onAbout(self, widget):
        dialog = gtk.AboutDialog()
        dialog.set_name('PyLauncher for Maemo')
        dialog.set_version('0.2')
        dialog.set_copyright('\302\251 Copyright 2007 - INdT')
        dialog.set_website('http://www.indt.org/')
        dialog.connect ('response', lambda d, r: d.destroy())
        dialog.show()

    def run(self):
        gtk.main()

    def _createPanel(self):
        box1 = gtk.VBox(False, 0)
        self.window.add(box1)
        box1.show()

        box2 = gtk.HBox(False, 0)
        box2.set_border_width(10)
        box1.pack_start(box2, True, True, 0)
        box2.show()

        label = gtk.Label('Python Launcher loading:')
        box2.pack_start(label, False, False, 0)

        separator = gtk.HSeparator()
        box1.pack_start(separator, False, True, 0)
        separator.show()

        box2 = gtk.VBox(False, 10)
        box2.set_border_width(10)
        box1.pack_start(box2, True, True, 0)
        box2.show()

        self.radiob1 = gtk.RadioButton(None, 'at startup')
        self.radiob1.connect('toggled', self.callback, load_opt['STARTUP'])
        box2.pack_start(self.radiob1, True, True, 10)
        self.radiob1.show()

        self.radiob2 = gtk.RadioButton(self.radiob1, 'at first Python application')
        self.radiob2.connect('toggled', self.callback, load_opt['PYAPP'])
        box2.pack_start(self.radiob2, True, True, 10)
        self.radiob2.show()

        self.radiob3 = gtk.RadioButton(self.radiob1, 'disabled')
        self.radiob3.connect('toggled', self.callback, load_opt['DISABLED'])
        box2.pack_start(self.radiob3, True, True, 10)
        self.radiob3.show()

        separator = gtk.HSeparator()
        box1.pack_start(separator, False, True, 0)
        separator.show()

        box2 = gtk.HBox(False, 10)
        box2.set_border_width(10)
        box1.pack_start(box2, True, True, 10)
        box2.show()

        self.buttonOK = gtk.Button('OK')
        self.buttonOK.connect('clicked', self.onApply, None)
        self.buttonOK.connect_object('clicked', self.onExit, self.window)
        box2.pack_start(self.buttonOK, True, True, 10)
        self.buttonOK.set_flags(gtk.CAN_DEFAULT)
        self.buttonOK.grab_default()
        self.buttonOK.show()

        self.buttonCancel = gtk.Button('Cancel')
        self.buttonCancel.connect_object('clicked', self.onExit, self.window)
        box2.pack_start(self.buttonCancel, True, True, 10)
        self.buttonCancel.show()

    def _readConfig(self):
        home = os.path.expanduser('~/')
        self.opt_filename = os.path.join(home, '.pylauncher')
        opt_file = open(self.opt_filename, 'a+')
        opt_read = opt_file.read(1)

        if opt_read:
            option = int(opt_read)
        else:
            option = None

        opt_file.close()
        self.loaded_opt = option

        if self.loaded_opt == None:
            self.radiob3.set_active(True)
            self.loaded_opt = load_opt['STARTUP']
            return

        if self.loaded_opt == load_opt['STARTUP']:
            self.radiob1.set_active(True)
        elif self.loaded_opt == load_opt['PYAPP']:
            self.radiob2.set_active(True)
        else:
            self.radiob3.set_active(True)

if __name__ == '__main__':
    PyLauncherGUI().run()

