/** * 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; }
/** * 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; } }
/* **************************************************************************************************************************** */ void change_logo_accueil ( GtkWidget * file_selector ) { GdkPixbuf * pixbuf; const gchar *selected_filename; selected_filename = file_selection_get_filename ( GTK_FILE_CHOOSER ( file_selector ) ); if ( gsb_data_account_get_accounts_amount () ) { /* on change le logo */ gchar * chemin_logo; gtk_container_remove ( GTK_CONTAINER ( logo_button ), preview ); chemin_logo = g_strstrip ( g_strdup ( selected_filename ) ); if ( !strlen ( chemin_logo ) ) { if ( logo_accueil && GTK_IS_WIDGET ( logo_accueil ) ) gtk_widget_hide ( logo_accueil ); preview = gtk_image_new_from_stock ( GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON ); } else { /* Update preview */ pixbuf = gdk_pixbuf_new_from_file ( chemin_logo, NULL ); if (!pixbuf) { if ( logo_accueil && GTK_IS_WIDGET ( logo_accueil )) gtk_widget_hide ( logo_accueil ); preview = gtk_image_new_from_stock ( GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON ); } else { if ( g_strcmp0 ( g_path_get_dirname ( chemin_logo ), gsb_dirs_get_pixmaps_dir ( ) ) == 0 ) { gchar *name_logo; etat.is_pixmaps_dir = TRUE; name_logo = g_path_get_basename ( chemin_logo ); if ( g_strcmp0 ( name_logo, "grisbi-logo.png" ) != 0 ) etat.name_logo = name_logo; else etat.name_logo = NULL; } else { etat.is_pixmaps_dir = FALSE; if ( etat.name_logo && strlen ( etat.name_logo ) ) g_free ( etat.name_logo ); etat.name_logo = NULL; } gsb_select_icon_set_logo_pixbuf ( pixbuf ); preview = gtk_image_new_from_pixbuf ( gdk_pixbuf_scale_simple ( pixbuf, 48, 48, GDK_INTERP_BILINEAR ) ); /* Update homepage logo */ gtk_widget_destroy ( logo_accueil ); logo_accueil = gtk_image_new_from_pixbuf ( gsb_select_icon_get_logo_pixbuf ( ) ); gtk_box_pack_start ( GTK_BOX ( hbox_title ), logo_accueil, FALSE, FALSE, 0 ); gtk_widget_show ( logo_accueil ); /* modify the icon of grisbi (set in the panel of gnome or other) */ gtk_window_set_default_icon ( gsb_select_icon_get_logo_pixbuf ( ) ); } g_free ( chemin_logo ); } gtk_widget_show ( preview ); gtk_container_add ( GTK_CONTAINER ( logo_button ), preview ); /* Mark file as modified */ gsb_file_set_modified ( TRUE ); } }