diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2015-03-08 16:39:23 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2015-03-30 11:06:06 +0100 |
commit | b248b2814839dcdf150bf3e3707b5ed14a95af8e (patch) | |
tree | 3a5898f86807452e4d73164b6fefad4d77d5faca | |
parent | 5f01dbef4ea734a14bab3f8bda36e4a4e7580db8 (diff) | |
download | gnome-dictionary-b248b2814839dcdf150bf3e3707b5ed14a95af8e.tar.gz |
src: Use widget templates for GdictSourceDialog
Instead of building the UI from a custom GtkBuilder instance and doing
things like we used to in 2005, let's use modern API.
There is no functional change in this commit: just a reshuffle of the
way the UI is loaded.
-rw-r--r-- | po/POTFILES.in | 2 | ||||
-rw-r--r-- | src/gdict-source-dialog.c | 319 | ||||
-rw-r--r-- | src/gdict-source-dialog.ui | 330 | ||||
-rw-r--r-- | src/gdict.gresource.xml | 2 | ||||
-rw-r--r-- | src/gnome-dictionary-source.ui | 332 |
5 files changed, 473 insertions, 512 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in index 9325b6d..4f392dc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -4,7 +4,7 @@ data/default.desktop.in data/org.gnome.Dictionary.appdata.xml.in [type: gettext/glade]src/gnome-dictionary-menus.ui [type: gettext/glade]src/gnome-dictionary-preferences.ui -[type: gettext/glade]src/gnome-dictionary-source.ui +[type: gettext/glade]src/gdict-source-dialog.ui data/org.gnome.Dictionary.desktop.in.in data/org.gnome.dictionary.gschema.xml.in.in data/spanish.desktop.in diff --git a/src/gdict-source-dialog.c b/src/gdict-source-dialog.c index a9ba180..10cf0f9 100644 --- a/src/gdict-source-dialog.c +++ b/src/gdict-source-dialog.c @@ -38,7 +38,7 @@ #include "gdict-source-dialog.h" #include "gdict-common.h" -#define GDICT_SOURCE_UI "/org/gnome/Dictionary/gnome-dictionary-source.ui" +#define GDICT_SOURCE_UI "/org/gnome/Dictionary/gdict-source-dialog.ui" /********************* * GdictSourceDialog * @@ -48,8 +48,6 @@ struct _GdictSourceDialog { GtkDialog parent_instance; - GtkBuilder *builder; - GSettings *settings; GdictSourceLoader *loader; @@ -61,12 +59,22 @@ struct _GdictSourceDialog GdictSourceTransport transport; + GtkWidget *hostname_label; + GtkWidget *hostname_entry; + GtkWidget *port_label; + GtkWidget *port_entry; + + GtkWidget *description_label; + GtkWidget *description_entry; + GtkWidget *add_button; GtkWidget *close_button; GtkWidget *cancel_button; GtkWidget *help_button; + GtkWidget *db_vbox; GtkWidget *db_chooser; + GtkWidget *strat_vbox; GtkWidget *strat_chooser; GtkWidget *transport_combo; @@ -86,7 +94,7 @@ enum PROP_ACTION }; -G_DEFINE_TYPE (GdictSourceDialog, gdict_source_dialog, GTK_TYPE_DIALOG); +G_DEFINE_TYPE (GdictSourceDialog, gdict_source_dialog, GTK_TYPE_DIALOG) static void set_source_loader (GdictSourceDialog *dialog, @@ -99,74 +107,47 @@ set_source_loader (GdictSourceDialog *dialog, } static void -transport_combo_changed_cb (GtkWidget *widget, - gpointer user_data) +on_transport_changed (GtkWidget *widget, + gpointer user_data) { - GdictSourceDialog *dialog = GDICT_SOURCE_DIALOG (user_data); - gint transport; + GdictSourceDialog *dialog = user_data; + GdictSourceTransport transport; transport = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); if (transport == dialog->transport) return; - if (transport == GDICT_SOURCE_TRANSPORT_DICTD) + /* Hide everything by default */ + gtk_widget_hide (dialog->hostname_label); + gtk_widget_hide (dialog->hostname_entry); + gtk_widget_hide (dialog->port_label); + gtk_widget_hide (dialog->port_entry); + + if (dialog->action == GDICT_SOURCE_DIALOG_CREATE) { - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "hostname_label"))); - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "hostname_entry"))); - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "port_label"))); - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "port_entry"))); - - if (dialog->action == GDICT_SOURCE_DIALOG_CREATE) - { - gtk_widget_set_sensitive (dialog->add_button, TRUE); - - dialog->transport = GDICT_SOURCE_TRANSPORT_DICTD; - } + gtk_widget_set_sensitive (dialog->add_button, FALSE); + dialog->transport = GDICT_SOURCE_TRANSPORT_INVALID; } - else + + /* Then show what's needed depending on the transport */ + switch (transport) { - gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "hostname_label"))); - gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "hostname_entry"))); - gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "port_label"))); - gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "port_entry"))); + case GDICT_SOURCE_TRANSPORT_DICTD: + gtk_widget_show (dialog->hostname_label); + gtk_widget_show (dialog->hostname_entry); + gtk_widget_show (dialog->port_label); + gtk_widget_show (dialog->port_entry); if (dialog->action == GDICT_SOURCE_DIALOG_CREATE) { - gtk_widget_set_sensitive (dialog->add_button, FALSE); - - dialog->transport = GDICT_SOURCE_TRANSPORT_INVALID; + gtk_widget_set_sensitive (dialog->add_button, TRUE); + dialog->transport = GDICT_SOURCE_TRANSPORT_DICTD; } - } -} - -static gchar * -get_text_from_entry (GdictSourceDialog *dialog, - const gchar *entry_name) -{ - GtkWidget *entry; - gchar *retval; - - entry = GTK_WIDGET (gtk_builder_get_object (dialog->builder, entry_name)); - if (!entry) - return NULL; - - retval = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1); - - return retval; -} - -static void -set_text_to_entry (GdictSourceDialog *dialog, - const gchar *entry_name, - const gchar *text) -{ - GtkWidget *entry; - - entry = GTK_WIDGET (gtk_builder_get_object (dialog->builder, entry_name)); - if (!entry) - return; + break; - gtk_entry_set_text (GTK_ENTRY (entry), text); + default: + break; + } } static void @@ -186,18 +167,18 @@ set_transport_settings (GdictSourceDialog *dialog) port = gdict_client_context_get_port (context); port_str = g_strdup_printf ("%d", port); - set_text_to_entry (dialog, "hostname_entry", hostname); - set_text_to_entry (dialog, "port_entry", port_str); + gtk_entry_set_text (GTK_ENTRY (dialog->hostname_entry), hostname); + gtk_entry_set_text (GTK_ENTRY (dialog->port_entry), port_str); - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "hostname_label"))); - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "hostname_entry"))); - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "port_label"))); - gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (dialog->builder, "port_entry"))); + gtk_widget_show (dialog->hostname_label); + gtk_widget_show (dialog->hostname_entry); + gtk_widget_show (dialog->port_label); + gtk_widget_show (dialog->port_entry); g_free (port_str); } break; - case GDICT_SOURCE_TRANSPORT_INVALID: + default: break; } @@ -222,8 +203,7 @@ update_dialog_ui (GdictSourceDialog *dialog) return; } - source = gdict_source_loader_get_source (dialog->loader, - dialog->source_name); + source = gdict_source_loader_get_source (dialog->loader, dialog->source_name); if (!source) { g_warning ("Attempting to retrieve source, but no " @@ -234,13 +214,10 @@ update_dialog_ui (GdictSourceDialog *dialog) g_object_ref (source); - dialog->source = source; - set_text_to_entry (dialog, "description_entry", - gdict_source_get_description (source)); - + dialog->source = g_object_ref (source); + gtk_entry_set_text (GTK_ENTRY (dialog->description_entry), gdict_source_get_description (source)); dialog->transport = gdict_source_get_transport (source); - gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->transport_combo), - (gint) dialog->transport); + gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->transport_combo), (gint) dialog->transport); /* set the context for the database and strategy choosers */ dialog->context = gdict_source_get_context (source); @@ -261,11 +238,13 @@ update_dialog_ui (GdictSourceDialog *dialog) dialog->context); gdict_strategy_chooser_refresh (GDICT_STRATEGY_CHOOSER (dialog->strat_chooser)); break; + case GDICT_SOURCE_DIALOG_CREATE: /* DICTD transport is default */ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->transport_combo), 0); g_signal_emit_by_name (dialog->transport_combo, "changed"); break; + default: g_assert_not_reached (); break; @@ -278,7 +257,6 @@ build_new_source (GdictSourceDialog *dialog) GdictSource *source; gchar *name, *text; GdictSourceTransport transport; - gchar *host, *port; gchar *data; gsize length; GError *error; @@ -296,9 +274,7 @@ build_new_source (GdictSourceDialog *dialog) gdict_source_set_name (source, name); g_free (name); - text = get_text_from_entry (dialog, "description_entry"); - gdict_source_set_description (source, text); - g_free (text); + gdict_source_set_description (source, gtk_entry_get_text (GTK_ENTRY (dialog->description_entry))); db_chooser = GDICT_DATABASE_CHOOSER (dialog->db_chooser); text = gdict_database_chooser_get_current_database (db_chooser); @@ -315,17 +291,17 @@ build_new_source (GdictSourceDialog *dialog) switch (transport) { case GDICT_SOURCE_TRANSPORT_DICTD: - host = get_text_from_entry (dialog, "hostname_entry"); - port = get_text_from_entry (dialog, "port_entry"); + { + const char *host = gtk_entry_get_text (GTK_ENTRY (dialog->hostname_entry)); + const char *port = gtk_entry_get_text (GTK_ENTRY (dialog->port_entry)); - gdict_source_set_transport (source, GDICT_SOURCE_TRANSPORT_DICTD, - "hostname", host, - "port", atoi (port), - NULL); - - g_free (host); - g_free (port); + gdict_source_set_transport (source, GDICT_SOURCE_TRANSPORT_DICTD, + "hostname", host, + "port", atoi (port), + NULL); + } break; + case GDICT_SOURCE_TRANSPORT_INVALID: default: g_warning ("Invalid transport"); @@ -344,7 +320,7 @@ build_new_source (GdictSourceDialog *dialog) return; } - config_dir = gdict_get_config_dir(); + config_dir = gdict_get_config_dir (); name = g_strconcat (gdict_source_get_name (source), ".desktop", NULL); filename = g_build_filename (config_dir, name, NULL); g_free (config_dir); @@ -369,15 +345,13 @@ save_source (GdictSourceDialog *dialog) GdictStrategyChooser *strat_chooser; gchar *name, *text; GdictSourceTransport transport; - gchar *host, *port; gchar *data; gsize length; GError *error; gchar *filename; gchar *config_dir; - source = gdict_source_loader_get_source (dialog->loader, - dialog->source_name); + source = gdict_source_loader_get_source (dialog->loader, dialog->source_name); if (!source) { g_warning ("Attempting to save source `%s', but no " @@ -387,9 +361,7 @@ save_source (GdictSourceDialog *dialog) return; } - text = get_text_from_entry (dialog, "description_entry"); - gdict_source_set_description (source, text); - g_free (text); + gdict_source_set_description (source, gtk_entry_get_text (GTK_ENTRY (dialog->description_entry))); db_chooser = GDICT_DATABASE_CHOOSER (dialog->db_chooser); text = gdict_database_chooser_get_current_database (db_chooser); @@ -407,17 +379,17 @@ save_source (GdictSourceDialog *dialog) switch (transport) { case GDICT_SOURCE_TRANSPORT_DICTD: - host = get_text_from_entry (dialog, "hostname_entry"); - port = get_text_from_entry (dialog, "port_entry"); - - gdict_source_set_transport (source, GDICT_SOURCE_TRANSPORT_DICTD, - "hostname", host, - "port", atoi (port), - NULL); - - g_free (host); - g_free (port); + { + const char *host = gtk_entry_get_text (GTK_ENTRY (dialog->hostname_entry)); + const char *port = gtk_entry_get_text (GTK_ENTRY (dialog->port_entry)); + + gdict_source_set_transport (source, GDICT_SOURCE_TRANSPORT_DICTD, + "hostname", host, + "port", atoi (port), + NULL); + } break; + case GDICT_SOURCE_TRANSPORT_INVALID: default: g_warning ("Invalid transport"); @@ -458,9 +430,9 @@ save_source (GdictSourceDialog *dialog) } static void -gdict_source_dialog_response_cb (GtkDialog *dialog, - gint response_id, - gpointer user_data) +on_dialog_response (GtkDialog *dialog, + gint response_id, + gpointer user_data) { GError *err = NULL; @@ -469,6 +441,7 @@ gdict_source_dialog_response_cb (GtkDialog *dialog, case GTK_RESPONSE_ACCEPT: build_new_source (GDICT_SOURCE_DIALOG (dialog)); break; + case GTK_RESPONSE_HELP: gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (dialog)), "help:gnome-dictionary/gnome-dictionary-add-source", @@ -484,11 +457,14 @@ gdict_source_dialog_response_cb (GtkDialog *dialog, /* we don't want the dialog to close itself */ g_signal_stop_emission_by_name (dialog, "response"); break; + case GTK_RESPONSE_CLOSE: save_source (GDICT_SOURCE_DIALOG (dialog)); break; + case GTK_RESPONSE_CANCEL: break; + default: break; } @@ -499,21 +475,12 @@ gdict_source_dialog_finalize (GObject *object) { GdictSourceDialog *dialog = GDICT_SOURCE_DIALOG (object); - if (dialog->settings) - g_object_unref (dialog->settings); - - if (dialog->builder) - g_object_unref (dialog->builder); + g_clear_object (&dialog->settings); + g_clear_object (&dialog->source); + g_clear_object (&dialog->loader); - if (dialog->source_name) - g_free (dialog->source_name); + g_free (dialog->source_name); - if (dialog->source) - g_object_unref (dialog->source); - - if (dialog->loader) - g_object_unref (dialog->loader); - G_OBJECT_CLASS (gdict_source_dialog_parent_class)->finalize (object); } @@ -530,13 +497,16 @@ gdict_source_dialog_set_property (GObject *object, case PROP_SOURCE_LOADER: set_source_loader (dialog, g_value_get_object (value)); break; + case PROP_SOURCE_NAME: g_free (dialog->source_name); dialog->source_name = g_strdup (g_value_get_string (value)); break; + case PROP_ACTION: dialog->action = (GdictSourceDialogAction) g_value_get_int (value); break; + default: break; } @@ -555,62 +525,24 @@ gdict_source_dialog_get_property (GObject *object, case PROP_SOURCE_LOADER: g_value_set_object (value, dialog->loader); break; + case PROP_SOURCE_NAME: g_value_set_string (value, dialog->source_name); break; + case PROP_ACTION: g_value_set_int (value, dialog->action); break; + default: break; } } -static GObject * -gdict_source_dialog_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_params) +static void +gdict_source_dialog_constructed (GObject *object) { - GObject *object; - GdictSourceDialog *dialog; - GtkWidget *vbox; - - object = G_OBJECT_CLASS (gdict_source_dialog_parent_class)->constructor (type, - n_construct_properties, - construct_params); - dialog = GDICT_SOURCE_DIALOG (object); - - gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), 2); - - /* get the UI from the GtkBuilder file */ - dialog->builder = gtk_builder_new (); - gtk_builder_add_from_resource (dialog->builder, GDICT_SOURCE_UI, NULL); - - /* the main widget */ - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - GTK_WIDGET (gtk_builder_get_object (dialog->builder, "source_root"))); - - /* the transport combo changes the UI by changing the visible widgets - * bound to the transport's own options. - */ - dialog->transport_combo = GTK_WIDGET (gtk_builder_get_object (dialog->builder, "transport_combo")); - g_signal_connect (dialog->transport_combo, "changed", - G_CALLBACK (transport_combo_changed_cb), - dialog); - - /* the help button is always visible */ - dialog->help_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Help"), GTK_RESPONSE_HELP); - - vbox = GTK_WIDGET (gtk_builder_get_object (dialog->builder, "db-vbox")); - dialog->db_chooser = gdict_database_chooser_new (); - gtk_box_pack_start (GTK_BOX (vbox), dialog->db_chooser, TRUE, TRUE, 0); - gtk_widget_show (dialog->db_chooser); - - vbox = GTK_WIDGET (gtk_builder_get_object (dialog->builder, "strat-vbox")); - dialog->strat_chooser = gdict_strategy_chooser_new (); - gtk_box_pack_start (GTK_BOX (vbox), dialog->strat_chooser, TRUE, TRUE, 0); - gtk_widget_show (dialog->strat_chooser); + GdictSourceDialog *dialog = GDICT_SOURCE_DIALOG (object); /* the UI changes depending on the action that the source dialog * should perform @@ -619,15 +551,15 @@ gdict_source_dialog_constructor (GType type, { case GDICT_SOURCE_DIALOG_VIEW: /* disable every editable widget */ - gtk_editable_set_editable (GTK_EDITABLE (gtk_builder_get_object (dialog->builder, "description_entry")), FALSE); - gtk_editable_set_editable (GTK_EDITABLE (gtk_builder_get_object (dialog->builder, "hostname_entry")), FALSE); - gtk_editable_set_editable (GTK_EDITABLE (gtk_builder_get_object (dialog->builder, "port_entry")), FALSE); - + gtk_editable_set_editable (GTK_EDITABLE (dialog->description_entry), FALSE); + gtk_editable_set_editable (GTK_EDITABLE (dialog->hostname_entry), FALSE); + gtk_editable_set_editable (GTK_EDITABLE (dialog->port_entry), FALSE); gtk_widget_set_sensitive (dialog->transport_combo, FALSE); /* we just allow closing the dialog */ dialog->close_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Close"), GTK_RESPONSE_CANCEL); break; + case GDICT_SOURCE_DIALOG_CREATE: dialog->cancel_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); dialog->add_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Add"), GTK_RESPONSE_ACCEPT); @@ -636,29 +568,30 @@ gdict_source_dialog_constructor (GType type, */ gtk_widget_set_sensitive (dialog->add_button, FALSE); break; + case GDICT_SOURCE_DIALOG_EDIT: dialog->cancel_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("C_ancel"), GTK_RESPONSE_CANCEL); dialog->close_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Close"), GTK_RESPONSE_CLOSE); break; + default: g_assert_not_reached (); break; } - + /* this will take care of updating the contents of the dialog * based on the action */ update_dialog_ui (dialog); - - return object; } static void gdict_source_dialog_class_init (GdictSourceDialogClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - gobject_class->constructor = gdict_source_dialog_constructor; + gobject_class->constructed = gdict_source_dialog_constructed; gobject_class->set_property = gdict_source_dialog_set_property; gobject_class->get_property = gdict_source_dialog_get_property; gobject_class->finalize = gdict_source_dialog_finalize; @@ -669,14 +602,18 @@ gdict_source_dialog_class_init (GdictSourceDialogClass *klass) "Source Loader", "The GdictSourceLoader used by the application", GDICT_TYPE_SOURCE_LOADER, - (G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY))); + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SOURCE_NAME, g_param_spec_string ("source-name", "Source Name", "The source name", NULL, - (G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT))); + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ACTION, g_param_spec_int ("action", @@ -685,20 +622,46 @@ gdict_source_dialog_class_init (GdictSourceDialogClass *klass) -1, GDICT_SOURCE_DIALOG_EDIT, GDICT_SOURCE_DIALOG_VIEW, - (G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY))); + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + gtk_widget_class_set_template_from_resource (widget_class, GDICT_SOURCE_UI); + + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, transport_combo); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, hostname_label); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, hostname_entry); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, port_label); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, port_entry); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, description_label); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, description_entry); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, db_vbox); + gtk_widget_class_bind_template_child (widget_class, GdictSourceDialog, strat_vbox); + + gtk_widget_class_bind_template_callback (widget_class, on_dialog_response); + gtk_widget_class_bind_template_callback (widget_class, on_transport_changed); } static void gdict_source_dialog_init (GdictSourceDialog *dialog) { + gtk_widget_init_template (GTK_WIDGET (dialog)); + gtk_widget_set_size_request (GTK_WIDGET (dialog), 400, 300); - gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); dialog->transport = GDICT_SOURCE_TRANSPORT_INVALID; - g_signal_connect (dialog, "response", - G_CALLBACK (gdict_source_dialog_response_cb), - NULL); + /* The help button is always visible */ + dialog->help_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Help"), GTK_RESPONSE_HELP); + + /* Add our custom widgets */ + dialog->db_chooser = gdict_database_chooser_new (); + gtk_box_pack_start (GTK_BOX (dialog->db_vbox), dialog->db_chooser, TRUE, TRUE, 0); + gtk_widget_show (dialog->db_chooser); + + dialog->strat_chooser = gdict_strategy_chooser_new (); + gtk_box_pack_start (GTK_BOX (dialog->strat_vbox), dialog->strat_chooser, TRUE, TRUE, 0); + gtk_widget_show (dialog->strat_chooser); } GtkWidget * diff --git a/src/gdict-source-dialog.ui b/src/gdict-source-dialog.ui new file mode 100644 index 0000000..291cefd --- /dev/null +++ b/src/gdict-source-dialog.ui @@ -0,0 +1,330 @@ +<?xml version="1.0"?> +<!--*- mode: xml -*--> +<interface domain="gnome-dictionary"> + <object class="GtkListStore" id="model1"> + <columns> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0">Dictionary Server</col> + </row> + </data> + </object> + <template class="GdictSourceDialog" parent="GtkDialog"> + <property name="border-width">5</property> + <property name="resizable">False</property> + <property name="type_hint">dialog</property> + <signal name="response" handler="on_dialog_response" swapped="no"/> + <child internal-child="vbox"> + <object class="GtkBox" id="source_root"> + <property name="orientation">GTK_ORIENTATION_VERTICAL</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">12</property> + <child> + <object class="GtkNotebook" id="notebook1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="show_tabs">True</property> + <property name="show_border">True</property> + <property name="tab_pos">GTK_POS_TOP</property> + <property name="scrollable">False</property> + <property name="enable_popup">False</property> + <child> + <object class="GtkTable" id="table2"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="homogeneous">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel" id="description_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Description:</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="mnemonic_widget">description_entry</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + <child> + <object class="GtkLabel" id="transport_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Transport:</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="mnemonic_widget">transport_combo</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + <child> + <object class="GtkLabel" id="hostname_label"> + <property name="label" translatable="yes">H_ostname:</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="mnemonic_widget">hostname_entry</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + <child> + <object class="GtkLabel" id="port_label"> + <property name="label" translatable="yes">_Port:</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="mnemonic_widget">port_entry</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + <child> + <object class="GtkEntry" id="description_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes">Source Name</property> + <property name="has_frame">True</property> + <property name="invisible_char">*</property> + <property name="activates_default">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="y_options"/> + </packing> + </child> + <child> + <object class="GtkEntry" id="hostname_entry"> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text">dict.org</property> + <property name="has_frame">True</property> + <property name="invisible_char">*</property> + <property name="activates_default">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"/> + </packing> + </child> + <child> + <object class="GtkEntry" id="port_entry"> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text">2628</property> + <property name="has_frame">True</property> + <property name="invisible_char">*</property> + <property name="activates_default">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"/> + </packing> + </child> + <child> + <object class="GtkComboBox" id="transport_combo"> + <property name="visible">True</property> + <property name="add_tearoffs">False</property> + <property name="focus_on_click">True</property> + <property name="model">model1</property> + <signal name="changed" handler="on_transport_changed" swapped="no"/> + <child> + <object class="GtkCellRendererText" id="renderer1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options">fill</property> + </packing> + </child> + </object> + <packing> + <property name="tab_expand">False</property> + <property name="tab_fill">True</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label18"> + <property name="visible">True</property> + <property name="label" translatable="yes">Source</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + </child> + <child> + <object class="GtkBox" id="db_vbox"> + <property name="orientation">GTK_ORIENTATION_VERTICAL</property> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="tab_expand">False</property> + <property name="tab_fill">True</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="label" translatable="yes">Dictionaries</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + </child> + <child> + <object class="GtkBox" id="strat_vbox"> + <property name="orientation">GTK_ORIENTATION_VERTICAL</property> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="tab_expand">False</property> + <property name="tab_fill">True</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label20"> + <property name="visible">True</property> + <property name="label" translatable="yes">Strategies</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + </child> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </object> + </child> + </template> +</interface> + diff --git a/src/gdict.gresource.xml b/src/gdict.gresource.xml index 59b4b3e..4022513 100644 --- a/src/gdict.gresource.xml +++ b/src/gdict.gresource.xml @@ -3,6 +3,6 @@ <gresource prefix="/org/gnome/Dictionary"> <file preprocess="xml-stripblanks">gnome-dictionary-menus.ui</file> <file preprocess="xml-stripblanks">gnome-dictionary-preferences.ui</file> - <file preprocess="xml-stripblanks">gnome-dictionary-source.ui</file> + <file preprocess="xml-stripblanks">gdict-source-dialog.ui</file> </gresource> </gresources> diff --git a/src/gnome-dictionary-source.ui b/src/gnome-dictionary-source.ui deleted file mode 100644 index 4ba2b6b..0000000 --- a/src/gnome-dictionary-source.ui +++ /dev/null @@ -1,332 +0,0 @@ -<?xml version="1.0"?> -<!--*- mode: xml -*--> -<interface> - <object class="GtkListStore" id="model1"> - <columns> - <column type="gchararray"/> - </columns> - <data> - <row> - <col id="0">Dictionary Server</col> - </row> - </data> - </object> - <object class="GtkVBox" id="source_root"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkNotebook" id="notebook1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="show_tabs">True</property> - <property name="show_border">True</property> - <property name="tab_pos">GTK_POS_TOP</property> - <property name="scrollable">False</property> - <property name="enable_popup">False</property> - <child> - <object class="GtkTable" id="table2"> - <property name="border_width">5</property> - <property name="visible">True</property> - <property name="n_rows">4</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">12</property> - <child> - <object class="GtkLabel" id="description_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Description:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="mnemonic_widget">description_entry</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkLabel" id="transport_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Transport:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="mnemonic_widget">transport_combo</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkLabel" id="hostname_label"> - <property name="label" translatable="yes">H_ostname:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="mnemonic_widget">hostname_entry</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkLabel" id="port_label"> - <property name="label" translatable="yes">_Port:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="mnemonic_widget">port_entry</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkEntry" id="description_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes">Source Name</property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkEntry" id="hostname_entry"> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text">dict.org</property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkEntry" id="port_entry"> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text">2628</property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkComboBox" id="transport_combo"> - <property name="visible">True</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - <property name="model">model1</property> - <child> - <object class="GtkCellRendererText" id="renderer1"/> - <attributes> - <attribute name="text">0</attribute> - </attributes> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options">fill</property> - </packing> - </child> - </object> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label18"> - <property name="visible">True</property> - <property name="label" translatable="yes">Source</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - </child> - <child> - <object class="GtkVBox" id="db-vbox"> - <property name="border_width">5</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label19"> - <property name="visible">True</property> - <property name="label" translatable="yes">Dictionaries</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - </child> - <child> - <object class="GtkVBox" id="strat-vbox"> - <property name="border_width">5</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label20"> - <property name="visible">True</property> - <property name="label" translatable="yes">Strategies</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> -</interface> - |