#! /usr/bin/env python

## Copyright (C) 2004 Red Hat, Inc.
## Copyright (C) 2004 Than Ngo <than@redhat.com>

## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.

## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.

## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

import sys

SWITCHDESKTOPDIR = '/usr/share/switchdesk/'
ICONDIR = SWITCHDESKTOPDIR + '/pixmaps/'

if not "/usr/lib/rhs/python" in sys.path:
    sys.path.append("/usr/lib/rhs/python")

if not SWITCHDESKTOPDIR in sys.path:
    sys.path.append(SWITCHDESKTOPDIR)

import signal
import os
import os.path
import string
import gettext
from backend import *


##
## I18N
##
gettext.bindtextdomain(PROGNAME, '/usr/share/locale')
gettext.textdomain(PROGNAME)
try:
    gettext.install(PROGNAME, '/usr/share/locale', 1)
except IOError:
    import __builtin__
    __builtin__.__dict__['_'] = unicode    

import gtk
import gtk.glade

class mainDialog:
    def __init__(self):
        self.wm = ' kde'

    def main(self):
        glade_file = 'switchdesk.glade'

        if not os.path.isfile(glade_file):
            glade_file = GLADEPATH + glade_file
        if not os.path.isfile(glade_file):
            glade_file = SWITCHMAILDIR + glade_file

        self.xml = gtk.glade.XML(glade_file, None, domain=PROGNAME)

        self.xml.signal_autoconnect(
            {
            'on_cancelB_clicked' : self.on_cancelB_clicked,
            'on_okB_clicked' : self.on_okB_clicked,
            'on_gnomeRB_clicked' : self.on_gnomeRB_clicked,
            'on_kdeRB_clicked' : self.on_kdeRB_clicked,
            'on_xfceRB_clicked' : self.on_xfceRB_clicked,
            'on_twmRB_clicked' : self.on_twmRB_clicked,
            'on_windowmakerRB_clicked' : self.on_windowmakerRB_clicked,
            'on_enlightenmentRB_clicked' : self.on_enlightenmentRB_clicked,
            'on_fvwmRB_clicked' : self.on_fvwmRB_clicked,
            'on_icewmRB_clicked' : self.on_icewmRB_clicked,
            'on_fluxboxRB_clicked' : self.on_fluxboxRB_clicked,
            })

        self.window = self.xml.get_widget('window')
        self.image = self.xml.get_widget('Image')
        self.window.connect('delete-event', self.on_Dialog_delete_event)
        self.window.connect('hide', gtk.mainquit)
        self.xml.get_widget('desktopImage').set_from_file(ICONDIR+'switchdesk.png')
        self.hydrate()
        gtk.mainloop()
        
    def on_Dialog_delete_event(self, *args):
        gtk.mainquit()

    def on_cancelB_clicked(self, button):
        gtk.mainquit()

    def on_okB_clicked(self, button):
        self.window.hide()

        if self.xml.get_widget('localCB').get_active():
            self.wm = self.wm + ' local'

        if os.system(HELPER + self.wm):
            self.warningDialog()
        else:
            self.infoDialog()

        gtk.mainquit()

    def on_gnomeRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'gnome.png')
        self.wm = ' gnome'

    def on_kdeRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'kde.png')
        self.wm = ' kde'

    def on_xfceRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'xfce.png')
        self.wm = ' xfce'

    def on_twmRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'twm.png')
        self.wm = ' twm'

    def on_windowmakerRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'windowmaker.png')
        self.wm = ' windowmaker'

    def on_enlightenmentRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'elogo.png')
        self.wm = ' enlightenment'

    def on_fvwmRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'fvwm.png')
        self.wm = ' fvwm'

    def on_icewmRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'icewm.png')
        self.wm = ' icewm'

    def on_fluxboxRB_clicked(self, button):
        self.image.set_from_file(ICONDIR+'fluxbox.png')
        self.wm = ' fluxbox'

    def hydrate(self):
        self.window.set_title(_('Desktop Switcher'))
        self.xml.get_widget('titleLabel').set_text(TEXT)
        self.xml.get_widget('frameLabel').set_label(_('Available Desktops'))
        self.xml.get_widget('localCB').set_label(_('Change only applies to current display'))
        self.hydrate_wm()

    def hydrate_wm(self):
        if checkWM(GNOME):
            self.xml.get_widget('gnomeRB').show()

        if checkWM(KDE):
            self.xml.get_widget('kdeRB').show()

        if checkWM(XFCE):
            self.xml.get_widget('xfceRB').show()

        if checkWM(TWM):
            self.xml.get_widget('twmRB').show()

        if checkWM(WINDOWMAKER):
            self.xml.get_widget('windowmakerRB').show()

        if checkWM(ENLIGHTENMENT):
            self.xml.get_widget('enlightenmentRB').show()

        if checkWM(FVWM):
            self.xml.get_widget('fvwmRB').show()

        if checkWM(ICEWM):
            self.xml.get_widget('icewmRB').show()

        if checkWM(FLUXBOX):
            self.xml.get_widget('fluxboxRB').show()
 
        self.xml.get_widget('Image').set_from_file(ICONDIR+'gnome.png')

    def infoDialog(self):
        dlg = gtk.MessageDialog(self.window,
                                gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
                                gtk.MESSAGE_INFO,
                                gtk.BUTTONS_OK,
                                INFO_TEXT)
        
        dlg.set_position (gtk.WIN_POS_MOUSE)
        dlg.run()
        dlg.destroy()

    def warningDialog(self):
        dlg = gtk.MessageDialog(self.window,
                                gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
                                gtk.MESSAGE_INFO,
                                gtk.BUTTONS_OK,
                                WARNING_TEXT)
        dlg.set_position (gtk.WIN_POS_MOUSE)
        dlg.run()
        dlg.destroy()


# make ctrl-C work
if __name__ == '__main__':
    signal.signal (signal.SIGINT, signal.SIG_DFL)
    dlg = mainDialog().main()
    
    sys.exit(0)
