char *ftp2filter(int ftp) { int n; static char filter[128]; filter[0] = '\0'; n = 0; switch (ftp) { case efTRX: add_filters(filter, &n, NTRXS, trxs); break; case efTRN: add_filters(filter, &n, NTRNS, trns); break; case efSTO: add_filters(filter, &n, NSTOS, stos); break; case efSTX: add_filters(filter, &n, NSTXS, stxs); break; case efTPX: add_filters(filter, &n, NTPXS, tpxs); break; default: sprintf(filter, "*%s", ftp2ext(ftp)); break; } return filter; }
int board_load_dialog (window_board_t *win, int append) { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new (_("Open File"), GTK_WINDOW (win->window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); add_filters (GTK_FILE_CHOOSER (dialog)); if (win->filename) { char *cwd = g_path_get_dirname (win->filename); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd); g_free (cwd); gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), win->filename); } int ret = 0; while (ret == 0) { if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_ACCEPT) break; char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); ret = board_load_popup (win, append, filename); g_free (filename); } gtk_widget_destroy (dialog); return ret; }
int board_save_dialog (window_board_t *win, int save_as) { GtkWidget *dialog; if (!save_as && win->filename) { int ret = board_save(win, win->filename); if (! ret) { GtkWidget *error = gtk_message_dialog_new (GTK_WINDOW (win->window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error saving file '%s': %s"), win->filename, g_strerror (errno)); gtk_dialog_run (GTK_DIALOG (error)); gtk_widget_destroy (error); } return ret; } dialog = gtk_file_chooser_dialog_new (_("Save File"), GTK_WINDOW (win->window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); add_filters (GTK_FILE_CHOOSER (dialog)); if (!win->filename) gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), _("hand.lin")); else gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), win->filename); retry_save: if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); int ret = board_save (win, filename); if (ret) { if (win->filename) free (win->filename); win->filename = filename; show_board (CUR_BOARD, REDRAW_TITLE); recently_used_add (filename); } else { GtkWidget *error = gtk_message_dialog_new (GTK_WINDOW (win->window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error saving file '%s': %s"), filename, g_strerror (errno)); g_free (filename); gtk_dialog_run (GTK_DIALOG (error)); gtk_widget_destroy (error); goto retry_save; } } gtk_widget_destroy (dialog); return 1; }