]> Dogcows Code - chaz/homebank/blobdiff - src/ui-archive.c
import homebank-5.2.7
[chaz/homebank] / src / ui-archive.c
index 7c8f81229a60fc3ab629f787b4a7f52d99795a1c..1c2d8cf82c4ba132cebea0373d44908b3c73813b 100644 (file)
@@ -1,5 +1,5 @@
 /*  HomeBank -- Free, easy, personal accounting for everyone.
- *  Copyright (C) 1995-2016 Maxime DOYEN
+ *  Copyright (C) 1995-2019 Maxime DOYEN
  *
  *  This file is part of HomeBank.
  *
@@ -25,6 +25,7 @@
 #include "ui-category.h"
 #include "ui-payee.h"
 #include "ui-split.h"
+#include "ui-tag.h"
 
 #include "gtk-dateentry.h"
 
@@ -44,22 +45,14 @@ extern struct HomeBank *GLOBALS;
 extern struct Preferences *PREFS;
 
 
-gchar *CYA_ARCHIVE_TYPE[] = { 
-       N_("Scheduled"), 
-       N_("Template"), 
-       NULL
-};
-
-
-gchar *CYA_UNIT[] = { N_("Day"), N_("Week"), N_("Month"), N_("Year"), NULL };
-
-gchar *CYA_SCHED_WEEKEND[] = { N_("Possible"), N_("Before"), N_("After"), NULL };
-
+extern gchar *RA_ARC_TYPE[];
+extern gchar *CYA_ARC_UNIT[];
+extern gchar *RA_ARC_WEEKEND[];
 extern gchar *CYA_TXN_STATUS[];
 
-static GtkWidget *ui_arc_listview_new(void);
 
 
+static GtkWidget *ui_arc_listview_new(void);
 
 
 static void ui_arc_listview_populate(GtkWidget *view, gint type)
@@ -156,7 +149,7 @@ gint retval = 0;
                        retval = (entry1->flags & GF_INCOME) - (entry2->flags & GF_INCOME);
                        if(!retval)
                        {
-                               retval = hb_string_utf8_compare(entry1->wording, entry2->wording);
+                               retval = hb_string_utf8_compare(entry1->memo, entry2->memo);
                        }
                        break;
                case LST_DEFARC_SORT_PAYEE:
@@ -206,12 +199,21 @@ static void ui_arc_listview_cell_data_function_memo (GtkTreeViewColumn *col,
 {
 Archive *item;
 gchar *name;
+#if MYDEBUG
+gchar *string;
+#endif
 
        gtk_tree_model_get(model, iter, LST_DEFARC_DATAS, &item, -1);
 
-       name = item->wording;
+       name = item->memo;
 
-       g_object_set(renderer, "text", name, NULL);
+       #if MYDEBUG
+               string = g_strdup_printf ("[%d] %s", item->key, name );
+               g_object_set(renderer, "text", string, NULL);
+               g_free(string);
+       #else
+               g_object_set(renderer, "text", name, NULL);
+       #endif  
 }
 
 
@@ -341,14 +343,15 @@ gint type;
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_arc));
 
        item = da_archive_malloc();
-       item->wording = g_strdup_printf(_("(template %d)"), g_list_length(GLOBALS->arc_list) + 1);
+       item->memo = g_strdup_printf(_("(template %d)"), g_list_length(GLOBALS->arc_list) + 1);
        item->unit = 2;
 
-       type = radio_get_active(GTK_CONTAINER(data->RA_type)) == 1 ? ARC_TYPE_TEMPLATE : ARC_TYPE_SCHEDULED;
+       type = hbtk_radio_button_get_active(GTK_CONTAINER(data->RA_type)) == 1 ? ARC_TYPE_TEMPLATE : ARC_TYPE_SCHEDULED;
        if( type == ARC_TYPE_SCHEDULED )
                item->flags |= OF_AUTO;
 
-       GLOBALS->arc_list = g_list_append(GLOBALS->arc_list, item);
+       //GLOBALS->arc_list = g_list_append(GLOBALS->arc_list, item);
+       da_archive_append_new(item);
 
        gtk_list_store_append (GTK_LIST_STORE(model), &iter);
        gtk_list_store_set (GTK_LIST_STORE(model), &iter,
@@ -386,7 +389,7 @@ gint result;
                gtk_tree_model_get(model, &iter, LST_DEFARC_DATAS, &item, -1);
 
                title = g_strdup_printf (
-                       _("Are you sure you want to permanently delete '%s'?"), item->wording);
+                       _("Are you sure you want to permanently delete '%s'?"), item->memo);
 
                secondtext = _("If you delete a scheduled/template, it will be permanently lost.");
                
@@ -435,14 +438,14 @@ Archive *item;
        {
                gtk_tree_model_get(model, &iter, LST_DEFARC_DATAS, &item, -1);
 
-               DB( g_print(" -> %s\n", item->wording) );
+               DB( g_print(" -> %s\n", item->memo) );
 
                txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_word));
                // ignore if entry is empty
                if (txt && *txt)
                {
-                       g_free(item->wording);
-                       item->wording = g_strdup(txt);
+                       g_free(item->memo);
+                       item->memo = g_strdup(txt);
                }
 
                gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_arc));
@@ -463,8 +466,8 @@ struct ui_arc_manage_data *data;
 GtkTreeSelection *selection;
 GtkTreeModel            *model;
 GtkTreeIter                     iter;
-
 Archive *item;
+gchar *tagstr, *txt;
 
        DB( g_print("\n[ui_scheduled] set\n") );
 
@@ -477,14 +480,12 @@ Archive *item;
                gtk_tree_model_get(model, &iter, LST_DEFARC_DATAS, &item, -1);
 
                g_signal_handler_block(data->ST_word, data->handler_id[HID_ARC_MEMO]);
-               gtk_entry_set_text(GTK_ENTRY(data->ST_word), item->wording);
+               gtk_entry_set_text(GTK_ENTRY(data->ST_word), item->memo);
                g_signal_handler_unblock(data->ST_word, data->handler_id[HID_ARC_MEMO]);
 
                gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_amount), item->amount);
-
-
                
-               radio_set_active(GTK_CONTAINER(data->RA_status), item->status );
+               hbtk_radio_button_set_active(GTK_CONTAINER(data->RA_status), item->status );
 
                
                /*g_signal_handler_block(data->CM_valid, data->handler_id[HID_ARC_VALID]);
@@ -502,36 +503,33 @@ Archive *item;
 
                ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_grp), item->kcat);
 
-       DB( g_print(" -> set payee %d\n", item->kpay) );
+               DB( g_print(" -> set payee %d\n", item->kpay) );
                ui_pay_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_pay), item->kpay);
 
-       DB( g_print(" -> PO_acc %d\n", item->kacc) );
+               DB( g_print(" -> PO_acc %d\n", item->kacc) );
                ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_acc), item->kacc);
 
-       DB( g_print(" -> PO_accto %d\n", item->kxferacc) );
+               DB( g_print(" -> PO_accto %d\n", item->kxferacc) );
                ui_acc_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_accto), item->kxferacc);
 
-               gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_auto), (item->flags & OF_AUTO) ? 1 : 0);
+               tagstr = tags_tostring(item->tags);
+               txt = (tagstr != NULL) ? tagstr : "";
+               DB( g_print(" - tags: '%s'\n", txt) );
+               gtk_entry_set_text(GTK_ENTRY(data->ST_tags), txt);
+               g_free(tagstr);
 
+               gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_auto), (item->flags & OF_AUTO) ? 1 : 0);
                gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->NB_every), item->every);
-
                gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_unit), item->unit);
-
                gtk_date_entry_set_date(GTK_DATE_ENTRY(data->PO_next), item->nextdate);
-
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_limit), (item->flags & OF_LIMIT) ? 1 : 0);
-
-
                DB( g_print("nb_limit = %d %g\n", item->limit, (gdouble)item->limit) );
-               
                gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->NB_limit), (gdouble)item->limit);
-
-               radio_set_active(GTK_CONTAINER(data->CY_weekend), item->weekend);
-
+               hbtk_radio_button_set_active(GTK_CONTAINER(data->CY_weekend), item->weekend);
        }
-
 }
 
+
 /*
 ** get widgets contents to the selected account
 */
