X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fdsp-mainwindow.c;h=927ebaa60f637a8c543bbc763633c246ebab4260;hb=ee5038e6ccae412295b44be762d3445419042d59;hp=495dad81a7cc70a90c4266c07eae95c7a2c8c2b3;hpb=e479b37a8ea13230b81b43ecba00f89586a8f91a;p=chaz%2Fhomebank diff --git a/src/dsp-mainwindow.c b/src/dsp-mainwindow.c index 495dad8..927ebaa 100644 --- a/src/dsp-mainwindow.c +++ b/src/dsp-mainwindow.c @@ -22,6 +22,8 @@ #include "dsp-mainwindow.h" +#include "ext.h" + #include "list-account.h" #include "hub-account.h" @@ -124,6 +126,8 @@ static void ui_mainwindow_action_export(void); static void ui_mainwindow_action_anonymize(void); static void ui_mainwindow_action_file_statistics(void); +static void ui_mainwindow_action_pluginprefs(void); + static void ui_mainwindow_action_help(void); void ui_mainwindow_action_help_welcome(void); static void ui_mainwindow_action_help_online(void); @@ -150,6 +154,7 @@ void ui_mainwindow_recent_add (struct hbfile_data *data, const gchar *path); void ui_mainwindow_recent_add (struct hbfile_data *data, const gchar *path); +static void ui_mainwindow_showprefs(gint page); static GtkActionEntry entries[] = { @@ -164,6 +169,7 @@ static GtkActionEntry entries[] = { { "TxnMenu" , NULL, N_("_Transactions"), NULL, NULL, NULL }, { "ReportMenu" , NULL, N_("_Reports"), NULL, NULL, NULL }, { "ToolsMenu" , NULL, N_("_Tools"), NULL, NULL, NULL }, + { "PluginMenu" , NULL, N_("_Plugins"), NULL, NULL, NULL }, { "HelpMenu" , NULL, N_("_Help"), NULL, NULL, NULL }, // { "Import" , NULL, N_("Import") }, @@ -188,7 +194,7 @@ static GtkActionEntry entries[] = { //{ "ImportQIF" , ICONNAME_HB_FILE_IMPORT , N_("QIF file...") , NULL, N_("Open the import assistant"), G_CALLBACK (ui_mainwindow_action_import) }, //{ "ImportOFX" , ICONNAME_HB_FILE_IMPORT , N_("OFX/QFX file...") , NULL, N_("Open the import assistant"), G_CALLBACK (ui_mainwindow_action_import) }, //{ "ImportCSV" , ICONNAME_HB_FILE_IMPORT , N_("CSV file...") , NULL, N_("Open the import assistant"), G_CALLBACK (ui_mainwindow_action_import) }, - + { "ExportQIF" , ICONNAME_HB_FILE_EXPORT , N_("Export as QIF...") , NULL, N_("Export all account in a QIF file"), G_CALLBACK (ui_mainwindow_action_export) }, /* EditMenu */ @@ -223,7 +229,10 @@ static GtkActionEntry entries[] = { { "Welcome" , NULL , N_("Show welcome dialog...") , NULL, NULL, G_CALLBACK (ui_mainwindow_action_help_welcome) }, { "FileStats" , NULL , N_("File statistics...") , NULL, NULL, G_CALLBACK (ui_mainwindow_action_file_statistics) }, { "Anonymize" , NULL , N_("Anonymize...") , NULL, NULL, G_CALLBACK (ui_mainwindow_action_anonymize) }, - + + /* Plugins */ + { "PluginPreferences", "prf-plugins", N_("_Plugins..."), "U", N_("Configure plugin preferences"), G_CALLBACK(ui_mainwindow_action_pluginprefs) }, + /* HelpMenu */ { "Contents" , ICONNAME_HELP , N_("_Contents") , "F1", N_("Documentation about HomeBank"), G_CALLBACK (ui_mainwindow_action_help) }, { "Online" , "lpi-help" , N_("Get Help Online...") , NULL, N_("Connect to the LaunchPad website for online help"), G_CALLBACK (ui_mainwindow_action_help_online) }, @@ -321,6 +330,11 @@ static const gchar *ui_info = " " " " " " +" " +" " +" " +" " +" " " " " " " " @@ -355,6 +369,7 @@ static const gchar *ui_info = " " " " " " +" " " " ""; @@ -383,7 +398,7 @@ gint result; title = g_strdup_printf ( _("Revert unsaved changes to file '%s'?"), basename); - secondtext = + secondtext = _("- Changes made to the file will be permanently lost\n" "- File will be reloaded from the last save (.xhb~)"); @@ -400,7 +415,7 @@ gint result; if( result == GTK_RESPONSE_OK ) { DB( g_print(" - should revert\n") ); - + hbfile_change_filepath(hb_filename_new_with_extension(GLOBALS->xhb_filepath, "xhb~")); ui_mainwindow_open_internal(widget, NULL); hbfile_change_filepath(hb_filename_new_with_extension(GLOBALS->xhb_filepath, "xhb")); @@ -415,7 +430,7 @@ activate_url (GtkAboutDialog *about, gpointer data) { DB( g_print("activate url %s\n", link) ); - + homebank_util_url_show (link); } @@ -434,7 +449,8 @@ gchar *version; static const gchar *authors[] = { "Lead developer:\n" \ "Maxime DOYEN", - "\nContributor:\n" \ + "\nContributors:\n" \ + "Charles MCGARVEY (Plugin system, Perl support)\n" \ "Ga\xc3\xabtan LORIDANT (Maths formulas for charts)\n", NULL }; @@ -454,18 +470,18 @@ gchar *version; gtk_get_major_version (), gtk_get_minor_version (), gtk_get_micro_version ()); - + dialog = gtk_about_dialog_new(); gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(GLOBALS->mainwindow)); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); - + gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG(dialog), g_get_application_name ()); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), version); gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), copyright); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), _("Free, easy, personal accounting for everyone")); gtk_about_dialog_set_license_type (GTK_ABOUT_DIALOG(dialog), GTK_LICENSE_GPL_2_0); - + //gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(dialog), ); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), "http://homebank.free.fr"); gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(dialog), "Visit the HomeBank website"); @@ -481,7 +497,7 @@ gchar *version; gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pixbuf); g_object_unref (pixbuf); } - + gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), authors); gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(dialog), artists); //gtk_about_dialog_set_documenters(GTK_ABOUT_DIALOG(dialog), ); @@ -494,7 +510,7 @@ gchar *version; gtk_widget_destroy (dialog); g_free(version); - + } @@ -570,6 +586,12 @@ static void ui_mainwindow_action_file_statistics(void) } +static void ui_mainwindow_action_pluginprefs(void) +{ + ui_mainwindow_showprefs(PREF_PLUGINS); +} + + static void ui_mainwindow_action_properties(void) { create_defhbfile_dialog(); @@ -584,7 +606,7 @@ gchar *secondtext; title = _("Are you sure you want to anonymize the file?"); - secondtext = + secondtext = _("Proceeding will anonymize any text, \n" "like 'account x', 'payee y', 'memo z', ..."); @@ -597,7 +619,7 @@ gchar *secondtext; //#1707201 //if( result == GTK_RESPONSE_CANCEL ) - // return; + // return; if( result == GTK_RESPONSE_OK ) { hbfile_anonymize(); @@ -692,10 +714,15 @@ static void ui_mainwindow_action_deftag(void) static void ui_mainwindow_action_preferences(void) +{ + ui_mainwindow_showprefs(PREF_GENERAL); +} + +static void ui_mainwindow_showprefs(gint page) { struct hbfile_data *data = g_object_get_data(G_OBJECT(GLOBALS->mainwindow), "inst_data"); - defpref_dialog_new(); + defpref_dialog_new(page); if(!PREFS->euro_active) { GtkToggleAction *action = (GtkToggleAction *)gtk_ui_manager_get_action(data->manager, "/MenuBar/ViewMenu/AsMinor"); @@ -743,7 +770,7 @@ struct hbfile_data *data = g_object_get_data(G_OBJECT(GLOBALS->mainwindow), "ins // top spending gtk_chart_show_minor(GTK_CHART(data->RE_pie), GLOBALS->minor); - + ui_hub_spending_update(data->window, data); } @@ -809,7 +836,7 @@ static void ui_mainwindow_action_statistic(void) static void ui_mainwindow_action_trendtime(void) { struct hbfile_data *data = g_object_get_data(G_OBJECT(GLOBALS->mainwindow), "inst_data"); - + ui_reptime_window_new(data->acc != NULL ? data->acc->key : 0); } @@ -937,7 +964,7 @@ GtkWidget *mainvbox, *widget, *label; NULL); content_area = gtk_dialog_get_content_area(GTK_DIALOG (dialog)); - + mainvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (content_area), mainvbox, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER(mainvbox), SPACING_MEDIUM); @@ -963,11 +990,11 @@ GtkWidget *mainvbox, *widget, *label; widget = gtk_button_new_with_mnemonic(_("Read HomeBank _Manual")); gtk_box_pack_start (GTK_BOX (mainvbox), widget, FALSE, FALSE, 0); g_signal_connect (widget, "clicked", G_CALLBACK (ui_mainwindow_action_help_welcome1), dialog); - + widget = gtk_button_new_with_mnemonic(_("Configure _preferences")); gtk_box_pack_start (GTK_BOX (mainvbox), widget, FALSE, FALSE, 0); g_signal_connect (widget, "clicked", G_CALLBACK (ui_mainwindow_action_help_welcome2), dialog); - + widget = gtk_button_new_with_mnemonic(_("Create a _new file")); gtk_box_pack_start (GTK_BOX (mainvbox), widget, FALSE, FALSE, 0); g_signal_connect (widget, "clicked", G_CALLBACK (ui_mainwindow_action_help_welcome3), dialog); @@ -1102,10 +1129,10 @@ gboolean file_clear = GPOINTER_TO_INT(user_data); gtk_tree_store_clear(GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc)))); gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_upc)))); gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_top)))); - + data->showall = FALSE; ui_hub_account_setup(data); - + hbfile_cleanup(file_clear); hbfile_setup(file_clear); @@ -1150,7 +1177,7 @@ gint account, count; if( PREFS->heritdate == FALSE ) //fix: 318733 ope->date = GLOBALS->today; - + da_transaction_set_default_template(ope); } @@ -1170,7 +1197,7 @@ gint account, count; DB( g_print(" - added 1 transaction to %d\n", ope->kacc) ); ui_hub_account_populate(GLOBALS->mainwindow, NULL); - + count++; //todo: still usefull ? store last date date = ope->date; @@ -1205,21 +1232,21 @@ gboolean result; basename = g_path_get_basename(filepath); secondtext = g_strdup_printf ( - _("Your are about to open the backup file '%s'.\n\nAre you sure you want to do this ?"), basename); + _("Your are about to open the backup file '%s'.\n\nAre you sure you want to do this ?"), basename); result = ui_dialog_msg_confirm_alert( GTK_WINDOW(GLOBALS->mainwindow), _("Open the backup file ?"), secondtext, _("_Open backup") - ); + ); g_free(secondtext); g_free(basename); if( result == GTK_RESPONSE_OK ) retval = TRUE; - + return retval; } @@ -1258,7 +1285,7 @@ gchar *filename = NULL; g_free(filename); return; } - } + } hbfile_change_filepath(filename); ui_mainwindow_open_internal(widget, NULL); @@ -1293,7 +1320,7 @@ gint r; GLOBALS->xhb_timemodified = hbfile_file_get_time_modified(GLOBALS->xhb_filepath); hbfile_file_hasrevert(GLOBALS->xhb_filepath); - + if(PREFS->appendscheduled) scheduled_post_all_pending(); @@ -1338,7 +1365,7 @@ gint r; ui_hub_scheduled_populate(GLOBALS->mainwindow, NULL); ui_hub_spending_populate(GLOBALS->mainwindow, NULL); ui_hub_transaction_populate(data); - + ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_TITLE+UF_SENSITIVE+UF_VISUAL)); } @@ -1400,7 +1427,7 @@ gint r = XML_UNSET; _("If you save it, all the external changes could be lost. Save it anyway?"), _("S_ave Anyway") ); - + if( result != GTK_RESPONSE_OK ) return; } @@ -1464,7 +1491,7 @@ gint flags; #else data->wintitle = g_strdup_printf("%s%s - %s - " PROGNAME, changed, basename, GLOBALS->owner); #endif - + gtk_window_set_title (GTK_WINDOW (gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), data->wintitle); g_free(basename); @@ -1590,7 +1617,7 @@ gint flags; gtk_widget_hide(GTK_WIDGET(data->GR_top)); - + DB( g_print(" - show upcoming=%d\n", PREFS->wal_upcoming) ); if(PREFS->wal_upcoming) gtk_widget_show(GTK_WIDGET(data->GR_upc)); @@ -1681,6 +1708,9 @@ struct hbfile_data *data = user_data; struct WinGeometry *wg; gboolean retval = FALSE; + GValue widget_value = G_VALUE_INIT; + ext_hook("main_window_disposal", EXT_OBJECT(&widget_value, widget), NULL); + DB( g_print("\n[ui-mainwindow] delete-event\n") ); //store position and size @@ -1699,7 +1729,7 @@ gboolean retval = FALSE; if(PREFS->pnl_list_tab) g_free(PREFS->pnl_list_tab); PREFS->pnl_list_tab = g_strdup(gtk_stack_get_visible_child_name(GTK_STACK(data->stack))); - + //todo if(ui_dialog_msg_savechanges(widget, NULL) == FALSE) { @@ -1714,7 +1744,7 @@ gboolean retval = FALSE; g_free(data->wintitle); da_flt_free(data->filter); g_free(user_data); - + gtk_main_quit(); } @@ -1828,7 +1858,7 @@ gchar **uris, **str; gchar *newseldata; gint n_uris, filetype, slen; GError *error = NULL; - + if (info != TARGET_URI_LIST) return; @@ -1841,7 +1871,7 @@ GError *error = NULL; newseldata[slen] = 0; //DB( g_print(" - seldata ='%s'\n", gtk_selection_data_get_data(selection_data) ) ); //DB( g_print(" - newseldata ='%s'\n", newseldata ) ); - + uris = g_uri_list_extract_uris (newseldata); n_uris = g_strv_length(uris); DB( g_print(" - dragged %d files (len=%d)\n", n_uris, slen ) ); @@ -1850,7 +1880,7 @@ GError *error = NULL; //single file: check for xhb if(n_uris == 1) - { + { filetype = hb_filename_type_get_by_extension(*uris); DB( g_print(" - filetype is homebank (%d)\n", filetype) ); @@ -1883,7 +1913,7 @@ GError *error = NULL; //collect known filetype to import DB( g_print(" - collect %d files\n", n_uris) ); - + gchar **paths = g_new (gchar *, n_uris + 1); slen = 0; for (str = uris; *str; str++) @@ -1898,7 +1928,7 @@ GError *error = NULL; DB( g_print(" - append %d '%s'\n", slen, path ) ); paths[slen++] = path; } - } + } } paths[slen] = NULL; @@ -1906,8 +1936,8 @@ GError *error = NULL; { ui_import_assistant_new( paths ); } - - + + end_drop: g_strfreev (uris); } @@ -2109,7 +2139,7 @@ GtkWidget *bar, *label; gtk_label_set_markup (GTK_LABEL(label), "Unstable Development Version"); gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0); #endif - + /* Add the main area */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); //gtk_container_set_border_width (GTK_CONTAINER(vbox), SPACING_MEDIUM); @@ -2143,7 +2173,7 @@ GtkWidget *bar, *label; gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar), GTK_STACK (stack)); data->stack = stack; gtk_box_pack_start (GTK_BOX (box), stack, TRUE, TRUE, 0); - + page = ui_hub_scheduled_create(data); gtk_stack_add_titled (GTK_STACK (stack), page, "sched", _("Scheduled")); //gtk_paned_pack2 (GTK_PANED(vpaned), widget, TRUE, FALSE); @@ -2153,7 +2183,7 @@ GtkWidget *bar, *label; page = ui_hub_transaction_create(data, HUB_TXN_TYPE_REMIND); gtk_stack_add_titled (GTK_STACK (stack), page, "remin", _("Remind")); - + //setup, init and show window wg = &PREFS->wal_wg; @@ -2178,7 +2208,7 @@ GtkWidget *bar, *label; if( PREFS->pnl_list_tab != NULL ) gtk_stack_set_visible_child_name (GTK_STACK(data->stack), PREFS->pnl_list_tab); - + //todo: move this elsewhere DB( g_print(" - setup stuff\n") );