#!/usr/bin/python

# test-configlets -- Simple notebook frontend, for testing

# $Progeny$

# Copyright (C) 2001  Progeny Linux Systems, Inc.
# AUTHORS: Jeff Licquia <jlicquia@progeny.com>

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

# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

import sys
import os
import string

# GTK 1.x
## from gtk import *
## from gnome.ui import *
## from libglade import *

# GTK 2.x
import pygtk
pygtk.require("2.0")

import gtk
import gtk.glade
import gnome.ui

import configlet

notebook = None
notebook_page_list = []
save_settings = None

def debug(message):
    configlet.debug("test-configlets", message)

def closing(*args):
    global cfggroup
    global save_settings

    result = args[-1]
    if result == "save":
        debug("Save!")
        save_settings = "yes"
        for cfglet in cfggroup:
            if not cfglet.validate():
                debug("Configlet named \"%s\" did not validate." \
                      % cfglet.get_display_title())

        cfggroup.on_gnome_close()

    gtk.mainquit()

    return True

def validate_tab(*args):
    (configlet_name, page_name) = string.split(notebook_page_list[notebook.get_current_page()], "|")

    for cfglet in cfggroup:
        if cfglet.get_display_title() == configlet_name:
            if not cfglet.validate_page(page_name):
                debug("page %s of configlet %s did not validate" % \
                      (page_name, configlet_name))

    return True

class ConfigGroup(configlet.BasicConfigGroup):
    def show(self):
        global notebook

        ok_button = gtk.Button("OK")
        ok_button.connect("clicked", closing, "save")
        ok_button.show()

        cancel_button = gtk.Button("Cancel")
        cancel_button.connect("clicked", closing)
        cancel_button.show()
        
        bbar = gtk.HButtonBox()
        bbar.set_size_request(550, -1)
        bbar.set_layout(gtk.BUTTONBOX_SPREAD)
        bbar.set_border_width(10)
        bbar.add(ok_button)
        bbar.add(cancel_button)
        bbar.show()

        notebook = gtk.Notebook()
        notebook.set_tab_pos(gtk.POS_TOP)
        notebook.connect("switch-page", validate_tab)
        notebook.show()

        for cfglet in self:
            debug("showing configlet %s" % cfglet.get_name())
            pagenum = 1
            num_pages = len(cfglet.get_page_names())
            for page in cfglet.get_page_names():
                notebook_page_list.append("%s|%s" % (cfglet.get_display_title(), page))
                if num_pages == 1:
                    labelstr = cfglet.get_display_title()
                else:
                    pagename = cfglet.get_page_display_title(page)
                    if pagename:
                        labelstr = "%s (%s)" % (cfglet.get_name(),
                                                pagename)
                    else:
                        labelstr = "%s (%d)" % (cfglet.get_name(),
                                                pagenum)
                configlet_label = gtk.Label(labelstr)
                configlet_label.show()
                pagewidget = cfglet.get_widget(page)
                pagewidget.unparent()
                notebook.append_page(pagewidget, configlet_label)
                pagewidget.show()
                pagenum = pagenum + 1

        top_vbox = gtk.VBox()
        top_vbox.set_border_width(10)
        top_vbox.add(notebook)
        top_vbox.add(bbar)
        top_vbox.show_all()

        window = gtk.Window()
        window.connect("delete_event", closing)
        window.set_title("Configuration")
        window.add(top_vbox)
        window.show()

        gtk.mainloop()

        self.shown = 1

# Main program.

os.environ["DEBUG"] = "on"

configlet_dir = "."
if len(sys.argv) > 1:
    configlet_dir = sys.argv[1]

configlet.set_privileged_runner(configlet.GnomeSudoPrivilegedRunner())

cfggroup = ConfigGroup(configlet_dir)
cfggroup.gnome_setup()

if os.path.exists("test.in"):
    default_debconf = []
    readfile = open("test.in")
    for line in readfile.readlines():
        if line[-1] == "\n":
            line = line[:-1]
        default_debconf.append(line)
    readfile.close()
    cfggroup.load_debconf(default_debconf)
else:
    cfggroup.load_all_debconf()

cfggroup.show()

if save_settings:
    if os.path.exists("test.in"):
        savefile = open("test.out", "w")
        for line in cfggroup.report_debconf():
            savefile.write(line + "\n")
        savefile.close()
    else:
        cfggroup.save_and_commit_all_debconf()