@@ -549,7 +547,7 @@ gint active;
 
        if( item != NULL )
        {
-               DB( g_print(" -> %s\n", item->wording) );
+               DB( g_print(" -> %s\n", item->memo) );
 
                gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_arc));
 
@@ -557,8 +555,8 @@ gint active;
                // ignore if entry is empty
                if (txt && *txt)
                {
-                       g_free(item->wording);
-                       item->wording = g_strdup(txt);
+                       g_free(item->memo);
+                       item->memo = g_strdup(txt);
                }
 
                gtk_spin_button_update(GTK_SPIN_BUTTON(data->ST_amount));
@@ -571,7 +569,13 @@ gint active;
                item->kacc              = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_acc));
                item->kxferacc  = ui_acc_comboboxentry_get_key(GTK_COMBO_BOX(data->PO_accto));
 
-               item->status = radio_get_active(GTK_CONTAINER(data->RA_status));
+               item->status = hbtk_radio_button_get_active(GTK_CONTAINER(data->RA_status));
+
+               /* tags */
+               txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_tags));
+               DB( g_print(" - tags: '%s'\n", txt) );
+               g_free(item->tags);
+               item->tags = tags_parse(txt);
 
                //#1615245: moved here, after get combo entry key
                if( item->paymode != PAYMODE_INTXFER )
