]> Dogcows Code - chaz/homebank/blobdiff - src/ui-dialogs.c
Merge branch 'upstream'
[chaz/homebank] / src / ui-dialogs.c
index 18d1f9d3e35a4f665477c4f49461bc46361f7eb8..6198b0852d2454f52f203b7a44ce2ffa39048aa4 100644 (file)
@@ -1,5 +1,5 @@
 /*  HomeBank -- Free, easy, personal accounting for everyone.
- *  Copyright (C) 1995-2017 Maxime DOYEN
+ *  Copyright (C) 1995-2019 Maxime DOYEN
  *
  *  This file is part of HomeBank.
  *
@@ -20,7 +20,7 @@
 #include "homebank.h"
 
 #include "ui-dialogs.h"
-#include "list_operation.h"
+#include "list-operation.h"
 
 #include "hb-currency.h"
 #include "ui-currency.h"
@@ -70,6 +70,10 @@ gint retval;
                        actionverb, GTK_RESPONSE_OK,
                        NULL);
 
+               gtk_dialog_set_alternative_button_order (GTK_DIALOG(dialog),
+                       GTK_RESPONSE_OK,
+                       GTK_RESPONSE_CANCEL,
+                       -1);
 
        if(secondtext)
        {
@@ -277,15 +281,18 @@ struct dialog_currency_data
 static void ui_dialog_upgrade_choose_currency_change_action(GtkWidget *widget, gpointer user_data)
 {
 struct dialog_currency_data *data = user_data;
-Currency4217 *curfmt;
+struct curSelectContext selectCtx;
 
        data->curfmt = NULL;
 
-       curfmt = ui_cur_select_dialog_new(GTK_WINDOW(data->window), CUR_SELECT_MODE_BASE);
-       if( curfmt != NULL )
+       ui_cur_select_dialog_new(GTK_WINDOW(data->window), CUR_SELECT_MODE_BASE, &selectCtx);
+       if( selectCtx.cur_4217 != NULL )
        {
+       Currency4217 *curfmt;
        gchar label[128];
        gchar *name;
+       
+               curfmt = selectCtx.cur_4217;    
                
                DB( g_printf("- user selected: '%s' '%s'\n", curfmt->curr_iso_code, curfmt->name) );
 
@@ -328,8 +335,16 @@ gint crow, row;
                _("_OK"), GTK_RESPONSE_ACCEPT,
                NULL);
 
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(dialog),
+               GTK_RESPONSE_ACCEPT,
+               GTK_RESPONSE_CANCEL,
+               -1);
+
        data.window = dialog;
 
+       widget = gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+       gtk_window_set_focus(GTK_WINDOW(dialog), widget);
+
        content_area = gtk_dialog_get_content_area(GTK_DIALOG (dialog));
 
        content_grid = gtk_grid_new();
@@ -411,12 +426,14 @@ gint crow, row;
 
 
 
-static void ui_file_chooser_add_filter(GtkFileChooser *chooser, gchar *name, gchar *pattern)
+static GtkFileFilter *ui_file_chooser_add_filter(GtkFileChooser *chooser, gchar *name, gchar *pattern)
 {
        GtkFileFilter *filter = gtk_file_filter_new ();
        gtk_file_filter_set_name (filter, name);
        gtk_file_filter_add_pattern (filter, pattern);
        gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(chooser), filter);
+
+       return filter;
 }
 
 
@@ -435,6 +452,12 @@ gboolean retval;
                                        _("_Save"), GTK_RESPONSE_ACCEPT,
                                        NULL);
 
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(chooser),
+               GTK_RESPONSE_ACCEPT,
+               GTK_RESPONSE_CANCEL,
+               -1);
+
+       
        //todo: change this ?
        gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(chooser), PREFS->path_export);
        ui_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), _("QIF files"), "*.[Qq][Ii][Ff]");
@@ -445,7 +468,7 @@ gboolean retval;
        {
        gchar *tmpfilename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
        
-               *storage_ptr = hb_util_filename_new_with_extension(tmpfilename, "qif");
+               *storage_ptr = hb_filename_new_with_extension(tmpfilename, "qif");
                g_free(tmpfilename);
                retval = TRUE;
        }
@@ -490,6 +513,12 @@ gchar *path;
                                        button, GTK_RESPONSE_ACCEPT,
                                        NULL);
 
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(chooser),
+               GTK_RESPONSE_ACCEPT,
+               GTK_RESPONSE_CANCEL,
+               -1);
+
+       
        gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(chooser), path);
 
        if(name != NULL)
@@ -505,7 +534,7 @@ gchar *path;
        
                if( action == GTK_FILE_CHOOSER_ACTION_SAVE )
                {
-                       *storage_ptr = hb_util_filename_new_with_extension(tmpfilename, "csv");
+                       *storage_ptr = hb_filename_new_with_extension(tmpfilename, "csv");
                        g_free(tmpfilename);
                }
                else
@@ -523,7 +552,7 @@ gchar *path;
 /*
 ** open a file chooser dialog and store filename to GLOBALS if OK
 */
