5 #include <libgnomevfs/gnome-vfs.h>
8 #include "mapper-types.h"
11 #include "ui-common.h"
12 #include "hildon-wrappers.h"
15 * Open a file for reading.
18 file_open(gchar *dir, gchar *file, gchar *new_file)
22 gboolean success=FALSE;
25 dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_OPEN);
27 dialog = gtk_file_chooser_dialog_new("Open...", GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_OPEN,
31 GTK_RESPONSE_ACCEPT, NULL);
35 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), dir);
38 gtk_file_chooser_set_uri(GTK_FILE_CHOOSER(dialog), file);
42 r=gtk_dialog_run(GTK_DIALOG(dialog));
43 if (r==GTK_RESPONSE_ACCEPT || r==GTK_RESPONSE_OK) {
44 /* Get the selected filename. */
45 new_file = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
46 g_printf("file: %s\n", new_file);
50 gtk_widget_destroy(dialog);
55 * Open a file for writing. Return a GnomeVFSHandle to the file for writing.
58 file_save(gchar *dir, gchar *file, GnomeVFSHandle **vfs_handle)
62 gboolean success=FALSE;
65 dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_SAVE);
67 dialog = gtk_file_chooser_dialog_new("Save...", GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_SAVE,
71 GTK_RESPONSE_ACCEPT, NULL);
72 gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
76 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), dir);
79 gtk_file_chooser_set_uri(GTK_FILE_CHOOSER(dialog), file);
81 r=gtk_dialog_run(GTK_DIALOG(dialog));
82 if (r==GTK_RESPONSE_ACCEPT || r==GTK_RESPONSE_OK) {
84 GnomeVFSResult vfs_result;
86 file_uri_str = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
87 vfs_result = gnome_vfs_create(vfs_handle, file_uri_str, GNOME_VFS_OPEN_WRITE, FALSE, 0664);
90 if (vfs_result!=GNOME_VFS_OK) {
95 dir = gtk_file_chooser_get_current_folder_uri(GTK_FILE_CHOOSER(dialog));
99 file = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
105 gtk_widget_destroy(dialog);
110 file_open_get_content(gchar *file, gchar *dir, gchar **buffer, guint *bytes)
113 GnomeVFSResult vfs_result;
115 if (!file_open(file,dir, file_uri_str)) {
119 vfs_result = gnome_vfs_read_entire_file(file_uri_str, bytes, buffer);
120 if (vfs_result != GNOME_VFS_OK) {
128 * This is a multi-purpose function for allowing the user to select a file
129 * for either reading or writing. If chooser_action is
130 * GTK_FILE_CHOOSER_ACTION_OPEN, then bytes_out and size_out must be
131 * non-NULL. If chooser_action is GTK_FILE_CHOOSER_ACTION_SAVE, then
132 * handle_out must be non-NULL. Either dir or file (or both) can be NULL.
133 * This function returns TRUE if a file was successfully opened.
136 open_file(gchar ** bytes_out, GnomeVFSHandle ** handle_out, gint * size_out,
137 gchar ** dir, gchar ** file, GtkFileChooserAction chooser_action)
140 gboolean success = FALSE;
141 printf("%s()\n", __PRETTY_FUNCTION__);
143 dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(_window), chooser_action);
146 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER
151 gtk_file_chooser_set_uri(GTK_FILE_CHOOSER(dialog), *file);
152 if (chooser_action == GTK_FILE_CHOOSER_ACTION_SAVE) {
153 /* Work around a bug in HildonFileChooserDialog. */
154 memset(&val, 0, sizeof(val));
155 g_value_init(&val, G_TYPE_BOOLEAN);
156 g_value_set_boolean(&val, FALSE);
157 g_object_set_property(G_OBJECT(dialog), "autonaming",
159 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER
160 (dialog), strrchr(*file, '/') + 1);
164 gtk_widget_show_all(dialog);
168 while (!success && gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
170 GnomeVFSResult vfs_result;
172 /* Get the selected filename. */
173 file_uri_str = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
175 g_printf("file: %s\n", file_uri_str);
177 if ((chooser_action == GTK_FILE_CHOOSER_ACTION_OPEN
179 (vfs_result = gnome_vfs_read_entire_file(file_uri_str, size_out,
181 || (chooser_action == GTK_FILE_CHOOSER_ACTION_SAVE
182 && GNOME_VFS_OK != (vfs_result = gnome_vfs_create(handle_out,
183 file_uri_str, GNOME_VFS_OPEN_WRITE, FALSE, 0664)))) {
184 gchar buffer[BUFFER_SIZE];
185 snprintf(buffer, sizeof(buffer),"%s:\n%s",
186 chooser_action == GTK_FILE_CHOOSER_ACTION_OPEN ?
187 _("Failed to open file for reading")
188 : _("Failed to open file for writing"),
189 gnome_vfs_result_to_string(vfs_result));
190 popup_error(dialog, buffer);
194 g_free(file_uri_str);
203 *dir = gtk_file_chooser_get_current_folder_uri
204 (GTK_FILE_CHOOSER(dialog));
207 /* If desired, save the file for later. */
210 *file = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
217 gtk_widget_destroy(dialog);
219 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, success);