@@ -608,7 +612,7 @@ gint active;
                gtk_spin_button_update(GTK_SPIN_BUTTON(data->NB_limit));
                item->limit   = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->NB_limit));
 
-               item->weekend = radio_get_active(GTK_CONTAINER(data->CY_weekend));
+               item->weekend = hbtk_radio_button_get_active(GTK_CONTAINER(data->CY_weekend));
                
                data->change++;
        }
@@ -746,8 +750,8 @@ gboolean selected, sensitive;
 
 static void ui_arc_manage_update_post_split(GtkWidget *widget, gdouble amount)
 {
-       struct ui_arc_manage_data *data;
-       gboolean sensitive = TRUE;
+struct ui_arc_manage_data *data;
+gboolean sensitive = TRUE;
 
        DB( g_print("(ui_arc_manage) update _post_split\n") );
 
@@ -760,7 +764,7 @@ static void ui_arc_manage_update_post_split(GtkWidget *widget, gdouble amount)
        
        data->lastarcitem->flags &= ~(OF_SPLIT); //First set flag that Splits are cleared
        
-       if (da_splits_count(data->lastarcitem->splits) > 0)
+       if (da_splits_length(data->lastarcitem->splits) > 0)
        {
        /* disable category if split is set */
                data->lastarcitem->flags |= OF_SPLIT; //Then set flag that Splits are active
@@ -775,6 +779,8 @@ static void ui_arc_manage_update_post_split(GtkWidget *widget, gdouble amount)
        gtk_widget_set_sensitive(data->PO_grp, sensitive);
 
 }
+
+
 /*
 ** update the widgets status and contents from action/selection value
 */
@@ -802,6 +808,7 @@ Archive *arcitem;
        sensitive = (selected == TRUE) ? TRUE : FALSE;
 
        gtk_widget_set_sensitive(data->GR_txnleft, sensitive);
+       gtk_widget_set_sensitive(data->LB_schedinsert, sensitive);
 
        gtk_widget_set_sensitive(data->CM_auto, sensitive);
 
@@ -813,12 +820,12 @@ Archive *arcitem;
 
                if(data->lastarcitem != NULL && arcitem != data->lastarcitem)
                {
-                       DB( g_print(" -> should do a get for last selected (%s)\n", data->lastarcitem->wording) );
+                       DB( g_print(" -> should do a get for last selected (%s)\n", data->lastarcitem->memo) );
                        ui_arc_manage_getlast(data);
                }
                data->lastarcitem = arcitem;
 
-               if (da_splits_count(data->lastarcitem->splits) > 0)
+               if (da_splits_length(data->lastarcitem->splits) > 0)
                {
 
                        data->lastarcitem->flags |= OF_SPLIT; //Then set flag that Splits are active
@@ -893,7 +900,7 @@ gdouble amount;
 
        amount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_amount));
 
-       ui_split_dialog(data->window, data->lastarcitem->splits, amount, &ui_arc_manage_update_post_split);
+       ui_split_dialog(data->window, &data->lastarcitem->splits, amount, &ui_arc_manage_update_post_split);
 
 }
 
