142
135
string = g_markup_printf_escaped(" %c <i>%s</i>", type, name);
147
g_object_set(renderer, "markup", string, NULL);
139
g_object_set(renderer, "markup", string, NULL);
147
ui_bud_listview_cell_data_function_debug (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
153
gtk_tree_model_get(model, iter, LST_DEFCAT_DATAS, &entry, -1);
155
type = category_get_type_char(entry);
157
string = g_markup_printf_escaped("f:%d t:%c", entry->flags, type );
158
g_object_set(renderer, "markup", string, NULL);
153
165
static gboolean ui_bud_listview_search_equal_func (GtkTreeModel *model,
221
233
gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (treeview), PREFS->grid_lines);
222
234
gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW (treeview), TRUE);
225
renderer = gtk_cell_renderer_text_new ();
226
g_object_set(renderer,
227
"ellipsize", PANGO_ELLIPSIZE_END,
228
"ellipsize-set", TRUE,
237
renderer = gtk_cell_renderer_text_new ();
238
column = gtk_tree_view_column_new();
239
gtk_tree_view_column_pack_start(column, renderer, TRUE);
240
gtk_tree_view_column_set_cell_data_func(column, renderer, ui_bud_listview_cell_data_function_debug, NULL, NULL);
241
gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
245
column = gtk_tree_view_column_new();
246
renderer = gtk_cell_renderer_pixbuf_new ();
247
//gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
248
gtk_tree_view_column_pack_start(column, renderer, TRUE);
249
gtk_tree_view_column_set_cell_data_func(column, renderer, ui_bud_listview_icon_cell_data_function, NULL, NULL);
250
gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
253
renderer = gtk_cell_renderer_text_new ();
231
254
column = gtk_tree_view_column_new();
232
255
gtk_tree_view_column_set_title(column, _("Category"));
233
256
gtk_tree_view_column_pack_start(column, renderer, TRUE);
238
261
gtk_tree_view_column_set_resizable(column, TRUE);
239
262
gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
242
column = gtk_tree_view_column_new();
243
renderer = gtk_cell_renderer_pixbuf_new ();
244
//gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
245
gtk_tree_view_column_pack_start(column, renderer, TRUE);
246
gtk_tree_view_column_set_cell_data_func(column, renderer, ui_bud_listview_icon_cell_data_function, NULL, NULL);
247
gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
264
gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
250
266
gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(treeview), ui_bud_listview_search_equal_func, NULL, NULL);
672
689
gtk_widget_set_sensitive(data->spinner[i+1], sensitive);
695
DB( g_print(" -- end update %p\n", data) );
702
ui_bud_manage_compute_total(GtkWidget *widget, gpointer user_data)
704
struct ui_bud_manage_data *data;
709
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget), GTK_TYPE_WINDOW)), "inst_data");
711
DB( g_print("\n[ui-budget] compute total\n") );
716
lcat = list = category_glist_sorted(1);
719
Category *item = list->data;
722
if(!(item->flags & GF_CUSTOM))
724
value += (12*item->budget[0]);
726
//otherwise sum each month from mindate month
730
value += item->budget[j];
735
data->totexp += value;
737
data->totinc += value;
739
list = g_list_next(list);
743
hb_label_set_colvalue(GTK_LABEL(data->TX_totexp), data->totexp, GLOBALS->kcur, GLOBALS->minor);
744
hb_label_set_colvalue(GTK_LABEL(data->TX_totinc), data->totinc, GLOBALS->kcur, GLOBALS->minor);
745
hb_label_set_colvalue(GTK_LABEL(data->TX_totbal), data->totexp + data->totinc, GLOBALS->kcur, GLOBALS->minor);
751
ui_bud_manage_cb_forcemonitor_toggled(GtkWidget *widget, gpointer user_data)
753
struct ui_bud_manage_data *data;
756
DB( g_print("\n[ui-budget] forced toggled\n") );
758
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget), GTK_TYPE_WINDOW)), "inst_data");
763
item->flags &= ~(GF_FORCED);
764
if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_force)) && !(item->flags & GF_BUDGET) )
765
item->flags |= GF_FORCED;
767
hbtk_listview_redraw_selected_row (GTK_TREE_VIEW(data->LV_cat));
773
ui_bud_manage_toggle(GtkRadioButton *radiobutton, gpointer user_data)
775
//struct ui_bud_manage_data *data;
777
//data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(radiobutton), GTK_TYPE_WINDOW)), "inst_data");
779
DB( g_print("\n[ui-budget] toggle\n") );
781
//ui_bud_manage_get(GTK_WIDGET(radiobutton), GINT_TO_POINTER(FIELD_TYPE));
784
ui_bud_manage_update(GTK_WIDGET(radiobutton), NULL);
788
static void ui_bud_manage_get(struct ui_bud_manage_data *data, Category *item)
791
DB( g_print("\n[ui-budget] get") );
795
item->flags &= ~(GF_CUSTOM|GF_BUDGET|GF_FORCED);
797
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_type[0])) == FALSE)
799
item->flags |= GF_CUSTOM;
802
for(guint i=0;i<=12;i++)
804
gtk_spin_button_update(GTK_SPIN_BUTTON(data->spinner[i]));
805
item->budget[i] = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->spinner[i]));
806
if( item->budget[i] )
807
item->flags |= GF_BUDGET;
810
if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_force)) && !(item->flags & GF_BUDGET) )
812
item->flags |= GF_FORCED;
816
DB( g_print(" -- end get") );
821
static gboolean ui_bud_manage_cb_budget_changed(GtkSpinButton *spinbutton, gpointer user_data)
823
struct ui_bud_manage_data *data;
824
gboolean retval = FALSE;
826
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(spinbutton), GTK_TYPE_WINDOW)), "inst_data");
828
DB( g_print("\n[ui-budget] budget changed\n") );
830
ui_bud_manage_get(data, data->cat);
832
hbtk_listview_redraw_selected_row (GTK_TREE_VIEW(data->LV_cat));
833
ui_bud_manage_compute_total(data->dialog, NULL);
835
DB( g_print(" -- end budget changed\n") );
841
static void ui_bud_manage_getlast(struct ui_bud_manage_data *data)
845
DB( g_print("\n[ui-budget] getlast") );
847
item = data->lastcatitem;
850
gushort old_flags = item->flags;
851
gdouble oldsum = 0.0;
854
for(guint i=0;i<=12;i++)
856
oldsum += item->budget[i];
859
ui_bud_manage_get(data, item);
861
for(guint i=0;i<=12;i++)
863
sum += item->budget[i];
866
if( (old_flags != item->flags) || (oldsum != sum) )
869
hbtk_listview_redraw_selected_row (GTK_TREE_VIEW(data->LV_cat));
870
ui_bud_manage_compute_total(data->dialog, NULL);
874
DB( g_print(" -- end getlast") );
879
static void ui_bud_manage_set(GtkWidget *widget, gpointer user_data)
881
struct ui_bud_manage_data *data;
884
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget), GTK_TYPE_WINDOW)), "inst_data");
886
DB( g_print("\n[ui-budget] set\n") );
888
active = (data->cat->flags & GF_CUSTOM) ? 1 : 0;
890
g_signal_handlers_block_by_func (data->CM_type[0], G_CALLBACK (ui_bud_manage_toggle), NULL);
891
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_type[active]), TRUE);
892
g_signal_handlers_unblock_by_func (data->CM_type[0], G_CALLBACK (ui_bud_manage_toggle), NULL);
894
for(guint i=0;i<=12;i++)
896
g_signal_handlers_block_by_func (data->spinner[i], G_CALLBACK (ui_bud_manage_cb_budget_changed), NULL);
897
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->spinner[i]), data->cat->budget[i]);
898
g_signal_handlers_unblock_by_func (data->spinner[i], G_CALLBACK (ui_bud_manage_cb_budget_changed), NULL);
901
g_signal_handlers_block_by_func (data->CM_force, G_CALLBACK (ui_bud_manage_cb_forcemonitor_toggled), NULL);
902
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_force), (data->cat->flags & GF_FORCED) ? 1 : 0);
903
g_signal_handlers_unblock_by_func (data->CM_force, G_CALLBACK (ui_bud_manage_cb_forcemonitor_toggled), NULL);
905
DB( g_print(" -- end set\n") );
701
932
if( result == GTK_RESPONSE_OK )
703
934
//g_signal_handler_block(data->CM_type[0], data->handler_id[HID_CUSTOM]);
704
938
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_type[0]), TRUE);
705
939
//g_signal_handler_unblock(data->CM_type[0], data->handler_id[HID_CUSTOM]);
707
941
for(i=0;i<=12;i++)
709
//g_signal_handler_block(data->spinner[i], data->spinner_hid[i]);
943
g_signal_handlers_block_by_func (data->spinner[i], G_CALLBACK (ui_bud_manage_cb_budget_changed), NULL);
711
944
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->spinner[i]), 0);
712
945
data->cat->budget[i] = 0;
714
//g_signal_handler_unblock(data->spinner[i], data->spinner_hid[i]);
946
g_signal_handlers_unblock_by_func (data->spinner[i], G_CALLBACK (ui_bud_manage_cb_budget_changed), NULL);
717
949
data->cat->flags &= ~(GF_BUDGET); //delete flag
720
gtk_widget_queue_draw (data->LV_cat);
726
static void ui_bud_manage_set(GtkWidget *widget, gpointer user_data)
728
struct ui_bud_manage_data *data;
732
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(widget), GTK_TYPE_WINDOW)), "inst_data");
734
DB( g_print("(ui_bud_manage) set\n") );
736
active = data->cat->flags & GF_CUSTOM ? 1 : 0;
737
//data->custom = active;
739
//DB( g_print(" set custom to %d\n", data->custom) );
741
g_signal_handler_block(data->CM_type[0], data->handler_id[HID_CUSTOM]);
742
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_type[active]), TRUE);
743
g_signal_handler_unblock(data->CM_type[0], data->handler_id[HID_CUSTOM]);
747
//g_signal_handler_block(data->spinner[i], data->spinner_hid[i]);
749
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->spinner[i]), data->cat->budget[i]);
750
//DB( g_print(" %.2f\n", data->cat->budget[i]) );
752
//g_signal_handler_unblock(data->spinner[i], data->spinner_hid[i]);
755
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_force), (data->cat->flags & GF_FORCED) ? 1 : 0);
759
static gboolean ui_bud_manage_has_budget(GtkSpinButton *spinbutton, gpointer user_data)
761
struct ui_bud_manage_data *data;
766
data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(spinbutton), GTK_TYPE_WINDOW)), "inst_data");
768
DB( g_print("(ui_bud_manage) has budget\n") );
776
item->flags &= ~(GF_BUDGET); //delete flag
779
gtk_spin_button_update(GTK_SPIN_BUTTON(data->spinner[i]));
780
if( gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->spinner[i])) )
783
item->flags |= GF_BUDGET;
793
static void ui_bud_manage_getlast(struct ui_bud_manage_data *data)
795
gboolean budget, change;
801
item = data->lastcatitem;
803
DB( g_print("****\n(ui_bud_manage) getlast for '%s'\n", item->name ) );
807
gushort old_flags = item->flags;
809
item->flags &= ~(GF_CUSTOM);
810
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_type[0])) == FALSE)
811
item->flags |= GF_CUSTOM;
813
DB( g_print(" custom flag=%d\n", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_type[1]))) );
815
// if any value,set the flag to visual indicator
818
item->flags &= ~(GF_BUDGET); //delete flag
821
gtk_spin_button_update(GTK_SPIN_BUTTON(data->spinner[i]));
822
oldvalue = item->budget[i];
824
item->budget[i] = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->spinner[i]));
826
if( oldvalue != item->budget[i])
829
DB( g_print(" set value %d to %.2f\n", i, item->budget[i]) );
836
item->flags &= ~(GF_FORCED); //delete flag
837
active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_force));
839
item->flags |= GF_FORCED;
841
if(budget == TRUE || active == 1)
842
item->flags |= GF_BUDGET;
845
if( (old_flags != item->flags) || change )
848
gtk_widget_queue_draw (data->LV_cat);
952
hbtk_listview_redraw_selected_row (GTK_TREE_VIEW(data->LV_cat));
953
ui_bud_manage_compute_total(data->dialog, NULL);
891
1001
data->lastcatitem = NULL;
1002
gtk_label_set_text(GTK_LABEL(data->label_budget), NULL);
894
1006
ui_bud_manage_update(treeview, NULL);
1009
DB( g_print(" -- end selection changed\n") );
898
static void ui_bud_manage_toggle(GtkRadioButton *radiobutton, gpointer user_data)
1013
static void ui_bud_manage_populate_listview(struct ui_bud_manage_data *data)
900
//struct ui_bud_manage_data *data;
902
//data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(radiobutton), GTK_TYPE_WINDOW)), "inst_data");
904
DB( g_print("(ui_bud_manage) toggle\n") );
906
//ui_bud_manage_get(GTK_WIDGET(radiobutton), GINT_TO_POINTER(FIELD_TYPE));
909
ui_bud_manage_update(GTK_WIDGET(radiobutton), NULL);
1017
DB( g_print("\n[ui-budget] populate listview\n") );
1019
type = hbtk_radio_button_get_active(GTK_CONTAINER(data->RA_type)) == 1 ? CAT_TYPE_INCOME : CAT_TYPE_EXPENSE;
1021
ui_cat_listview_populate(data->LV_cat, type);
1022
//gtk_tree_view_expand_all (GTK_TREE_VIEW(data->LV_cat));
1024
DB( g_print(" -- end populate listview\n") );
913
void ui_bud_manage_selection(GtkTreeSelection *treeselection, gpointer user_data)
1029
static void ui_bud_manage_selection(GtkTreeSelection *treeselection, gpointer user_data)
915
1031
ui_bud_manage_selection_change(GTK_WIDGET(gtk_tree_selection_get_tree_view (treeselection)), NULL);
1034
static void ui_bud_manage_cb_type_changed (GtkToggleButton *button, gpointer user_data)
1036
ui_bud_manage_populate_listview(user_data);
1037
//g_print(" toggle type=%d\n", gtk_toggle_button_get_active(button));
919
1041
static gboolean ui_bud_manage_cleanup(struct ui_bud_manage_data *data, gint result)
921
1043
gboolean doupdate = FALSE;
923
DB( g_print("(ui_bud_manage) cleanup\n") );
1045
DB( g_print("\n[ui-budget] cleanup\n") );
925
1047
if(data->lastcatitem != NULL)
960
1075
data->lastcatitem = NULL;
962
1077
ui_bud_manage_populate_listview(data);
967
static void ui_bud_manage_type_changed_cb (GtkToggleButton *button, gpointer user_data)
969
ui_bud_manage_populate_listview(user_data);
970
//g_print(" toggle type=%d\n", gtk_toggle_button_get_active(button));
1078
ui_bud_manage_compute_total(data->dialog, NULL);
1079
ui_bud_manage_update(data->dialog, NULL);
1081
DB( g_print("-- end setup\n") );
977
1086
GtkWidget *ui_bud_manage_dialog (void)
979
struct ui_bud_manage_data data;
1088
struct ui_bud_manage_data *data;
980
1089
GtkWidget *dialog, *content_area;
981
GtkWidget *content_grid, *group_grid, *table, *scrollwin, *label;
1090
GtkWidget *content_grid, *group_grid, *scrollwin, *label;
982
1091
GtkWidget *treeview, *hpaned, *bbox, *vbox, *hbox;
983
1092
GtkWidget *menu, *menuitem, *widget, *image, *tbar;
984
1093
GtkToolItem *toolitem;
1008
1118
//store our window private data
1009
g_object_set_data(G_OBJECT(dialog), "inst_data", (gpointer)&data);
1010
DB( g_print("(ui_bud_manage) window=%p, inst_data=%p\n", dialog, &data) );
1119
g_object_set_data(G_OBJECT(dialog), "inst_data", (gpointer)data);
1120
DB( g_print("\n[ui-budget] window=%p, inst_data=%p\n", dialog, data) );
1012
1122
//window contents
1013
1123
content_area = gtk_dialog_get_content_area(GTK_DIALOG (dialog)); // return a vbox
1016
table = gtk_grid_new ();
1017
gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_MEDIUM);
1018
gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
1019
g_object_set(table, "margin", SPACING_MEDIUM, NULL);
1020
gtk_box_pack_start (GTK_BOX (content_area), table, TRUE, TRUE, 0);
1125
hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
1126
gtk_container_set_border_width (GTK_CONTAINER(hpaned), SPACING_MEDIUM);
1127
gtk_box_pack_start (GTK_BOX (content_area), hpaned, TRUE, TRUE, 0);
1131
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1132
gtk_widget_set_margin_end(vbox, SPACING_SMALL);
1133
gtk_paned_pack1 (GTK_PANED(hpaned), vbox, FALSE, FALSE);
1135
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1136
gtk_widget_set_margin_bottom(hbox, SPACING_MEDIUM);
1137
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1023
1139
bbox = hbtk_radio_button_new(CYA_CAT_TYPE, TRUE);
1024
data.RA_type = bbox;
1140
data->RA_type = bbox;
1025
1141
gtk_widget_set_halign (bbox, GTK_ALIGN_CENTER);
1026
gtk_grid_attach (GTK_GRID (table), bbox, 0, crow, 1, 1);
1028
hbtk_radio_button_connect (GTK_CONTAINER(bbox), "toggled", G_CALLBACK (ui_bud_manage_type_changed_cb), &data);
1142
gtk_box_pack_start (GTK_BOX (hbox), bbox, TRUE, TRUE, 0);
1030
1144
menu = gtk_menu_new ();
1031
1145
gtk_widget_set_halign (menu, GTK_ALIGN_END);
1033
1147
menuitem = gtk_menu_item_new_with_mnemonic (_("_Import CSV"));
1034
1148
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
1035
g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (ui_bud_manage_load_csv), &data);
1149
g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (ui_bud_manage_load_csv), data);
1037
1151
menuitem = gtk_menu_item_new_with_mnemonic (_("E_xport CSV"));
1038
1152
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
1039
g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (ui_bud_manage_save_csv), &data);
1153
g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (ui_bud_manage_save_csv), data);
1041
1155
gtk_widget_show_all (menu);
1052
1166
gtk_widget_set_hexpand (widget, FALSE);
1053
1167
gtk_widget_set_halign (widget, GTK_ALIGN_END);
1054
gtk_grid_attach (GTK_GRID (table), widget, 0, crow++, 1, 1);
1059
hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
1060
//gtk_container_set_border_width (GTK_CONTAINER(hpaned), SPACING_MEDIUM);
1061
gtk_grid_attach (GTK_GRID (table), hpaned, 0, crow++, 1, 1);
1065
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1066
gtk_widget_set_margin_right(vbox, SPACING_SMALL);
1067
gtk_paned_pack1 (GTK_PANED(hpaned), vbox, FALSE, FALSE);
1168
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
1069
1171
scrollwin = gtk_scrolled_window_new(NULL,NULL);
1070
1172
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
1071
1173
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1174
gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrollwin), HB_MINHEIGHT_LIST);
1072
1175
treeview = (GtkWidget *)ui_bud_listview_new();
1073
data.LV_cat = treeview;
1074
gtk_widget_set_size_request(treeview, HB_MINWIDTH_LIST, -1);
1176
data->LV_cat = treeview;
1075
1177
gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
1076
1178
gtk_widget_set_hexpand (scrollwin, TRUE);
1077
1179
gtk_widget_set_vexpand (scrollwin, TRUE);
1109
1211
gtk_grid_set_row_spacing (GTK_GRID (content_grid), SPACING_LARGE);
1110
1212
gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL);
1111
1213
//gtk_container_set_border_width (GTK_CONTAINER(content_grid), SPACING_MEDIUM);
1112
gtk_widget_set_margin_left(content_grid, SPACING_SMALL);
1214
gtk_widget_set_margin_start(content_grid, SPACING_SMALL);
1113
1215
gtk_paned_pack2 (GTK_PANED(hpaned), content_grid, FALSE, FALSE);
1118
1219
// group :: General
1119
1220
group_grid = gtk_grid_new ();
1120
1221
gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
1121
1222
gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
1122
1223
gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
1124
label = make_label_group(_("Budget for each month"));
1125
data.label_budget = label;
1126
gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
1225
gtk_widget_set_halign(group_grid, GTK_ALIGN_END);
1227
//label = make_label_group(_("Budget total"));
1228
//gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
1231
label = gtk_label_new(_("Expense:"));
1232
gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
1234
label = gtk_label_new(NULL);
1235
data->TX_totexp = label;
1236
gtk_grid_attach (GTK_GRID (group_grid), label, 2, row, 1, 1);
1238
label = gtk_label_new(_("Income:"));
1239
gtk_grid_attach (GTK_GRID (group_grid), label, 3, row, 1, 1);
1241
label = gtk_label_new(NULL);
1242
data->TX_totinc = label;
1243
gtk_grid_attach (GTK_GRID (group_grid), label, 4, row, 1, 1);
1245
label = gtk_label_new(_("Balance:"));
1246
gtk_grid_attach (GTK_GRID (group_grid), label, 5, row, 1, 1);
1248
label = gtk_label_new(NULL);
1249
data->TX_totbal = label;
1250
gtk_grid_attach (GTK_GRID (group_grid), label, 6, row, 1, 1);
1254
group_grid = gtk_grid_new ();
1255
gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
1256
gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
1257
gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
1259
label = make_label_group(NULL);
1260
data->label_budget = label;
1261
gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 5, 1);
1131
widget = gtk_radio_button_new_with_label (NULL, _("is the same"));
1132
data.CM_type[0] = widget;
1266
widget = gtk_radio_button_new_with_label (NULL, _("is the same each month"));
1267
data->CM_type[0] = widget;
1133
1268
gtk_widget_set_hexpand (widget, TRUE);
1134
1269
gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 4, 1);
1135
1270
fchain = g_list_append(fchain, widget);
1138
1273
widget = make_amount(label);
1139
data.spinner[0] = widget;
1274
data->spinner[0] = widget;
1140
1275
gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
1141
1276
fchain = g_list_append(fchain, widget);
1143
g_signal_connect (G_OBJECT (data.spinner[0]), "value-changed", G_CALLBACK (ui_bud_manage_has_budget), NULL);
1278
g_signal_connect (G_OBJECT (data->spinner[0]), "value-changed", G_CALLBACK (ui_bud_manage_cb_budget_changed), NULL);
1145
1280
widget = gtk_button_new_with_mnemonic (_("_Clear input"));
1146
data.BT_clear = widget;
1281
data->BT_clear = widget;
1147
1282
gtk_widget_set_hexpand (widget, TRUE);
1148
1283
gtk_widget_set_halign(widget, GTK_ALIGN_START);
1149
1284
gtk_grid_attach (GTK_GRID (group_grid), widget, 4, row, 1, 1);
1174
1309
//#1826659 budget dialog month widget label decay by one
1175
1310
label = make_label_widget(_(CYA_ABMONTHS[i+1]));
1176
data.label[i+1] = label;
1311
data->label[i+1] = label;
1177
1312
gtk_grid_attach (GTK_GRID (group_grid), label, l, t, 1, 1);
1179
1314
widget = make_amount(label);
1180
data.spinner[i+1] = widget;
1315
data->spinner[i+1] = widget;
1181
1316
fchain = g_list_append(fchain, widget);
1182
1317
gtk_widget_set_hexpand (widget, TRUE);
1183
1318
gtk_grid_attach (GTK_GRID (group_grid), widget, l+1, t, 1, 1);
1185
g_signal_connect (G_OBJECT (data.spinner[i+1]), "value-changed", G_CALLBACK (ui_bud_manage_has_budget), NULL);
1320
g_signal_connect (G_OBJECT (data->spinner[i+1]), "value-changed", G_CALLBACK (ui_bud_manage_cb_budget_changed), NULL);
1187
//DB( g_print("(ui_bud_manage) %s, col=%d, row=%d", CYA_ABMONTHS[i], col, row) );
1322
//DB( g_print("\n[ui-budget] %s, col=%d, row=%d", CYA_ABMONTHS[i], col, row) );
1190
1325
gtk_container_set_focus_chain(GTK_CONTAINER(group_grid), fchain);
1211
1346
g_signal_connect (dialog, "destroy",
1212
1347
G_CALLBACK (gtk_widget_destroyed), &dialog);
1215
g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data.LV_cat)), "changed", G_CALLBACK (ui_bud_manage_selection), NULL);
1216
//g_signal_connect (GTK_TREE_VIEW(data.LV_cat), "row-activated", G_CALLBACK (ui_bud_manage_onRowActivated), NULL);
1218
g_signal_connect (G_OBJECT (data.BT_expand), "clicked", G_CALLBACK (ui_bud_manage_expand_all), NULL);
1219
g_signal_connect (G_OBJECT (data.BT_collapse), "clicked", G_CALLBACK (ui_bud_manage_collapse_all), NULL);
1221
data.handler_id[HID_CUSTOM] = g_signal_connect (data.CM_type[0], "toggled", G_CALLBACK (ui_bud_manage_toggle), NULL);
1223
g_signal_connect (G_OBJECT (data.BT_clear), "clicked", G_CALLBACK (ui_bud_manage_clear), NULL);
1225
//data.custom = FALSE;
1226
//gtk_widget_set_sensitive(data.table, FALSE);
1349
hbtk_radio_button_connect (GTK_CONTAINER(data->RA_type), "toggled", G_CALLBACK (ui_bud_manage_cb_type_changed), data);
1351
g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat)), "changed", G_CALLBACK (ui_bud_manage_selection), NULL);
1352
//g_signal_connect (GTK_TREE_VIEW(data->LV_cat), "row-activated", G_CALLBACK (ui_bud_manage_onRowActivated), NULL);
1354
g_signal_connect (G_OBJECT (data->BT_expand), "clicked", G_CALLBACK (ui_bud_manage_expand_all), NULL);
1355
g_signal_connect (G_OBJECT (data->BT_collapse), "clicked", G_CALLBACK (ui_bud_manage_collapse_all), NULL);
1357
g_signal_connect (data->CM_type[0], "toggled", G_CALLBACK (ui_bud_manage_toggle), NULL);
1359
g_signal_connect (G_OBJECT (data->BT_clear), "clicked", G_CALLBACK (ui_bud_manage_clear), NULL);
1361
g_signal_connect (data->CM_force, "toggled", G_CALLBACK (ui_bud_manage_cb_forcemonitor_toggled), NULL);
1363
//data->custom = FALSE;
1364
//gtk_widget_set_sensitive(data->table, FALSE);
1228
1366
//setup, init and show window
1229
ui_bud_manage_setup(&data);
1230
ui_bud_manage_update(dialog, NULL);
1367
ui_bud_manage_setup(data);
1234
1369
gtk_widget_show_all (dialog);