~mdoyen/homebank/5.0.x

« back to all changes in this revision

Viewing changes to src/list_operation.c

  • Committer: Maxime Doyen
  • Date: 2016-05-08 16:12:56 UTC
  • Revision ID: homebank@free.fr-20160508161256-kibyki8ja9ke68bx
5.0.7 release

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*  HomeBank -- Free, easy, personal accounting for everyone.
2
 
 *  Copyright (C) 1995-2015 Maxime DOYEN
 
2
 *  Copyright (C) 1995-2016 Maxime DOYEN
3
3
 *
4
4
 *  This file is part of HomeBank.
5
5
 *
501
501
 
502
502
 
503
503
/* = = = = = = = = = = = = = = = = */
 
504
gboolean list_txn_column_id_isvisible(GtkTreeView *treeview, gint sort_id)
 
505
{
 
506
GtkTreeViewColumn *column;
 
507
gint n, id;
 
508
 
 
509
        for(n=0; n < NUM_LST_DSPOPE-1 ; n++ )   // -1 cause account not to be processed
 
510
        {
 
511
                column = gtk_tree_view_get_column (treeview, n);
 
512
                if(column == NULL)
 
513
                        continue;
 
514
 
 
515
                if( gtk_tree_view_column_get_visible(column) )
 
516
                {
 
517
                        id = gtk_tree_view_column_get_sort_column_id (column);
 
518
                        if( sort_id == id )
 
519
                                return TRUE;
 
520
                }
 
521
        }
 
522
 
 
523
        return FALSE;
 
524
}
504
525
 
505
526
 
506
527
static GtkTreeViewColumn *list_txn_get_column(GList *list, gint search_id)
725
746
}
726
747
 
727
748
 
 
749
static void
 
750
list_txn_column_popup_menuitem_on_activate (GtkCheckMenuItem *checkmenuitem,
 
751
               gpointer          user_data)
 
752
{
 
753
GtkTreeViewColumn *column = user_data;
 
754
 
 
755
        DB( g_print("toggled\n") );
 
756
 
 
757
        gtk_tree_view_column_set_visible(column, gtk_check_menu_item_get_active(checkmenuitem) );
 
758
}
 
759
 
 
760
 
 
761
static gboolean list_txn_column_popup_callback ( GtkWidget *button,
 
762
                        GdkEventButton *ev,
 
763
                        gpointer user_data )
 
764
{
 
765
struct list_txn_data *data = user_data;
 
766
GtkWidget *menu, *menuitem;
 
767
//int event_time;
 
768
GtkTreeViewColumn *column;
 
769
gint i, col_id;
 
770
 
 
771
 
 
772
        if( ev->button == 3 )
 
773
        {
 
774
                DB( g_print("should popup\n") );
 
775
        
 
776
                menu = gtk_menu_new ();
 
777
                
 
778
                //note: deactive this disable any menuitem action
 
779
                g_signal_connect (menu, "selection-done", G_CALLBACK (gtk_widget_destroy), NULL);
 
780
 
 
781
                for(i=0 ; i < NUM_LST_DSPOPE-1 ; i++ )   // -1 'caus: account and blank column
 
782
                {
 
783
                        column = gtk_tree_view_get_column(GTK_TREE_VIEW(data->treeview), i);
 
784
                        if( column != NULL )
 
785
                        {
 
786
                                col_id = gtk_tree_view_column_get_sort_column_id (column);
 
787
 
 
788
                                if( (col_id == -1) 
 
789
                                        || (col_id == LST_DSPOPE_STATUS) 
 
790
                                        || (col_id == LST_DSPOPE_ACCOUNT) 
 
791
                                        || (col_id == LST_DSPOPE_DATE)
 
792
                                        || (col_id == LST_DSPOPE_BALANCE)
 
793
                                )
 
794
                                        continue;
 
795
                                //if( (data->tvc_is_visible == FALSE) && (col_id == LST_DSPOPE_BALANCE) )
 
796
                                //      continue;
 
797
                                
 
798
                                if( (data->list_type == LIST_TXN_TYPE_DETAIL) && 
 
799
                                        (   (col_id == LST_DSPOPE_AMOUNT) 
 
800
                                        || (col_id == LST_DSPOPE_EXPENSE) 
 
801
                                        || (col_id == LST_DSPOPE_INCOME)
 
802
                                        ) 
 
803
                                )
 
804
                                        continue;
 
805
 
 
806
                                menuitem = gtk_check_menu_item_new_with_label ( gtk_tree_view_column_get_title (column) );
 
807
                                gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
808
                                gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), gtk_tree_view_column_get_visible (column) );
 
809
                                gtk_widget_show (menuitem);
 
810
                                
 
811
                                g_signal_connect (menuitem, "activate",
 
812
                                                                G_CALLBACK (list_txn_column_popup_menuitem_on_activate), column);
 
813
                        }
 
814
                
 
815
                }
 
