/** * called by file -> open * open a new file * * \param * * \return FALSE * */ gboolean gsb_file_open_menu ( void ) { GtkWidget *selection_fichier; GtkFileFilter * filter; selection_fichier = gtk_file_chooser_dialog_new ( _("Open an accounts file"), GTK_WINDOW ( run.window ), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER ( selection_fichier ), gsb_file_get_last_path () ); gtk_window_set_position ( GTK_WINDOW ( selection_fichier ), GTK_WIN_POS_CENTER_ON_PARENT ); filter = gtk_file_filter_new (); gtk_file_filter_set_name ( filter, _("Grisbi files (*.gsb)") ); gtk_file_filter_add_pattern ( filter, "*.gsb" ); gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER ( selection_fichier ), filter ); gtk_file_chooser_set_filter ( GTK_FILE_CHOOSER ( selection_fichier ), filter ); filter = gtk_file_filter_new (); gtk_file_filter_set_name ( filter, _("All files") ); gtk_file_filter_add_pattern ( filter, "*" ); gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER ( selection_fichier ), filter ); switch ( gtk_dialog_run ( GTK_DIALOG (selection_fichier))) { case GTK_RESPONSE_OK: if ( gsb_file_close() ) { gtk_widget_hide ( selection_fichier ); nom_fichier_comptes = file_selection_get_filename ( GTK_FILE_CHOOSER ( selection_fichier ) ); gsb_file_update_last_path ( file_selection_get_last_directory ( GTK_FILE_CHOOSER ( selection_fichier), TRUE ) ); gsb_file_open_file (nom_fichier_comptes); } break; default: break; } gsb_file_update_last_path (file_selection_get_last_directory (GTK_FILE_CHOOSER (selection_fichier), TRUE)); gtk_widget_destroy ( selection_fichier ); return FALSE; }
/** * ask the name of the file to save it * * \param * * \return a newly allocated string containing the new name * */ static gchar *gsb_file_dialog_ask_name ( void ) { gchar *new_name; GtkWidget *dialog; gint result; dialog = gtk_file_chooser_dialog_new ( _("Name the accounts file"), GTK_WINDOW ( run.window ), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER ( dialog ), gsb_file_get_last_path () ); gtk_file_chooser_set_do_overwrite_confirmation ( GTK_FILE_CHOOSER ( dialog ), TRUE); gtk_window_set_position ( GTK_WINDOW ( dialog ), GTK_WIN_POS_CENTER_ON_PARENT ); if ( ! nom_fichier_comptes ) { gchar* tmp_str; tmp_str = g_strconcat ( titre_fichier, ".gsb", NULL ); gtk_file_chooser_set_current_name ( GTK_FILE_CHOOSER ( dialog ), tmp_str); g_free ( tmp_str ); } else gtk_file_chooser_select_filename ( GTK_FILE_CHOOSER (dialog), nom_fichier_comptes ); result = gtk_dialog_run ( GTK_DIALOG ( dialog )); switch ( result ) { case GTK_RESPONSE_OK : new_name = file_selection_get_filename ( GTK_FILE_CHOOSER ( dialog )); gsb_file_update_last_path (file_selection_get_last_directory (GTK_FILE_CHOOSER (dialog), TRUE)); gtk_widget_destroy ( GTK_WIDGET ( dialog )); break; default : gtk_widget_destroy ( GTK_WIDGET ( dialog )); return NULL; } if ( ! g_strrstr ( new_name, "." ) ) { gchar* tmpstr = new_name; new_name = g_strconcat ( tmpstr, ".gsb", NULL ); g_free ( tmpstr ); } return new_name; }
/* **************************************************************************************************************************** */ gboolean modification_logo_accueil ( ) { GtkWidget *file_selector; GtkWidget *preview; file_selector = gtk_file_chooser_dialog_new ( _("Select a new logo"), GTK_WINDOW ( fenetre_preferences ), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); if ( etat.is_pixmaps_dir ) gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER ( file_selector ), gsb_dirs_get_pixmaps_dir ( ) ); else gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER ( file_selector ), gsb_file_get_last_path () ); gtk_window_set_position ( GTK_WINDOW ( file_selector ), GTK_WIN_POS_CENTER_ON_PARENT ); /* create the preview */ preview = gtk_image_new (); gtk_file_chooser_set_preview_widget ( GTK_FILE_CHOOSER ( file_selector ), preview ); g_signal_connect (G_OBJECT (file_selector), "update-preview", G_CALLBACK ( preferences_view_update_preview_logo ), preview ); switch ( gtk_dialog_run ( GTK_DIALOG ( file_selector ) ) ) { case GTK_RESPONSE_OK: change_logo_accueil ( file_selector ); gsb_file_update_last_path ( file_selection_get_last_directory ( GTK_FILE_CHOOSER ( file_selector ), TRUE ) ); default: gtk_widget_destroy ( file_selector ); break; } return ( FALSE ); }
/** * Handler triggered by clicking on the button of a "print to file" * combo. Pop ups a file selector. * * \param button GtkButton widget that triggered this handler. * \param data A pointer to a GtkEntry that will be filled with the * result of the file selector. */ void browse_file ( GtkButton *button, gpointer data ) { GtkWidget * file_selector; file_selector = file_selection_new (_("Print to file"),FILE_SELECTION_IS_SAVE_DIALOG); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (file_selector), gsb_file_get_last_path ()); gtk_window_set_transient_for ( GTK_WINDOW ( file_selector ), GTK_WINDOW ( run.window )); gtk_window_set_modal ( GTK_WINDOW ( file_selector ), TRUE ); switch ( gtk_dialog_run ( GTK_DIALOG (file_selector))) { case GTK_RESPONSE_OK: gtk_entry_set_text ( GTK_ENTRY(data), file_selection_get_filename (GTK_FILE_CHOOSER (file_selector))); gsb_file_update_last_path (file_selection_get_last_directory (GTK_FILE_CHOOSER (file_selector), TRUE)); default: gtk_widget_destroy ( file_selector ); break; } }
/** * Set all the config variables to their default values. * called before loading the config * or for a new opening */ static void gsb_file_config_clean_config ( void ) { devel_debug (NULL); conf.main_width = 0; conf.main_height = 0; conf.prefs_width = 600; conf.force_enregistrement = 1; conf.r_modifiable = 0; /* we can not change the reconciled transaction */ conf.dernier_fichier_auto = 1; /* on n'ouvre pas directement le dernier fichier */ conf.sauvegarde_auto = 0; /* on NE sauvegarde PAS * automatiquement par défaut */ conf.entree = 1; /* la touche entree provoque l'enregistrement de l'opération */ nb_days_before_scheduled = 0; /* nb de jours avant l'échéance pour prévenir */ conf.execute_scheduled_of_month = FALSE; conf.balances_with_scheduled = TRUE; conf.formulaire_toujours_affiche = 0; /* le formulaire ne s'affiche que lors de l'edition d'1 opé */ conf.affichage_exercice_automatique = 0; /* l'exercice est choisi en fonction de la date */ conf.automatic_completion_payee = 1; /* by default automatic completion */ conf.limit_completion_to_current_account = 0; /* By default, do full search */ conf.automatic_recover_splits = 1; conf.automatic_erase_credit_debit = 0; conf.display_grisbi_title = GSB_ACCOUNTS_TITLE; /* show Accounts file title par défaut */ conf.display_toolbar = GSB_BUTTON_BOTH; /* How to display toolbar icons. */ conf.active_scrolling_left_pane = FALSE; /* Active_scrolling_left_pane or not. */ conf.show_headings_bar = TRUE; /* Show toolbar or not. */ conf.show_transaction_selected_in_form = 1; /* show selected transaction in form */ conf.show_transaction_gives_balance = 1; /* show transaction that gives the balance of the day */ conf.transactions_list_primary_sorting = 1; /* Primary sorting option for the transactions */ conf.transactions_list_secondary_sorting = 0; /* Secondary sorting option for the transactions */ conf.show_closed_accounts = FALSE; if ( conf.font_string ) { g_free ( conf.font_string ); conf.font_string = NULL; } conf.force_enregistrement = 1; /* par défaut, on force l'enregistrement */ gsb_file_update_last_path (g_get_home_dir ()); gsb_file_set_backup_path ( gsb_dirs_get_user_data_dir () ); conf.make_backup = 1; conf.make_backup_every_minutes = FALSE; conf.make_backup_nb_minutes = 0; #if IS_DEVELOPMENT_VERSION == 1 conf.stable_config_file_model = 0; #endif conf.nb_derniers_fichiers_ouverts = 0; conf.nb_max_derniers_fichiers_ouverts = 3; tab_noms_derniers_fichiers_ouverts = NULL; /* no compress by default */ conf.compress_file = 0; conf.compress_backup = 0; /* archive data */ conf.check_for_archival = TRUE; conf.max_non_archived_transactions_for_check = 3000; conf.last_tip = -1; conf.show_tip = FALSE; /* mise en conformité avec les recommandations FreeDesktop. */ if ( conf.browser_command ) g_free ( conf.browser_command ); conf.browser_command = g_strdup ( ETAT_WWW_BROWSER ); conf.metatree_action_2button_press = 0; /* action par défaut pour le double clic sur division */ memset ( etat.csv_skipped_lines, '\0', sizeof(gboolean) * CSV_MAX_TOP_LINES ); }
/** * load the config file * it uses the glib config utils after 0.6.0 * if cannot load, try the xml file before that version * * \param * * \return TRUE if ok, FALSE if not found, usually for a new opening * */ gboolean gsb_file_config_load_config ( void ) { GKeyFile *config; gboolean result; const gchar *filename; gchar *name; gint i; gint int_ret; GError* err = NULL; gsb_file_config_clean_config (); filename = gsb_dirs_get_grisbirc_filename (); config = g_key_file_new (); result = g_key_file_load_from_file ( config, filename, G_KEY_FILE_KEEP_COMMENTS, NULL ); if ( !result ) return FALSE; #if IS_DEVELOPMENT_VERSION == 1 /* get config model */ conf.stable_config_file_model = g_key_file_get_integer ( config, "Model", "Stable_config_file_model", NULL ); if ( conf.stable_config_file_model ) { used_model = TRUE; filename = g_strconcat ( gsb_dirs_get_user_config_dir (), PACKAGE, ".conf", NULL ); if ( !g_file_test (filename, G_FILE_TEST_EXISTS) ) { g_key_file_free ( config ); return FALSE; } g_key_file_free (config); config = g_key_file_new (); result = g_key_file_load_from_file ( config, filename, G_KEY_FILE_KEEP_COMMENTS, NULL ); } #endif /* get the geometry */ conf.root_x = g_key_file_get_integer ( config, "Geometry", "Root_x", NULL ); conf.root_y = g_key_file_get_integer ( config, "Geometry", "Root_y", NULL ); conf.main_width = g_key_file_get_integer ( config, "Geometry", "Width", NULL ); conf.main_height = g_key_file_get_integer ( config, "Geometry", "Height", NULL ); conf.full_screen = g_key_file_get_integer ( config, "Geometry", "Full_screen", NULL ); conf.maximize_screen = g_key_file_get_integer ( config, "Geometry", "Maximize_screen", NULL ); /* Remember size of main panel */ int_ret = g_key_file_get_integer ( config, "Geometry", "Panel_width", &err ); if ( err == NULL ) conf.panel_width = int_ret; else { conf.panel_width = -1; err = NULL; } /* preferences size */ conf.prefs_width = g_key_file_get_integer ( config, "Geometry", "Prefs_width", NULL ); /* get general */ conf.r_modifiable = g_key_file_get_integer ( config, "General", "Can modify R", NULL ); gsb_file_update_last_path ( g_key_file_get_string ( config, "General", "Path", NULL )); conf.alerte_permission = g_key_file_get_integer ( config, "General", "Show permission alert", NULL ); conf.entree = g_key_file_get_integer ( config, "General", "Function of enter", NULL ); conf.alerte_mini = g_key_file_get_integer ( config, "General", "Show alert messages", NULL ); conf.utilise_fonte_listes = g_key_file_get_integer ( config, "General", "Use user font", NULL ); conf.font_string = g_key_file_get_string ( config, "General", "Font name", NULL ); conf.browser_command = g_key_file_get_string ( config, "General", "Web", NULL ); conf.pluriel_final = g_key_file_get_integer ( config, "General", "Pluriel_final", NULL ); conf.metatree_action_2button_press = g_key_file_get_integer ( config, "General", "Metatree_action_2button_press", NULL ); /* get backup part */ conf.make_backup = g_key_file_get_integer ( config, "Backup", "Make backup", NULL ); conf.make_bakup_single_file = g_key_file_get_integer ( config, "Backup", "Make backup single file", NULL ); conf.make_backup_every_minutes = g_key_file_get_integer ( config, "Backup", "Make backup every x minutes", NULL ); conf.make_backup_nb_minutes = g_key_file_get_integer ( config, "Backup", "Make backup nb minutes", NULL ); /* exec gsb_file_automatic_backup_start ( ) if necessary */ if ( conf.make_backup_every_minutes && conf.make_backup_nb_minutes ) gsb_file_automatic_backup_start ( NULL, NULL ); conf.compress_backup = g_key_file_get_integer ( config, "Backup", "Compress backup", NULL ); gsb_file_set_backup_path ( g_key_file_get_string ( config, "Backup", "Backup path", NULL )); /* get input/output */ conf.dernier_fichier_auto = g_key_file_get_integer ( config, "IO", "Load last file", NULL ); conf.sauvegarde_auto = g_key_file_get_integer ( config, "IO", "Save at closing", NULL ); conf.sauvegarde_demarrage = g_key_file_get_integer ( config, "IO", "Save at opening", NULL ); conf.nb_max_derniers_fichiers_ouverts = g_key_file_get_integer ( config, "IO", "Nb last opened files", NULL ); conf.compress_file = g_key_file_get_integer ( config, "IO", "Compress file", NULL ); conf.force_enregistrement = g_key_file_get_integer ( config, "IO", "Force saving", NULL ); tab_noms_derniers_fichiers_ouverts = g_key_file_get_string_list ( config, "IO", "Names last files", &conf.nb_derniers_fichiers_ouverts, NULL ); if (tab_noms_derniers_fichiers_ouverts) nom_fichier_comptes = my_strdup (tab_noms_derniers_fichiers_ouverts [ 0 ]); else nom_fichier_comptes = NULL; conf.check_for_archival = g_key_file_get_integer ( config, "IO", "Check_archival_at_opening", NULL ); conf.max_non_archived_transactions_for_check = g_key_file_get_integer ( config, "IO", "Max_transactions_before_warn_archival", NULL ); /* get scheduled section */ nb_days_before_scheduled = g_key_file_get_integer ( config, "Scheduled", "Days before remind", NULL ); conf.execute_scheduled_of_month = g_key_file_get_integer ( config, "Scheduled", "Execute scheduled of month", NULL ); int_ret = g_key_file_get_integer ( config, "Scheduled", "Balances with scheduled", &err ); if ( err == NULL ) conf.balances_with_scheduled = int_ret; else err = NULL; conf.group_partial_balance_under_accounts = g_key_file_get_integer ( config, "Scheduled", "Group_partial_balance", NULL ); /* get shown section */ conf.formulaire_toujours_affiche = g_key_file_get_integer ( config, "Display", "Show transaction form", NULL ); conf.show_transaction_selected_in_form = g_key_file_get_integer ( config, "Display", "Show selected transaction in form", NULL ); conf.show_transaction_gives_balance = g_key_file_get_integer ( config, "Display", "Show transaction gives balance", NULL ); conf.transactions_list_primary_sorting = g_key_file_get_integer ( config, "Display", "Transactions_list_primary_sorting", NULL ); conf.transactions_list_secondary_sorting = g_key_file_get_integer ( config, "Display", "Transactions_list_secondary_sorting", NULL ); conf.affichage_exercice_automatique = g_key_file_get_integer ( config, "Display", "Show automatic financial year", NULL ); int_ret = g_key_file_get_integer ( config, "Display", "Automatic completion payee", &err ); if ( err == NULL ) conf.automatic_completion_payee = int_ret; else err = NULL; conf.limit_completion_to_current_account = g_key_file_get_integer ( config, "Display", "Limit payee completion", NULL ); conf.automatic_recover_splits = g_key_file_get_integer ( config, "Display", "Automatic_recover_splits", NULL ); conf.automatic_erase_credit_debit = g_key_file_get_integer ( config, "Display", "Automatic_erase_credit_debit", NULL ); conf.display_toolbar = g_key_file_get_integer ( config, "Display", "Display toolbar", NULL ); conf.active_scrolling_left_pane = g_key_file_get_integer ( config, "Display", "Active_scrolling_left_pane", NULL ); conf.show_headings_bar = g_key_file_get_integer ( config, "Display", "Show headings bar", NULL ); conf.show_closed_accounts = g_key_file_get_integer ( config, "Display", "Show closed accounts", NULL ); conf.display_grisbi_title = g_key_file_get_integer ( config, "Display", "Display grisbi title", NULL ); /* get messages */ for ( i = 0; messages[i].name; i ++ ) { name = g_strconcat ( messages[i].name , "-answer", NULL ); messages[i].hidden = g_key_file_get_integer ( config, "Messages", messages[i].name, NULL ); messages[i].default_answer = g_key_file_get_integer ( config, "Messages", name, NULL ); g_free ( name ); } for ( i = 0; delete_msg[i].name; i ++ ) { name = g_strconcat ( delete_msg[i].name , "-answer", NULL ); delete_msg[i].hidden = g_key_file_get_integer ( config, "Messages", delete_msg[i].name, NULL ); if ( delete_msg[i].hidden == 1 ) delete_msg[i].default_answer = 1; g_free ( name ); } conf.last_tip = g_key_file_get_integer ( config, "Messages", "Last tip", NULL ); conf.show_tip = g_key_file_get_integer ( config, "Messages", "Show tip", NULL ); g_key_file_free (config); return TRUE; }
/** * called for each new element in the last xml config file * see the g_lib doc for the description of param * * \param context * \param text * \param text_len * \param user_data * \param error * * \return * */ static void gsb_file_config_get_xml_text_element ( GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { const gchar *element_name; gint i; element_name = g_markup_parse_context_get_element ( context ); if ( !strcmp ( element_name, "Width" )) { conf.main_width = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Height" )) { conf.main_height = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Modification_operations_rapprochees" )) { conf.r_modifiable = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Dernier_chemin_de_travail" )) { gsb_file_update_last_path (text); if ( !gsb_file_get_last_path () || !strlen (gsb_file_get_last_path ())) gsb_file_update_last_path (g_get_home_dir ()); return; } if ( !strcmp ( element_name, "Affichage_alerte_permission" )) { conf.alerte_permission = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Force_enregistrement" )) { conf.force_enregistrement = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Fonction_touche_entree" )) { conf.entree = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Affichage_messages_alertes" )) { conf.alerte_mini = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Utilise_fonte_des_listes" )) { conf.utilise_fonte_listes = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Fonte_des_listes" )) { conf.font_string = my_strdup (text); return; } if ( !strcmp ( element_name, "Navigateur_web" )) { if ( conf.browser_command ) g_free ( conf.browser_command ); conf.browser_command = my_strdelimit (text, "\\e", "&" ); return; } if ( !strcmp ( element_name, "Largeur_colonne_echeancier" )) { etat.largeur_colonne_echeancier = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Largeur_colonne_comptes_comptes" )) { etat.largeur_colonne_comptes_comptes = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Largeur_colonne_etats" )) { etat.largeur_colonne_etat = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Chargement_auto_dernier_fichier" )) { conf.dernier_fichier_auto = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Nom_dernier_fichier" )) { nom_fichier_comptes = my_strdup (text); return; } if ( !strcmp ( element_name, "Enregistrement_automatique" )) { conf.sauvegarde_auto = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Enregistrement_au_demarrage" )) { conf.sauvegarde_demarrage = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Nb_max_derniers_fichiers_ouverts" )) { conf.nb_max_derniers_fichiers_ouverts = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Compression_fichier" )) { conf.compress_file = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Compression_backup" )) { conf.compress_backup = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "fichier" )) { if (!tab_noms_derniers_fichiers_ouverts) tab_noms_derniers_fichiers_ouverts = g_malloc0 ( conf.nb_max_derniers_fichiers_ouverts * sizeof(gchar *) ); tab_noms_derniers_fichiers_ouverts[conf.nb_derniers_fichiers_ouverts] = my_strdup (text); conf.nb_derniers_fichiers_ouverts++; return; } if ( !strcmp ( element_name, "Delai_rappel_echeances" )) { nb_days_before_scheduled = utils_str_atoi (text); conf.execute_scheduled_of_month = FALSE; return; } if ( !strcmp ( element_name, "Affichage_formulaire" )) { conf.formulaire_toujours_affiche = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "Affichage_exercice_automatique" )) { conf.affichage_exercice_automatique = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "display_toolbar" )) { conf.display_toolbar = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "show_closed_accounts" )) { conf.show_closed_accounts = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "show_tip" )) { conf.show_tip = utils_str_atoi (text); return; } if ( !strcmp ( element_name, "last_tip" )) { conf.last_tip = utils_str_atoi (text); return; } for ( i = 0; messages[i].name; i++ ) { if ( !strcmp ( element_name, messages[i].name ) ) { messages[i].hidden = utils_str_atoi (text); } } }