forked from AuroraMiddleware/gtk
733f4489ad
Wed Jul 23 11:23:43 2003 Owen Taylor <otaylor@redhat.com> * gtkfilefilter.[ch]: File filter objects. * gtkfilechooser.[ch] gtkfilechooserutils.[ch]: Add file filtering to API. * gtkfilechooserimpldefault.c: Implement file filters. * testfilechooser.c: Try out the filter functionality. * gtkfilesystemmodel.c: Add _gtk_file_system_model_set_filter() to set a callback function for filtering. * gtkfilechooserutils.c: Propagate property notification to the receiver. * fnmatch.c: Copy this from GTK+ temporarily to get UTF-8 pattern matching functionality.
146 lines
3.9 KiB
C
146 lines
3.9 KiB
C
#include <string.h>
|
|
|
|
#include <gtk/gtk.h>
|
|
#include "gtkfilechooserdialog.h"
|
|
#include "gtkfilechooser.h"
|
|
#include "prop-editor.h"
|
|
|
|
#ifdef USE_GNOME_VFS
|
|
#include "gtkfilesystemgnomevfs.h"
|
|
#else
|
|
#include "gtkfilesystemunix.h"
|
|
#endif
|
|
|
|
static void
|
|
print_current_folder (GtkFileChooser *chooser)
|
|
{
|
|
gchar *uri;
|
|
|
|
uri = gtk_file_chooser_get_current_folder_uri (chooser);
|
|
g_print ("Current folder changed :\n %s\n", uri);
|
|
g_free (uri);
|
|
}
|
|
|
|
static void
|
|
print_selected (GtkFileChooser *chooser)
|
|
{
|
|
GSList *uris = gtk_file_chooser_get_uris (chooser);
|
|
GSList *tmp_list;
|
|
|
|
g_print ("Selection changed :\n");
|
|
for (tmp_list = uris; tmp_list; tmp_list = tmp_list->next)
|
|
{
|
|
gchar *uri = tmp_list->data;
|
|
g_print (" %s\n", uri);
|
|
g_free (uri);
|
|
}
|
|
g_print ("\n");
|
|
g_slist_free (uris);
|
|
}
|
|
|
|
static void
|
|
response_cb (GtkDialog *dialog,
|
|
gint response_id)
|
|
{
|
|
gtk_main_quit ();
|
|
}
|
|
|
|
static gboolean
|
|
no_backup_files_filter (const GtkFileFilterInfo *filter_info,
|
|
gpointer data)
|
|
{
|
|
gsize len = strlen (filter_info->display_name);
|
|
if (len > 0 && filter_info->display_name[len - 1] == '~')
|
|
return 0;
|
|
else
|
|
return 1;
|
|
}
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
GtkWidget *control_window;
|
|
GtkWidget *vbbox;
|
|
GtkWidget *button;
|
|
GtkWidget *dialog;
|
|
GtkWidget *prop_editor;
|
|
GtkFileSystem *file_system;
|
|
GtkFileFilter *filter;
|
|
|
|
gtk_init (&argc, &argv);
|
|
|
|
#ifdef USE_GNOME_VFS
|
|
file_system = gtk_file_system_gnome_vfs_new ();
|
|
#else
|
|
file_system = gtk_file_system_unix_new ();
|
|
#endif
|
|
|
|
dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG,
|
|
"action", GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
"file-system", file_system,
|
|
"title", "Select a file",
|
|
NULL);
|
|
|
|
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
|
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
GTK_STOCK_OPEN, GTK_RESPONSE_OK,
|
|
NULL);
|
|
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
|
|
|
|
g_signal_connect (dialog, "selection-changed",
|
|
G_CALLBACK (print_selected), NULL);
|
|
g_signal_connect (dialog, "current-folder-changed",
|
|
G_CALLBACK (print_current_folder), NULL);
|
|
g_signal_connect (dialog, "response",
|
|
G_CALLBACK (response_cb), NULL);
|
|
|
|
/* Filters */
|
|
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 (dialog), filter);
|
|
|
|
filter = gtk_file_filter_new ();
|
|
gtk_file_filter_set_name (filter, "No backup files");
|
|
gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_DISPLAY_NAME,
|
|
no_backup_files_filter, NULL, NULL);
|
|
gtk_file_filter_add_mime_type (filter, "image/png");
|
|
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
|
|
|
|
/* Make this filter the default */
|
|
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
|
|
|
|
filter = gtk_file_filter_new ();
|
|
gtk_file_filter_set_name (filter, "PNG and JPEG");
|
|
gtk_file_filter_add_mime_type (filter, "image/jpeg");
|
|
gtk_file_filter_add_mime_type (filter, "image/png");
|
|
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
|
|
|
|
gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 400);
|
|
/* show_all() to reveal bugs in composite widget handling */
|
|
gtk_widget_show_all (dialog);
|
|
|
|
prop_editor = create_prop_editor (G_OBJECT (dialog), GTK_TYPE_FILE_CHOOSER);
|
|
|
|
control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
|
|
vbbox = gtk_vbutton_box_new ();
|
|
gtk_container_add (GTK_CONTAINER (control_window), vbbox);
|
|
|
|
button = gtk_button_new_with_mnemonic ("_Select all");
|
|
gtk_container_add (GTK_CONTAINER (vbbox), button);
|
|
g_signal_connect_swapped (button, "clicked",
|
|
G_CALLBACK (gtk_file_chooser_select_all), dialog);
|
|
|
|
button = gtk_button_new_with_mnemonic ("_Unselect all");
|
|
gtk_container_add (GTK_CONTAINER (vbbox), button);
|
|
g_signal_connect_swapped (button, "clicked",
|
|
G_CALLBACK (gtk_file_chooser_unselect_all), dialog);
|
|
|
|
gtk_widget_show_all (control_window);
|
|
|
|
gtk_main ();
|
|
|
|
return 0;
|
|
}
|