-gboolean ui_file_chooser_xhb(GtkFileChooserAction action, gchar **storage_ptr)
+gboolean ui_file_chooser_xhb(GtkFileChooserAction action, gchar **storage_ptr, gboolean bakmode)
 {
 GtkWidget *chooser;
 gchar *title;
@@ -534,7 +563,7 @@ gboolean retval;
 
        if( action == GTK_FILE_CHOOSER_ACTION_OPEN )
        {
-               title = _("Open HomeBank file");
+               title = (bakmode==FALSE) ? _("Open HomeBank file") : _("Open HomeBank backup file");
                button = _("_Open");
        }
        else
@@ -550,9 +579,32 @@ gboolean retval;
                                        button, GTK_RESPONSE_ACCEPT,
                                        NULL);
 
-       ui_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), _("HomeBank files"), "*.[Xx][Hh][Bb]");
-       ui_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), _("All files"), "*");
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(chooser),
+               GTK_RESPONSE_ACCEPT,
+               GTK_RESPONSE_CANCEL,
+               -1);
 
+       if( bakmode == FALSE )
+       {
+               ui_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), _("HomeBank files"), "*.[Xx][Hh][Bb]");
+               ui_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), _("All files"), "*");
+       }
+       else
+       {
+               if( (action == GTK_FILE_CHOOSER_ACTION_OPEN) )
+               {
+               gchar *pattern;
+               GtkFileFilter *flt;
+
+                       pattern = hb_filename_backup_get_filtername(GLOBALS->xhb_filepath);
+                       flt = ui_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), _("File backup"), pattern);
+                       gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(chooser), flt);
+                       g_free(pattern);
+
+                       ui_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), _("All backups"), "*.[Bb][Aa][Kk]");
+               }
+       }
+       
        if( action == GTK_FILE_CHOOSER_ACTION_OPEN )
        {
            gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(chooser), PREFS->path_hbfile);
@@ -601,6 +653,11 @@ gboolean retval;
                                        _("_Open"), GTK_RESPONSE_ACCEPT,
                                        NULL);
 
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(chooser),
+               GTK_RESPONSE_ACCEPT,
+               GTK_RESPONSE_CANCEL,
+               -1);
+
        DB( g_print(" - set folder %s\n", *storage_ptr) );
 
        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(chooser), *storage_ptr);
@@ -666,31 +723,140 @@ GtkWidget *dialog = NULL;
                        _("_Save"), 2,
                        NULL);
 
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(dialog),
+               0,
+               2,
+               1,
+               -1);
+                 
                gtk_dialog_set_default_response(GTK_DIALOG( dialog ), 2);
 
-         result = gtk_dialog_run( GTK_DIALOG( dialog ) );
-         gtk_widget_destroy( dialog );
+               result = gtk_dialog_run( GTK_DIALOG( dialog ) );
+               gtk_widget_destroy( dialog );
 
-         if(result == 1 || result == GTK_RESPONSE_DELETE_EVENT)
+               if(result == 1 || result == GTK_RESPONSE_DELETE_EVENT)
                {
-               retval = FALSE;
+                       retval = FALSE;
                }
                else
                {
-         if(result == 2)
-         {
-               DB( g_print(" + should quick save %s\n", GLOBALS->xhb_filepath) );
-               homebank_save_xml(GLOBALS->xhb_filepath);
-         }
+                       if(result == 2)
+                       {
+                               DB( g_print(" + should quick save %s\n", GLOBALS->xhb_filepath) );
+                               //todo: should migrate this
+                               //#1720377 also backup 
+                               homebank_file_ensure_xhb(NULL);
+                               homebank_backup_current_file();
+                               homebank_save_xml(GLOBALS->xhb_filepath);
+                       }
                }
 
