[gnome-commander] Options: added Cancel and Help buttons to dlg



commit d02663a95e56b328370141dd562e14a8bb73399d
Author: Piotr Eljasiak <epiotr src gnome org>
Date:   Tue Jan 25 23:22:42 2011 +0100

    Options: added Cancel and Help buttons to dlg

 src/gnome-cmd-options-dialog.cc |  247 ++++++++++++++------------------------
 src/gnome-cmd-options-dialog.h  |   38 +------
 src/gnome-cmd-user-actions.cc   |    5 +-
 3 files changed, 95 insertions(+), 195 deletions(-)
---
diff --git a/src/gnome-cmd-options-dialog.cc b/src/gnome-cmd-options-dialog.cc
index 200313a..d605d7c 100644
--- a/src/gnome-cmd-options-dialog.cc
+++ b/src/gnome-cmd-options-dialog.cc
@@ -30,15 +30,6 @@
 using namespace std;
 
 
-static GnomeCmdDialogClass *parent_class = NULL;
-
-
-struct GnomeCmdOptionsDialog::Private
-{
-};
-
-
-
 inline GtkWidget *create_font_picker (GtkWidget *parent, gchar *name)
 {
     GtkWidget *w = gtk_font_button_new ();
@@ -50,7 +41,6 @@ inline GtkWidget *create_font_picker (GtkWidget *parent, gchar *name)
 }
 
 
