5 #include <libgnomevfs/gnome-vfs.h>
7 #include "hildon-mapper.h"
10 #include "mapper-types.h"
12 #include "ui-common.h"
13 #include "hildon-wrappers.h"
16 * Open a file for reading.
19 file_open(gchar **dir, gchar **file, gchar *new_file)
23 gboolean success=FALSE;
26 dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_OPEN);
28 dialog = gtk_file_chooser_dialog_new("Open...", GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_OPEN,
32 GTK_RESPONSE_ACCEPT, NULL);
36 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), *dir);
39 gtk_file_chooser_set_uri(GTK_FILE_CHOOSER(dialog), *file);
43 r=gtk_dialog_run(GTK_DIALOG(dialog));
44 if (r==GTK_RESPONSE_ACCEPT || r==GTK_RESPONSE_OK) {
45 /* Get the selected filename. */
46 new_file = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
47 g_printf("file: %s\n", new_file);
51 gtk_widget_destroy(dialog);
56 * Open a file for writing. Return a GnomeVFSHandle to the file for writing.
59 file_save(gchar **dir, gchar **file, GnomeVFSHandle **vfs_handle)
63 gboolean success=FALSE;
66 dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_SAVE);
68 dialog = gtk_file_chooser_dialog_new("Save...", GTK_WINDOW(_window), GTK_FILE_CHOOSER_ACTION_SAVE,
72 GTK_RESPONSE_ACCEPT, NULL);
73 gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
77 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), *dir);
80 gtk_file_chooser_set_uri(GTK_FILE_CHOOSER(dialog), *file);
82 r=gtk_dialog_run(GTK_DIALOG(dialog));
83 if (r==GTK_RESPONSE_ACCEPT || r==GTK_RESPONSE_OK) {
85 GnomeVFSResult vfs_result;
87 file_uri_str = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
88 vfs_result = gnome_vfs_create(vfs_handle, file_uri_str, GNOME_VFS_OPEN_WRITE, FALSE, 0664);
91 if (vfs_result!=GNOME_VFS_OK) {
96 *dir = gtk_file_chooser_get_current_folder_uri(GTK_FILE_CHOOSER(dialog));
100 *file = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
106 gtk_widget_destroy(dialog);
111 file_open_get_content(gchar *file, gchar *dir, gchar **buffer, guint *bytes)
114 GnomeVFSResult vfs_result;
116 if (!file_open(&file,&dir,file_uri_str)) {
120 vfs_result = gnome_vfs_read_entire_file(file_uri_str, bytes, buffer);
121 if (vfs_result != GNOME_VFS_OK) {
129 * This is a multi-purpose function for allowing the user to select a file
130 * for either reading or writing. If chooser_action is
131 * GTK_FILE_CHOOSER_ACTION_OPEN, then bytes_out and size_out must be
132 * non-NULL. If chooser_action is GTK_FILE_CHOOSER_ACTION_SAVE, then
133 * handle_out must be non-NULL. Either dir or file (or both) can be NULL.
134 * This function returns TRUE if a file was successfully opened.
137 open_file(gchar ** bytes_out, GnomeVFSHandle ** handle_out, gint * size_out,
138 gchar ** dir, gchar ** file, GtkFileChooserAction chooser_action)
141 gboolean success = FALSE;
142 printf("%s()\n", __PRETTY_FUNCTION__);
144 dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(_window), chooser_action);
147 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER
152 gtk_file_chooser_set_uri(GTK_FILE_CHOOSER(dialog), *file);
153 if (chooser_action == GTK_FILE_CHOOSER_ACTION_SAVE) {
154 /* Work around a bug in HildonFileChooserDialog. */
155 memset(&val, 0, sizeof(val));
156 g_value_init(&val, G_TYPE_BOOLEAN);
157 g_value_set_boolean(&val, FALSE);
158 g_object_set_property(G_OBJECT(dialog), "autonaming",
160 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER
161 (dialog), strrchr(*file, '/') + 1);
165 gtk_widget_show_all(dialog);
169 while (!success && gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
171 GnomeVFSResult vfs_result;
173 /* Get the selected filename. */
174 file_uri_str = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
176 g_printf("file: %s\n", file_uri_str);
178 if ((chooser_action == GTK_FILE_CHOOSER_ACTION_OPEN
180 (vfs_result = gnome_vfs_read_entire_file(file_uri_str, size_out,
182 || (chooser_action == GTK_FILE_CHOOSER_ACTION_SAVE
183 && GNOME_VFS_OK != (vfs_result = gnome_vfs_create(handle_out,
184 file_uri_str, GNOME_VFS_OPEN_WRITE, FALSE, 0664)))) {
185 gchar buffer[BUFFER_SIZE];
186 snprintf(buffer, sizeof(buffer),"%s:\n%s",
187 chooser_action == GTK_FILE_CHOOSER_ACTION_OPEN ?
188 _("Failed to open file for reading")
189 : _("Failed to open file for writing"),
190 gnome_vfs_result_to_string(vfs_result));
191 popup_error(dialog, buffer);
195 g_free(file_uri_str);
204 *dir = gtk_file_chooser_get_current_folder_uri
205 (GTK_FILE_CHOOSER(dialog));
208 /* If desired, save the file for later. */
211 *file = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
218 gtk_widget_destroy(dialog);
220 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, success);