GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
import-format-dialog.c
1 /*
2  * import-format-dialog.c -- provides a UI to ask for users to resolve
3  * ambiguities.
4  *
5  * Created by: Derek Atkins <[email protected]>
6  * Copyright (c) 2003 Derek Atkins <[email protected]>
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, contact:
20  *
21  * Free Software Foundation Voice: +1-617-542-5942
22  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
23  * Boston, MA 02110-1301, USA [email protected]
24  */
25 
26 #ifdef HAVE_CONFIG_H
27 #include "config.h"
28 #endif
29 
30 #include <gtk/gtk.h>
31 #include <glib/gi18n.h>
32 #include "dialog-utils.h"
33 #include "import-parse.h"
34 #include "gnc-ui-util.h"
35 
36 #define MAX_CHOICES 6
37 
38 static void
39 option_changed_cb (GtkWidget *widget, gpointer index_p)
40 {
41  gint *my_index = index_p;
42  *my_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
43 }
44 
45 
46 static GncImportFormat
47 add_menu_and_run_dialog(GtkWidget *dialog, GtkWidget *menu_box, GncImportFormat fmt)
48 {
49  GtkComboBox *combo;
50  GtkListStore *store;
51  GtkTreeIter iter;
52  GtkCellRenderer *cell;
53  gint index = 0, count = 0;
54  gint *index_p = &index;
55  GncImportFormat formats[MAX_CHOICES];
56 
57  store = gtk_list_store_new(1, G_TYPE_STRING);
58 
59  if (fmt & GNCIF_NUM_PERIOD)
60  {
61  gtk_list_store_append (store, &iter);
62  gtk_list_store_set (store, &iter, 0, _("Period: 123,456.78"), -1);
63  formats[count] = GNCIF_NUM_PERIOD;
64  count++;
65  }
66 
67  if (fmt & GNCIF_NUM_COMMA)
68  {
69  gtk_list_store_append (store, &iter);
70  gtk_list_store_set (store, &iter, 0, _("Comma: 123.456,78"), -1);
71  formats[count] = GNCIF_NUM_COMMA;
72  count++;
73  }
74 
75  if (fmt & GNCIF_DATE_MDY)
76  {
77  gtk_list_store_append (store, &iter);
78  gtk_list_store_set (store, &iter, 0, _("m/d/y"), -1);
79  formats[count] = GNCIF_DATE_MDY;
80  count++;
81  }
82 
83  if (fmt & GNCIF_DATE_DMY)
84  {
85  gtk_list_store_append (store, &iter);
86  gtk_list_store_set (store, &iter, 0, _("d/m/y"), -1);
87  formats[count] = GNCIF_DATE_DMY;
88  count++;
89  }
90 
91  if (fmt & GNCIF_DATE_YMD)
92  {
93  gtk_list_store_append (store, &iter);
94  gtk_list_store_set (store, &iter, 0, _("y/m/d"), -1);
95  formats[count] = GNCIF_DATE_YMD;
96  count++;
97  }
98 
99  if (fmt & GNCIF_DATE_YDM)
100  {
101  gtk_list_store_append (store, &iter);
102  gtk_list_store_set (store, &iter, 0, _("y/d/m"), -1);
103  formats[count] = GNCIF_DATE_YDM;
104  count++;
105  }
106 
107  g_assert(count > 1);
108 
109  combo = GTK_COMBO_BOX(gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)));
110  g_object_unref(store);
111 
112  /* Create cell renderer. */
113  cell = gtk_cell_renderer_text_new();
114 
115  /* Pack it to the combo box. */
116  gtk_cell_layout_pack_start( GTK_CELL_LAYOUT( combo ), cell, FALSE );
117 
118  /* Connect renderer to data source */
119  gtk_cell_layout_set_attributes( GTK_CELL_LAYOUT( combo ), cell, "text", 0, NULL );
120 
121  g_signal_connect(G_OBJECT(combo), "changed",
122  G_CALLBACK(option_changed_cb), index_p);
123 
124  gtk_box_pack_start(GTK_BOX(menu_box), GTK_WIDGET(combo), TRUE, TRUE, 0);
125 
126  gtk_widget_show_all(dialog);
127  gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
128  gtk_dialog_run(GTK_DIALOG(dialog));
129  gtk_widget_destroy(dialog);
130 
131  return formats[index];
132 }
133 
134 
135 GncImportFormat
136 gnc_import_choose_fmt(const char* msg, GncImportFormat fmts, gpointer data)
137 {
138  GtkBuilder *builder;
139  GtkWidget *dialog;
140  GtkWidget *widget;
141 
142  g_return_val_if_fail(fmts, FALSE);
143 
144  /* if there is only one format availble, just return it */
145  if (!(fmts & (fmts - 1)))
146  {
147  return fmts;
148  }
149  /* Open the Glade Builder file */
150  builder = gtk_builder_new();
151  gnc_builder_add_from_file (builder, "dialog-import.glade", "format_picker");
152  dialog = GTK_WIDGET(gtk_builder_get_object (builder, "format_picker"));
153  widget = GTK_WIDGET(gtk_builder_get_object (builder, "msg_label"));
154  gtk_label_set_text(GTK_LABEL(widget), msg);
155 
156  widget = GTK_WIDGET(gtk_builder_get_object (builder, "menu_box"));
157 
158  g_object_unref(G_OBJECT(builder));
159 
160  return add_menu_and_run_dialog(dialog, widget, fmts);
161 }
utility functions for the GnuCash UI