From 3967ff3cae8114c65aa4ed06a1abace15ec13264 Mon Sep 17 00:00:00 2001 From: Paul Dicker Date: Sun, 30 Mar 2025 10:51:03 +0200 Subject: [PATCH] Switch raw sector buffer loading/saving to GtkFileChooserDialog --- src/raw-editor.c | 131 +++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 79 deletions(-) diff --git a/src/raw-editor.c b/src/raw-editor.c index 83b7b4f..cdf93ea 100644 --- a/src/raw-editor.c +++ b/src/raw-editor.c @@ -388,99 +388,72 @@ static void save_sector(raw_editor_context *rec) } /*** - *** Raw sector buffer loading/savinf + *** Raw sector buffer loading/saving ***/ static void buffer_io_cb(GtkWidget *widget, gpointer data) { raw_editor_context *rec = Closure->rawEditorContext; int action = GPOINTER_TO_INT(data); + LargeFile *file; + char *path; + GtkWidget *dialog; switch(action) - { + { case ACTION_LOAD_BUFFER: /* open the dialog */ - if(!rec->loadBufSel) - { char filename[strlen(Closure->dDumpDir)+10]; + if(!rec->loadBufSel) + { char filename[strlen(Closure->dDumpDir)+10]; - rec->loadBufSel = gtk_file_selection_new(_utf("windowtitle|Load buffer from file")); - g_signal_connect(G_OBJECT(rec->loadBufSel), "destroy", - G_CALLBACK(buffer_io_cb), GINT_TO_POINTER(ACTION_FILESEL_LOAD_DESTROY)); - g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(rec->loadBufSel)->ok_button),"clicked", - G_CALLBACK(buffer_io_cb), GINT_TO_POINTER(ACTION_FILESEL_LOAD_OK)); - g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(rec->loadBufSel)->cancel_button),"clicked", - G_CALLBACK(buffer_io_cb), GINT_TO_POINTER(ACTION_FILESEL_LOAD_CANCEL)); - sprintf(filename, "%s/", Closure->dDumpDir); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(rec->loadBufSel), filename); + dialog = gtk_file_chooser_dialog_new("Load buffer from file", + Closure->window, + GTK_FILE_CHOOSER_ACTION_OPEN, + _("_Cancel"), GTK_RESPONSE_CANCEL, + _("_Open"), GTK_RESPONSE_ACCEPT, + NULL); + sprintf(filename, "%s/", Closure->dDumpDir); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), filename); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { path = (char*)gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + file = LargeOpen(path, O_RDONLY, IMG_PERMS); + LargeRead(file, rec->rb->recovered, rec->rb->sampleSize); + LargeClose(file); + + calculate_failures(rec); + evaluate_vectors(rec); + render_sector(rec); + undo_remember(rec); + + GuiSetLabelText(rec->rightLabel, _("Buffer loaded from %s."), path); + } + gtk_widget_destroy (dialog); } - gtk_widget_show(rec->loadBufSel); - break; + break; case ACTION_SAVE_BUFFER: /* open the dialog */ - if(!rec->saveBufSel) - { char filename[strlen(Closure->dDumpDir)+10]; + if(!rec->saveBufSel) + { char filename[strlen(Closure->dDumpDir)+10]; - rec->saveBufSel = gtk_file_selection_new(_utf("windowtitle|Save buffer to file")); - g_signal_connect(G_OBJECT(rec->saveBufSel), "destroy", - G_CALLBACK(buffer_io_cb), GINT_TO_POINTER(ACTION_FILESEL_SAVE_DESTROY)); - g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(rec->saveBufSel)->ok_button),"clicked", - G_CALLBACK(buffer_io_cb), GINT_TO_POINTER(ACTION_FILESEL_SAVE_OK)); - g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(rec->saveBufSel)->cancel_button),"clicked", - G_CALLBACK(buffer_io_cb), GINT_TO_POINTER(ACTION_FILESEL_SAVE_CANCEL)); - sprintf(filename, "%s/", Closure->dDumpDir); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(rec->saveBufSel), filename); + dialog = gtk_file_chooser_dialog_new("Save buffer to file", + Closure->window, + GTK_FILE_CHOOSER_ACTION_SAVE, + _("_Cancel"), GTK_RESPONSE_CANCEL, + _("_Open"), GTK_RESPONSE_ACCEPT, + NULL); + sprintf(filename, "%s/", Closure->dDumpDir); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), filename); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { path = (char*)gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + file = LargeOpen(path, O_RDWR | O_CREAT, IMG_PERMS); + LargeWrite(file, rec->rb->recovered, rec->rb->sampleSize); + LargeClose(file); + + GuiSetLabelText(rec->rightLabel, _("Buffer saved to %s."), path); + } + gtk_widget_destroy (dialog); } - gtk_widget_show(rec->saveBufSel); - break; - - case ACTION_FILESEL_LOAD_DESTROY: - rec->loadBufSel = NULL; - break; - - case ACTION_FILESEL_SAVE_DESTROY: - rec->saveBufSel = NULL; - break; - - case ACTION_FILESEL_LOAD_OK: - { LargeFile *file; - char *path; - - path = (char*)gtk_file_selection_get_filename(GTK_FILE_SELECTION(rec->loadBufSel)); - gtk_widget_hide(rec->loadBufSel); - - file = LargeOpen(path, O_RDONLY, IMG_PERMS); - LargeRead(file, rec->rb->recovered, rec->rb->sampleSize); - LargeClose(file); - - calculate_failures(rec); - evaluate_vectors(rec); - render_sector(rec); - undo_remember(rec); - - GuiSetLabelText(rec->rightLabel, _("Buffer loaded from %s."), path); - break; - } - - case ACTION_FILESEL_SAVE_OK: - { LargeFile *file; - char *path; - - path = (char*)gtk_file_selection_get_filename(GTK_FILE_SELECTION(rec->saveBufSel)); - gtk_widget_hide(rec->saveBufSel); - - file = LargeOpen(path, O_RDWR | O_CREAT, IMG_PERMS); - LargeWrite(file, rec->rb->recovered, rec->rb->sampleSize); - LargeClose(file); - - GuiSetLabelText(rec->rightLabel, _("Buffer saved to %s."), path); - break; - } - - case ACTION_FILESEL_LOAD_CANCEL: - gtk_widget_hide(rec->loadBufSel); - break; - - case ACTION_FILESEL_SAVE_CANCEL: - gtk_widget_hide(rec->saveBufSel); - break; + break; } }