816
        
 
817
                gtk_menu_attach_to_widget (GTK_MENU (menu), button, NULL);
 
818
                gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
 
819
                                      ev->button, ev->time);
 
820
        }
 
821
 
 
822
    return FALSE;
 
823
}
 
824
 
 
825
 
728
826
 
729
827
static GtkTreeViewColumn *
730
828
list_txn_column_amount_create(gint list_type, gchar *title, gint sortcolumnid, GtkTreeCellDataFunc func)
832
930
        g_free(data);
833
931
}
834
932
 
 
933
 
 
934
Transaction *list_txn_get_active_transaction(GtkTreeView *treeview)
 
935
{
 
936
GtkTreeModel *model;
 
937
GList *list;
 
938
Transaction *ope;
 
939
 
 
940
        ope = NULL;
 
941
 
 
942
        model = gtk_tree_view_get_model(treeview);
 
943
        list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(treeview), &model);
 
944
 
 
945
        if(list != NULL)
 
946
        {
 
947
        GtkTreeIter iter;
 
948
 
 
949
                gtk_tree_model_get_iter(model, &iter, list->data);
 
950
                gtk_tree_model_get(model, &iter, LST_DSPOPE_DATAS, &ope, -1);
 
951
        }
 
952
 
 
953
        g_list_foreach(list, (GFunc)gtk_tree_path_free, NULL);
 
954
        g_list_free(list);
 
955
 
 
956
        return ope;
 
957
}
 
958
 
 
959
 
835
960
/*
836
961
** create our transaction list
837
962
** Status, Date, Info, Payee, Wording, (Amount), Expense, Income, Category
842
967
GtkListStore *store;
843
968
GtkWidget *treeview;
844
969
GtkCellRenderer    *renderer;
845
 
GtkTreeViewColumn  *column, *col_acc = NULL;
 
970
GtkTreeViewColumn  *column, *col_acc = NULL, *col_status = NULL;
846
971
 
847
972
 
848
973
        data = g_malloc0(sizeof(struct list_txn_data));
887
1012
        /* column 1: Changes */
888
1013
        column = gtk_tree_view_column_new();
889
1014
        //gtk_tree_view_column_set_title(column, _("Status"));
 
1015
        col_status = column;
890
1016
 
891
1017
        renderer = gtk_cell_renderer_pixbuf_new ();
892
1018
        //gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
913
1039
                column = list_txn_column_text_create(list_type, _("Account"), LST_DSPOPE_ACCOUNT, list_txn_account_cell_data_function, NULL);
914
1040
                gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
915
1041
                col_acc = column;
 
1042
                // add column popup
 
1043
                g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1044
                        "button-press-event",
 
1045
                        G_CALLBACK ( list_txn_column_popup_callback ),
 
1046
                        data );
916
1047
        }
917
1048
 
918
1049
        /* column 2: Date */
925
1056
        gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
926
1057
        //gtk_tree_view_column_set_resizable(column, TRUE);
927
1058
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1059
        // add column popup
 
1060
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1061
                "button-press-event",
 
1062
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1063
                data );
928
1064
 
