~sjrct/homebank/resize-xfer-window

« back to all changes in this revision

Viewing changes to src/rep-balance.c

  • Committer: Maxime Doyen
  • Date: 2023-09-06 19:23:05 UTC
  • Revision ID: homebank@free.fr-20230906192305-k19peze360g5cr9t
5.7 release

Show diffs side-by-side

added added

removed removed

Lines of Context:
54
54
static void repbalance_sensitive(GtkWidget *widget, gpointer user_data);
55
55
static void repbalance_compute(GtkWidget *widget, gpointer user_data);
56
56
 
 
57
static gchar *repbalance_compute_title(gint intvl);
 
58
 
57
59
static GtkWidget *lst_repbal_create(void);
58
60
static void lst_repbal_set_cur(GtkTreeView *treeview, guint32 kcur);
 
61
static GString *lst_repbal_to_string(GtkTreeView *treeview, gchar *title, gboolean isclipboard);
59
62
 
60
63
//todo amiga/linux
61
64
//prev
92
95
        repbalance_sensitive(data->window, NULL);
93
96
}
94
97
 
 
98
 
95
99
static void repbalance_action_print(GtkToolButton *toolbutton, gpointer user_data)
96
100
{
97
101
struct repbalance_data *data = user_data;
98
 
 
99
 
 
100
 
 
101
 
        gtk_chart_print(GTK_CHART(data->RE_chart), GTK_WINDOW(data->window), NULL, NULL);
 
102
gint tmpintvl, page;
 
103
gchar *title, *name;
 
104
 
 
105
        tmpintvl  = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_intvl));
 
106
        page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->GR_result));
 
107
 
 
108
        name  = g_strdup_printf("hb-repbalance_%s.csv", hbtk_get_label(CYA_REPORT_INTVL, tmpintvl) );
 
109
 
 
110
        if( page == 0 )
 
111
        {
 
112
        GString *node;
 
113
        
 
114
                title = repbalance_compute_title(tmpintvl);
 
115
        
 
116
                node = lst_repbal_to_string(GTK_TREE_VIEW(data->LV_report), title, TRUE);
 
117
 
 
118
                hb_print_listview(GTK_WINDOW(data->window), node->str, NULL, title, name);
 
119
 
 
120
                g_string_free(node, TRUE);
 
121
                g_free(title);
 
122
        }
 
123
        else
 
124
        {
 
125
                gtk_chart_print(GTK_CHART(data->RE_chart), GTK_WINDOW(data->window), NULL, name);
 
126
        }
102
127
 
103
128
}
104
129
 
106
131
/* ======================== */
107
132
 
108
133
 
 
134
static gchar *
 
135
repbalance_compute_title(gint intvl)
 
136
{
 
137
gchar *title;
 
138
 
 
139
        //TRANSLATORS: example 'Balance by Month'
 
140
        title = g_strdup_printf(_("Balance by %s"), hbtk_get_label(CYA_REPORT_INTVL, intvl) );
 
141
        return title;
 
142
}
 
143
 
 
144
 
 
145
 
109
146
static void repbalance_date_change(GtkWidget *widget, gpointer user_data)
110
147
{
111
148
struct repbalance_data *data;
231
268
        //gtk_action_set_sensitive(action, sensitive);
232
269
 
233
270
        visible = page == 0 ? FALSE : TRUE;
234
 
        hb_widget_visible (data->BT_print, visible);
 
271
        //5.7
 
272
        //hb_widget_visible (data->BT_print, visible);
235
273
        hb_widget_visible(data->LB_zoomx, visible);
236
274
        hb_widget_visible(data->RG_zoomx, visible);
237
275
 
742
780
        gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_report));
743
781
 
744
782
        /* update bar chart */
745
 
        gtk_chart_set_datas_total(GTK_CHART(data->RE_chart), model, LST_OVER_BALANCE, LST_OVER_BALANCE, NULL, NULL);
 
783
        gchar *title = repbalance_compute_title(tmpintvl); 
 
784
        gtk_chart_set_datas_total(GTK_CHART(data->RE_chart), model, LST_OVER_BALANCE, LST_OVER_BALANCE, title, NULL);
746
785
        //gtk_chart_set_line_datas(GTK_CHART(data->RE_chart), model, LST_OVER_BALANCE, LST_OVER_DATE);
747
 
 
 
786
        g_free(title);
748
787
 
