1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2016 Maxime DOYEN
4 * This file is part of HomeBank.
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.
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.
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/>.
22 #include "ui-assist-start.h"
23 #include "dsp_mainwindow.h"
24 #include "ui-currency.h"
35 /* our global datas */
36 extern struct HomeBank
*GLOBALS
;
38 extern gchar
*CYA_ACC_TYPE
[];
40 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
44 on_assistant_apply (GtkWidget
*widget
, gpointer user_data
)
46 struct assist_start_data
*data
= user_data
;
51 gchar
*owner
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_owner
));
54 hbfile_change_owner(g_strdup(owner
));
55 GLOBALS
->changes_count
++;
58 if( data
->curfmt
!= NULL
)
60 hbfile_replace_basecurrency(data
->curfmt
);
63 /* load preset categories */
64 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->CM_load
)))
66 if(data
->pathfilename
!= NULL
)
69 category_load_csv(data
->pathfilename
, &error
);
70 //DB( g_print(" -> loaded=%d\n", ok) );
74 /* initialise an account */
75 item
= da_acc_malloc();
77 gchar
*txt
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_name
));
80 item
->name
= g_strdup(txt
);
83 item
->kcur
= GLOBALS
->kcur
;
85 item
->type
= gtk_combo_box_get_active(GTK_COMBO_BOX(data
->CY_type
));
87 item
->number
= g_strdup(gtk_entry_get_text(GTK_ENTRY(data
->ST_number
)));
89 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->ST_initial
));
90 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_initial
));
91 item
->initial
= value
;
93 gtk_spin_button_update(GTK_SPIN_BUTTON(data
->ST_minimum
));
94 value
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->ST_minimum
));
95 item
->minimum
= value
;
98 GLOBALS
->changes_count
++;
100 //our global list has changed, so update the treeview
101 ui_mainwindow_update(GLOBALS
->mainwindow
, GINT_TO_POINTER(UF_TITLE
+UF_SENSITIVE
+UF_BALANCE
+UF_REFRESHALL
));
106 on_assistant_close_cancel (GtkWidget
*widget
, gpointer user_data
)
108 struct assist_start_data
*data
= user_data
;
110 //data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
111 gtk_widget_destroy (data
->window
);
113 g_free(data
->pathfilename
);
120 on_assistant_prepare (GtkWidget
*widget
, GtkWidget
*page
, gpointer user_data
)
122 struct assist_start_data
*data
= user_data
;
123 gint current_page
, n_pages
;
126 current_page
= gtk_assistant_get_current_page (GTK_ASSISTANT (widget
));
127 n_pages
= gtk_assistant_get_n_pages (GTK_ASSISTANT (widget
));
129 title
= g_strdup_printf (_("New HomeBank file (%d of %d)"), current_page
+ 1, n_pages
);
130 gtk_window_set_title (GTK_WINDOW (widget
), title
);
134 switch( current_page
)
138 gchar
**langs
= (gchar
**)g_get_language_names ();
139 gchar
*txt
= g_strjoinv(", ", langs
);
141 DB( g_print("%s\n", txt
) );;
143 gtk_label_set_label(GTK_LABEL(data
->TX_lang
), txt
);
148 data
->pathfilename
= category_find_preset(&lang
);
149 if(data
->pathfilename
!= NULL
)
151 gtk_label_set_label(GTK_LABEL(data
->TX_file
), lang
);
152 gtk_widget_show(data
->CM_load
);
153 gtk_widget_show(data
->ok_image
);
154 gtk_widget_hide(data
->ko_image
);
155 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_load
), TRUE
);
159 gtk_widget_hide(data
->CM_load
);
160 gtk_label_set_label(GTK_LABEL(data
->TX_file
), _("Not found"));
161 gtk_widget_show(data
->ko_image
);
162 gtk_widget_hide(data
->ok_image
);
163 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->CM_load
), FALSE
);
176 on_entry_changed (GtkWidget
*widget
, gpointer data
)
178 GtkAssistant
*assistant
= GTK_ASSISTANT (data
);
179 GtkWidget
*current_page
;
183 page_number
= gtk_assistant_get_current_page (assistant
);
184 current_page
= gtk_assistant_get_nth_page (assistant
, page_number
);
185 text
= gtk_entry_get_text (GTK_ENTRY (widget
));
188 gtk_assistant_set_page_complete (assistant
, current_page
, TRUE
);
190 gtk_assistant_set_page_complete (assistant
, current_page
, FALSE
);
194 static void ui_start_assistant_property_change_action(GtkWidget
*widget
, gpointer user_data
)
196 struct assist_start_data
*data
;
197 Currency4217
*curfmt
;
199 DB( g_print("\n[ui-start] property_change_action\n") );
201 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
205 curfmt
= ui_cur_select_dialog_new(GTK_WINDOW(data
->window
), CUR_SELECT_MODE_BASE
);
211 DB( g_printf("- user selected: '%s' '%s'\n", curfmt
->curr_iso_code
, curfmt
->name
) );
213 data
->curfmt
= curfmt
;
217 g_snprintf(label
, 127, "%s - %s", curfmt
->curr_iso_code
, name
);
218 gtk_label_set_text (GTK_LABEL(data
->LB_currency
), label
);
224 ui_start_assistant_property_fill (GtkWidget
*assistant
, struct assist_start_data
*data
)
229 gtk_entry_set_text(GTK_ENTRY(data
->ST_owner
), g_get_real_name ());
231 cur
= da_cur_get (GLOBALS
->kcur
);
233 g_snprintf(label
, 127, "%s - %s", cur
->iso_code
, cur
->name
);
234 gtk_label_set_text (GTK_LABEL(data
->LB_currency
), label
);
240 ui_start_assistant_property_create (GtkWidget
*assistant
, struct assist_start_data
*data
)
242 GtkWidget
*table
, *label
, *widget
;
245 table
= gtk_grid_new ();
246 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
247 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
248 //gtk_container_set_border_width (GTK_CONTAINER (table), SPACING_MEDIUM);
249 gtk_widget_set_valign (table
, GTK_ALIGN_CENTER
);
252 label
= make_label_widget(_("_Owner:"));
253 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
254 widget
= make_string(label
);
255 data
->ST_owner
= widget
;
256 gtk_widget_set_hexpand(widget
, TRUE
);
257 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 2, 1);
260 label
= make_label_widget(_("Currency:"));
261 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
262 widget
= make_label (NULL
, 0, 0.5);
263 data
->LB_currency
= widget
;
264 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 1, 1);
265 widget
= gtk_button_new_with_mnemonic (_("_Change"));
266 data
->BT_change
= widget
;
267 gtk_grid_attach (GTK_GRID (table
), widget
, 3, row
, 1, 1);
269 g_signal_connect (G_OBJECT (data
->ST_owner
), "changed", G_CALLBACK (on_entry_changed
), assistant
);
270 g_signal_connect (G_OBJECT (data
->BT_change
), "clicked", G_CALLBACK (ui_start_assistant_property_change_action
), data
);
273 gtk_widget_show_all (table
);
274 gtk_assistant_append_page (GTK_ASSISTANT (assistant
), table
);
276 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant
), table
, _("File properties"));
277 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant
), table
, GTK_ASSISTANT_PAGE_INTRO
);
282 ui_start_assistant_create_page2 (GtkWidget
*assistant
, struct assist_start_data
*data
)
284 GtkWidget
*box
, *hbox
, *label
, *table
, *widget
;
287 box
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
288 gtk_container_set_border_width (GTK_CONTAINER (box
), SPACING_MEDIUM
);
290 table
= gtk_grid_new ();
291 //gtk_container_set_border_width (GTK_CONTAINER (table), SP_BORDER);
292 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
*2);
293 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
*2);
295 gtk_box_pack_start (GTK_BOX (box
), table
, TRUE
, TRUE
, 0);
298 label
= make_label_group(_("System detection"));
299 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
302 label
= make_label_widget(_("Languages:"));
303 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
304 widget
= make_label(NULL
, 0.0, 0.5);
305 data
->TX_lang
= widget
;
306 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 1, 1);
309 label
= make_label_widget(_("Preset file:"));
310 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
311 hbox
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, SPACING_SMALL
);
312 gtk_grid_attach (GTK_GRID (table
), hbox
, 2, row
, 1, 1);
314 widget
= gtk_image_new_from_icon_name(ICONNAME_HB_FILE_VALID
, GTK_ICON_SIZE_LARGE_TOOLBAR
);
315 data
->ok_image
= widget
;
316 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
318 widget
= gtk_image_new_from_icon_name(ICONNAME_HB_FILE_INVALID
, GTK_ICON_SIZE_LARGE_TOOLBAR
);
319 data
->ko_image
= widget
;
320 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
322 widget
= make_label(NULL
, 0.0, 0.5);
323 data
->TX_file
= widget
;
324 gtk_box_pack_start (GTK_BOX (hbox
), widget
, FALSE
, FALSE
, 0);
327 widget
= gtk_check_button_new_with_mnemonic (_("Initialize my categories with this file"));
328 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget
), TRUE
);
329 data
->CM_load
= widget
;
330 gtk_grid_attach (GTK_GRID (table
), widget
, 1, row
, 3, 1);
332 gtk_widget_show_all (box
);
334 gtk_widget_hide(data
->ok_image
);
335 gtk_widget_hide(data
->ko_image
);
337 gtk_assistant_append_page (GTK_ASSISTANT (assistant
), box
);
338 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant
), box
, TRUE
);
339 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant
), box
, _("Preset categories"));
344 ui_start_assistant_create_page3 (GtkWidget
*assistant
, struct assist_start_data
*data
)
346 GtkWidget
*box
, *label
, *widget
, *table
;
349 box
= gtk_box_new (GTK_ORIENTATION_VERTICAL
, SPACING_SMALL
);
350 gtk_container_set_border_width (GTK_CONTAINER (box
), SPACING_MEDIUM
);
353 table
= gtk_grid_new ();
354 //gtk_container_set_border_width (GTK_CONTAINER (table), SP_BORDER);
355 gtk_grid_set_row_spacing (GTK_GRID (table
), SPACING_SMALL
);
356 gtk_grid_set_column_spacing (GTK_GRID (table
), SPACING_MEDIUM
);
357 gtk_box_pack_start (GTK_BOX (box
), table
, TRUE
, TRUE
, 0);
360 label
= make_label_group(_("Informations"));
361 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
364 label
= make_label_widget(_("_Name:"));
365 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
366 widget
= make_string(label
);
367 data
->ST_name
= widget
;
368 gtk_widget_set_hexpand(widget
, TRUE
);
369 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 1, 1);
371 g_signal_connect (G_OBJECT (widget
), "changed",
372 G_CALLBACK (on_entry_changed
), assistant
);
376 label
= make_label_widget(_("_Type:"));
377 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
378 widget
= make_cycle(label
, CYA_ACC_TYPE
);
379 data
->CY_type
= widget
;
380 gtk_widget_set_hexpand(widget
, TRUE
);
381 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 1, 1);
384 label
= make_label_widget(_("N_umber:"));
385 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
386 widget
= make_string(label
);
387 data
->ST_number
= widget
;
388 gtk_widget_set_hexpand(widget
, TRUE
);
389 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 1, 1);
395 label
= make_label_group(_("Balances"));
396 gtk_grid_attach (GTK_GRID (table
), label
, 0, row
, 3, 1);
399 label
= make_label_widget(_("_Initial:"));
400 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
401 widget
= make_amount(label
);
402 data
->ST_initial
= widget
;
403 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 1, 1);
406 label
= make_label_widget(_("_Overdrawn at:"));
407 gtk_grid_attach (GTK_GRID (table
), label
, 1, row
, 1, 1);
408 widget
= make_amount(label
);
409 data
->ST_minimum
= widget
;
410 gtk_grid_attach (GTK_GRID (table
), widget
, 2, row
, 1, 1);
412 gtk_widget_show_all (box
);
413 gtk_assistant_append_page (GTK_ASSISTANT (assistant
), box
);
415 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant
), box
, _("Create an account"));
420 ui_start_assistant_create_page4 (GtkWidget
*assistant
, struct assist_start_data
*data
)
425 label
= gtk_label_new (_("This is a confirmation page, press 'Apply' to apply changes"));
427 gtk_widget_show (label
);
428 gtk_assistant_append_page (GTK_ASSISTANT (assistant
), label
);
429 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant
), label
, GTK_ASSISTANT_PAGE_CONFIRM
);
430 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant
), label
, TRUE
);
431 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant
), label
, _("Confirmation"));
441 ui_start_assistant (void)
443 struct assist_start_data
*data
;
444 GtkWidget
*assistant
, *page
;
446 data
= g_malloc0(sizeof(struct assist_start_data
));
447 if(!data
) return NULL
;
449 assistant
= gtk_assistant_new ();
450 data
->window
= assistant
;
452 //store our window private data
453 g_object_set_data(G_OBJECT(assistant
), "inst_data", (gpointer
)data
);
454 //DB( g_print("** (import) window=%x, inst_data=%x\n", assistant, data) );
456 gtk_window_set_default_size (GTK_WINDOW (assistant
), 400, -1);
458 gtk_window_set_modal(GTK_WINDOW (assistant
), TRUE
);
459 gtk_window_set_transient_for(GTK_WINDOW(assistant
), GTK_WINDOW(GLOBALS
->mainwindow
));
461 ui_start_assistant_property_create (assistant
, data
);
462 ui_start_assistant_create_page2 (assistant
, data
);
463 ui_start_assistant_create_page3 (assistant
, data
);
464 ui_start_assistant_create_page4 (assistant
, data
);
466 ui_start_assistant_property_fill(assistant
, data
);
468 page
= gtk_assistant_get_nth_page(GTK_ASSISTANT (assistant
), 0);
469 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant
), page
, TRUE
);
472 g_signal_connect (G_OBJECT (assistant
), "cancel",
473 G_CALLBACK (on_assistant_close_cancel
), data
);
474 g_signal_connect (G_OBJECT (assistant
), "close",
475 G_CALLBACK (on_assistant_close_cancel
), data
);
476 g_signal_connect (G_OBJECT (assistant
), "apply",
477 G_CALLBACK (on_assistant_apply
), data
);
478 g_signal_connect (G_OBJECT (assistant
), "prepare",
479 G_CALLBACK (on_assistant_prepare
), data
);
481 gtk_widget_show (assistant
);