929
1065
 
930
1066
        column = list_txn_column_info_create(list_type);
931
1067
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1068
        // add column popup
 
1069
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1070
                "button-press-event",
 
1071
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1072
                data );
932
1073
        
933
1074
        column = list_txn_column_text_create(list_type, _("Payee"), LST_DSPOPE_PAYEE, list_txn_payee_cell_data_function, NULL);
934
1075
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1076
        // add column popup
 
1077
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1078
                "button-press-event",
 
1079
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1080
                data );
935
1081
 
936
1082
        column = list_txn_column_text_create(list_type, _("Memo"), LST_DSPOPE_WORDING, list_txn_wording_cell_data_function, NULL);
937
1083
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1084
        // add column popup
 
1085
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1086
                "button-press-event",
 
1087
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1088
                data );
938
1089
 
939
1090
        /* column status CLR */
940
1091
        column = gtk_tree_view_column_new();
949
1100
        //gtk_tree_view_column_set_sort_indicator (column, FALSE);
950
1101
        //gtk_tree_view_column_set_resizable(column, TRUE);
951
1102
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1103
        // add column popup
 
1104
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1105
                "button-press-event",
 
1106
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1107
                data );
952
1108
        
953
1109
        
954
1110
        column = list_txn_column_amount_create(list_type, _("Amount"), LST_DSPOPE_AMOUNT, list_txn_amount_cell_data_function);
955
1111
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1112
        // add column popup
 
1113
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1114
                "button-press-event",
 
1115
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1116
                data );
956
1117
 
957
1118
        column = list_txn_column_amount_create(list_type, _("Expense"), LST_DSPOPE_EXPENSE, list_txn_amount_cell_data_function);
958
1119
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1120
        // add column popup
 
1121
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1122
                "button-press-event",
 
1123
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1124
                data );
959
1125
 
960
1126
        column = list_txn_column_amount_create(list_type, _("Income"), LST_DSPOPE_INCOME, list_txn_amount_cell_data_function);
961
1127
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1128
        // add column popup
 
1129
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1130
                "button-press-event",
 
1131
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1132
                data );
962
1133
 
963
1134
        column = list_txn_column_text_create(list_type, _("Category"), LST_DSPOPE_CATEGORY, list_txn_category_cell_data_function, NULL);
964
1135
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1136
        // add column popup
 
1137
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1138
                "button-press-event",
 
1139
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1140
                data );
965
1141
 
966
1142
        column = list_txn_column_text_create(list_type, _("Tags"), LST_DSPOPE_TAGS, list_txn_tags_cell_data_function, NULL);
967
1143
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1144
        // add column popup
 
1145
    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1146
                "button-press-event",
 
1147
                G_CALLBACK ( list_txn_column_popup_callback ),
 
1148
                data );
968
1149
 
969
1150
        if(list_type == LIST_TXN_TYPE_BOOK)
970
1151
        {
972
1153
                data->tvc_balance = column;
973
1154
                gtk_tree_view_column_set_clickable(column, FALSE);
974
1155
                gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
1156
                // add column popup
 
1157
                g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
 
1158
                        "button-press-event",
 
1159
                        G_CALLBACK ( list_txn_column_popup_callback ),
 
1160
                        data );
975
1161
        }
976
1162
        
977
1163
  /* column 9: empty */
994
1180
  /* apply user preference for columns */
995
1181
        list_txn_set_columns(GTK_TREE_VIEW(treeview), pref_columns);
996
1182
 
997
 
  /* force accoutn column for detail treeview */
 
1183
  /* force account column for detail treeview */
998
1184
        if(list_type == LIST_TXN_TYPE_DETAIL)
999
1185
        {
1000
 
                gtk_tree_view_move_column_after(GTK_TREE_VIEW(treeview), col_acc, NULL);
 
1186
                gtk_tree_view_move_column_after(GTK_TREE_VIEW(treeview), col_acc, col_status);
1001
1187
        }
1002
1188
 
1003
1189
  /* set initial sort order */