-
 static void on_save_tabs_toggled (GtkToggleButton *togglebutton, GtkWidget *dialog)
 {
     GtkWidget *check = lookup_widget (dialog, "save_dirs");
@@ -277,7 +267,6 @@ static GtkWidget *create_format_tab (GtkWidget *parent)
     vbox = create_tabvbox (parent);
     gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
 
-
     // Size display mode
     cat_box = create_vbox (parent, FALSE, 0);
     cat = create_category (parent, cat_box, _("Size display mode"));
@@ -343,7 +332,7 @@ static GtkWidget *create_format_tab (GtkWidget *parent)
     table_add (table, label, 0, 1, GTK_FILL);
 
     label = create_label (parent, "");
-    g_object_set_data_full (G_OBJECT (parent), "date_format_test_label", label, g_object_unref);
+    g_object_set_data (G_OBJECT (parent), "date_format_test_label", label);
     g_signal_connect (label, "realize", G_CALLBACK (on_date_format_update), parent);
     table_add (table, label, 1, 1, (GtkAttachOptions) (GTK_EXPAND|GTK_FILL));
 
@@ -388,7 +377,6 @@ inline void store_format_options (GtkWidget *dialog)
  *
  **********************************************************************/
 
-
 static void on_layout_mode_changed (GtkOptionMenu *optmenu, GtkWidget *dialog)
 {
     g_return_if_fail (GTK_IS_OPTION_MENU (optmenu));
@@ -1106,7 +1094,6 @@ inline void store_filter_options (GtkWidget *dialog)
 }
 
 
-
 /***********************************************************************
  *
  *  The Network tab
@@ -1218,11 +1205,10 @@ static void on_some_files_toggled (GtkToggleButton *btn, GtkWidget *dialog)
 }
 
 
-static void
-get_app_dialog_values (GtkWidget *dialog, gchar **name, gchar **cmd, gchar **icon_path,
-                       gint *target, gchar **pattern_string,
-                       gboolean *handles_uris, gboolean *handles_multiple,
-                       gboolean *requires_terminal)
+static void get_app_dialog_values (GtkWidget *dialog, gchar **name, gchar **cmd, gchar **icon_path,
+                                   gint *target, gchar **pattern_string,
+                                   gboolean *handles_uris, gboolean *handles_multiple,
+                                   gboolean *requires_terminal)
 {
     GtkWidget *name_entry = lookup_widget (dialog, "name_entry");
     GtkWidget *cmd_entry = lookup_widget (dialog, "cmd_entry");
@@ -1942,166 +1928,115 @@ inline void store_devices_options (GtkWidget *dialog)
 }
 
 
-static void on_options_dialog_close (GtkButton *button, GtkWidget *dialog)
+static void response_callback (GtkDialog *dialog, int response_id, GnomeCmdNotebook *notebook)
 {
-    store_general_options (dialog);
-    store_format_options (dialog);
-    store_layout_options (dialog);
-    store_confirmation_options (dialog);
-    store_filter_options (dialog);
-    store_network_options (dialog);
-    store_programs_options (dialog);
-    store_devices_options (dialog);
-
-    gtk_widget_destroy (dialog);
-
-    gnome_cmd_style_create ();
-    main_win->update_style();
-
-    gnome_cmd_data.save();
-}
-
-
-/*******************************
- * Gtk class implementation
- *******************************/
+    static const char *help_id[] = {"gnome-commander-prefs-general",
+                                    "gnome-commander-prefs-format",
+                                    "gnome-commander-prefs-layout",
+                                    "gnome-commander-prefs-confirmation",
+                                    "gnome-commander-prefs-filters",
+                                    "gnome-commander-prefs-network",
+                                    "gnome-commander-prefs-programs",
+                                    "gnome-commander-prefs-devices"};
 
+    switch (response_id)
+    {
+        case GTK_RESPONSE_OK:
+            break;
 
- static void destroy (GtkObject *object)
-{
-    GnomeCmdOptionsDialog *dialog = GNOME_CMD_OPTIONS_DIALOG (object);
+        case GTK_RESPONSE_NONE:
+        case GTK_RESPONSE_DELETE_EVENT:
+        case GTK_RESPONSE_CANCEL:
+            break;
 
-    g_free (dialog->priv);
+        case GTK_RESPONSE_HELP:
+            gnome_cmd_help_display ("gnome-commander.xml", help_id[notebook->get_current_page()]);
+            g_signal_stop_emission_by_name (dialog, "response");
+            break;
 
-    if (GTK_OBJECT_CLASS (parent_class)->destroy)
-        (*GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+        default:
+            g_assert_not_reached ();
+    }
 }
 
 
-static void map (GtkWidget *widget)
+gboolean gnome_cmd_options_dialog (GtkWindow *parent, GnomeCmdData &cfg)
 {
-    if (GTK_WIDGET_CLASS (parent_class)->map != NULL)
-        GTK_WIDGET_CLASS (parent_class)->map (widget);
-}
+    GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Options"), parent,
+                                                     GtkDialogFlags (GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                     GTK_STOCK_HELP, GTK_RESPONSE_HELP,
+                                                     GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                                     GTK_STOCK_OK, GTK_RESPONSE_OK,
+                                                     NULL);
 
+    gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
 
-static void class_init (GnomeCmdOptionsDialogClass *klass)
-{
-    GtkObjectClass *object_class;
-    GtkWidgetClass *widget_class;
+#if GTK_CHECK_VERSION (2, 14, 0)
+    GtkWidget *content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+#endif
 
-    object_class = GTK_OBJECT_CLASS (klass);
-    widget_class = GTK_WIDGET_CLASS (klass);
+    gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+    gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
 
-    parent_class = (GnomeCmdDialogClass *) gtk_type_class (GNOME_CMD_TYPE_DIALOG);
+    // HIG defaults
+    gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+#if GTK_CHECK_VERSION (2, 14, 0)
+    gtk_box_set_spacing (GTK_BOX (content_area), 2);
+    gtk_container_set_border_width (GTK_CONTAINER (content_area), 5);
+    gtk_box_set_spacing (GTK_BOX (content_area),6);
+#else
+    gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2);
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area), 5);
+    gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->action_area),6);
+#endif
 
-    object_class->destroy = destroy;
+    GnomeCmdNotebook *notebook = new GnomeCmdNotebook;
 
-    widget_class->map = ::map;
-}
+#if GTK_CHECK_VERSION (2, 14, 0)
+    gtk_container_add (GTK_CONTAINER (content_area), *notebook);
+#else
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), *notebook);
+#endif
 
