set type (load_pages): get the oaf property for type and track the page

2002-04-06  JP Rosevear  <jpr@ximian.com>

	* e-shell-settings-dialog.c (page_new): set type
	(load_pages): get the oaf property for type and track the page
	number of the highest priority for each type
	(destroy_type_entry): destroy hash func
	(impl_destroy): destroy the hash table
	(init): create private struct and hash table
	(e_shell_settings_dialog_show_type): show the page of the given
	type

	* e-shell-view-menu.c (command_settings): show the page for the
	current folder type by default

	* e-shell-settings-dialog.h: new proto

svn path=/trunk/; revision=16376
This commit is contained in:
JP Rosevear
2002-04-06 20:00:51 +00:00
committed by JP Rosevear
parent 5be9af3b13
commit fc85f0ce45
4 changed files with 97 additions and 10 deletions

View File

@ -1,3 +1,19 @@
2002-04-06 JP Rosevear <jpr@ximian.com>
* e-shell-settings-dialog.c (page_new): set type
(load_pages): get the oaf property for type and track the page
number of the highest priority for each type
(destroy_type_entry): destroy hash func
(impl_destroy): destroy the hash table
(init): create private struct and hash table
(e_shell_settings_dialog_show_type): show the page of the given
type
* e-shell-view-menu.c (command_settings): show the page for the
current folder type by default
* e-shell-settings-dialog.h: new proto
2002-04-06 Ettore Perazzoli <ettore@ximian.com>
* e-shell-settings-dialog.c (init): Set the title of the dialog.

View File

