#!/usr/bin/python

from gtk import *
from GTK import *
import os
import string
import imp

from utils import MsgBox

applet_dir='/usr/lib/sysset'
#applet_dir='/home/ee00981/ipaq/pypaq/applets'
#applet_dir='/home/edwardam/Projects/ipaq/pypaq/applets'

applets = []
print 'loading applets:'
for each in os.listdir(applet_dir):
    f = open('%s/%s' % (applet_dir,each),'r')
    foo = imp.load_source(each[:-3],applet_dir,f)
    print '%s\n----' % foo.name
    applets.append(foo)
    
    f.close()

class SaveButton(GtkButton):
    def __init__(self):
        GtkButton.__init__(self,"Save")
        self.show()
        
class ExitButton(GtkButton):
    def __init__(self):
        GtkButton.__init__(self,"Exit")
        self.connect('clicked',self.quit)
        self.show()

    def save_and_exit(self,foo):                                                
        for each in applets:                                                    
            if each.applet_instance.dirty == TRUE:                              
                each.applet_instance.save()                                     
        print 'saving'                                                          
        mainquit()                                                              

    def just_exit(self,foo):                                                    
        print 'exiting'                                                         
        mainquit()                                                              

    def quit(self,btn):                                                         
        dirty = FALSE                                                           
        for each in applets:                                                    
            if each.applet_instance.dirty == TRUE:                              
                dirty = TRUE                                                    
        if dirty == FALSE:                                                      
            mainquit()                                                          
        else:                                                                   
            mbox = MsgBox('Settings may have changed.\n\n Do you wish to save?',2,(self.save_and_exit,self.just_exit))
            mbox.show()                                                         

class AppletBox(GtkVBox):
    def __init__(self):
        GtkVBox.__init__(self)
        self.hbox = GtkHBox()
        self.save_btn = SaveButton()
        self.hbox.add(self.save_btn)
        self.exit_btn = ExitButton()
        self.hbox.add(self.exit_btn)
        self.hbox.show()
        self.applet = GtkLabel('')
        self.pack_start(self.applet,expand=TRUE)
        self.applet.show()
        self.pack_end(self.hbox,expand=FALSE)
        self.display = TRUE
        self.connectid = None

    def DisplayApplet(self,applet_module):
        if self.applet:
            self.applet.hide()
            self.remove(self.applet)
        self.applet = applet_module.applet_instance
        self.applet.show()
        if self.connectid:
            self.save_btn.disconnect(self.connectid)
        self.connectid = self.save_btn.connect('clicked',self.save_applet_settings)
        self.pack_start(self.applet)

    def save_applet_settings(self,btn):
        self.applet.save(msgbox=TRUE)
            
    def quit(self,btn):
        self.exit_btn.quit(btn)
            
def DisplayApplet(self,container,applet_module):
    container.DisplayApplet(applet_module)

class MainWindow(GtkWindow):
    def __init__(self):
        GtkWindow.__init__(self)
        self.set_name("System Setup")
        self.set_uposition(0, 0)
        split1 = GtkHPaned()
        self.add(split1)
        split1.show()
        self.root_tree = GtkTree()
        self.sys_root = GtkTreeItem("System")
        self.sys_root.show()
        self.root_tree.append(self.sys_root)
        self.applet_box = AppletBox()
        self.applet_box.show()
        self.connect('destroy',self.applet_box.quit)
        split1.add1(self.root_tree)
        split1.add2(self.applet_box)
        split1.set_position(65)
        ntree = GtkTree()
        ntree.show()
        for each in xrange(len(applets)):
            applets[each].applet_item = GtkTreeItem(applets[each].name)
            applets[each].applet_item.show()
            applets[each].applet_item.connect('select',DisplayApplet,self.applet_box,applets[each])
            ntree.append(applets[each].applet_item)
        self.sys_root.set_subtree(ntree)
        self.root_tree.show()
        self.sys_root.expand()

        self.set_usize(240, 280)

        self.show()

if __name__ == "__main__":
    t = MainWindow()
    t.get_window().set_cursor(cursor_new(34 & 0xfe))
    mainloop()