749
788
end:
750
789
        g_free(data->tmp_expense);
818
857
 
819
858
        DB( g_print(" populate\n") );
820
859
        
821
 
        ui_acc_listview_populate(data->LV_acc, ACC_LST_INSERT_REPORT);
 
860
        ui_acc_listview_populate(data->LV_acc, ACC_LST_INSERT_REPORT, NULL);
822
861
 
823
862
        DB( g_print(" set widgets default\n") );
824
863
 
945
984
        data->ope_list = NULL;
946
985
        data->filter = da_flt_malloc();
947
986
        data->detail = 0;
948
 
        
949
987
}
950
988
 
951
989
 
954
992
{
955
993
struct repbalance_data *data;
956
994
struct WinGeometry *wg;
957
 
GtkWidget *window, *mainvbox, *hbox, *vbox, *notebook, *sw;
 
995
GtkWidget *window, *mainvbox, *hbox, *vbox, *notebook, *scrollwin;
958
996
GtkWidget *label, *widget, *table, *treebox, *treeview;
959
997
gint row;
960
998
 
985
1023
 
986
1024
        //window contents
987
1025
        mainvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
988
 
        gtk_container_add (GTK_CONTAINER (window), mainvbox);
 
1026
        gtk_window_set_child(GTK_WINDOW(window), mainvbox);
989
1027
 
990
1028
        hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
991
1029
    gtk_box_pack_start (GTK_BOX (mainvbox), hbox, TRUE, TRUE, 0);
995
1033
        gtk_widget_set_hexpand (GTK_WIDGET(table), FALSE);
996
1034
        gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
997
1035
 
998
 
        gtk_container_set_border_width (GTK_CONTAINER (table), SPACING_SMALL);
 
1036
        hb_widget_set_margin(GTK_WIDGET(table), SPACING_SMALL);
999
1037
        gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
1000
1038
        gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
1001
1039
 
1096
1134
 
1097
1135
 
1098
1136
        row++;
1099
 
        sw = gtk_scrolled_window_new(NULL,NULL);
1100
 
        data->SW_acc = sw;
1101
 
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1102
 
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_ETCHED_IN);
1103
 
        gtk_widget_set_margin_bottom (sw, SPACING_LARGE);
1104
 
        widget = ui_acc_listview_new(TRUE);
1105
 
        data->LV_acc = widget;
1106
 
        gtk_widget_set_vexpand (widget, TRUE);
1107
 
        gtk_widget_set_size_request(data->LV_acc, HB_MINWIDTH_LIST, -1);
1108
 
        gtk_container_add(GTK_CONTAINER(sw), data->LV_acc);
1109
 
        gtk_grid_attach (GTK_GRID (table), sw, 1, row, 2, 1);
 
1137
        scrollwin = gtk_scrolled_window_new(NULL,NULL);
 
1138
        data->SW_acc = scrollwin;
 
1139
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
 
1140
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
 
1141
        gtk_widget_set_margin_bottom (scrollwin, SPACING_LARGE);
 
1142
        treeview = ui_acc_listview_new(TRUE);
 
1143
        data->LV_acc = treeview;
 
1144
        gtk_widget_set_vexpand (treeview, TRUE);
 
1145
        gtk_widget_set_size_request(treeview, HB_MINWIDTH_LIST, -1);
 
1146
        gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW(scrollwin), treeview);
 
1147
        gtk_grid_attach (GTK_GRID (table), scrollwin, 1, row, 2, 1);
1110
1148
 
1111
1149
 
1112
1150
        //part: info + report
1122
1160
        
1123
1161
        //infos
1124
1162
        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
1125
 
        gtk_container_set_border_width (GTK_CONTAINER(hbox), SPACING_SMALL);
 
1163
        hb_widget_set_margin(GTK_WIDGET(hbox), SPACING_SMALL);
1126
1164
        gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1127
1165
 
1128
1166
        widget = make_label(NULL, 0.5, 0.5);
1147
1185
        vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1148
1186
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, NULL);
1149
1187
 
1150
 
        widget = gtk_scrolled_window_new (NULL, NULL);
1151
 
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_ETCHED_IN);
1152
 
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
1188
        scrollwin = gtk_scrolled_window_new (NULL, NULL);
 
1189
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
 
1190
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1153
1191
 
1154
1192
        treeview = lst_repbal_create();
1155
1193
        data->LV_report = treeview;
