]>
Dogcows Code - chaz/homebank/blob - src/ui-hbfile.c
1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2017 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/>.
23 #include "ui-hbfile.h"
24 #include "ui-category.h"
26 /****************************************************************************/
28 /****************************************************************************/
37 /* our global datas */
38 extern struct HomeBank
*GLOBALS
;
45 ** get widgets contents from the selected account
47 static void defhbfile_get(GtkWidget
*widget
, gpointer user_data
)
49 struct defhbfile_data
*data
;
52 gint smode
, weekday
, nbdays
;
54 DB( g_print("(ui-hbfile) get\n") );
56 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
59 owner
= (gchar
*)gtk_entry_get_text(GTK_ENTRY(data
->ST_owner
));
60 vehicle
= ui_cat_comboboxentry_get_key(GTK_COMBO_BOX(data
->PO_grp
));
61 if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->radio
[0])) )
65 weekday
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->NU_weekday
));
66 nbdays
= gtk_spin_button_get_value(GTK_SPIN_BUTTON(data
->NU_nbdays
));
69 if(strcasecmp(owner
, GLOBALS
->owner
))
71 if(vehicle
!= GLOBALS
->vehicle_category
)
73 if(smode
!= GLOBALS
->auto_smode
)
75 if(weekday
!= GLOBALS
->auto_weekday
)
77 if(nbdays
!= GLOBALS
->auto_nbdays
)
82 hbfile_change_owner(g_strdup(owner
));
84 GLOBALS
->vehicle_category
= vehicle
;
85 GLOBALS
->auto_smode
= smode
;
86 GLOBALS
->auto_weekday
= weekday
;
87 GLOBALS
->auto_nbdays
= nbdays
;
89 DB( g_print(" -> owner %s\n", GLOBALS
->owner
) );
90 DB( g_print(" -> ccgrp %d\n", GLOBALS
->vehicle_category
) );
91 DB( g_print(" -> smode %d\n", GLOBALS
->auto_smode
) );
92 DB( g_print(" -> weekday %d\n", GLOBALS
->auto_weekday
) );
93 DB( g_print(" -> nbdays %d\n", GLOBALS
->auto_nbdays
) );
99 ** set widgets contents from the selected account
101 static void defhbfile_set(GtkWidget
*widget
, gpointer user_data
)
103 struct defhbfile_data
*data
;
105 DB( g_print("(ui-hbfile) set\n") );
107 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget
, GTK_TYPE_WINDOW
)), "inst_data");
109 DB( g_print(" -> ccgrp %d\n", GLOBALS
->vehicle_category
) );
110 DB( g_print(" -> autoinsert %d\n", GLOBALS
->auto_nbdays
) );
112 if(GLOBALS
->owner
) gtk_entry_set_text(GTK_ENTRY(data
->ST_owner
), GLOBALS
->owner
);
113 ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data
->PO_grp
), GLOBALS
->vehicle_category
);
115 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data
->radio
[GLOBALS
->auto_smode
]), TRUE
);
116 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->NU_nbdays
), GLOBALS
->auto_nbdays
);
117 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data
->NU_weekday
), GLOBALS
->auto_weekday
);
122 static void defhbfile_toggle(GtkRadioButton
*radiobutton
, gpointer user_data
)
124 struct defhbfile_data
*data
;
127 data
= g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(radiobutton
), GTK_TYPE_WINDOW
)), "inst_data");
129 DB( g_print("\n(defhbfile_data) toggle\n") );
131 sensitive
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data
->radio
[0]));
133 DB( g_print(" -> radio[0]=%d %s\n", sensitive
, sensitive
? "add until" : "add every x") );
135 gtk_widget_set_sensitive (data
->LB_nbdays
, !sensitive
);
136 gtk_widget_set_sensitive (data
->LB_weekday
, sensitive
);
138 gtk_widget_set_sensitive (data
->NU_nbdays
, !sensitive
);
139 gtk_widget_set_sensitive (data
->NU_weekday
, sensitive
);
147 static gboolean
defhbfile_cleanup(struct defhbfile_data
*data
, gint result
)
149 gboolean doupdate
= FALSE
;
151 DB( g_print("(ui-hbfile) cleanup\n") );
153 if(result
== GTK_RESPONSE_ACCEPT
)
155 defhbfile_get(data
->ST_owner
, NULL
);
158 DB( g_print(" -> GLOBAL change = %d\n", GLOBALS
->changes_count
) );
160 DB( g_print(" -> we update, change = %d\n", data
->change
) );
163 GLOBALS
->changes_count
+= data
->change
;
171 static void defhbfile_setup(struct defhbfile_data
*data
)
173 DB( g_print("(ui-hbfile) setup\n") );
177 ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data
->PO_grp
), GLOBALS
->h_cat
);
179 defhbfile_set(data
->ST_owner
, NULL
);
184 GtkWidget
*create_defhbfile_dialog (void)
186 struct defhbfile_data data
;
187 GtkWidget
*dialog
, *content_area
, *content_grid
, *group_grid
;
188 GtkWidget
*label
, *widget
;
191 dialog
= gtk_dialog_new_with_buttons (_("File properties"),
192 GTK_WINDOW(GLOBALS
->mainwindow
),
200 //store our dialog private data
201 g_object_set_data(G_OBJECT(dialog
), "inst_data", (gpointer
)&data
);
202 DB( g_print("(defaccount) dialog=%p, inst_data=%p\n", dialog
, &data
) );
204 gtk_window_set_icon_name(GTK_WINDOW (dialog
), ICONNAME_PROPERTIES
);
205 gtk_window_set_resizable(GTK_WINDOW (dialog
), FALSE
);
207 content_area
= gtk_dialog_get_content_area(GTK_DIALOG (dialog
)); // return a vbox
209 content_grid
= gtk_grid_new();
210 gtk_grid_set_row_spacing (GTK_GRID (content_grid
), SPACING_LARGE
);
211 gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid
), GTK_ORIENTATION_VERTICAL
);
212 gtk_container_set_border_width (GTK_CONTAINER(content_grid
), SPACING_MEDIUM
);
213 gtk_box_pack_start (GTK_BOX (content_area
), content_grid
, TRUE
, TRUE
, 0);
217 group_grid
= gtk_grid_new ();
218 gtk_grid_set_row_spacing (GTK_GRID (group_grid
), SPACING_SMALL
);
219 gtk_grid_set_column_spacing (GTK_GRID (group_grid
), SPACING_MEDIUM
);
220 gtk_grid_attach (GTK_GRID (content_grid
), group_grid
, 0, crow
++, 1, 1);
222 label
= make_label_group(_("General"));
223 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, 0, 3, 1);
226 label
= make_label_widget(_("_Owner:"));
227 gtk_grid_attach (GTK_GRID (group_grid
), label
, 1, row
, 1, 1);
228 widget
= make_string(label
);
229 data
.ST_owner
= widget
;
230 gtk_widget_set_hexpand(widget
, TRUE
);
231 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
233 // group :: Scheduled transaction
234 group_grid
= gtk_grid_new ();
235 gtk_grid_set_row_spacing (GTK_GRID (group_grid
), SPACING_SMALL
);
236 gtk_grid_set_column_spacing (GTK_GRID (group_grid
), SPACING_MEDIUM
);
237 gtk_grid_attach (GTK_GRID (content_grid
), group_grid
, 0, crow
++, 1, 1);
239 label
= make_label_group(_("Scheduled transaction"));
240 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, 0, 4, 1);
243 widget
= gtk_radio_button_new_with_label (NULL
, _("add until"));
244 data
.radio
[0] = widget
;
245 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
247 widget
= make_numeric(NULL
, 1, 28);
248 data
.NU_weekday
= widget
;
249 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
251 label
= make_label(_("of each month (excluded)"), 0.0, 0.5);
252 data
.LB_weekday
= label
;
253 gtk_grid_attach (GTK_GRID (group_grid
), label
, 3, row
, 1, 1);
256 widget
= gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON (data
.radio
[0]), _("add"));
257 data
.radio
[1] = widget
;
258 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 1, row
, 1, 1);
260 widget
= make_numeric(NULL
, 0, 366);
261 data
.NU_nbdays
= widget
;
262 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
264 //TRANSLATORS: there is a spinner on the left of this label, and so you have 0....x days in advance the current date
265 label
= make_label(_("days in advance the current date"), 0.0, 0.5);
266 data
.LB_nbdays
= label
;
267 gtk_grid_attach (GTK_GRID (group_grid
), label
, 3, row
, 1, 1);
269 // group :: Scheduled transaction
270 group_grid
= gtk_grid_new ();
271 gtk_grid_set_row_spacing (GTK_GRID (group_grid
), SPACING_SMALL
);
272 gtk_grid_set_column_spacing (GTK_GRID (group_grid
), SPACING_MEDIUM
);
273 gtk_grid_attach (GTK_GRID (content_grid
), group_grid
, 0, crow
++, 1, 1);
275 label
= make_label_group(_("Vehicle cost"));
276 gtk_grid_attach (GTK_GRID (group_grid
), label
, 0, 0, 3, 1);
279 label
= make_label_widget(_("_Category:"));
280 gtk_grid_attach (GTK_GRID (group_grid
), label
, 1, row
, 1, 1);
281 widget
= ui_cat_comboboxentry_new(label
);
282 data
.PO_grp
= widget
;
283 gtk_grid_attach (GTK_GRID (group_grid
), widget
, 2, row
, 1, 1);
286 //connect all our signals
287 g_signal_connect (dialog
, "destroy", G_CALLBACK (gtk_widget_destroyed
), &dialog
);
289 g_signal_connect (data
.radio
[0], "toggled", G_CALLBACK (defhbfile_toggle
), NULL
);
292 //setup, init and show window
293 defhbfile_setup(&data
);
294 //defhbfile_update(data.LV_arc, NULL);
296 gtk_widget_show_all (dialog
);
299 gint result
= gtk_dialog_run (GTK_DIALOG (dialog
));
301 // cleanup and destroy
302 defhbfile_cleanup(&data
, result
);
303 gtk_widget_destroy (dialog
);
This page took 0.054277 seconds and 4 git commands to generate.