@@ -913,7 +920,7 @@ gint type;
 
        DB( g_print("\n[ui_scheduled] populate listview\n") );
 
-       type = radio_get_active(GTK_CONTAINER(data->RA_type)) == 1 ? ARC_TYPE_TEMPLATE : ARC_TYPE_SCHEDULED;
+       type = hbtk_radio_button_get_active(GTK_CONTAINER(data->RA_type)) == 1 ? ARC_TYPE_TEMPLATE : ARC_TYPE_SCHEDULED;
        ui_arc_listview_populate(data->LV_arc, type);
        gtk_tree_view_expand_all (GTK_TREE_VIEW(data->LV_arc));
 }
@@ -930,7 +937,7 @@ gboolean doupdate = FALSE;
 
        if(data->lastarcitem != NULL)
        {
-               DB( g_print(" -> should do a get for last selected (%s)\n", data->lastarcitem->wording) );
+               DB( g_print(" -> should do a get for last selected (%s)\n", data->lastarcitem->memo) );
                ui_arc_manage_getlast(data);
        }
 
@@ -965,12 +972,15 @@ static void ui_arc_manage_setup(struct ui_arc_manage_data *data)
        ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data->PO_grp)  , GLOBALS->h_cat);
        ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data->PO_acc)  , GLOBALS->h_acc, ACC_LST_INSERT_NORMAL);
        ui_acc_comboboxentry_populate(GTK_COMBO_BOX(data->PO_accto), GLOBALS->h_acc, ACC_LST_INSERT_NORMAL);