+       }
+       return retval;
+}
+
+
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
+
+
+gint ui_dialog_export_pdf(GtkWindow *parent, gchar **storage_ptr)
+{
+GtkWidget *dialog, *content_area, *content_grid, *group_grid;
+GtkWidget *label, *widget, *BT_folder, *ST_name;
+gchar *tmpstr;
+gint crow, row;
+
+       dialog = gtk_dialog_new_with_buttons (_("Export as PDF"),
+               GTK_WINDOW (parent),
+               0,
+               _("_Cancel"), GTK_RESPONSE_CANCEL,
+               _("Export as _PDF"), GTK_RESPONSE_ACCEPT,
+               NULL);
 
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(dialog),
+               GTK_RESPONSE_ACCEPT,
+               GTK_RESPONSE_CANCEL,
+               -1);
 
+       
+       gtk_window_set_default_size (GTK_WINDOW(dialog), HB_MINWIDTH_LIST, -1);
+       
+       content_area = gtk_dialog_get_content_area(GTK_DIALOG (dialog));
+
+       content_grid = gtk_grid_new();
+       gtk_grid_set_row_spacing (GTK_GRID (content_grid), SPACING_LARGE);
+       gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL);
+       gtk_container_set_border_width (GTK_CONTAINER(content_grid), SPACING_MEDIUM);
+       gtk_box_pack_start (GTK_BOX (content_area), content_grid, TRUE, TRUE, 0);
+
+       crow = 0;
+       // group :: file title
+    group_grid = gtk_grid_new ();
+       gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
+       gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
+       gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
+
+       row = 0;
+       widget = gtk_image_new_from_icon_name (ICONNAME_WARNING, GTK_ICON_SIZE_DIALOG);
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 0, row, 1, 1);
+       label = gtk_label_new("This feature is still in development state,\n(maybe not stable) so use it at your own risk!");
+       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
+
+       row++;
+       label = make_label_widget(_("Folder:"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
+       BT_folder = gtk_file_chooser_button_new (_("Pick a Folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+       gtk_grid_attach (GTK_GRID (group_grid), BT_folder, 1, row, 1, 1);
+
+       row++;
+       label = make_label_widget(_("Filename:"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 1, 1);
+       ST_name = make_string (label);
+       gtk_grid_attach (GTK_GRID (group_grid), ST_name, 1, row, 1, 1);
+
+
+       //setup
+       tmpstr = g_path_get_dirname(*storage_ptr);
+       gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(BT_folder), tmpstr);
+       g_free(tmpstr);
+       
+       tmpstr = g_path_get_basename(*storage_ptr);
+       gtk_entry_set_text(GTK_ENTRY(ST_name), tmpstr);
+       g_free(tmpstr);
+
+
+       gtk_widget_show_all(content_grid);
+
+       //wait for the user
+       gint result = gtk_dialog_run (GTK_DIALOG (dialog));
+
+       if(result == GTK_RESPONSE_ACCEPT)
+       {
+       gchar *hostname;
+       //#300380 fixed export path problem (was always the export of preference)
+       //not to be used -- gchar *nufolder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(BT_folder));
+       gchar *urifolder  = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(BT_folder));
+       gchar *nufolder   = g_filename_from_uri(urifolder, &hostname, NULL);
+       gchar *nufilename = hb_filename_new_with_extension((gchar *)gtk_entry_get_text (GTK_ENTRY(ST_name)), "pdf");    
+
+               g_free(*storage_ptr);
+               *storage_ptr = g_build_filename(nufolder, nufilename, NULL);
+
+               g_free(nufilename);
+               g_free(nufolder);
+               g_free(urifolder);
        }
-       return retval;
+
+       // cleanup and destroy
+       gtk_widget_destroy (dialog);
+
+       return result;
 }
 
 
+
+
+
 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
 
 struct xfer_data
@@ -698,6 +864,7 @@ struct xfer_data
        GtkWidget   *window;
        GtkWidget       *radio[2];
        GtkWidget       *srctreeview;
+       GtkWidget       *lb_several;
        GtkWidget       *treeview;
 };
 
@@ -708,26 +875,27 @@ struct xfer_data *data;
 GtkTreeSelection *selection;
 gboolean btnew, sensitive;
 gint count;
-       
-
-       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(radiobutton), GTK_TYPE_WINDOW)), "inst_data");
 
        DB( g_print("(import) account type toggle\n") );
+       
+       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(radiobutton), GTK_TYPE_WINDOW)), "inst_data");
 
        btnew = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->radio[0]));
-       gtk_widget_set_sensitive(data->treeview, btnew^1);
-
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->treeview));
        count = gtk_tree_selection_count_selected_rows(selection);
 
