gchar* get_icon_file() { GtkWidget *chooser, *img; FileFilter *filter; gchar *result = NULL; chooser = file_chooser_new(_("Open icon"), GTK_WINDOW(_icon_window), FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); /*Preview widget*/ img = gtk_image_new(); gtk_widget_set_size_request(img, 96, 96); gtk_widget_show(img); file_chooser_set_preview_widget(FILE_CHOOSER(chooser), img); file_chooser_set_preview_widget_active(FILE_CHOOSER(chooser), FALSE); file_chooser_set_preview_callback(FILE_CHOOSER(chooser), file_chooser_preview_img, (gpointer)img); file_chooser_get_local_only(FILE_CHOOSER(chooser)); file_chooser_set_select_multiple(FILE_CHOOSER(chooser), FALSE); filter = file_filter_new(); if (filter){ file_filter_set_name(filter, "image"); file_filter_add_mime_type(filter, "image/*"); file_chooser_add_filter(FILE_CHOOSER(chooser), filter); } file_chooser_set_current_folder(FILE_CHOOSER(chooser), "/usr/share/pixmaps");//Maybe can be changed... gtk_window_set_modal(GTK_WINDOW(chooser), TRUE); gtk_window_set_transient_for(GTK_WINDOW(chooser), _gtk_widget_get_parent_gtk_window(_dlg->vbox) ); if(gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) result = file_chooser_get_filename(FILE_CHOOSER(chooser)); gtk_widget_destroy(img); gtk_widget_destroy(chooser); return result; }
static int basic_save_as(GtkWidget* parent_window, gboolean not_export) { GtkWidget *dialog; int val; const char* title; char* filter = file_ops_join_ext("*", dish_file_extension()); char* untitled_dish = file_ops_join_ext(untitled_name, dish_file_extension()); global_settings* settings = settings_get(); if (not_export) title = "Basic Save bank as"; else title = "Basic Export as"; dialog = gtk_file_chooser_dialog_new(title, GTK_WINDOW(parent_window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE_AS, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(dialog), TRUE); if (!dish_file_has_state()) { gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), settings->last_bank_dir); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), untitled_dish); } else { const char* tmp = 0; char* fn = 0; char* pdir = 0; /* parent of session dir */ if (dish_file_state_is_full()) { tmp = dish_file_state_parent_dir(); if (session_is_active() && (pdir = file_ops_parent_dir(tmp)) != 0) { tmp = pdir; } } else tmp = dish_file_state_bank_dir(); debug("tmp: '%s'\n", tmp); debug("parent: '%s'\n", dish_file_state_parent_dir()); debug("bank: '%s'\n", dish_file_state_bank_dir()); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), tmp); fn = file_ops_join_ext( dish_file_state_bank_name(), dish_file_extension()); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fn); free(fn); free(pdir); } file_chooser_add_filter(dialog, "Petri-Foo files", filter); file_chooser_add_filter(dialog, "All files", "*"); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *name = (char *) gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if ((val = dish_file_write_basic(name)) < 0) { GtkWidget* msg = gtk_message_dialog_new(GTK_WINDOW(dialog), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Failed to write file %s\n.", name); g_signal_connect_swapped(G_OBJECT(msg), "response", G_CALLBACK(gtk_widget_destroy), msg); gtk_widget_show (msg); } else { if (recent_manager && not_export) gtk_recent_manager_add_item (recent_manager, g_filename_to_uri(name, NULL, NULL)); } } else { val = -1; } gtk_widget_destroy(dialog); free(filter); return val; }
static int open(GtkWidget* parent_window, gboolean not_import) { GtkWidget* dialog; int val; const char* title; char* filter = file_ops_join_ext("*", dish_file_extension()); global_settings* settings = settings_get(); if (not_import) title = "Open bank"; else title = "Import bank"; dialog = gtk_file_chooser_dialog_new( title, GTK_WINDOW(parent_window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if (dish_file_has_state()) { const char* tmp = 0; tmp = dish_file_state_is_full() ? dish_file_state_parent_dir() : dish_file_state_bank_dir(); gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(dialog), tmp); } else gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), settings->last_bank_dir); file_chooser_add_filter(dialog, "Petri-Foo files", filter); file_chooser_add_filter(dialog, "All files", "*"); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char* name = (char*) gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog)); val = (not_import) ? dish_file_read(name) : dish_file_import(name); if (val < 0) { GtkWidget* msg = gtk_message_dialog_new(GTK_WINDOW(dialog), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Failed to read bank %s\n.", name); g_signal_connect_swapped(G_OBJECT(msg), "response", G_CALLBACK(gtk_widget_destroy), msg); gtk_widget_show (msg); } else { if (recent_manager && not_import) gtk_recent_manager_add_item(recent_manager, g_filename_to_uri(name, NULL, NULL)); if (settings->last_bank_dir) free(settings->last_bank_dir); settings->last_bank_dir = g_path_get_dirname(name); } } else { val = -1; } gtk_widget_destroy(dialog); free(filter); return val; }