+
+       ////5.2.7 done in popover
+       //ui_tag_combobox_populate(GTK_COMBO_BOX_TEXT(data->CY_tags));
 }
 
 
 static GtkWidget *ui_arc_manage_create_left_txn(struct ui_arc_manage_data *data)
 {
-GtkWidget *group_grid, *hbox, *label, *widget, *image;
+GtkWidget *group_grid, *hbox, *label, *widget;
 gint row;
        
        // group :: Transaction detail
@@ -991,27 +1001,9 @@ gint row;
                gtk_entry_set_icon_tooltip_text(GTK_ENTRY(widget), GTK_ENTRY_ICON_PRIMARY, _("Toggle amount sign"));
                gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
 
-               image = gtk_image_new_from_icon_name (ICONNAME_HB_BUTTON_SPLIT, GTK_ICON_SIZE_MENU);
-               widget = gtk_button_new();
-               g_object_set (widget, "image", image, NULL);
+               widget = make_image_button(ICONNAME_HB_BUTTON_SPLIT, _("Transaction splits"));
                data->BT_split = widget;
                gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
-               gtk_widget_set_tooltip_text(widget, _("Transaction splits"));
-
-       row++;
-       label = make_label_widget(_("Pay_ment:"));
-       gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
-       widget = make_paymode(label);
-       data->NU_mode = widget;
-       gtk_widget_set_halign (widget, GTK_ALIGN_START);
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
-
-       row++;
-       widget = gtk_check_button_new_with_mnemonic(_("Of notebook _2"));
-       data->CM_cheque = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
-
-       /* info should be here some day */
 
        row++;
        label = make_label_widget(_("A_ccount:"));
@@ -1030,6 +1022,30 @@ gint row;
        gtk_widget_set_hexpand (widget, TRUE);
        gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
 
+
+       row++;
+       label = make_label_widget(_("Pay_ment:"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
+       widget = make_paymode(label);
+       data->NU_mode = widget;
+       gtk_widget_set_halign (widget, GTK_ALIGN_START);
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
+
+       gtk_widget_set_margin_top(label, SPACING_SMALL);
+       gtk_widget_set_margin_top(widget, SPACING_SMALL);
+
+       gtk_widget_set_margin_bottom(label, SPACING_SMALL);
+       gtk_widget_set_margin_bottom(widget, SPACING_SMALL);
+
+       row++;
+       widget = gtk_check_button_new_with_mnemonic(_("Of notebook _2"));
+       data->CM_cheque = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
+
+       /* info should be here some day */
+
+
+
        row++;
        label = make_label_widget(_("_Payee:"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
@@ -1046,10 +1062,13 @@ gint row;
        gtk_widget_set_hexpand (widget, TRUE);
        gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
 
+       gtk_widget_set_margin_bottom(label, SPACING_SMALL);
+       gtk_widget_set_margin_bottom(widget, SPACING_SMALL);
+
        row++;
        label = make_label_widget(_("_Status:"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
-       widget = make_radio(CYA_TXN_STATUS, TRUE, GTK_ORIENTATION_HORIZONTAL);
+       widget = hbtk_radio_button_new(CYA_TXN_STATUS, TRUE);
        data->RA_status = widget;
        gtk_widget_set_halign (widget, GTK_ALIGN_START);
        gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
@@ -1062,9 +1081,22 @@ gint row;
        data->ST_word = widget;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
 
-       /* tags should be here some day */
-
+       row++;
+       label = make_label_widget(_("Ta_gs:"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
+       hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+       gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(hbox)), GTK_STYLE_CLASS_LINKED);
+       gtk_grid_attach (GTK_GRID (group_grid), hbox, 1, row, 1, 1);
 
+               widget = make_string(label);
+               data->ST_tags = widget;
+               //gtk_widget_set_hexpand (widget, TRUE);
+               gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
+       
+               widget = ui_tag_popover_list(data->ST_tags);
+               data->CY_tags = widget;
+               gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+       
        return group_grid;
 }
 
@@ -1108,7 +1140,7 @@ gint row;
     gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
        //label = gtk_label_new_with_mnemonic (_("_Unit:"));
     //gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-       widget = make_cycle(label, CYA_UNIT);
+       widget = make_cycle(label, CYA_ARC_UNIT);
        data->CY_unit = widget;
     gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
 
@@ -1117,7 +1149,7 @@ gint row;
        data->LB_weekend = label;
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
 
-       widget = make_radio(CYA_SCHED_WEEKEND, FALSE, GTK_ORIENTATION_HORIZONTAL);
+       widget = hbtk_radio_button_new(RA_ARC_WEEKEND, FALSE);
        data->CY_weekend = widget;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
@@ -1186,15 +1218,14 @@ gint w, h, row;
        gtk_box_pack_start (GTK_BOX (content_area), table, TRUE, TRUE, 0);
        
        row = 0;
-       bbox = make_radio(CYA_ARCHIVE_TYPE, TRUE, GTK_ORIENTATION_HORIZONTAL);
+       bbox = hbtk_radio_button_new(RA_ARC_TYPE, TRUE);
        data.RA_type = bbox;
        gtk_widget_set_halign (bbox, GTK_ALIGN_CENTER);
        gtk_grid_attach (GTK_GRID (table), bbox, 0, row, 2, 1);
 
-       widget = radio_get_nth_widget(GTK_CONTAINER(bbox), 1);
-       if(widget)
-               g_signal_connect (widget, "toggled", G_CALLBACK (ui_arc_manage_type_changed_cb), &data);
+       hbtk_radio_button_connect (GTK_CONTAINER(bbox), "toggled", G_CALLBACK (ui_arc_manage_type_changed_cb), &data);
 
+       
        row++;
        hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
        //gtk_container_set_border_width (GTK_CONTAINER(hpaned), SPACING_MEDIUM);
@@ -1204,7 +1235,7 @@ gint w, h, row;
        /* left area */
        hgrid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (hgrid), SPACING_SMALL);
-       gtk_grid_set_column_spacing (GTK_GRID (hgrid), SPACING_MEDIUM);
+       gtk_grid_set_column_spacing (GTK_GRID (hgrid), SPACING_SMALL);
        gtk_widget_set_margin_right(hgrid, SPACING_SMALL);
        gtk_paned_pack1 (GTK_PANED(hpaned), hgrid, FALSE, FALSE);
 
@@ -1256,6 +1287,7 @@ gint w, h, row;
        //connect all our signals
        g_signal_connect (dialog, "destroy", G_CALLBACK (gtk_widget_destroyed), &dialog);
 
+       
        g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data.LV_arc)), "changed", G_CALLBACK (ui_arc_manage_selection), NULL);
        g_signal_connect (G_OBJECT (data.ST_amount), "icon-release", G_CALLBACK (ui_arc_manage_toggleamount), NULL);
 
This page took 0.033742 seconds and 4 git commands to generate.