]> Dogcows Code - chaz/homebank/blob - src/ui-assist-start.c
add gitignore
[chaz/homebank] / src / ui-assist-start.c
1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2014 Maxime DOYEN
3 *
4 * This file is part of HomeBank.
5 *
6 * HomeBank is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * HomeBank is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "homebank.h"
21
22 #include "ui-assist-start.h"
23 #include "dsp_mainwindow.h"
24
25
26 #define MYDEBUG 0
27
28 #if MYDEBUG
29 #define DB(x) (x);
30 #else
31 #define DB(x);
32 #endif
33
34 /* our global datas */
35 extern struct HomeBank *GLOBALS;
36
37 extern gchar *CYA_ACC_TYPE[];
38
39 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
40
41
42 static void
43 on_assistant_apply (GtkWidget *widget, gpointer user_data)
44 {
45 struct assist_start_data *data = user_data;
46 Account *item;
47 gdouble value;
48
49 /* set owner */
50 gchar *owner = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_owner));
51 if (owner && *owner)
52 {
53 hbfile_change_owner(g_strdup(owner));
54 GLOBALS->changes_count++;
55 }
56
57
58 /* load preset categories */
59 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_load)))
60 {
61 if(data->pathfilename != NULL)
62 {
63 gchar *error;
64 category_load_csv(data->pathfilename, &error);
65 //DB( g_print(" -> loaded=%d\n", ok) );
66 }
67 }
68
69 /* initialise an account */
70 item = da_acc_malloc();
71
72 gchar *txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_name));
73 if (txt && *txt)
74 {
75 item->name = g_strdup(txt);
76 }
77
78 item->type = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_type));
79
80 item->number = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_number)));
81
82 gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_initial));
83 value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_initial));
84 item->initial = value;
85
86 gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_minimum));
87 value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_minimum));
88 item->minimum = value;
89
90 da_acc_append(item);
91 GLOBALS->changes_count++;
92
93 //our global list has changed, so update the treeview
94 ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_TITLE+UF_SENSITIVE+UF_BALANCE+UF_REFRESHALL));
95
96 }
97
98 static void
99 on_assistant_close_cancel (GtkWidget *widget, gpointer user_data)
100 {
101 struct assist_start_data *data = user_data;
102
103 //data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
104 gtk_widget_destroy (data->assistant);
105
106 g_free(data->pathfilename);
107
108 g_free(data);
109
110 }
111
112 static void
113 on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer user_data)
114 {
115 struct assist_start_data *data = user_data;
116 gint current_page, n_pages;
117 gchar *title;
118
119 current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (widget));
120 n_pages = gtk_assistant_get_n_pages (GTK_ASSISTANT (widget));
121
122 title = g_strdup_printf (_("New HomeBank file (%d of %d)"), current_page + 1, n_pages);
123 gtk_window_set_title (GTK_WINDOW (widget), title);
124 g_free (title);
125
126
127 switch( current_page )
128 {
129 case 1:
130 {
131 gchar **langs = (gchar **)g_get_language_names ();
132 gchar *txt = g_strjoinv(", ", langs);
133
134 DB( g_print("%s\n", txt) );;
135
136 gtk_label_set_label(GTK_LABEL(data->TX_lang), txt);
137 g_free(txt);
138
139
140 gchar *lang;
141 data->pathfilename = category_find_preset(&lang);
142 if(data->pathfilename != NULL)
143 {
144 gtk_label_set_label(GTK_LABEL(data->TX_file), lang);
145 gtk_widget_show(data->CM_load);
146 gtk_widget_show(data->ok_image);
147 gtk_widget_hide(data->ko_image);
148 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_load), TRUE);
149 }
150 else
151 {
152 gtk_widget_hide(data->CM_load);
153 gtk_label_set_label(GTK_LABEL(data->TX_file), _("Not found"));
154 gtk_widget_show(data->ko_image);
155 gtk_widget_hide(data->ok_image);
156 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_load), FALSE);
157 }
158
159
160 }
161 break;
162
163
164 }
165
166 }
167
168 static void
169 on_entry_changed (GtkWidget *widget, gpointer data)
170 {
171 GtkAssistant *assistant = GTK_ASSISTANT (data);
172 GtkWidget *current_page;
173 gint page_number;
174 const gchar *text;
175
176 page_number = gtk_assistant_get_current_page (assistant);
177 current_page = gtk_assistant_get_nth_page (assistant, page_number);
178 text = gtk_entry_get_text (GTK_ENTRY (widget));
179
180 if (text && *text)
181 gtk_assistant_set_page_complete (assistant, current_page, TRUE);
182 else
183 gtk_assistant_set_page_complete (assistant, current_page, FALSE);
184 }
185
186 static void
187 ui_start_assistant_create_page1 (GtkWidget *assistant, struct assist_start_data *data)
188 {
189 GtkWidget *box, *label, *entry;
190 GdkPixbuf *pixbuf;
191
192 box = gtk_hbox_new (FALSE, HB_BOX_SPACING);
193 gtk_container_set_border_width (GTK_CONTAINER (box), HB_MAINBOX_SPACING);
194
195
196 label = gtk_label_new (_("Owner:"));
197 gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
198
199 entry = gtk_entry_new ();
200 data->ST_owner = entry;
201 gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0);
202 g_signal_connect (G_OBJECT (entry), "changed",
203 G_CALLBACK (on_entry_changed), assistant);
204
205 gtk_widget_show_all (box);
206 gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
207
208 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, _("File properties"));
209 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), box, GTK_ASSISTANT_PAGE_INTRO);
210
211 pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_FILE, GTK_ICON_SIZE_DIALOG, NULL);
212 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), box, pixbuf);
213 g_object_unref (pixbuf);
214 }
215
216 static void
217 ui_start_assistant_create_page2 (GtkWidget *assistant, struct assist_start_data *data)
218 {
219 GtkWidget *box, *hbox, *label, *table, *widget, *alignment;
220 GdkPixbuf *pixbuf;
221 gint row;
222
223 box = gtk_vbox_new (FALSE, HB_BOX_SPACING);
224 gtk_container_set_border_width (GTK_CONTAINER (box), HB_MAINBOX_SPACING);
225
226 table = gtk_table_new (12, 3, FALSE);
227 //gtk_container_set_border_width (GTK_CONTAINER (table), SP_BORDER);
228 gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING*2);
229 gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING*2);
230
231 // gtk_alignment_new(xalign, yalign, xscale, yscale)
232 alignment = gtk_alignment_new(0.5, 0.5, 1.0, 0.0);
233 gtk_container_add(GTK_CONTAINER(alignment), table);
234 gtk_box_pack_start (GTK_BOX (box), alignment, TRUE, TRUE, 0);
235
236 row = 0;
237 label = make_label(_("System detection"), 0.0, 0.5);
238 gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1);
239 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, row, row+1);
240
241 row++;
242 label = make_label("", 0.0, 0.5);
243 gtk_misc_set_padding (GTK_MISC (label), HB_BOX_SPACING, 0);
244 gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
245
246 label = make_label(_("Languages:"), 0.0, 0.5);
247 gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
248 widget = make_label(NULL, 0.0, 0.5);
249 data->TX_lang = widget;
250 gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
251
252 row++;
253 label = make_label(_("Preset file:"), 0.0, 0.5);
254 gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
255 hbox = gtk_hbox_new (FALSE, HB_BOX_SPACING);
256 gtk_table_attach (GTK_TABLE (table), hbox, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
257
258 widget = gtk_image_new_from_stock(GTK_STOCK_YES, GTK_ICON_SIZE_BUTTON);
259 data->ok_image = widget;
260 gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
261
262 widget = gtk_image_new_from_stock(GTK_STOCK_NO, GTK_ICON_SIZE_BUTTON);
263 data->ko_image = widget;
264 gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
265
266 widget = make_label(NULL, 0.0, 0.5);
267 data->TX_file = widget;
268 gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
269
270 row++;
271 widget = gtk_check_button_new_with_mnemonic (_("Initialize my categories with this file"));
272 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
273 data->CM_load = widget;
274 gtk_table_attach (GTK_TABLE (table), widget, 1, 3, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
275
276 gtk_widget_show_all (box);
277
278 gtk_widget_hide(data->ok_image);
279 gtk_widget_hide(data->ko_image);
280
281 gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
282 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), box, TRUE);
283 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, _("Preset categories"));
284
285 pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_FILE, GTK_ICON_SIZE_DIALOG, NULL);
286 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), box, pixbuf);
287 g_object_unref (pixbuf);
288 }
289
290 static void
291 ui_start_assistant_create_page3 (GtkWidget *assistant, struct assist_start_data *data)
292 {
293 GtkWidget *box, *label, *widget, *table, *alignment;
294 GdkPixbuf *pixbuf;
295 gint row;
296
297 box = gtk_vbox_new (FALSE, HB_BOX_SPACING);
298 gtk_container_set_border_width (GTK_CONTAINER (box), HB_MAINBOX_SPACING);
299
300
301 table = gtk_table_new (12, 3, FALSE);
302 //gtk_container_set_border_width (GTK_CONTAINER (table), SP_BORDER);
303 gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING);
304 gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING);
305
306 // gtk_alignment_new(xalign, yalign, xscale, yscale)
307 alignment = gtk_alignment_new(0.5, 0.5, 1.0, 0.0);
308 gtk_container_add(GTK_CONTAINER(alignment), table);
309 gtk_box_pack_start (GTK_BOX (box), alignment, TRUE, TRUE, 0);
310
311 row = 0;
312 label = make_label(_("Informations"), 0.0, 0.5);
313 gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1);
314 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, row, row+1);
315
316 row++;
317 label = make_label("", 0.0, 0.5);
318 gtk_misc_set_padding (GTK_MISC (label), HB_BOX_SPACING, 0);
319 gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
320
321 label = make_label(_("_Name:"), 0.0, 0.5);
322 gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
323 widget = make_string(label);
324 data->ST_name = widget;
325 gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
326
327 g_signal_connect (G_OBJECT (widget), "changed",
328 G_CALLBACK (on_entry_changed), assistant);
329
330
331 row++;
332 label = make_label(_("_Type:"), 0.0, 0.5);
333 gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
334 widget = make_cycle(label, CYA_ACC_TYPE);
335 data->CY_type = widget;
336 gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
337
338 row++;
339 label = make_label(_("N_umber:"), 0.0, 0.5);
340 gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
341 widget = make_string(label);
342 data->ST_number = widget;
343 gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
344
345
346 //other
347
348
349 //row = 0;
350 row++;
351 label = make_label(_("Balances"), 0.0, 0.5);
352 gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1);
353 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, row, row+1);
354
355 row++;
356 label = gtk_label_new_with_mnemonic (_("_Initial:"));
357 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
358 gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
359 widget = make_amount(label);
360 data->ST_initial = widget;
361
362 // gtk_alignment_new(xalign, yalign, xscale, yscale)
363 alignment = gtk_alignment_new(0.0, 0.5, 0.33, 0.0);
364 gtk_container_add(GTK_CONTAINER(alignment), widget);
365 gtk_table_attach (GTK_TABLE (table), alignment, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
366
367 row++;
368 label = gtk_label_new_with_mnemonic (_("_Overdrawn at:"));
369 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
370 gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
371 widget = make_amount(label);
372 data->ST_minimum = widget;
373
374 // gtk_alignment_new(xalign, yalign, xscale, yscale)
375 alignment = gtk_alignment_new(0.0, 0.5, 0.33, 0.0);
376 gtk_container_add(GTK_CONTAINER(alignment), widget);
377 gtk_table_attach (GTK_TABLE (table), alignment, 2, 3, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
378
379
380
381
382 gtk_widget_show_all (box);
383 gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
384
385 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, _("Create an account"));
386
387 pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_FILE, GTK_ICON_SIZE_DIALOG, NULL);
388 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), box, pixbuf);
389 g_object_unref (pixbuf);
390 }
391
392
393
394
395
396 static void
397 ui_start_assistant_create_page4 (GtkWidget *assistant, struct assist_start_data *data)
398 {
399 GtkWidget *label;
400 GdkPixbuf *pixbuf;
401
402 label = gtk_label_new (_("This is a confirmation page, press 'Apply' to apply changes"));
403
404 gtk_widget_show (label);
405 gtk_assistant_append_page (GTK_ASSISTANT (assistant), label);
406 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), label, GTK_ASSISTANT_PAGE_CONFIRM);
407 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), label, TRUE);
408 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), label, _("Confirmation"));
409
410 pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_FILE, GTK_ICON_SIZE_DIALOG, NULL);
411 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), label, pixbuf);
412 g_object_unref (pixbuf);
413 }
414
415
416
417
418
419 GtkWidget*
420 ui_start_assistant (void)
421 {
422 struct assist_start_data *data;
423 GtkWidget *assistant, *page;
424
425 data = g_malloc0(sizeof(struct assist_start_data));
426 if(!data) return NULL;
427
428 assistant = gtk_assistant_new ();
429 data->assistant = assistant;
430
431 //store our window private data
432 g_object_set_data(G_OBJECT(assistant), "inst_data", (gpointer)data);
433 //DB( g_print("** (import) window=%x, inst_data=%x\n", assistant, data) );
434
435 gtk_window_set_default_size (GTK_WINDOW (assistant), 400, -1);
436
437 gtk_window_set_modal(GTK_WINDOW (assistant), TRUE);
438 gtk_window_set_transient_for(GTK_WINDOW(assistant), GTK_WINDOW(GLOBALS->mainwindow));
439
440 ui_start_assistant_create_page1 (assistant, data);
441 ui_start_assistant_create_page2 (assistant, data);
442 ui_start_assistant_create_page3 (assistant, data);
443 ui_start_assistant_create_page4 (assistant, data);
444
445 gtk_entry_set_text(GTK_ENTRY(data->ST_owner), g_get_real_name ());
446 page = gtk_assistant_get_nth_page(GTK_ASSISTANT (assistant), 0);
447 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
448
449
450 g_signal_connect (G_OBJECT (assistant), "cancel",
451 G_CALLBACK (on_assistant_close_cancel), data);
452 g_signal_connect (G_OBJECT (assistant), "close",
453 G_CALLBACK (on_assistant_close_cancel), data);
454 g_signal_connect (G_OBJECT (assistant), "apply",
455 G_CALLBACK (on_assistant_apply), data);
456 g_signal_connect (G_OBJECT (assistant), "prepare",
457 G_CALLBACK (on_assistant_prepare), data);
458
459 gtk_widget_show (assistant);
460
461 return assistant;
462 }
This page took 0.055457 seconds and 4 git commands to generate.