+    notebook->append_page(create_general_tab (dialog), _("General"));
+    notebook->append_page(create_format_tab (dialog), _("Format"));
+    notebook->append_page(create_layout_tab (dialog), _("Layout"));
+    notebook->append_page(create_confirmation_tab (dialog), _("Confirmation"));
+    notebook->append_page(create_filter_tab (dialog), _("Filters"));
+    notebook->append_page(create_network_tab (dialog), _("Network"));
+    notebook->append_page(create_programs_tab (dialog), _("Programs"));
+    notebook->append_page(create_devices_tab (dialog), _("Devices"));
 
-static void init (GnomeCmdOptionsDialog *dialog)
-{
-    GtkWidget *options_dialog = GTK_WIDGET (dialog);
-
-    dialog->priv = g_new0 (GnomeCmdOptionsDialog::Private, 1);
-
-    g_object_set_data (G_OBJECT (options_dialog), "options_dialog", options_dialog);
-    gtk_window_set_position (GTK_WINDOW (options_dialog), GTK_WIN_POS_CENTER);
-    gtk_window_set_title (GTK_WINDOW (options_dialog), _("Options"));
-
-    dialog->notebook = gtk_notebook_new ();
-    g_object_ref (dialog->notebook);
-    g_object_set_data_full (G_OBJECT (options_dialog), "notebook", dialog->notebook, g_object_unref);
-    gtk_widget_show (dialog->notebook);
-    gnome_cmd_dialog_add_expanding_category (GNOME_CMD_DIALOG (dialog), dialog->notebook);
-
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_general_tab (options_dialog));
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_format_tab (options_dialog));
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_layout_tab (options_dialog));
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_confirmation_tab (options_dialog));
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_filter_tab (options_dialog));
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_network_tab (options_dialog));
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_programs_tab (options_dialog));
-    gtk_container_add (GTK_CONTAINER (dialog->notebook), create_devices_tab (options_dialog));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_GENERAL),
-        gtk_label_new (_("General")));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_FORMAT),
-        gtk_label_new (_("Format")));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_LAYOUT),
-        gtk_label_new (_("Layout")));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_CONFIRMATION),
-        gtk_label_new (_("Confirmation")));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_FILTERS),
-        gtk_label_new (_("Filters")));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_NETWORK),
-        gtk_label_new (_("Network")));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_PROGRAMS),
-        gtk_label_new (_("Programs")));
-
-    gtk_notebook_set_tab_label (
-        GTK_NOTEBOOK (dialog->notebook),
-        gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->notebook), GnomeCmdOptionsDialog::TAB_DEVICES),
-        gtk_label_new (_("Devices")));
-
-
-    gnome_cmd_dialog_add_button (GNOME_CMD_DIALOG (dialog), GTK_STOCK_CLOSE, GTK_SIGNAL_FUNC (on_options_dialog_close), dialog);
-}
-
+#if GTK_CHECK_VERSION (2, 14, 0)
+    gtk_widget_show_all (content_area);
+#else
+    gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);
+#endif
 
-/***********************************
- * Public functions
- ***********************************/
+    gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
 
+    g_signal_connect (dialog, "response", G_CALLBACK (response_callback), notebook);
 
