-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
/*
- * (GLABELS) Label and Business Card Creation program for GNOME
- *
- * merge-properties-dialog.c: document merge properties dialog module
+ * merge-properties-dialog.c
+ * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
*
- * Copyright (C) 2001 Jim Evins <evins@snaught.com>.
+ * This file is part of gLabels.
*
- * This program is free software; you can redistribute it and/or modify
+ * gLabels is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * gLabels 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
+ * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include <config.h>
#include "merge-properties-dialog.h"
#include <glib/gi18n.h>
-#include <glade/glade-xml.h>
-#include <gtk/gtkfilechooserbutton.h>
-#include <gtk/gtkcombobox.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtktreestore.h>
-#include <gtk/gtktreeselection.h>
-#include <gtk/gtkcellrenderertoggle.h>
-#include <gtk/gtkcellrenderertext.h>
-#include <gtk/gtklabel.h>
+#include <gtk/gtk.h>
#include <string.h>
#include "label.h"
#include "merge.h"
-#include "util.h"
-#include "hig.h"
+#include "combo-util.h"
+#include "builder-util.h"
#include "debug.h"
+
/*===========================================*/
/* Private data types */
/*===========================================*/
glLabel *label;
glMerge *merge;
+ GtkBuilder *builder;
+
+ GtkWidget *type_combo_hbox;
GtkWidget *type_combo;
GtkWidget *location_vbox;
GtkWidget *src_entry;
GtkWidget *select_all_button;
GtkWidget *unselect_all_button;
+ GtkWidget *ok_button;
+
gchar *saved_src;
};
N_COLUMNS
};
+
/*===========================================*/
/* Private globals */
/*===========================================*/
static void unselect_all_button_clicked_cb (GtkWidget *widget,
glMergePropertiesDialog *dialog);
-\f
+
/*****************************************************************************/
/* Boilerplate object stuff. */
/*****************************************************************************/
-G_DEFINE_TYPE (glMergePropertiesDialog, gl_merge_properties_dialog, GTK_TYPE_DIALOG);
+G_DEFINE_TYPE (glMergePropertiesDialog, gl_merge_properties_dialog, GTK_TYPE_DIALOG)
+
+/*****************************************************************************/
+/* Class Init Function. */
+/*****************************************************************************/
static void
gl_merge_properties_dialog_class_init (glMergePropertiesDialogClass *class)
{
object_class->finalize = gl_merge_properties_dialog_finalize;
}
+
+/*****************************************************************************/
+/* Object Instance Init Function. */
+/*****************************************************************************/
static void
gl_merge_properties_dialog_init (glMergePropertiesDialog *dialog)
{
+ gchar *builder_filename;
+ GtkBuilder *builder;
+ static gchar *object_ids[] = { "merge_properties_vbox", NULL };
+ GError *error = NULL;
+ GtkWidget *vbox;
+ GtkWidget *merge_properties_vbox;
+
gl_debug (DEBUG_MERGE, "START");
dialog->priv = g_new0 (glMergePropertiesDialogPrivate, 1);
- gtk_container_set_border_width (GTK_CONTAINER(dialog), GL_HIG_PAD2);
+ vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
- gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ dialog->priv->ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
+ GTK_STOCK_OK, GTK_RESPONSE_OK);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
- g_signal_connect(G_OBJECT (dialog), "response",
- G_CALLBACK (response_cb), NULL);
+ builder = gtk_builder_new ();
+ builder_filename = g_build_filename (GLABELS_DATA_DIR, "ui", "merge-properties-dialog.ui", NULL);
+ gtk_builder_add_objects_from_file (builder, builder_filename, object_ids, &error);
+ g_free (builder_filename);
+ if (error) {
+ g_critical ("%s\n\ngLabels may not be installed correctly!", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ gl_builder_util_get_widgets (builder,
+ "merge_properties_vbox", &merge_properties_vbox,
+ "type_combo_hbox", &dialog->priv->type_combo_hbox,
+ "location_vbox", &dialog->priv->location_vbox,
+ "treeview", &dialog->priv->treeview,
+ "select_all_button", &dialog->priv->select_all_button,
+ "unselect_all_button", &dialog->priv->unselect_all_button,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (vbox), merge_properties_vbox);
+ dialog->priv->builder = builder;
+
+ dialog->priv->type_combo = gtk_combo_box_text_new ();
+ gtk_box_pack_start (GTK_BOX (dialog->priv->type_combo_hbox), dialog->priv->type_combo, TRUE, TRUE, 0);
+ gtk_widget_show_all (GTK_WIDGET (dialog->priv->type_combo));
gl_debug (DEBUG_MERGE, "END");
}
+
+/*****************************************************************************/
+/* Finalize Function. */
+/*****************************************************************************/
static void
gl_merge_properties_dialog_finalize (GObject *object)
{
if (dialog->priv->merge != NULL) {
g_object_unref (G_OBJECT (dialog->priv->merge));
}
+ if (dialog->priv->builder != NULL) {
+ g_object_unref (G_OBJECT (dialog->priv->builder));
+ }
g_free (dialog->priv);
G_OBJECT_CLASS (gl_merge_properties_dialog_parent_class)->finalize (object);
gl_debug (DEBUG_MERGE, "END");
}
+
/*****************************************************************************/
/* NEW merge properties dialog. */
/*****************************************************************************/
return dialog;
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. Create merge widgets. */
/*--------------------------------------------------------------------------*/
glLabel *label,
GtkWindow *window)
{
- GladeXML *gui;
gchar *description;
glMergeSrcType src_type;
gchar *src;
gchar *name, *title;
GList *texts;
- GtkWidget *vbox;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkTreeSelection *selection;
gtk_window_set_destroy_with_parent (GTK_WINDOW(dialog), TRUE);
}
- gui = glade_xml_new (GLABELS_GLADE_DIR "merge-properties-dialog.glade",
- "merge_properties_vbox", NULL);
-
- if (!gui) {
- g_critical ("Could not open merge-properties-dialog.glade. gLabels may not be installed correctly!");
- return;
- }
-
- vbox = glade_xml_get_widget (gui, "merge_properties_vbox");
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
-
- dialog->priv->type_combo = glade_xml_get_widget (gui, "type_combo");
- dialog->priv->location_vbox = glade_xml_get_widget (gui, "location_vbox");
- dialog->priv->treeview = glade_xml_get_widget (gui, "treeview");
-
- dialog->priv->select_all_button = glade_xml_get_widget (gui, "select_all_button");
- dialog->priv->unselect_all_button = glade_xml_get_widget (gui, "unselect_all_button");
-
- g_object_unref (gui);
-
- gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->type_combo));
-
dialog->priv->label = label;
dialog->priv->merge = gl_label_get_merge (dialog->priv->label);
gl_debug (DEBUG_MERGE, " \"%s\"", p->data);
}
}
- gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->type_combo),
- texts);
+ gl_combo_util_set_strings (GTK_COMBO_BOX_TEXT (dialog->priv->type_combo), texts);
gl_merge_free_descriptions (&texts);
- gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->type_combo),
- description);
+ gl_combo_util_set_active_text (GTK_COMBO_BOX (dialog->priv->type_combo), description);
g_signal_connect (G_OBJECT (dialog->priv->type_combo), "changed",
G_CALLBACK (type_changed_cb), dialog);
GTK_FILE_CHOOSER_ACTION_OPEN);
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog->priv->src_entry),
src);
+ gtk_file_chooser_button_set_focus_on_click (GTK_FILE_CHOOSER_BUTTON (dialog->priv->src_entry),
+ FALSE);
g_signal_connect (G_OBJECT (dialog->priv->src_entry),
"selection-changed",
G_CALLBACK (src_changed_cb), dialog);
"active", SELECT_COLUMN,
"visible", IS_RECORD_COLUMN,
NULL);
- gtk_tree_view_column_set_clickable (column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->priv->treeview), column);
renderer = gtk_cell_renderer_text_new ();
- gtk_object_set (GTK_OBJECT (renderer), "yalign", 0.0, NULL);
+ g_object_set (G_OBJECT (renderer), "yalign", 0.0, NULL);
column = gtk_tree_view_column_new_with_attributes (_("Record/Field"), renderer,
"text", RECORD_FIELD_COLUMN,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->priv->treeview), column);
gtk_tree_view_set_expander_column (GTK_TREE_VIEW (dialog->priv->treeview), column);
renderer = gtk_cell_renderer_text_new ();
- gtk_object_set (GTK_OBJECT (renderer), "yalign", 0.0, NULL);
+ g_object_set (G_OBJECT (renderer), "yalign", 0.0, NULL);
column = gtk_tree_view_column_new_with_attributes (_("Data"), renderer,
"text", VALUE_COLUMN,
NULL);
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ gtk_widget_grab_focus (dialog->priv->ok_button);
+ gtk_widget_grab_default (dialog->priv->ok_button);
+
+ g_signal_connect(G_OBJECT (dialog), "response",
+ G_CALLBACK (response_cb), NULL);
+
gl_debug (DEBUG_MERGE, "END");
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. type "changed" callback. */
/*--------------------------------------------------------------------------*/
gl_debug (DEBUG_MERGE, "START");
- description = gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->type_combo));
+ description = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (dialog->priv->type_combo));
name = gl_merge_description_to_name (description);
src = gl_merge_get_src (dialog->priv->merge); /* keep current src if possible */
dialog->priv->src_entry =
gtk_file_chooser_button_new (_("Select merge-database source"),
GTK_FILE_CHOOSER_ACTION_OPEN);
+ gtk_file_chooser_button_set_focus_on_click (GTK_FILE_CHOOSER_BUTTON (dialog->priv->src_entry),
+ FALSE);
if (dialog->priv->saved_src != NULL) {
gl_debug (DEBUG_MERGE, "Setting src = \"%s\"", dialog->priv->saved_src);
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog->priv->src_entry),
G_CALLBACK (src_changed_cb), dialog);
break;
case GL_MERGE_SRC_IS_FIXED:
+ /* Translators: "Fixed" here means that for the given document-merge method, there are
+ * no further choices to further define the source of data. E.g. if you select the
+ * evolution-data-server, there are no further choices -- the source is "Fixed."
+ */
dialog->priv->src_entry = gtk_label_new (_("Fixed"));
gtk_misc_set_alignment (GTK_MISC (dialog->priv->src_entry), 0.0, 0.5);
gl_debug (DEBUG_MERGE, "END");
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. source "changed" callback. */
/*--------------------------------------------------------------------------*/
gl_debug (DEBUG_MERGE, "END");
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. response callback. */
/*--------------------------------------------------------------------------*/
switch (response) {
case GTK_RESPONSE_OK:
- gl_label_set_merge (dialog->priv->label, dialog->priv->merge);
+ gl_label_set_merge (dialog->priv->label, dialog->priv->merge, TRUE);
gtk_widget_hide (GTK_WIDGET (dialog));
break;
case GTK_RESPONSE_CANCEL:
gl_debug (DEBUG_MERGE, "END");
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. Load tree store from merge data. */
/*--------------------------------------------------------------------------*/
gl_debug (DEBUG_MERGE, "END");
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. Record select toggled. */
/*--------------------------------------------------------------------------*/
gl_debug (DEBUG_MERGE, "END");
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. "Select All" button callback. */
/*--------------------------------------------------------------------------*/
gl_debug (DEBUG_MERGE, "END");
}
+
/*--------------------------------------------------------------------------*/
/* PRIVATE. "Unselect All" button callback. */
/*--------------------------------------------------------------------------*/
gl_debug (DEBUG_MERGE, "END");
}
+
+
+
+/*
+ * Local Variables: -- emacs
+ * mode: C -- emacs
+ * c-basic-offset: 8 -- emacs
+ * tab-width: 8 -- emacs
+ * indent-tabs-mode: nil -- emacs
+ * End: -- emacs
+ */