/** * 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; }
/** * 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; }
/* **************************************************************************************************************************** */ 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; } }
/** * save 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 * */ gboolean gsb_file_config_save_config ( void ) { GKeyFile *config; const gchar *filename; gchar *file_content; gchar *name; gsize length; FILE *conf_file; gint i; devel_debug (NULL); filename = gsb_dirs_get_grisbirc_filename (); config = g_key_file_new (); #if IS_DEVELOPMENT_VERSION == 1 /* set config model */ g_key_file_set_integer ( config, "Model", "Stable_config_file_model", conf.stable_config_file_model ); #endif g_key_file_set_integer ( config, "Geometry", "Root_x", conf.root_x ); g_key_file_set_integer ( config, "Geometry", "Root_y", conf.root_y ); g_key_file_set_integer ( config, "Geometry", "Width", conf.main_width ); g_key_file_set_integer ( config, "Geometry", "Height", conf.main_height ); g_key_file_set_integer ( config, "Geometry", "Full_screen", conf.full_screen ); g_key_file_set_integer ( config, "Geometry", "Maximize_screen", conf.maximize_screen ); /* Remember size of main panel */ g_key_file_set_integer ( config, "Geometry", "Panel_width", conf.panel_width ); /* preferences size */ g_key_file_set_integer ( config, "Geometry", "Prefs_width", conf.prefs_width ); /* save general */ g_key_file_set_integer ( config, "General", "Can modify R", conf.r_modifiable ); g_key_file_set_string ( config, "General", "Path", gsb_file_get_last_path () ); g_key_file_set_integer ( config, "General", "Show permission alert", conf.alerte_permission ); g_key_file_set_integer ( config, "General", "Function of enter", conf.entree ); g_key_file_set_integer ( config, "General", "Show alert messages", conf.alerte_mini ); g_key_file_set_integer ( config, "General", "Use user font", conf.utilise_fonte_listes ); if ( conf.font_string ) g_key_file_set_string ( config, "General", "Font name", conf.font_string ); if ( conf.browser_command ) { gchar *string; string = my_strdelimit ( conf.browser_command, "&", "\\e" ); if ( string ) g_key_file_set_string ( config, "General", "Web", string ); g_free (string); } g_key_file_set_integer ( config, "General", "Pluriel_final", conf.pluriel_final ); g_key_file_set_integer ( config, "General", "Metatree_action_2button_press", conf.metatree_action_2button_press ); /* save backup part */ g_key_file_set_integer ( config, "Backup", "Make backup", conf.make_backup ); g_key_file_set_integer ( config, "Backup", "Make backup single file", conf.make_bakup_single_file ); g_key_file_set_integer ( config, "Backup", "Make backup every x minutes", conf.make_backup_every_minutes ); g_key_file_set_integer ( config, "Backup", "Compress backup", conf.compress_backup ); g_key_file_set_integer ( config, "Backup", "Make backup nb minutes", conf.make_backup_nb_minutes ); if (gsb_file_get_backup_path ()) g_key_file_set_string ( config, "Backup", "Backup path", gsb_file_get_backup_path ()); /* save input/output */ g_key_file_set_integer ( config, "IO", "Load last file", conf.dernier_fichier_auto ); g_key_file_set_integer ( config, "IO", "Save at closing", conf.sauvegarde_auto ); g_key_file_set_integer ( config, "IO", "Save at opening", conf.sauvegarde_demarrage ); g_key_file_set_integer ( config, "IO", "Nb last opened files", conf.nb_max_derniers_fichiers_ouverts ); g_key_file_set_integer ( config, "IO", "Compress file", conf.compress_file ); g_key_file_set_integer ( config, "IO", "Force saving", conf.force_enregistrement ); if ( conf.nb_derniers_fichiers_ouverts > 0 && tab_noms_derniers_fichiers_ouverts) g_key_file_set_string_list ( config, "IO", "Names last files", (const gchar **) tab_noms_derniers_fichiers_ouverts, conf.nb_derniers_fichiers_ouverts); g_key_file_set_integer ( config, "IO", "Check_archival_at_opening", conf.check_for_archival ); g_key_file_set_integer ( config, "IO", "Max_transactions_before_warn_archival", conf.max_non_archived_transactions_for_check ); /* save scheduled section */ g_key_file_set_integer ( config, "Scheduled", "Days before remind", nb_days_before_scheduled ); g_key_file_set_integer ( config, "Scheduled", "Execute scheduled of month", conf.execute_scheduled_of_month ); g_key_file_set_integer ( config, "Scheduled", "Balances with scheduled", conf.balances_with_scheduled ); g_key_file_set_integer ( config, "Scheduled", "Group_partial_balance", conf.group_partial_balance_under_accounts ); /* save shown section */ g_key_file_set_integer ( config, "Display", "Show transaction form", conf.formulaire_toujours_affiche ); g_key_file_set_integer ( config, "Display", "Show selected transaction in form", conf.show_transaction_selected_in_form ); g_key_file_set_integer ( config, "Display", "Show transaction gives balance", conf.show_transaction_gives_balance ); g_key_file_set_integer ( config, "Display", "Transactions_list_primary_sorting", conf.transactions_list_primary_sorting ); g_key_file_set_integer ( config, "Display", "Transactions_list_secondary_sorting", conf.transactions_list_secondary_sorting ); g_key_file_set_integer ( config, "Display", "Show automatic financial year", conf.affichage_exercice_automatique ); g_key_file_set_integer ( config, "Display", "Automatic completion payee", conf.automatic_completion_payee ); g_key_file_set_integer ( config, "Display", "Limit payee completion", conf.limit_completion_to_current_account ); g_key_file_set_integer ( config, "Display", "Automatic_recover_splits", conf.automatic_recover_splits ); g_key_file_set_integer ( config, "Display", "Automatic_erase_credit_debit", conf.automatic_erase_credit_debit ); g_key_file_set_integer ( config, "Display", "Display toolbar", conf.display_toolbar ); g_key_file_set_integer ( config, "Display", "Active_scrolling_left_pane", conf.active_scrolling_left_pane ); g_key_file_set_integer ( config, "Display", "Show headings bar", conf.show_headings_bar ); g_key_file_set_integer ( config, "Display", "Show closed accounts", conf.show_closed_accounts ); g_key_file_set_integer ( config, "Display", "Display grisbi title", conf.display_grisbi_title ); /* save messages */ for ( i = 0; messages[i].name; i ++ ) { name = g_strconcat ( messages[i].name , "-answer", NULL ); g_key_file_set_integer ( config, "Messages", messages[i].name, messages[i].hidden ); g_key_file_set_integer ( config, "Messages", name, messages[i].default_answer ); g_free ( name ); } for ( i = 0; delete_msg[i].name; i ++ ) { g_key_file_set_integer ( config, "Messages", delete_msg[i].name, delete_msg[i].hidden ); } g_key_file_set_integer ( config, "Messages", "Last tip", conf.last_tip ); g_key_file_set_integer ( config, "Messages", "Show tip", conf.show_tip ); /* save into a file */ file_content = g_key_file_to_data ( config, &length, NULL ); conf_file = fopen ( filename, "w" ); #ifndef _WIN32 if ( !conf_file ) { utils_files_create_XDG_dir ( ); conf_file = fopen ( filename, "w" ); } #endif if ( !conf_file || !fwrite ( file_content, sizeof ( gchar ), length, conf_file ) ) { gchar* tmpstr = g_strdup_printf ( _("Cannot save configuration file '%s': %s"), filename, g_strerror ( errno ) ); dialogue_error ( tmpstr ); g_free ( tmpstr ); g_free ( file_content); g_key_file_free (config); return ( FALSE ); } fclose ( conf_file ); g_free ( file_content); 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); } } }
/** * called when switch page * * \param assistant * \param new_page * * \return FALSE * */ static gboolean gsb_assistant_archive_switch ( GtkWidget *assistant, gint new_page ) { gint archive_number; GtkTreeModel *model; const gchar *export_name; gboolean success = FALSE; gchar* tmpstr; model = gtk_tree_view_get_model (GTK_TREE_VIEW (archive_export_treeview)); archive_number = gsb_assistant_archive_export_get_selected_archive (model); switch (new_page) { case ARCHIVE_EXPORT_ASSISTANT_INTRO: break; case ARCHIVE_EXPORT_ASSISTANT_CHOOSE: if (archive_number) gsb_assistant_sensitive_button_next (assistant, TRUE); else gsb_assistant_sensitive_button_next (assistant, FALSE); break; case ARCHIVE_EXPORT_ASSISTANT_NAME: /* if we come here, an archive must have been selected, * so needn't to check */ tmpstr = g_markup_printf_escaped ( _("<span size=\"x-large\">Exporting the archive: %s</span>"), gsb_data_archive_get_name (archive_number)); gtk_label_set_markup ( GTK_LABEL ( archive_export_label ), tmpstr); g_free ( tmpstr ); /* on remplace les slash des dates par des points * avant de fixer le nom du fichier par défaut */ tmpstr = ( gchar * )gsb_data_archive_get_name ( archive_number ); tmpstr = my_strdelimit (tmpstr, "/", "." ); gtk_file_chooser_set_current_name ( GTK_FILE_CHOOSER (archive_export_filechooser), tmpstr ); gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER (archive_export_filechooser), gsb_file_get_last_path () ); g_free ( tmpstr ); /* need to set the next button to the next function, * because if the export failed and the user did previous button, * the next button stay in the close state */ gsb_assistant_change_button_next ( assistant, GTK_STOCK_GO_FORWARD, GTK_RESPONSE_YES ); break; case ARCHIVE_EXPORT_ASSISTANT_SUCCESS: export_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (archive_export_filechooser)); switch (gtk_combo_box_get_active (GTK_COMBO_BOX(archive_export_combobox))) { case 0: /* GSB format */ /* the gsb_file_save_save_file function write directly, so we need to check before * if the file exists */ /* on vérifie juste que l'extension existe */ if ( ! g_strrstr ( export_name, ".gsb" ) ) { export_name = g_strconcat ( export_name, ".gsb", NULL ); } success = gsb_file_util_test_overwrite (export_name) && gsb_file_save_save_file ( export_name, conf.compress_backup, archive_number); break; case 1: /* QIF format */ if ( ! g_strrstr ( export_name, ".qif" ) ) { export_name = g_strconcat ( export_name, ".qif", NULL ); } success = gsb_qif_export_archive ( export_name, archive_number); break; case 2: /* CSV format */ if ( ! g_strrstr ( export_name, ".csv" ) ) { export_name = g_strconcat ( export_name, ".csv", NULL ); } success = gsb_csv_export_archive ( export_name, archive_number); break; } /* now success = TRUE or FALSE, show the good final page of assistant */ if (success) gtk_label_set_text ( GTK_LABEL (archive_export_label_success), _("Success!\nThe export of the archive finished successfully.\n\nYou can now close the assistant.")); else { gtk_label_set_text ( GTK_LABEL (archive_export_label_success), _("Error!\nAn error occured while saving the archive.\n\nPlease press the Previous button to correct the problem,\nor the close button to cancel the action.")); gsb_assistant_sensitive_button_prev ( assistant, TRUE ); } } return FALSE; }