@ -43,6 +43,12 @@
#define PARENT_TYPE e_multi_config_dialog_get_type ()
static EMultiConfigDialogClass *parent_class = NULL;
struct _EShellSettingsDialogPrivate {
GHashTable *types;
};
/* Page handling. */
@ -50,6 +56,7 @@ struct _Page {
char *title;
char *description;
GdkPixbuf *icon;
OAF_Property *type;
int priority;
EConfigPage *page_widget;
};
@ -59,6 +66,7 @@ static Page *
page_new (const char *title,
const char *description,
GdkPixbuf *icon,
OAF_Property *type,
int priority,
EConfigPage *page_widget)
{
@ -71,6 +79,7 @@ page_new (const char *title,
page->title = g_strdup (title);
page->description = g_strdup (description);
page->icon = icon;
page->type = type;
page->priority = priority;
page->page_widget = page_widget;
@ -114,13 +123,16 @@ sort_page_list (GList *list)
static void
load_pages (EShellSettingsDialog *dialog)
{
EShellSettingsDialogPrivate *priv;
OAF_ServerInfoList *control_list;
CORBA_Environment ev;
GSList *language_list;
GList *page_list;
GList *p;
int i;
int i, j;
priv = dialog->priv;
CORBA_exception_init (&ev);
control_list = oaf_query ("defined(evolution:config_item:title)", NULL, &ev);
@ -140,6 +152,7 @@ load_pages (EShellSettingsDialog *dialog)
const char *description;
const char *icon_path;
const char *priority_string;
OAF_Property *type;
int priority;
GdkPixbuf *icon;
@ -148,6 +161,7 @@ load_pages (EShellSettingsDialog *dialog)
title = oaf_server_info_prop_lookup (info, "evolution:config_item:title", language_list);
description = oaf_server_info_prop_lookup (info, "evolution:config_item:description", language_list);
icon_path = oaf_server_info_prop_lookup (info, "evolution:config_item:icon_name", NULL);
type = oaf_server_info_prop_find (info, "evolution:config_item:type");
priority_string = oaf_server_info_prop_lookup (info, "evolution:config_item:priority", NULL);
if (icon_path == NULL) {
@ -164,6 +178,8 @@ load_pages (EShellSettingsDialog *dialog)
}
}
if (type != NULL && type->v._d != OAF_P_STRINGV)
type = NULL;
if (priority_string == NULL)
priority = 0xffff;
else
@ -174,7 +190,7 @@ load_pages (EShellSettingsDialog *dialog)
if (! BONOBO_EX (&ev)) {
Page *page;
page = page_new (title, description, icon, priority,
page = page_new (title, description, icon, type, priority,
E_CONFIG_PAGE (e_corba_config_page_new_from_objref (corba_object)));
page_list = g_list_prepend (page_list, page);
@ -187,7 +203,7 @@ load_pages (EShellSettingsDialog *dialog)
}
page_list = sort_page_list (page_list);
for (p = page_list; p != NULL; p = p->next) {
for (p = page_list, i = 0; p != NULL; p = p->next, i++) {
Page *page;
page = (Page *) p->data;
@ -198,6 +214,17 @@ load_pages (EShellSettingsDialog *dialog)
page->icon,
page->page_widget);
if (page->type != NULL) {
GNOME_stringlist list = page->type->v._u.value_stringv;
for (j = 0; j < list._length; j++) {
if (g_hash_table_lookup (priv->types, list._buffer[j]) == NULL)
g_hash_table_insert (priv->types, g_strdup (list._buffer[j]),
GINT_TO_POINTER (i));
}
}
page_free (page);
}
@ -211,15 +238,28 @@ load_pages (EShellSettingsDialog *dialog)
/* GtkObject methods. */
static gboolean
destroy_type_entry (gpointer key, gpointer value, gpointer data)
{
g_free (key);
return TRUE;
}
static void
impl_destroy (GtkObject *object)
{
EShellSettingsDialog *dialog;
EShellSettingsDialogPrivate *priv;
dialog = E_SHELL_SETTINGS_DIALOG (object);
priv = dialog->priv;
g_hash_table_foreach_remove (priv->types, destroy_type_entry, NULL);
g_hash_table_destroy (priv->types);
/* (Really nothing to do here for now.) */
g_free (priv);
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}
@ -238,6 +278,13 @@ class_init (EShellSettingsDialog *class)
static void
init (EShellSettingsDialog *dialog)
{
EShellSettingsDialogPrivate *priv;
priv = g_new (EShellSettingsDialogPrivate, 1);
priv->types = g_hash_table_new (g_str_hash, g_str_equal);
dialog->priv = priv;
load_pages (dialog);
gtk_window_set_title (GTK_WINDOW (dialog), _("Evolution Settings"));
@ -246,7 +293,7 @@ init (EShellSettingsDialog *dialog)
GtkWidget *
e_shell_settings_dialog_new (void)
e_shell_settings_dialog_new ()
{
EShellSettingsDialog *new;
@ -255,6 +302,25 @@ e_shell_settings_dialog_new (void)
return GTK_WIDGET (new);
}
void
e_shell_settings_dialog_show_type (EShellSettingsDialog *dialog, const char *type)
{
EShellSettingsDialogPrivate *priv;
gpointer value;
int page;
g_return_if_fail (dialog != NULL);
g_return_if_fail (E_IS_SHELL_SETTINGS_DIALOG (dialog));
g_return_if_fail (type != NULL);
priv = dialog->priv;
value = g_hash_table_lookup (priv->types, type);
page = GPOINTER_TO_INT (value);
e_multi_config_dialog_show_page (E_MULTI_CONFIG_DIALOG (dialog), page);
}
E_MAKE_TYPE (e_shell_settings_dialog, "EShellSettingsDialog", EShellSettingsDialog,
class_init, init, PARENT_TYPE)

View File

@ -57,8 +57,10 @@ struct _EShellSettingsDialogClass {
};
GtkType e_shell_settings_dialog_get_type (void);
GtkWidget *e_shell_settings_dialog_new (void);
GtkType e_shell_settings_dialog_get_type (void);
GtkWidget *e_shell_settings_dialog_new (void);
void e_shell_settings_dialog_show_type (EShellSettingsDialog *dialog,
const char *type);
#ifdef __cplusplus
}

View File

@ -589,11 +589,14 @@ command_settings (BonoboUIComponent *uih,
{
EShellView *shell_view;
GtkWidget *dialog;
const char *type;
shell_view = E_SHELL_VIEW (data);
type = e_shell_view_get_current_folder_type (shell_view);
dialog = e_shell_settings_dialog_new ();
e_shell_settings_dialog_show_type (E_SHELL_SETTINGS_DIALOG (dialog), type);
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (shell_view));
gtk_widget_show (dialog);