1156
 
        gtk_container_add (GTK_CONTAINER(widget), treeview);
 
1194
        gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW(scrollwin), treeview);
1157
1195
        //gtk_notebook_append_page(GTK_NOTEBOOK(notebook), widget, NULL);
1158
 
        gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
 
1196
        gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
1159
1197
 
1160
1198
        //detail
1161
 
        widget = gtk_scrolled_window_new (NULL, NULL);
1162
 
        data->GR_detail = widget;
1163
 
        //gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW (widget), GTK_CORNER_TOP_RIGHT);
1164
 
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_ETCHED_IN);
1165
 
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
1199
        scrollwin = gtk_scrolled_window_new (NULL, NULL);
 
1200
        data->GR_detail = scrollwin;
 
1201
        //gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW (scrollwin), GTK_CORNER_TOP_RIGHT);
 
1202
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
 
1203
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1166
1204
        treeview = create_list_transaction(LIST_TXN_TYPE_DETAIL, PREFS->lst_det_columns);
1167
1205
        data->LV_detail = treeview;
1168
 
        gtk_container_add (GTK_CONTAINER(widget), treeview);
 
1206
        gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW(scrollwin), treeview);
1169
1207
 
1170
 
    gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
 
1208
    gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0);
1171
1209
 
1172
1210
        list_txn_set_save_column_width(GTK_TREE_VIEW(treeview), TRUE);
1173
1211
 
1209
1247
** ============================================================================
1210
1248
*/
1211
1249
 
 
1250
static GString *lst_repbal_to_string(GtkTreeView *treeview, gchar *title, gboolean isclipboard)
 
1251
{
 
1252
GString *node;
 
1253
GtkTreeModel *model;
 
1254
GtkTreeIter     iter;
 
1255
gboolean valid;
 
1256
char strbuf[G_ASCII_DTOSTR_BUF_SIZE];
 
1257
gchar sep;
 
1258
 
 
1259
        node = g_string_new(NULL);
 
1260
 
 
1261
        sep = (isclipboard == TRUE) ? '\t' : ';';
 
1262
        
 
1263
        // header
 
1264
        g_string_append (node, _("Date") );     
 
1265
        g_string_append_c (node, sep );
 
1266
        g_string_append (node, _("Expense") );  
 
1267
        g_string_append_c (node, sep );
 
1268
        g_string_append (node, _("Income") );   
 
1269
        g_string_append_c (node, sep );
 
1270
        g_string_append (node, _("Balance") );
 
1271
 
 
1272
        g_string_append (node, "\n" );
 
1273
        
 
1274
        // lines
 
1275
 
 
1276
        model = gtk_tree_view_get_model(treeview);
 
1277
        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
 
1278
        while (valid)
 
1279
        {
 
1280
        gchar *intvlname;
 
1281
        gdouble expense, income, balance;
 
1282
 
 
1283
                gtk_tree_model_get (model, &iter,
 
1284
                        LST_OVER_DATESTR, &intvlname,
 
1285
                        LST_OVER_EXPENSE, &expense,
 
1286
                        LST_OVER_INCOME , &income,
 
1287
                        LST_OVER_BALANCE, &balance,
 
1288
                        -1);
 
1289
 
 
1290
                g_string_append (node, intvlname );     
 
1291
                g_string_append_c (node, sep );
 
1292
 
 
1293
                g_snprintf(strbuf, sizeof (strbuf), "%.2f", expense);
 
1294
                g_string_append (node, strbuf );
 
1295
                g_string_append_c (node, sep );
 
1296
                
 
1297
                g_snprintf(strbuf, sizeof (strbuf), "%.2f", income);
 
1298
                g_string_append (node, strbuf );
 
1299
                g_string_append_c (node, sep );
 
1300
 
 
1301
                g_snprintf(strbuf, sizeof (strbuf), "%.2f", balance);
 
1302
                g_string_append (node, strbuf );
 
1303
 
 
1304
                g_string_append (node, "\n" );
 
1305
                //leak
 
1306
                g_free(intvlname);
 
1307
 
 
1308
                valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
 
1309
        }
 
1310
 
 
1311
        //DB( g_print("text is:\n%s", node->str) );
 
1312
 
 
1313
        return node;
 
1314
}
 
1315
 
1212
1316
 
1213
1317
static void lst_repbal_cell_data_function_date (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
1214
1318
{