+       if(btnew)
+               gtk_tree_selection_unselect_all(selection);
+
+       sensitive = btnew^1;
+       gtk_widget_set_sensitive(data->lb_several, sensitive);
+       gtk_widget_set_sensitive(data->treeview, sensitive);
        
        sensitive = (btnew || count > 0) ? TRUE : FALSE;
+       gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), GTK_RESPONSE_ACCEPT, sensitive);
 
        DB( g_print("test count %d btnew %d sensitive %d\n", count, btnew, sensitive) );
 
-       
-       gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), GTK_RESPONSE_ACCEPT, sensitive);
-
 }
 
 static void ui_dialog_transaction_xfer_select_child_selection_cb(GtkTreeSelection *treeselection, gpointer user_data)
@@ -736,24 +904,26 @@ static void ui_dialog_transaction_xfer_select_child_selection_cb(GtkTreeSelectio
 }
 
 
-Transaction *ui_dialog_transaction_xfer_select_child(Transaction *stxn, GList *matchlist)
+gint ui_dialog_transaction_xfer_select_child(GtkWindow *parent, Transaction *stxn, GList *matchlist, Transaction **child)
 {
 struct xfer_data data;
-GtkWidget *window, *content, *mainvbox, *vbox, *sw, *label, *LB_several;
+GtkWidget *window, *content, *mainvbox, *vbox, *sw, *label;
 GtkTreeModel            *newmodel;
 GtkTreeIter                     newiter;
-Transaction *retval = NULL;
 
        window = gtk_dialog_new_with_buttons (
                        _("Select among possible transactions..."),
-                       GTK_WINDOW (GLOBALS->mainwindow),
+                       parent,
                            0,
-                           _("_Cancel"),
-                           GTK_RESPONSE_REJECT,
-                           _("_OK"),
-                           GTK_RESPONSE_ACCEPT,
+                           _("_Cancel"), GTK_RESPONSE_CANCEL,
+                           _("_OK"), GTK_RESPONSE_ACCEPT,
                            NULL);
 
+       gtk_dialog_set_alternative_button_order (GTK_DIALOG(window),
+               GTK_RESPONSE_ACCEPT,
+               GTK_RESPONSE_CANCEL,
+               -1);
+       
        g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)&data);
        data.window = window;
 
@@ -796,7 +966,7 @@ Transaction *retval = NULL;
                "HomeBank has found some transaction that may be " \
                "the associated transaction for the internal transfer."), 0.0, 0.5
                );
-       LB_several = label;
+       data.lb_several = label;
        gimp_label_set_attributes (GTK_LABEL (label),
                              PANGO_ATTR_SCALE,  PANGO_SCALE_SMALL,
                              -1);
@@ -841,7 +1011,7 @@ Transaction *retval = NULL;
                        LST_DSPOPE_DATAS, tmp,
                        -1);
 
-               //DB( g_print(" - fill: %s %.2f %x\n", item->wording, item->amount, (unsigned int)item->same) );
+               //DB( g_print(" - fill: %s %.2f %x\n", item->memo, item->amount, (unsigned int)item->same) );
 
                tmplist = g_list_next(tmplist);
        }
@@ -858,12 +1028,12 @@ Transaction *retval = NULL;
        {
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data.radio[0]), TRUE);
                gtk_widget_set_sensitive (data.radio[1], FALSE);
-               gtk_widget_set_visible (LB_several, FALSE);
+               gtk_widget_set_visible (data.lb_several, FALSE);
        }
        else
        {
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data.radio[1]), TRUE);
-               gtk_widget_set_visible (LB_several, TRUE);
+               gtk_widget_set_visible (data.lb_several, TRUE);
        }
        
        ui_dialog_transaction_xfer_select_child_cb(data.radio[0], NULL);
@@ -871,6 +1041,7 @@ Transaction *retval = NULL;
        //wait for the user
        gint result = gtk_dialog_run (GTK_DIALOG (window));
 
+       *child = NULL;  
        if(result == GTK_RESPONSE_ACCEPT)
        {
        gboolean bnew;
@@ -885,16 +1056,15 @@ Transaction *retval = NULL;
                        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data.treeview));
                        if (gtk_tree_selection_get_selected(selection, &model, &iter))
                        {
-                               gtk_tree_model_get(model, &iter, LST_DSPOPE_DATAS, &retval, -1);
+                               gtk_tree_model_get(model, &iter, LST_DSPOPE_DATAS, child, -1);
                        }
                }
-
        }
 
        // cleanup and destroy
        gtk_widget_destroy (window);
 
-       return retval;
+       return result;
 }
 
 
This page took 0.029754 seconds and 4 git commands to generate.