diff -ru /home/cyba/gcvs/gnumeric/ChangeLog gnumeric-test/ChangeLog --- /home/cyba/gcvs/gnumeric/ChangeLog Sun Mar 25 00:44:59 2001 +++ gnumeric-test/ChangeLog Wed Mar 28 02:09:03 2001 @@ -1,1 +1,8 @@ +2001-03-28 Zbigniew Chyla + + * src/gnumeric-util.[ch] + (gnumeric_glade_get_widgets): New function. Gets any number widgets + from GladeXML object and checks their types. Displays an error if + some widgets can't be found or have invalid type. + 2001-03-23 Almer S. Tigelaar diff -ru /home/cyba/gcvs/gnumeric/src/gnumeric-util.h gnumeric-test/src/gnumeric-util.h --- /home/cyba/gcvs/gnumeric/src/gnumeric-util.h Sat Mar 24 23:52:15 2001 +++ gnumeric-test/src/gnumeric-util.h Wed Mar 28 01:56:43 2001 @@ -66,6 +66,7 @@ gboolean gnumeric_entry_at_subexpr_boundary_p (GtkEntry *entry); GladeXML *gnumeric_glade_xml_new (WorkbookControlGUI *context, char const * gladefile); +gboolean gnumeric_glade_get_widgets (WorkbookControlGUI *wbcg, GladeXML *gui, ...); void gnumeric_inject_widget_into_bonoboui (WorkbookControlGUI *wbcg, GtkWidget *widget, diff -ru /home/cyba/gcvs/gnumeric/src/gnumeric-util.c gnumeric-test/src/gnumeric-util.c --- /home/cyba/gcvs/gnumeric/src/gnumeric-util.c Sat Mar 24 23:52:15 2001 +++ gnumeric-test/src/gnumeric-util.c Wed Mar 28 02:09:57 2001 @@ -746,6 +746,80 @@ return gui; } +gboolean +gnumeric_glade_get_widgets (WorkbookControlGUI *wbcg, GladeXML *gui, ...) +{ + va_list args; + GtkType widget_type; + gchar *widget_name; + GtkWidget **widget_ptr; + gboolean success = TRUE; + GList *missing_widgets = NULL, *invalid_widgets = NULL; + + g_return_val_if_fail (GLADE_IS_XML (gui), FALSE); + + va_start (args, gui); + while ((widget_name = va_arg (args, gchar *)) != NULL) { + widget_type = va_arg (args, GtkType); + widget_ptr = va_arg (args, GtkWidget **); + *widget_ptr = glade_xml_get_widget (gui, widget_name); + if (*widget_ptr == NULL) { + missing_widgets = g_list_prepend (missing_widgets, widget_name); + success = FALSE; + } else if (!GTK_CHECK_TYPE (*widget_ptr, widget_type)) { + invalid_widgets = g_list_prepend (invalid_widgets, widget_name); + *widget_ptr = NULL; + success = FALSE; + } + } + va_end (args); + + if (!success && wbcg != NULL) { + GString *msg; + GList *l; + + msg = g_string_new (NULL); + g_string_sprintfa (msg, _("Invalid Glade file \"%s\"."), gui->filename); + if (missing_widgets != NULL) { + if (g_list_length (missing_widgets) == 1) { + g_string_sprintfa (msg, _("\nMissing widget %s."), (gchar *) missing_widgets->data); + } else { + g_string_append (msg, _("\nMissing widgets: ")); + for (l = missing_widgets; l != NULL; l = l->next) { + if (l->next != NULL) { + g_string_sprintfa (msg, "%s, ", (gchar *) l->data); + } else { + g_string_sprintfa (msg, "%s.", (gchar *) l->data); + } + } + + } + } + if (invalid_widgets != NULL) { + if (g_list_length (invalid_widgets) == 1) { + g_string_sprintfa (msg, _("\nWidget %s has invalid type."), (gchar *) invalid_widgets->data); + } else { + g_string_append (msg, _("\nWidgets with invalid type: ")); + for (l = invalid_widgets; l != NULL; l = l->next) { + if (l->next != NULL) { + g_string_sprintfa (msg, "%s, ", (gchar *) l->data); + } else { + g_string_sprintfa (msg, "%s.", (gchar *) l->data); + } + } + + } + } + gnumeric_error_system (COMMAND_CONTEXT (wbcg), msg->str); + g_string_free (msg, TRUE); + } + + g_list_free (missing_widgets); + g_list_free (invalid_widgets); + + return success; +} + static gint cb_non_modal_dialog_keypress (GtkWidget *w, GdkEventKey *e) { diff -ru /home/cyba/gcvs/gnumeric/src/dialogs/ChangeLog gnumeric-test/src/dialogs/ChangeLog --- /home/cyba/gcvs/gnumeric/src/dialogs/ChangeLog Sat Mar 24 23:52:21 2001 +++ gnumeric-test/src/dialogs/ChangeLog Wed Mar 28 02:14:20 2001 @@ -1,1 +1,7 @@ +2001-03-28 Zbigniew Chyla + + * dialog-cell-sort.c (dialog_cell_sort_adv, dialog_cell_sort), + dialog-plugin-manager.c (dialog_plugin_manager): Used + gnumeric_glade_get_widgets from gnumeric-util.h. + 2001-03-23 Almer S. Tigelaar diff -ru /home/cyba/gcvs/gnumeric/src/dialogs/dialog-cell-sort.c gnumeric-test/src/dialogs/dialog-cell-sort.c --- /home/cyba/gcvs/gnumeric/src/dialogs/dialog-cell-sort.c Mon Mar 12 10:46:15 2001 +++ gnumeric-test/src/dialogs/dialog-cell-sort.c Wed Mar 28 01:56:43 2001 @@ -136,15 +136,15 @@ /* Get the dialog and check for errors */ gui = gnumeric_glade_xml_new (orderbox->wbcg, GLADE_FILE); - if (gui == NULL) - return; - - dialog = glade_xml_get_widget (gui, "CellSortAdvanced"); - check = glade_xml_get_widget (gui, "cell_sort_adv_case"); - rb1 = glade_xml_get_widget (gui, "cell_sort_adv_value"); - rb2 = glade_xml_get_widget (gui, "cell_sort_adv_text"); - if (!dialog || !check || !rb1 || !rb2) { - g_warning ("Corrupt file " GLADE_FILE "\n"); + if (gui == NULL) { + return; + } + if (!gnumeric_glade_get_widgets (orderbox->wbcg, gui, + "CellSortAdvanced", GNOME_TYPE_DIALOG, &dialog, + "cell_sort_adv_case", GTK_TYPE_TOGGLE_BUTTON, &check, + "cell_sort_adv_value", GTK_TYPE_TOGGLE_BUTTON, &rb1, + "cell_sort_adv_text", GTK_TYPE_TOGGLE_BUTTON, &rb2, + NULL)) { gtk_object_unref (GTK_OBJECT (gui)); return; } @@ -525,16 +525,16 @@ /* Get the dialog and check for errors */ gui = gnumeric_glade_xml_new (wbcg, GLADE_FILE); - if (gui == NULL) - return; - - sort_flow.dialog = glade_xml_get_widget (gui, "CellSort"); - table = glade_xml_get_widget (gui, "cell_sort_table"); - check = glade_xml_get_widget (gui, "cell_sort_header_check"); - rb1 = glade_xml_get_widget (gui, "cell_sort_row_rb"); - rb2 = glade_xml_get_widget (gui, "cell_sort_col_rb"); - if (!sort_flow.dialog || !table || !check || !rb1 || !rb2) { - g_warning ("Corrupt file cell-sort.glade\n"); + if (gui == NULL) { + return; + } + if (!gnumeric_glade_get_widgets (wbcg, gui, + "CellSort", GNOME_TYPE_DIALOG, &sort_flow.dialog, + "cell_sort_table", GTK_TYPE_TABLE, &table, + "cell_sort_header_check", GTK_TYPE_TOGGLE_BUTTON, &check, + "cell_sort_row_rb", GTK_TYPE_TOGGLE_BUTTON, &rb1, + "cell_sort_col_rb", GTK_TYPE_TOGGLE_BUTTON, &rb2, + NULL)) { gtk_object_unref (GTK_OBJECT (gui)); return; } diff -ru /home/cyba/gcvs/gnumeric/src/dialogs/dialog-plugin-manager.c gnumeric-test/src/dialogs/dialog-plugin-manager.c --- /home/cyba/gcvs/gnumeric/src/dialogs/dialog-plugin-manager.c Wed Mar 21 08:46:27 2001 +++ gnumeric-test/src/dialogs/dialog-plugin-manager.c Wed Mar 28 01:56:43 2001 @@ -607,40 +607,35 @@ g_return_if_fail (wbcg != NULL); gui = gnumeric_glade_xml_new (wbcg, "plugin-manager.glade"); - g_return_if_fail (gui != NULL); + if (gui == NULL) { + return; + } pm_gui = g_new (PluginManagerGUI, 1); + if (!gnumeric_glade_get_widgets (wbcg, gui, + "dialog_plugin_manager", GNOME_TYPE_DIALOG, &pm_gui->dialog_pm, + "clist_active", GTK_TYPE_CLIST, &pm_gui->clist_active, + "clist_inactive", GTK_TYPE_CLIST, &pm_gui->clist_inactive, + "button_activate_plugin", GTK_TYPE_BUTTON, &pm_gui->button_activate_plugin, + "button_deactivate_plugin", GTK_TYPE_BUTTON, &pm_gui->button_deactivate_plugin, + "button_activate_all", GTK_TYPE_BUTTON, &pm_gui->button_activate_all, + "button_deactivate_all", GTK_TYPE_BUTTON, &pm_gui->button_deactivate_all, + "button_install_plugin", GTK_TYPE_BUTTON, &pm_gui->button_install_plugin, + "checkbutton_install_new", GTK_TYPE_CHECK_BUTTON, &pm_gui->checkbutton_install_new, + "entry_name", GTK_TYPE_ENTRY, &pm_gui->entry_name, + "entry_directory", GTK_TYPE_ENTRY, &pm_gui->entry_directory, + "text_description", GTK_TYPE_TEXT, &pm_gui->text_description, + "entry_id", GTK_TYPE_ENTRY, &pm_gui->entry_id, + "clist_extra_info", GTK_TYPE_CLIST, &pm_gui->clist_extra_info, + "page_plugin_list", GTK_TYPE_WIDGET, &page_plugin_list, + "page_plugin_details", GTK_TYPE_WIDGET, &page_plugin_details, + NULL)) { + g_free (pm_gui); + gtk_object_unref (GTK_OBJECT (gui)); + return; + } pm_gui->wbcg = wbcg; - pm_gui->dialog_pm = GNOME_DIALOG (glade_xml_get_widget (gui, "dialog_plugin_manager")); - pm_gui->clist_active = GTK_CLIST (glade_xml_get_widget (gui, "clist_active")); - pm_gui->clist_inactive = GTK_CLIST (glade_xml_get_widget (gui, "clist_inactive")); - pm_gui->button_activate_plugin = GTK_BUTTON (glade_xml_get_widget (gui, "button_activate_plugin")); - pm_gui->button_deactivate_plugin = GTK_BUTTON (glade_xml_get_widget (gui, "button_deactivate_plugin")); - pm_gui->button_activate_all = GTK_BUTTON (glade_xml_get_widget (gui, "button_activate_all")); - pm_gui->button_deactivate_all = GTK_BUTTON (glade_xml_get_widget (gui, "button_deactivate_all")); - pm_gui->button_install_plugin = GTK_BUTTON (glade_xml_get_widget (gui, "button_install_plugin")); - pm_gui->checkbutton_install_new = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "checkbutton_install_new")); - pm_gui->entry_name = GTK_ENTRY (glade_xml_get_widget (gui, "entry_name")); - pm_gui->entry_directory = GTK_ENTRY (glade_xml_get_widget (gui, "entry_directory")); - pm_gui->text_description = GTK_TEXT (glade_xml_get_widget (gui, "text_description")); - pm_gui->entry_id = GTK_ENTRY (glade_xml_get_widget (gui, "entry_id")); - pm_gui->clist_extra_info = GTK_CLIST (glade_xml_get_widget (gui, "clist_extra_info")); - page_plugin_list = glade_xml_get_widget (gui, "page_plugin_list"); - page_plugin_details = glade_xml_get_widget (gui, "page_plugin_details"); - g_return_if_fail (pm_gui->dialog_pm != NULL && - pm_gui->clist_active != NULL && pm_gui->clist_inactive != NULL && - pm_gui->button_activate_plugin != NULL && - pm_gui->button_deactivate_plugin != NULL && - pm_gui->button_install_plugin != NULL && - pm_gui->checkbutton_install_new != NULL && - pm_gui->entry_name != NULL && pm_gui->entry_directory != NULL && - pm_gui->text_description != NULL && - pm_gui->entry_id != NULL && - pm_gui->clist_extra_info != NULL && - page_plugin_list != NULL && - page_plugin_details != NULL); - gtk_clist_column_titles_passive (pm_gui->clist_active); gtk_clist_column_titles_passive (pm_gui->clist_inactive); gtk_clist_column_titles_passive (pm_gui->clist_extra_info);