From: <kr_...@us...> - 2004-05-05 21:08:03
|
Update of /cvsroot/htoolkit/port/src/cbits/GTK In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18651 Modified Files: FileDialog.c Log Message: use the new GtkFileChooser widget Index: FileDialog.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/FileDialog.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** FileDialog.c 1 May 2003 17:12:42 -0000 1.8 --- FileDialog.c 5 May 2004 21:07:54 -0000 1.9 *************** *** 4,44 **** char *osSelectDirectory(char *title, WindowHandle owner) { ! GtkWidget *file_selector = gtk_file_selection_new(title); ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; - gtk_window_set_transient_for(GTK_WINDOW(file_selector), GTK_WINDOW(owner)); for (;;) { ! if (gtk_dialog_run(GTK_DIALOG(file_selector)) == GTK_RESPONSE_OK) { ! gchar *file_name; ! G_CONST_RETURN gchar *fname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_selector)); ! if (!g_file_test(fname, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { ! GtkWidget *dialog = ! gtk_message_dialog_new (GTK_WINDOW(file_selector), ! GTK_DIALOG_DESTROY_WITH_PARENT, ! GTK_MESSAGE_ERROR, ! GTK_BUTTONS_OK, ! "%s directory not found", ! fname); ! gtk_dialog_run (GTK_DIALOG (dialog)); ! gtk_widget_destroy (dialog); ! continue; } - - file_name = g_strdup(fname); - gtk_widget_destroy(file_selector); - return file_name; - } - else - { - gtk_widget_destroy(file_selector); - return NULL; } } } --- 4,70 ---- char *osSelectDirectory(char *title, WindowHandle owner) { ! GtkWidget *dialog; ! char *filename; ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; + dialog = gtk_file_chooser_dialog_new (title, + GTK_WINDOW(owner), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + NULL); + gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + else + filename = NULL; + + gtk_widget_destroy (dialog); + + return filename; + } + + static void SetFileChooserFilter(GtkFileChooser *chooser, char *filter) + { for (;;) { ! GtkFileFilter *ffilter; ! char *name, *exts, *ext, *s; ! ! name = filter; ! exts = name + strlen(name)+1; ! filter = exts + strlen(exts)+1; ! ! if (*name == 0 || *exts == 0) ! break; ! ! ffilter = gtk_file_filter_new(); ! gtk_file_filter_set_name(ffilter, name); ! ! s = exts; ! for (;;) { ! ext = s; ! while (*s != ';' && *s != 0) ! s++; ! ! if (*s) { ! *(s++) = 0; ! gtk_file_filter_add_pattern(ffilter, ext); ! } ! else ! { ! gtk_file_filter_add_pattern(ffilter, ext); ! break; } } + + gtk_file_chooser_add_filter(chooser, ffilter); } } *************** *** 46,228 **** char *osSelectInputFile(char *title, char *filter, WindowHandle owner) { ! GtkWidget *file_selector = gtk_file_selection_new(title); ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; - gtk_window_set_transient_for(GTK_WINDOW(file_selector), GTK_WINDOW(owner)); ! for (;;) ! { ! if (gtk_dialog_run(GTK_DIALOG(file_selector)) == GTK_RESPONSE_OK) ! { ! gchar *file_name; ! G_CONST_RETURN gchar *fname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_selector)); ! if (!g_file_test(fname, G_FILE_TEST_EXISTS)) ! { ! GtkWidget *dialog = ! gtk_message_dialog_new (GTK_WINDOW(file_selector), ! GTK_DIALOG_DESTROY_WITH_PARENT, ! GTK_MESSAGE_ERROR, ! GTK_BUTTONS_OK, ! "%s file not found", ! fname); ! gtk_dialog_run (GTK_DIALOG (dialog)); ! gtk_widget_destroy (dialog); ! continue; ! } ! if (g_file_test(fname, G_FILE_TEST_IS_DIR)) ! { ! GtkWidget *dialog = ! gtk_message_dialog_new (GTK_WINDOW(file_selector), ! GTK_DIALOG_DESTROY_WITH_PARENT, ! GTK_MESSAGE_ERROR, ! GTK_BUTTONS_OK, ! "Path %s is a directory", ! fname); ! gtk_dialog_run (GTK_DIALOG (dialog)); ! gtk_widget_destroy (dialog); ! continue; ! } ! file_name = g_strdup(fname); ! gtk_widget_destroy(file_selector); ! return file_name; ! } ! else ! { ! gtk_widget_destroy(file_selector); ! return NULL; ! } ! } } char *osSelectInputFiles(char *title, char *filter, WindowHandle owner) { ! GtkWidget *file_selector = gtk_file_selection_new(title); ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; - gtk_window_set_transient_for(GTK_WINDOW(file_selector), GTK_WINDOW(owner)); - gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(file_selector), gtk_true()); ! for (;;) { ! if (gtk_dialog_run(GTK_DIALOG(file_selector)) == GTK_RESPONSE_OK) ! { ! int pos_size; ! gchar *buffer; ! gchar **fname, **files = gtk_file_selection_get_selections(GTK_FILE_SELECTION(file_selector)); ! ! pos_size = 1; ! for (fname = files; *fname; fname++) ! { ! if (!g_file_test(*fname, G_FILE_TEST_EXISTS)) ! { ! GtkWidget *dialog = ! gtk_message_dialog_new (GTK_WINDOW(file_selector), ! GTK_DIALOG_DESTROY_WITH_PARENT, ! GTK_MESSAGE_ERROR, ! GTK_BUTTONS_OK, ! "%s file not found", ! *fname); ! gtk_dialog_run (GTK_DIALOG (dialog)); ! gtk_widget_destroy (dialog); ! break; ! } ! if (g_file_test(*fname, G_FILE_TEST_IS_DIR)) ! { ! GtkWidget *dialog = ! gtk_message_dialog_new (GTK_WINDOW(file_selector), ! GTK_DIALOG_DESTROY_WITH_PARENT, ! GTK_MESSAGE_ERROR, ! GTK_BUTTONS_OK, ! "Path %s is a directory", ! *fname); ! gtk_dialog_run (GTK_DIALOG (dialog)); ! gtk_widget_destroy (dialog); ! break; ! } ! ! pos_size += strlen(*fname)+1; ! } ! ! if (*fname) ! { ! g_strfreev(files); ! continue; ! } ! ! buffer = malloc(pos_size); ! if (!buffer) ! return NULL; ! pos_size = 0; ! for (fname = files; *fname; fname++) ! { ! strcpy(buffer+pos_size,*fname); ! pos_size += strlen(*fname)+1; ! } ! ! gtk_widget_destroy(file_selector); ! g_strfreev(files); ! return buffer; ! } ! else { ! gtk_widget_destroy(file_selector); return NULL; } } } char *osSelectOutputFile(char *title, char *filter, char *nameptr, WindowHandle owner) { ! GtkWidget *file_selector = gtk_file_selection_new(title); ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; - gtk_window_set_transient_for(GTK_WINDOW(file_selector), GTK_WINDOW(owner)); ! gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_selector), nameptr); ! for (;;) ! { ! if (gtk_dialog_run(GTK_DIALOG(file_selector)) == GTK_RESPONSE_OK) ! { ! gchar *file_name; ! G_CONST_RETURN gchar *fname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_selector)); ! if (g_file_test(fname, G_FILE_TEST_EXISTS)) ! { ! gint res; ! GtkWidget *dialog = ! gtk_message_dialog_new (GTK_WINDOW(file_selector), ! GTK_DIALOG_DESTROY_WITH_PARENT, ! GTK_MESSAGE_WARNING, ! GTK_BUTTONS_YES_NO, ! "%s already exists. Do you want to replace id?", ! fname); ! res = gtk_dialog_run (GTK_DIALOG (dialog)); ! gtk_widget_destroy (dialog); ! if (res == GTK_RESPONSE_NO) continue; ! } ! file_name = g_strdup(fname); ! gtk_widget_destroy(file_selector); ! return file_name; ! } ! else ! { ! gtk_widget_destroy(file_selector); ! return NULL; ! } ! } } --- 72,188 ---- char *osSelectInputFile(char *title, char *filter, WindowHandle owner) { ! GtkWidget *dialog; ! char *filename; ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; ! dialog = gtk_file_chooser_dialog_new (title, ! GTK_WINDOW(owner), ! GTK_FILE_CHOOSER_ACTION_SAVE, ! GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, ! GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, ! NULL); ! gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog), GTK_FILE_CHOOSER_ACTION_OPEN); ! SetFileChooserFilter(GTK_FILE_CHOOSER (dialog), filter); ! if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) ! filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); ! else ! filename = NULL; ! gtk_widget_destroy (dialog); ! ! return filename; } char *osSelectInputFiles(char *title, char *filter, WindowHandle owner) { ! GtkWidget *dialog; ! char *buffer; ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; ! dialog = gtk_file_chooser_dialog_new (title, ! GTK_WINDOW(owner), ! GTK_FILE_CHOOSER_ACTION_SAVE, ! GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, ! GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, ! NULL); ! gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog), GTK_FILE_CHOOSER_ACTION_OPEN); ! gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); ! ! SetFileChooserFilter(GTK_FILE_CHOOSER (dialog), filter); ! ! if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { ! int buffer_size; ! GSList *lst, *files_list; ! files_list = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(dialog)); ! buffer_size = 1; ! lst = files_list; ! while (lst) { ! buffer_size += strlen((char *) lst->data)+1; ! lst = lst->next; ! } ! ! buffer = malloc(buffer_size); ! if (!buffer) return NULL; + + buffer_size = 0; + lst = files_list; + while (lst) + { + strcpy(buffer+buffer_size,(char *) lst->data); + buffer_size += strlen((char *) lst->data)+1; + lst = lst->next; } + *(buffer+buffer_size) = 0; + + g_slist_free(files_list); } + else + buffer = NULL; + + gtk_widget_destroy (dialog); + + return buffer; } char *osSelectOutputFile(char *title, char *filter, char *nameptr, WindowHandle owner) { ! GtkWidget *dialog; ! char *filename; ! if (owner) owner = gtk_widget_get_toplevel(owner); else owner = gFrameWidget; ! dialog = gtk_file_chooser_dialog_new (title, ! GTK_WINDOW(owner), ! GTK_FILE_CHOOSER_ACTION_SAVE, ! GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, ! GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, ! NULL); ! gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog), GTK_FILE_CHOOSER_ACTION_SAVE); ! SetFileChooserFilter(GTK_FILE_CHOOSER (dialog), filter); ! if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) ! filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); ! else ! filename = NULL; ! gtk_widget_destroy (dialog); ! return filename; } |