-GtkType gnome_cmd_options_dialog_get_type ()
-{
-    static GtkType dlg_type = 0;
+    gint result = gtk_dialog_run (GTK_DIALOG (dialog));
 
-    if (dlg_type == 0)
+    if (result==GTK_RESPONSE_OK)
     {
-        GtkTypeInfo dlg_info =
-        {
-            "GnomeCmdOptionsDialog",
-            sizeof (GnomeCmdOptionsDialog),
-            sizeof (GnomeCmdOptionsDialogClass),
-            (GtkClassInitFunc) class_init,
-            (GtkObjectInitFunc) init,
-            /* reserved_1 */ NULL,
-            /* reserved_2 */ NULL,
-            (GtkClassInitFunc) NULL
-        };
-
-        dlg_type = gtk_type_unique (GNOME_CMD_TYPE_DIALOG, &dlg_info);
+        store_general_options (dialog);
+        store_format_options (dialog);
+        store_layout_options (dialog);
+        store_confirmation_options (dialog);
+        store_filter_options (dialog);
+        store_network_options (dialog);
+        store_programs_options (dialog);
+        store_devices_options (dialog);
+
+        gnome_cmd_style_create ();
+        main_win->update_style();
+
+        gnome_cmd_data.save();
     }
 
-    return dlg_type;
-}
-
+    gtk_widget_destroy (dialog);
 
-GtkWidget *gnome_cmd_options_dialog_new ()
-{
-    return (GtkWidget *) gtk_type_new (GNOME_CMD_TYPE_OPTIONS_DIALOG);
+    return result==GTK_RESPONSE_OK;
 }
diff --git a/src/gnome-cmd-options-dialog.h b/src/gnome-cmd-options-dialog.h
index e35cc07..6713f64 100644
--- a/src/gnome-cmd-options-dialog.h
+++ b/src/gnome-cmd-options-dialog.h
@@ -20,44 +20,12 @@
 #ifndef __GNOME_CMD_OPTIONS_DIALOG_H__
 #define __GNOME_CMD_OPTIONS_DIALOG_H__
 
+#include "gnome-cmd-data.h"
+
 #define GNOME_CMD_TYPE_OPTIONS_DIALOG          (gnome_cmd_options_dialog_get_type ())
 #define GNOME_CMD_OPTIONS_DIALOG(obj)          (GTK_CHECK_CAST (obj, GNOME_CMD_TYPE_OPTIONS_DIALOG, GnomeCmdOptionsDialog))
 #define GNOME_CMD_IS_OPTIONS_DIALOG(obj)       (GTK_CHECK_TYPE (obj, GNOME_CMD_TYPE_OPTIONS_DIALOG))
 
-
-struct GnomeCmdOptionsDialogClass
-{
-    GnomeCmdDialogClass parent_class;
-};
-
-
-struct GnomeCmdOptionsDialog
-{
-    GnomeCmdDialog parent;
-
-    struct Private;
-
-    Private *priv;
-
-    enum Tab
-    {
-        TAB_GENERAL,
-        TAB_FORMAT,
-        TAB_LAYOUT,
-        TAB_CONFIRMATION,
-        TAB_FILTERS,
-        TAB_NETWORK,
-        TAB_PROGRAMS,
-        TAB_DEVICES
-    } ;
-
-    GtkWidget *notebook;
-
-    void set_tab (Tab tab)      {  gtk_notebook_set_page (GTK_NOTEBOOK (notebook), tab);  }
-};
-
-
-GtkType gnome_cmd_options_dialog_get_type ();
-GtkWidget *gnome_cmd_options_dialog_new ();
+gboolean gnome_cmd_options_dialog (GtkWindow *parent, GnomeCmdData &cfg);
 
 #endif // __GNOME_CMD_OPTIONS_DIALOG_H__
diff --git a/src/gnome-cmd-user-actions.cc b/src/gnome-cmd-user-actions.cc
index 6303b30..9033765 100644
--- a/src/gnome-cmd-user-actions.cc
+++ b/src/gnome-cmd-user-actions.cc
@@ -1657,10 +1657,7 @@ void view_toggle_tab_lock (GtkMenuItem *menuitem, gpointer page)
 /************** Options Menu **************/
 void options_edit (GtkMenuItem *menuitem, gpointer not_used)
 {
-    GtkWidget *dialog = gnome_cmd_options_dialog_new ();
-    g_object_ref (dialog);
-    gtk_window_set_transient_for (GTK_WINDOW (dialog), *main_win);
-    gtk_widget_show (dialog);
+    gnome_cmd_options_dialog (*main_win, gnome_cmd_data);
 }
 
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]