]> Dogcows Code - chaz/homebank/blob - src/ui-assist-start.c
import homebank-5.2.6
[chaz/homebank] / src / ui-assist-start.c
1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2019 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 #include "ui-currency.h"
25
26
27 #define MYDEBUG 0
28
29 #if MYDEBUG
30 #define DB(x) (x);
31 #else
32 #define DB(x);
33 #endif
34
35 /* our global datas */
36 extern struct HomeBank *GLOBALS;
37
38 extern HbKvData CYA_ACC_TYPE[];
39
40 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
41
42
43 static void
44 on_assistant_apply (GtkWidget *widget, gpointer user_data)
45 {
46 struct assist_start_data *data = user_data;
47 Account *item;
48 gdouble value;
49
50 DB( g_print("\n[ui-start] apply\n") );
51
52
53 /* set owner */
54 gchar *owner = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_owner));
55 if (owner && *owner)
56 {
57 hbfile_change_owner(g_strdup(owner));
58 GLOBALS->changes_count++;
59 }
60
61 if( data->curfmt != NULL )
62 {
63 hbfile_replace_basecurrency(data->curfmt);
64 }
65
66 /* load preset categories */
67 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_load)))
68 {
69 if(data->pathfilename != NULL)
70 {
71 gchar *error;
72 category_load_csv(data->pathfilename, &error);
73 //DB( g_print(" -> loaded=%d\n", ok) );
74 }
75 }
76
77 /* initialise an account */
78 item = da_acc_malloc();
79
80 gchar *txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_name));
81 if (txt && *txt)
82 {
83 item->name = g_strdup(txt);
84 }
85
86 item->kcur = GLOBALS->kcur;
87 item->type = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_type));
88
89 item->number = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_number)));
90
91 gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_initial));
92 value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_initial));
93 item->initial = value;
94
95 gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_minimum));
96 value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_minimum));
97 item->minimum = value;
98
99 da_acc_append(item);
100 GLOBALS->changes_count++;
101
102 //our global list has changed, so update the treeview
103 //todo: #1693998 crappy to do this here
104 account_compute_balances ();
105 ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_TITLE+UF_SENSITIVE+UF_BALANCE+UF_REFRESHALL));
106
107 }
108
109 static void
110 on_assistant_close_cancel (GtkWidget *widget, gpointer user_data)
111 {
112 struct assist_start_data *data = user_data;
113
114 DB( g_print("\n[ui-start] close/cancel\n") );
115
116
117 //data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
118 gtk_widget_destroy (data->window);
119
120 g_free(data->pathfilename);
121
122 g_free(data);
123
124 }
125
126 static void
127 on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer user_data)
128 {
129 struct assist_start_data *data = user_data;
130 gint current_page, n_pages;
131 gchar *title;
132
133 DB( g_print("\n[ui-start] prepare\n") );
134
135
136 current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (widget));
137 n_pages = gtk_assistant_get_n_pages (GTK_ASSISTANT (widget));
138
139 title = g_strdup_printf (_("New HomeBank file (%d of %d)"), current_page + 1, n_pages);
140 gtk_window_set_title (GTK_WINDOW (widget), title);
141 g_free (title);
142
143
144 switch( current_page )
145 {
146 case 1:
147 {
148 gchar **langs = (gchar **)g_get_language_names ();
149 gchar *txt = g_strjoinv(", ", langs);
150
151 DB( g_print("%s\n", txt) );;
152
153 gtk_label_set_label(GTK_LABEL(data->TX_lang), txt);
154 g_free(txt);
155
156
157 gchar *lang;
158 data->pathfilename = category_find_preset(&lang);
159 if(data->pathfilename != NULL)
160 {
161 gtk_label_set_label(GTK_LABEL(data->TX_file), lang);
162 gtk_widget_show(data->CM_load);
163 gtk_widget_show(data->ok_image);
164 gtk_widget_hide(data->ko_image);
165 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_load), TRUE);
166 }
167 else
168 {
169 gtk_widget_hide(data->CM_load);
170 gtk_label_set_label(GTK_LABEL(data->TX_file), _("Not found"));
171 gtk_widget_show(data->ko_image);
172 gtk_widget_hide(data->ok_image);
173 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_load), FALSE);
174 }
175
176
177 }
178 break;
179
180
181 }
182
183 }
184
185 static void
186 on_entry_changed (GtkWidget *widget, gpointer data)
187 {
188 GtkAssistant *assistant = GTK_ASSISTANT (data);
189 GtkWidget *current_page;
190 gint page_number;
191 const gchar *text;
192
193 page_number = gtk_assistant_get_current_page (assistant);
194 current_page = gtk_assistant_get_nth_page (assistant, page_number);
195 text = gtk_entry_get_text (GTK_ENTRY (widget));
196
197 if (text && *text)
198 gtk_assistant_set_page_complete (assistant, current_page, TRUE);
199 else
200 gtk_assistant_set_page_complete (assistant, current_page, FALSE);
201 }
202
203
204 static void ui_start_assistant_property_change_action(GtkWidget *widget, gpointer user_data)
205 {
206 struct assist_start_data *data;
207 struct curSelectContext selectCtx;
208
209 DB( g_print("\n[ui-start] property_change_action\n") );
210
211 data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
212
213 data->curfmt = NULL;
214 ui_cur_select_dialog_new(GTK_WINDOW(data->window), CUR_SELECT_MODE_BASE, &selectCtx);
215 if( selectCtx.cur_4217 != NULL )
216 {
217 Currency4217 *curfmt;
218 gchar label[128];
219 gchar *name;
220
221 curfmt = selectCtx.cur_4217;
222
223 DB( g_printf("- user selected: '%s' '%s'\n", curfmt->curr_iso_code, curfmt->name) );
224
225 data->curfmt = curfmt;
226
227 name = curfmt->name;
228
229 g_snprintf(label, 127, "%s - %s", curfmt->curr_iso_code, name);
230 gtk_label_set_text (GTK_LABEL(data->LB_currency), label);
231 }
232 }
233
234
235 static void
236 ui_start_assistant_property_fill (GtkWidget *assistant, struct assist_start_data *data)
237 {
238 Currency *cur;
239 gchar label[128];
240
241 DB( g_print("\n[ui-start] property_fill\n") );
242
243
244 gtk_entry_set_text(GTK_ENTRY(data->ST_owner), g_get_real_name ());
245
246 cur = da_cur_get (GLOBALS->kcur);
247
248 g_snprintf(label, 127, "%s - %s", cur->iso_code, cur->name);
249 gtk_label_set_text (GTK_LABEL(data->LB_currency), label);
250
251 }
252
253
254 static void
255 ui_start_assistant_property_create (GtkWidget *assistant, struct assist_start_data *data)
256 {
257 GtkWidget *table, *label, *widget;
258 gint row;
259
260 table = gtk_grid_new ();
261 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
262 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
263 //gtk_container_set_border_width (GTK_CONTAINER (table), SPACING_MEDIUM);
264 gtk_widget_set_valign (table, GTK_ALIGN_CENTER);
265
266 row = 0;
267 label = make_label_widget(_("_Owner:"));
268 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
269 widget = make_string(label);
270 data->ST_owner = widget;
271 gtk_widget_set_hexpand(widget, TRUE);
272 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 2, 1);
273
274 row++;
275 label = make_label_widget(_("Currency:"));
276 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
277 widget = make_label (NULL, 0, 0.5);
278 data->LB_currency = widget;
279 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
280 widget = gtk_button_new_with_mnemonic (_("_Change"));
281 data->BT_change = widget;
282 gtk_grid_attach (GTK_GRID (table), widget, 3, row, 1, 1);
283
284 g_signal_connect (G_OBJECT (data->ST_owner), "changed", G_CALLBACK (on_entry_changed), assistant);
285 g_signal_connect (G_OBJECT (data->BT_change), "clicked", G_CALLBACK (ui_start_assistant_property_change_action), data);
286
287
288 gtk_widget_show_all (table);
289 gtk_assistant_append_page (GTK_ASSISTANT (assistant), table);
290
291 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), table, _("File properties"));
292 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), table, GTK_ASSISTANT_PAGE_INTRO);
293
294 }
295
296 static void
297 ui_start_assistant_create_page2 (GtkWidget *assistant, struct assist_start_data *data)
298 {
299 GtkWidget *box, *hbox, *label, *table, *widget;
300 gint row;
301
302 box = gtk_box_new (GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
303 gtk_container_set_border_width (GTK_CONTAINER (box), SPACING_MEDIUM);
304
305 table = gtk_grid_new ();
306 //gtk_container_set_border_width (GTK_CONTAINER (table), SP_BORDER);
307 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL*2);
308 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM*2);
309
310 gtk_box_pack_start (GTK_BOX (box), table, TRUE, TRUE, 0);
311
312 row = 0;
313 label = make_label_group(_("System detection"));
314 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
315
316 row++;
317 label = make_label_widget(_("Languages:"));
318 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
319 widget = make_label(NULL, 0.0, 0.5);
320 data->TX_lang = widget;
321 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
322
323 row++;
324 label = make_label_widget(_("Preset file:"));
325 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
326 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
327 gtk_grid_attach (GTK_GRID (table), hbox, 2, row, 1, 1);
328
329 widget = gtk_image_new_from_icon_name(ICONNAME_HB_FILE_VALID, GTK_ICON_SIZE_LARGE_TOOLBAR);
330 data->ok_image = widget;
331 gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
332
333 widget = gtk_image_new_from_icon_name(ICONNAME_HB_FILE_INVALID, GTK_ICON_SIZE_LARGE_TOOLBAR);
334 data->ko_image = widget;
335 gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
336
337 widget = make_label(NULL, 0.0, 0.5);
338 data->TX_file = widget;
339 gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
340
341 row++;
342 widget = gtk_check_button_new_with_mnemonic (_("Initialize my categories with this file"));
343 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
344 data->CM_load = widget;
345 gtk_grid_attach (GTK_GRID (table), widget, 1, row, 3, 1);
346
347 gtk_widget_show_all (box);
348
349 gtk_widget_hide(data->ok_image);
350 gtk_widget_hide(data->ko_image);
351
352 gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
353 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), box, TRUE);
354 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, _("Preset categories"));
355
356 }
357
358 static void
359 ui_start_assistant_create_page3 (GtkWidget *assistant, struct assist_start_data *data)
360 {
361 GtkWidget *box, *label, *widget, *table;
362 gint row;
363
364 box = gtk_box_new (GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
365 gtk_container_set_border_width (GTK_CONTAINER (box), SPACING_MEDIUM);
366
367
368 table = gtk_grid_new ();
369 //gtk_container_set_border_width (GTK_CONTAINER (table), SP_BORDER);
370 gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
371 gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
372 gtk_box_pack_start (GTK_BOX (box), table, TRUE, TRUE, 0);
373
374 row = 0;
375 label = make_label_group(_("Information"));
376 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
377
378 row++;
379 label = make_label_widget(_("_Name:"));
380 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
381 widget = make_string(label);
382 data->ST_name = widget;
383 gtk_widget_set_hexpand(widget, TRUE);
384 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
385
386 g_signal_connect (G_OBJECT (widget), "changed",
387 G_CALLBACK (on_entry_changed), assistant);
388
389
390 row++;
391 label = make_label_widget(_("_Type:"));
392 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
393 //widget = make_cycle(label, CYA_ACC_TYPE);
394 widget = hbtk_combo_box_new_with_data(label, CYA_ACC_TYPE);
395 data->CY_type = widget;
396 gtk_widget_set_hexpand(widget, TRUE);
397 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
398
399 row++;
400 label = make_label_widget(_("N_umber:"));
401 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
402 widget = make_string(label);
403 data->ST_number = widget;
404 gtk_widget_set_hexpand(widget, TRUE);
405 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
406
407 //other
408
409 //row = 0;
410 row++;
411 label = make_label_group(_("Balances"));
412 gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1);
413
414 row++;
415 label = make_label_widget(_("_Initial:"));
416 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
417 widget = make_amount(label);
418 data->ST_initial = widget;
419 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
420
421 row++;
422 label = make_label_widget(_("_Overdrawn at:"));
423 gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1);
424 widget = make_amount(label);
425 data->ST_minimum = widget;
426 gtk_grid_attach (GTK_GRID (table), widget, 2, row, 1, 1);
427
428 gtk_widget_show_all (box);
429 gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
430
431 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, _("Create an account"));
432 }
433
434
435 static void
436 ui_start_assistant_create_page4 (GtkWidget *assistant, struct assist_start_data *data)
437 {
438 GtkWidget *label;
439
440
441 label = gtk_label_new (_("This is a confirmation page, press 'Apply' to apply changes"));
442
443 gtk_widget_show (label);
444 gtk_assistant_append_page (GTK_ASSISTANT (assistant), label);
445 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), label, GTK_ASSISTANT_PAGE_CONFIRM);
446 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), label, TRUE);
447 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), label, _("Confirmation"));
448
449
450 }
451
452
453
454
455
456 GtkWidget*
457 ui_start_assistant (void)
458 {
459 struct assist_start_data *data;
460 GtkWidget *assistant, *page;
461
462 DB( g_print("\n[ui-start] new\n") );
463
464
465 data = g_malloc0(sizeof(struct assist_start_data));
466 if(!data) return NULL;
467
468 assistant = gtk_assistant_new ();
469 data->window = assistant;
470
471 //store our window private data
472 g_object_set_data(G_OBJECT(assistant), "inst_data", (gpointer)data);
473 //DB( g_print("** (import) window=%x, inst_data=%x\n", assistant, data) );
474
475 gtk_window_set_default_size (GTK_WINDOW (assistant), 400, -1);
476
477 gtk_window_set_modal(GTK_WINDOW (assistant), TRUE);
478 gtk_window_set_transient_for(GTK_WINDOW(assistant), GTK_WINDOW(GLOBALS->mainwindow));
479
480 ui_start_assistant_property_create (assistant, data);
481 ui_start_assistant_create_page2 (assistant, data);
482 ui_start_assistant_create_page3 (assistant, data);
483 ui_start_assistant_create_page4 (assistant, data);
484
485 ui_start_assistant_property_fill(assistant, data);
486
487 page = gtk_assistant_get_nth_page(GTK_ASSISTANT (assistant), 0);
488 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
489
490
491 g_signal_connect (G_OBJECT (assistant), "cancel",
492 G_CALLBACK (on_assistant_close_cancel), data);
493 g_signal_connect (G_OBJECT (assistant), "close",
494 G_CALLBACK (on_assistant_close_cancel), data);
495 g_signal_connect (G_OBJECT (assistant), "apply",
496 G_CALLBACK (on_assistant_apply), data);
497 g_signal_connect (G_OBJECT (assistant), "prepare",
498 G_CALLBACK (on_assistant_prepare), data);
499
500 gtk_widget_show (assistant);
501
502 return assistant;
503 }
This page took 0.05094 seconds and 4 git commands to generate.