diff --git a/Makefile b/Makefile index 582085f..8761e80 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,39 @@ # -# Makefile for cavaldos. Prety lame, needs to be improved. +# Makefile for cavaldos. Pretty lame, needs to be improved. # NAME=calvados CFLAGS=-g -Wall -o $(NAME) -GTKFLAGS=-export-dynamic `pkg-config --cflags --libs gtk+-2.0` +#GTKFLAGS=-export-dynamic `pkg-config --cflags --libs gtk+-2.0` +GTKFLAGS=`pkg-config --cflags --libs gtk+-2.0` SRCS=calvados.c select_volume.c closing_dialog.c close_dialog.c show_about.c \ disk_sector_viewer_popup.c create_disk_image.c new_archive.c \ open_file.c okfunc_create_disk_image.c okfunc_select_volume.c \ help_func_create_disk_image.c help_func_select_volume.c \ - do_open_file.c save_to_file.c preferences.c + do_open_file.c save_to_file.c preferences.c print.c add_files.c \ + do_new_archive.c create_radio.c acceptfunc_add_files.c \ + help_func_add_files.c extract_files.c extractfunc_extract_files.c \ + help_func_extract_files.c disk_image_converter.c do_image_converter.c \ + do_add_files.c archive_info.c edit_comment.c help_func_archive_info.c \ + delete_file.c rename.c select_image_convert.c select_first_sst_image.c \ + recompress_files.c show_error.c file_viewer.c donefunc_file_viewer.c \ + help_func_file_viewer.c add_disk_image.c test.c findfunc_file_viewer.c \ + bulk_disk_image_converter.c close.c save_changes.c reopen.c copy.c paste.c \ + paste_special.c find.c select_all.c invert_selection.c +OBJS=$(SRCS:.c=.o) HEADERS=calvados.h CC=gcc DESTDIR=/usr/local -INCLUDE=-I/usr/include/glib-2.0/ -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ -I/usr/include/pango-1.0/ -I/usr/include/cairo/ -I/usr/include/gdk-pixbuf-2.0/ -I/usr/include/atk-1.0/ +INCLUDES=-I/usr/include/glib-2.0/ \ + -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ \ + -I/usr/include/pango-1.0/ -I/usr/include/cairo/ \ + -I/usr/include/gdk-pixbuf-2.0/ -I/usr/include/atk-1.0/ \ + -I/usr/include/gtk-unix-print-2.0/ all: calvados calvados: $(SRCS) $(HEADERS) - $(CC) $(CFLAGS) $(SRCS) $(GTKFLAGS) + $(CC) $(CFLAGS) $(SRCS) $(GTKFLAGS) $(INCLUDES) install: /usr/bin/install $(NAME) $(DESTDIR)/bin diff --git a/acceptfunc_add_files.c b/acceptfunc_add_files.c new file mode 100644 index 0000000..b0f4e2e --- /dev/null +++ b/acceptfunc_add_files.c @@ -0,0 +1,23 @@ +#include +#include + +#include "calvados.h" + +/* + * + * acceptfunc_add_files() + * + * Accept Function for add files + * + * Show that the "Accept" button was pressed + * + */ +void acceptfunc_add_files(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Add function goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); +} + diff --git a/add_disk_image.c b/add_disk_image.c new file mode 100644 index 0000000..08dc427 --- /dev/null +++ b/add_disk_image.c @@ -0,0 +1,72 @@ +#include +#include + +#include "calvados.h" + +/* + * + * add_disk_image() + * + * Display add disk image dialog + * + */ +void add_disk_image(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + gint res; + GtkFileFilter *diskImagesFilt; + GtkFileFilter *allFilesFilt; + + g_print("add disk image goes here\n"); + + diskImagesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(diskImagesFilt, "Disk Images"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Hh][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Dd][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Ss][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Pp][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd]13"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.2[Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Ii][Bb]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Bb]2"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Rr][Aa][Ww]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Hh][Dd][Vv]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]6"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Dd][Dd]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Aa][Pp][Pp]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ff][Dd][Ii]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Ss][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Gg][Zz]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Zz][Ii][Pp]"); + + allFilesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(allFilesFilt, "All Files"); + gtk_file_filter_add_pattern(allFilesFilt, "*"); + + dialog = gtk_file_chooser_dialog_new("Add Disk Image", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), diskImagesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), allFilesFilt); + + res = gtk_dialog_run(GTK_DIALOG(dialog)); + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); + filename = gtk_file_chooser_get_filename(chooser); + do_open_file(filename); + g_free(filename); + } + + gtk_widget_destroy(dialog); +} + diff --git a/add_files.c b/add_files.c new file mode 100644 index 0000000..7a2c09e --- /dev/null +++ b/add_files.c @@ -0,0 +1,179 @@ +#include +#include + +#include "calvados.h" + +void fileAttributePreservationRbCallback(GtkWidget *widget, gpointer *data) +{ + g_print("clicked %s\n", (char *)data); +} + + +void textConversionRbCallback(GtkWidget *widget, gpointer *data) +{ + g_print("clicked %s\n", (char *)data); +} + + +/* + * + * add_files() + * + * Add Files dialog box. + * + */ +void add_files() +{ + GtkWidget *dialog; + GtkWidget *help_button; + GtkWidget *hbox1; + GtkWidget *vboxl; + GtkWidget *vboxr; + GtkWidget *fileAttributePreservationFrame; + GtkWidget *miscellaneousFrame; + GtkWidget *textConversionFrame; + GtkWidget *fileAttributePreservationVbox; + GtkWidget *miscellaneousVbox; + GtkWidget *textConversionVbox; + GtkWidget *storagePrefixVbox; + GtkWidget *ignoreFileAttributePreservationTagsRb; + GtkWidget *useFileAttributePreservationTagsRb; + GtkWidget *useTagsAndGuessTypeFromExtensionRb; + GSList *fileAttributePreservationRbGroup = NULL; + GtkWidget *dontConvertTextFilesRb; + GtkWidget *convertTextFilesByFileTypeRb; + GtkWidget *autoDetectConvertFilesByFileTypeRb; + GtkWidget *convertAllFilesRb; + GSList *textConversionRbGroup = NULL; + GtkWidget *includeSubfoldersCb; + GtkWidget *stripFolderNamesCb; + GtkWidget *overwriteExistingFilesCb; + GtkWidget *storagePrefixLabel; + GtkWidget *storagePrefixEntry; + + /* --- Create the dialog --- */ + dialog = gtk_file_chooser_dialog_new("Add Files...", + NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + "_Accept", + GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + /*GTK_STOCK_HELP, + GTK_RESPONSE_HELP,*/ + NULL); + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), FALSE); + + /* + * --- Help button + */ + + /* --- Create the "Help" button --- */ + help_button = gtk_button_new_with_label("Help"); + gtk_widget_show(help_button); + + gtk_signal_connect(GTK_OBJECT(help_button), "clicked", + GTK_SIGNAL_FUNC(help_func_select_volume), + dialog); + + /* --- Add the "Help" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), help_button, TRUE, TRUE, 0); + + hbox1 = gtk_hbox_new(FALSE, 0); + gtk_widget_show(hbox1); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox1, TRUE, TRUE, 0); + + vboxl = gtk_vbox_new(FALSE, 0); + gtk_widget_show(vboxl); + gtk_box_pack_start(GTK_BOX(hbox1), vboxl, TRUE, TRUE, 0); + + vboxr = gtk_vbox_new(FALSE, 0); + gtk_widget_show(vboxr); + gtk_box_pack_start(GTK_BOX(hbox1), vboxr, TRUE, TRUE, 0); + + fileAttributePreservationFrame = gtk_frame_new("File attribute preservation"); + gtk_widget_show(fileAttributePreservationFrame); + gtk_box_pack_start(GTK_BOX(vboxl), fileAttributePreservationFrame, TRUE, TRUE, 0); + fileAttributePreservationVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(fileAttributePreservationVbox); + gtk_container_add(GTK_CONTAINER(fileAttributePreservationFrame), fileAttributePreservationVbox); + + textConversionFrame = gtk_frame_new("Text conversion"); + gtk_widget_show(textConversionFrame); + gtk_box_pack_start(GTK_BOX(vboxl), textConversionFrame, TRUE, TRUE, 0); + textConversionVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(textConversionVbox); + gtk_container_add(GTK_CONTAINER(textConversionFrame), textConversionVbox); + + miscellaneousFrame = gtk_frame_new("Miscellaneous"); + gtk_widget_show(miscellaneousFrame); + gtk_box_pack_start(GTK_BOX(vboxr), miscellaneousFrame, TRUE, TRUE, 0); + miscellaneousVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(miscellaneousVbox); + gtk_container_add(GTK_CONTAINER(miscellaneousFrame), miscellaneousVbox); + + storagePrefixVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(storagePrefixVbox); + gtk_box_pack_start(GTK_BOX(vboxr), storagePrefixVbox, TRUE, TRUE, 0); + + ignoreFileAttributePreservationTagsRb = create_radio(fileAttributePreservationVbox, &fileAttributePreservationRbGroup, "Ignore file attribute preservation tags"); + useFileAttributePreservationTagsRb = create_radio(fileAttributePreservationVbox, &fileAttributePreservationRbGroup, "Use file attribute preservation flags"); + useTagsAndGuessTypeFromExtensionRb = create_radio(fileAttributePreservationVbox, &fileAttributePreservationRbGroup, "Use tags and guess type from extension"); + + dontConvertTextFilesRb = create_radio(textConversionVbox, &textConversionRbGroup, "Don't convert text files"); + convertTextFilesByFileTypeRb = create_radio(textConversionVbox, &textConversionRbGroup, "Convert text files by file type"); + autoDetectConvertFilesByFileTypeRb = create_radio(textConversionVbox, &textConversionRbGroup, "Auto-detect & Convert text files by file type with text"); + convertAllFilesRb = create_radio(textConversionVbox, &textConversionRbGroup, "Convert ALL files"); + + includeSubfoldersCb = gtk_check_button_new_with_label("Include subfolders"); + gtk_widget_show(includeSubfoldersCb); + gtk_box_pack_start(GTK_BOX(miscellaneousVbox), includeSubfoldersCb, TRUE, TRUE, 0); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(includeSubfoldersCb), TRUE); + + stripFolderNamesCb = gtk_check_button_new_with_label("Strip folder names"); + gtk_widget_show(stripFolderNamesCb); + gtk_box_pack_start(GTK_BOX(miscellaneousVbox), stripFolderNamesCb, TRUE, TRUE, 0); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stripFolderNamesCb), TRUE); + + overwriteExistingFilesCb = gtk_check_button_new_with_label("Overwrite existing files"); + gtk_widget_show(overwriteExistingFilesCb); + gtk_box_pack_start(GTK_BOX(miscellaneousVbox), overwriteExistingFilesCb, TRUE, TRUE, 0); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(overwriteExistingFilesCb), TRUE); + + storagePrefixLabel = gtk_label_new("Storage prefix"); + gtk_widget_show(storagePrefixLabel); + gtk_box_pack_start(GTK_BOX(storagePrefixVbox), storagePrefixLabel, TRUE, TRUE, 0); + + storagePrefixEntry = gtk_entry_new(); + gtk_widget_show(storagePrefixEntry); + gtk_box_pack_start(GTK_BOX(storagePrefixVbox), storagePrefixEntry, TRUE, TRUE, 0); + + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(useFileAttributePreservationTagsRb), TRUE); + + /* Set up callbacks for file attribute preservation frame */ + gtk_signal_connect(GTK_OBJECT(ignoreFileAttributePreservationTagsRb), "clicked", GTK_SIGNAL_FUNC(fileAttributePreservationRbCallback), (gpointer)"ignoreFileAttributePreservationTagsRb"); + gtk_signal_connect(GTK_OBJECT(useFileAttributePreservationTagsRb), "clicked", GTK_SIGNAL_FUNC(fileAttributePreservationRbCallback), (gpointer)"useFileAttributePreservationTagsRb"); + gtk_signal_connect(GTK_OBJECT(useTagsAndGuessTypeFromExtensionRb), "clicked", GTK_SIGNAL_FUNC(fileAttributePreservationRbCallback), (gpointer)"useTagsAndGuessTypeFromExtensionRb"); + + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(convertTextFilesByFileTypeRb), TRUE); + + /* Set up callbacks for text conversion frame */ + gtk_signal_connect(GTK_OBJECT(dontConvertTextFilesRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback), (gpointer)"dontConvertTextFilesRb"); + gtk_signal_connect(GTK_OBJECT(convertTextFilesByFileTypeRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback), (gpointer)"convertTextFilesByFileTypeRb"); + gtk_signal_connect(GTK_OBJECT(autoDetectConvertFilesByFileTypeRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback), (gpointer)"autoDetectConvertFilesByFileTypeRb"); + gtk_signal_connect(GTK_OBJECT(convertAllFilesRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback), (gpointer)"convertAllFilesRb"); + +/* FIXME -- need to make correct path here */ + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), "Desktop"); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { + char *filename; + + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + do_add_files(filename); + g_free(filename); + } + + gtk_widget_destroy(dialog); +} + diff --git a/archive_info.c b/archive_info.c new file mode 100644 index 0000000..060a25f --- /dev/null +++ b/archive_info.c @@ -0,0 +1,202 @@ +#include +#include + +#include "calvados.h" + +/* FIXME -- this needs to be thought through and moved to the .h file or somewhere better */ +#define SHK 0 +#define DSK 1 + +/* + * + * archive_info() + * + */ +void archive_info() +{ + GtkWidget *dialog; + GtkWidget *vbox; + + GtkWidget *archiveInfoFrame; + GtkWidget *archiveInfoHbox; + GtkWidget *archiveInfoVboxl; + GtkWidget *archiveInfoVboxr; + GtkWidget *filenameLabel; + GtkWidget *formatLabel; + GtkWidget *recordsLabel; + GtkWidget *masterVersionLabel; + GtkWidget *createdLabel; + GtkWidget *modifiedLabel; + GtkWidget *junkSkippedLabel; + + GtkWidget *fileCharacteristicsFrame; + GtkWidget *fileCharacteristicsHbox; + GtkWidget *fileCharacteristicsVboxl; + GtkWidget *fileCharacteristicsVboxr; + GtkWidget *diskCharacteristicsFrame; + GtkWidget *diskCharacteristicsHbox; + GtkWidget *diskCharacteristicsInfoVboxl; + GtkWidget *diskCharacteristicsInfoVboxr; + + GtkWidget *hbox2; + GtkWidget *helpButton; + GtkWidget *doneButton; + int archive_type = 0; + char dialog_title[256]; + + g_print("archive info goes here\n"); + + /* FIXME -- need to detect what type of archive we are looking at */ + if (archive_type == SHK) { + strcpy(dialog_title, "NuFX (ShrinkIt) Archive"); + } else if (archive_type == DSK) { + strcpy(dialog_title, "Disk Image Info"); + } else { + strcpy(dialog_title, "Disk Image Info"); + } + + /* --- Create a dialog window --- */ + dialog = gtk_dialog_new(); + + /* --- Trap the destroy button --- */ + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + GTK_SIGNAL_FUNC(gtk_widget_destroyed), + &dialog); + + /* --- Add a title to the window --- */ + gtk_window_set_title(GTK_WINDOW(dialog), dialog_title); + + /* --- Create a small border --- */ + gtk_container_border_width(GTK_CONTAINER(dialog), 5); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0); + gtk_widget_show(vbox); + + /* For archive info SHK, etc */ + if (archive_type == SHK) { + archiveInfoFrame = gtk_frame_new("Archive Info"); + gtk_box_pack_start(GTK_BOX(vbox), archiveInfoFrame, TRUE, TRUE, 0); + gtk_widget_show(archiveInfoFrame); + + archiveInfoHbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(archiveInfoFrame), archiveInfoHbox); + gtk_widget_show(archiveInfoHbox); + + archiveInfoVboxl = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(archiveInfoHbox), archiveInfoVboxl, TRUE, TRUE, 0); + gtk_widget_show(archiveInfoVboxl); + + archiveInfoVboxr = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(archiveInfoHbox), archiveInfoVboxr, TRUE, TRUE, 0); + gtk_widget_show(archiveInfoVboxr); + + filenameLabel = gtk_label_new("Filename:"); + gtk_box_pack_start(GTK_BOX(archiveInfoVboxl), filenameLabel, TRUE, TRUE, 0); + gtk_widget_show(filenameLabel); + formatLabel = gtk_label_new("Format:"); + gtk_box_pack_start(GTK_BOX(archiveInfoVboxl), formatLabel, TRUE, TRUE, 0); + gtk_widget_show(formatLabel); + recordsLabel = gtk_label_new("Records:"); + gtk_box_pack_start(GTK_BOX(archiveInfoVboxl), recordsLabel, TRUE, TRUE, 0); + gtk_widget_show(recordsLabel); + masterVersionLabel = gtk_label_new("Master Version:"); + gtk_box_pack_start(GTK_BOX(archiveInfoVboxl), masterVersionLabel, TRUE, TRUE, 0); + gtk_widget_show(masterVersionLabel); + createdLabel = gtk_label_new("Created:"); + gtk_box_pack_start(GTK_BOX(archiveInfoVboxl), createdLabel, TRUE, TRUE, 0); + gtk_widget_show(createdLabel); + modifiedLabel = gtk_label_new("Modified:"); + gtk_box_pack_start(GTK_BOX(archiveInfoVboxl), modifiedLabel, TRUE, TRUE, 0); + gtk_widget_show(modifiedLabel); + junkSkippedLabel = gtk_label_new("Junk Skipped:"); + gtk_box_pack_start(GTK_BOX(archiveInfoVboxl), junkSkippedLabel, TRUE, TRUE, 0); + gtk_widget_show(junkSkippedLabel); + } else { + /* For disk image info DSK, etc */ + fileCharacteristicsFrame = gtk_frame_new("File Characteristics"); + gtk_box_pack_start(GTK_BOX(vbox), fileCharacteristicsFrame, TRUE, TRUE, 0); + gtk_widget_show(fileCharacteristicsFrame); + + fileCharacteristicsHbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(fileCharacteristicsFrame), fileCharacteristicsHbox); + gtk_widget_show(fileCharacteristicsHbox); + + fileCharacteristicsVboxl = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(fileCharacteristicsHbox), fileCharacteristicsVboxl, TRUE, TRUE, 0); + gtk_widget_show(fileCharacteristicsVboxl); + + fileCharacteristicsVboxr = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(fileCharacteristicsHbox), fileCharacteristicsVboxr, TRUE, TRUE, 0); + gtk_widget_show(fileCharacteristicsVboxr); + + filenameLabel = gtk_label_new("Filename:"); + gtk_box_pack_start(GTK_BOX(fileCharacteristicsVboxl), filenameLabel, TRUE, TRUE, 0); + gtk_widget_show(filenameLabel); + + diskCharacteristicsFrame = gtk_frame_new("Disk Characteristics"); + gtk_box_pack_start(GTK_BOX(vbox), diskCharacteristicsFrame, TRUE, TRUE, 0); + gtk_widget_show(diskCharacteristicsFrame); + + diskCharacteristicsHbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(diskCharacteristicsFrame), diskCharacteristicsHbox); + gtk_widget_show(diskCharacteristicsHbox); + + } + + hbox2 = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), hbox2, TRUE, TRUE, 0); + gtk_widget_show(hbox2); + + /* + * --- Help button + */ + + /* --- Create the "Help" button --- */ + helpButton = gtk_button_new_with_label("Help"); + + gtk_signal_connect(GTK_OBJECT(helpButton), "clicked", + GTK_SIGNAL_FUNC(help_func_archive_info), + dialog); + + /* --- Add the "Help" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(hbox2), helpButton, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(helpButton); + + /* + * --- "done" button + */ + + /* --- Create the "done" button --- */ + doneButton = gtk_button_new_with_label("Cancel"); + + /* --- Need to close the window if they press "done" --- */ + gtk_signal_connect(GTK_OBJECT(doneButton), "clicked", + GTK_SIGNAL_FUNC(close_dialog), + dialog); + + /* --- Allow it to be the default button --- */ + GTK_WIDGET_SET_FLAGS(doneButton, GTK_CAN_DEFAULT); + + /* --- Add the button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(hbox2), doneButton, TRUE, TRUE, 0); + + /* --- Make the button the default button --- */ + gtk_widget_grab_default(doneButton); + + /* --- Make the button visible --- */ + gtk_widget_show(doneButton); + + /* --- Need to close the window if they press "done" --- */ + gtk_signal_connect(GTK_OBJECT(doneButton), "clicked", + GTK_SIGNAL_FUNC(close_dialog), + dialog); + + /* --- Make the dialog visible --- */ + gtk_widget_show(dialog); + + gtk_grab_add(dialog); +} + diff --git a/bulk_disk_image_converter.c b/bulk_disk_image_converter.c new file mode 100644 index 0000000..b1f54cd --- /dev/null +++ b/bulk_disk_image_converter.c @@ -0,0 +1,72 @@ +#include +#include + +#include "calvados.h" + +/* + * + * bulk_disk_image_converter() + * + * Display bulk disk image converter dialog + * + */ +void bulk_disk_image_converter(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + gint res; + GtkFileFilter *diskImagesFilt; + GtkFileFilter *allFilesFilt; + + g_print("bulk disk image convert goes here\n"); + + diskImagesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(diskImagesFilt, "Disk Images"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Hh][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Dd][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Ss][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Pp][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd]13"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.2[Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Ii][Bb]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Bb]2"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Rr][Aa][Ww]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Hh][Dd][Vv]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]6"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Dd][Dd]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Aa][Pp][Pp]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ff][Dd][Ii]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Ss][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Gg][Zz]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Zz][Ii][Pp]"); + + allFilesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(allFilesFilt, "All Files"); + gtk_file_filter_add_pattern(allFilesFilt, "*"); + + dialog = gtk_file_chooser_dialog_new("Select images to convert", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), diskImagesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), allFilesFilt); + + res = gtk_dialog_run(GTK_DIALOG(dialog)); + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); + filename = gtk_file_chooser_get_filename(chooser); + do_open_file(filename); + g_free(filename); + } + + gtk_widget_destroy(dialog); +} + diff --git a/calvados.c b/calvados.c index 78cba49..cb90b44 100644 --- a/calvados.c +++ b/calvados.c @@ -7,11 +7,162 @@ * 20170310 Leeland Heins * */ + #include #include +#include #include "calvados.h" +enum { + COL_PATHNAME = 0, + COL_TYPE, + COL_AUX, + COL_MODDATE, + COL_FORMAT, + COL_SIZE, + COL_RATIO, + COL_PACKED, + COL_ACCESS, + NUM_MAIN_WINDOW_COLS +}; + + +/* For displaying displaying disk images/archives in main window */ +GtkListStore *mw_store; +/*GtkTreeIter mw_iter;*/ +GtkCellRenderer *mw_renderer; +GtkTreeModel *mw_model; +GtkWidget *mw_view; + + +/* + * + * display_image() + * + * Display the tree view in the main window, + * + */ +GtkWidget *display_image(GtkWidget *widget, gpointer data, GtkWidget *mw_box) +{ + mw_store = gtk_list_store_new(NUM_MAIN_WINDOW_COLS, G_TYPE_STRING, G_TYPE_UINT); + +/*FIXME*/ + /* This needs to be in a loop reading from somewhere */ + /* Append a row and fill in some data */ + /*gtk_list_store_append(store, &mw_iter); + gtk_list_store_set(store, &mw_iter, + COL_PATHNAME, "", + COL_TYPE, "", + COL_AUX, "", + COL_MODDATE, "", + COL_FORMAT, "", + COL_SIZE, "", + COL_RATIO, "", + COL_PACKED, "", + COL_ACCESS, "", + -1);*/ + + mw_view = gtk_tree_view_new(); + gtk_widget_set_size_request(mw_view, LIST_WIDTH, LIST_HEIGHT); + + /* --- Column #1 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Pathname", + mw_renderer, + "text", COL_PATHNAME, + NULL); + + /* --- Column #2 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Type", + mw_renderer, + "text", COL_TYPE, + NULL); + + /* --- Column #3 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Aux", + mw_renderer, + "text", COL_AUX, + NULL); + /* --- Column #4 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Mod Date", + mw_renderer, + "text", COL_MODDATE, + NULL); + + /* --- Column #5 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Format", + mw_renderer, + "text", COL_FORMAT, + NULL); + + /* --- Column #6 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Size", + mw_renderer, + "text", COL_SIZE, + NULL); + + /* --- Column #7 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Ratio", + mw_renderer, + "text", COL_RATIO, + NULL); + + /* --- Column #8 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Packed", + mw_renderer, + "text", COL_PACKED, + NULL); + + /* --- Column #9 --- */ + mw_renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(mw_view), + -1, + "Access", + mw_renderer, + "text", COL_ACCESS, + NULL); + + mw_model = GTK_TREE_MODEL(mw_store); + + gtk_tree_view_set_model(GTK_TREE_VIEW(mw_view), mw_model); + + /* The tree view has acquired its own reference to the + * model, so we can drop ours. That way the model will + * be freed automatically when the tree view is destroyed */ + g_object_unref(mw_model); + + gtk_box_pack_start(GTK_BOX(mw_box), mw_view, TRUE, TRUE, 0); + + gtk_widget_show(mw_view); + + return mw_view; +} + + int main(int argc, char *argv[]) { /* Our root window */ @@ -253,9 +404,25 @@ int main(int argc, char *argv[]) gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), printMi); gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), fileSep2); gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi); + /* Add file menu to menu bar */ gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi); + /* connect 'reopen' menu item to the reopen dialog event */ + g_signal_connect(G_OBJECT(reopenMi), "activate", G_CALLBACK(reopen_menu_item), (gpointer)"reopenMi"); + + /* connect 'save changes' menu item to the save_changes dialog event */ + g_signal_connect(G_OBJECT(saveChangesMi), "activate", G_CALLBACK(save_changes), (gpointer)"saveChangesMi"); + + /* connect 'close' menu item to the close_menu_item dialog event */ + g_signal_connect(G_OBJECT(closeMi), "activate", G_CALLBACK(close_menu_item), (gpointer)"closeMi"); + + /* connect 'archive info' menu item to the archive_info dialog event */ + g_signal_connect(G_OBJECT(archiveInfoMi), "activate", G_CALLBACK(archive_info), (gpointer)"archiveInfoMi"); + + /* Hook up the print menu item to the print dialog box */ + g_signal_connect(G_OBJECT(printMi), "activate", G_CALLBACK(print_page), (gpointer)"printMi"); + /* Edit menu bar items */ editMi = gtk_menu_item_new_with_mnemonic("_Edit"); copyMi = gtk_image_menu_item_new_from_stock(GTK_STOCK_COPY, accel_group); @@ -332,8 +499,26 @@ int main(int argc, char *argv[]) /* Add edit menu to menu bar */ gtk_menu_shell_append(GTK_MENU_SHELL(menubar), editMi); + /* connect 'copy' menu item to the copy_menu_item dialog event */ + g_signal_connect(G_OBJECT(copyMi), "activate", G_CALLBACK(copy_menu_item), (gpointer)"copyMi"); + + /* connect 'paste' menu item to the paste dialog event */ + g_signal_connect(G_OBJECT(pasteMi), "activate", G_CALLBACK(paste), (gpointer)"pasteMi"); + + /* connect 'paste special' menu item to the paste_special dialog event */ + g_signal_connect(G_OBJECT(pasteSpecialMi), "activate", G_CALLBACK(paste_special), (gpointer)"pasteSpecialMi"); + + /* connect 'find' menu item to the find dialog event */ + g_signal_connect(G_OBJECT(findMi), "activate", G_CALLBACK(find), (gpointer)"findMi"); + + /* connect 'select all' menu item to the select_all dialog event */ + g_signal_connect(G_OBJECT(selectAllMi), "activate", G_CALLBACK(select_all), (gpointer)"selectAllMi"); + + /* connect 'invert selection' menu item to the invert_selection dialog event */ + g_signal_connect(G_OBJECT(invertSelectionMi), "activate", G_CALLBACK(invert_selection), (gpointer)"invertSelectionMi"); + /* connect 'preferences' menu item to the preferences dialog event */ - g_signal_connect(G_OBJECT(preferencesMi), "activate", G_CALLBACK(preferences), NULL); + g_signal_connect(G_OBJECT(preferencesMi), "activate", G_CALLBACK(preferences), (gpointer)"preferencesMi"); /* Action menu bar items */ actionsMi = gtk_menu_item_new_with_label("Actions"); @@ -431,25 +616,52 @@ int main(int argc, char *argv[]) gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); /* connect 'open image' menu item to the create welcomeage dialog event */ - g_signal_connect(G_OBJECT(openMi), "activate", G_CALLBACK(open_file), NULL); + g_signal_connect(G_OBJECT(openMi), "activate", G_CALLBACK(open_file), (gpointer)"openMi"); + + /* connect 'view' menu item to the file viewer dialog event */ + g_signal_connect(G_OBJECT(viewMi), "activate", G_CALLBACK(file_viewer), (gpointer)"viewMi"); /* connect 'disk image' menu item to the create disk image dialog event */ - g_signal_connect(G_OBJECT(diskImageMi), "activate", G_CALLBACK(create_disk_image), NULL); + g_signal_connect(G_OBJECT(diskImageMi), "activate", G_CALLBACK(create_disk_image), (gpointer)"diskImageMi"); + + /* connect 'add disk image' menu item to the add disk image dialog event */ + g_signal_connect(G_OBJECT(addDiskImageMi), "activate", G_CALLBACK(add_disk_image), (gpointer)"addDiskImageMi"); /* connect 'shrinkit archive' menu item to the new archive dialog event */ - g_signal_connect(G_OBJECT(shrinkItArchiveMi), "activate", G_CALLBACK(new_archive), NULL); + g_signal_connect(G_OBJECT(shrinkItArchiveMi), "activate", G_CALLBACK(new_archive), (gpointer)"shrinkItArchiveMi"); /* connect 'select volume' menu item to the open volume dialog event */ - g_signal_connect(G_OBJECT(openVolumeMi), "activate", G_CALLBACK(select_volume), NULL); + g_signal_connect(G_OBJECT(openVolumeMi), "activate", G_CALLBACK(select_volume), (gpointer)"openVolumeMi"); + + /* connect 'rename' menu item to the rename dialog event */ + g_signal_connect(G_OBJECT(renameMi), "activate", G_CALLBACK(rename_file), (gpointer)"renameMi"); + + /* connect 'delete' menu item to the delete dialog event */ + g_signal_connect(G_OBJECT(deleteMi), "activate", G_CALLBACK(delete_file), (gpointer)"deleteMi"); + + /* connect 'recompress' menu item to the recompress dialog event */ + g_signal_connect(G_OBJECT(recompressMi), "activate", G_CALLBACK(recompress_files), (gpointer)"recompressMi"); + + /* connect 'edit comment' menu item to the edit comment dialog event */ + g_signal_connect(G_OBJECT(editCommentMi), "activate", G_CALLBACK(edit_comment), (gpointer)"editCommentMi"); /* connect 'about' menu item to the about box event */ - g_signal_connect(G_OBJECT(aboutCalvadosMi), "activate", G_CALLBACK(show_about), NULL); + g_signal_connect(G_OBJECT(aboutCalvadosMi), "activate", G_CALLBACK(show_about), (gpointer)"aboutCalvadosMi"); /* connect 'disk sector viewer' menu item to the popup menu event */ - g_signal_connect(G_OBJECT(diskSectorViewerMi), "activate", G_CALLBACK(disk_sector_viewer_popup), NULL); + g_signal_connect(G_OBJECT(diskSectorViewerMi), "activate", G_CALLBACK(disk_sector_viewer_popup), (gpointer)"diskSectorViewerMi"); + + /* connect 'Select image convert' menu item to the select image conversions popup menu event */ + g_signal_connect(G_OBJECT(diskImageConverterMi), "activate", G_CALLBACK(select_image_convert), (gpointer)"diskImageConverterMi"); + + /* connect 'Select bulk disk image converter' menu item to the bulk disk image converter popup menu event */ + g_signal_connect(G_OBJECT(bulkDiskImageConverterMi), "activate", G_CALLBACK(bulk_disk_image_converter), (gpointer)"bulkDiskImageConverterMi"); + + /* connect 'Merge SST Images' menu item to the merge sst images popup menu event */ + g_signal_connect(G_OBJECT(mergeSSTImagesMi), "activate", G_CALLBACK(select_first_sst_image), (gpointer)"mergeSSTImagesMi"); /* Connect 'quit' menu item to the window's "destroy" event */ - g_signal_connect(G_OBJECT(quitMi), "activate", G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect(G_OBJECT(quitMi), "activate", G_CALLBACK(gtk_main_quit), (gpointer)"quitMi"); /* Create the tool bar */ toolbar = gtk_toolbar_new(); @@ -587,30 +799,69 @@ int main(int argc, char *argv[]) gtk_widget_set_tooltip_text(GTK_WIDGET(exitTb), "Exit"); /* Hook up the open image button to the open file dialog box */ - g_signal_connect(G_OBJECT(openTb), "clicked", G_CALLBACK(open_file), NULL); + g_signal_connect(G_OBJECT(openTb), "clicked", G_CALLBACK(open_file), (gpointer)"openTb"); /* Hook up the create disk image button to the create disk image dialog box */ - g_signal_connect(G_OBJECT(createDiskImageTb), "clicked", G_CALLBACK(create_disk_image), NULL); + g_signal_connect(G_OBJECT(createDiskImageTb), "clicked", G_CALLBACK(create_disk_image), (gpointer)"createDiskImageTb"); /* Hook up the new archive image button to the create disk image dialog box */ - g_signal_connect(G_OBJECT(newArchiveTb), "clicked", G_CALLBACK(new_archive), NULL); + g_signal_connect(G_OBJECT(newArchiveTb), "clicked", G_CALLBACK(new_archive), (gpointer)"newArchiveTb"); /* Hook up the open volume button to the select volume dialog box */ - g_signal_connect(G_OBJECT(openVolumeTb), "clicked", G_CALLBACK(select_volume), NULL); + g_signal_connect(G_OBJECT(openVolumeTb), "clicked", G_CALLBACK(select_volume), (gpointer)"openVolumeTb"); + + /* Hook up the print button to the print dialog box */ + g_signal_connect(G_OBJECT(printTb), "clicked", G_CALLBACK(print_page), (gpointer)window); + + /* Hook up the add files button to the add files dialog box */ + g_signal_connect(G_OBJECT(addFilesTb), "clicked", G_CALLBACK(add_files), (gpointer)"addFilesTb"); + + /* Hook up the add disk image button to the add disk image dialog box */ + g_signal_connect(G_OBJECT(addDiskImageTb), "clicked", G_CALLBACK(add_disk_image), (gpointer)"addDiskImageTb"); + + /* Hook up the view button to the file viewer dialog box */ + g_signal_connect(G_OBJECT(viewTb), "clicked", G_CALLBACK(file_viewer), (gpointer)"viewTb"); + + /* Hook up the extract files button to the extract files dialog box */ + g_signal_connect(G_OBJECT(extractTb), "clicked", G_CALLBACK(extract_files), (gpointer)"extractTb"); + + /* Hook up the test button to the test dialog box */ + g_signal_connect(G_OBJECT(testTb), "clicked", G_CALLBACK(test), (gpointer)"testTb"); + + /* Hook up the rename button to the rename dialog box */ + g_signal_connect(G_OBJECT(renameTb), "clicked", G_CALLBACK(rename_file), (gpointer)"renameTb"); + + /* Hook up the delete button to the delete dialog box */ + g_signal_connect(G_OBJECT(deleteTb), "clicked", G_CALLBACK(delete_file), (gpointer)"deleteTb"); + + /* Hook up the recompress button to the delete dialog box */ + g_signal_connect(G_OBJECT(recompressTb), "clicked", G_CALLBACK(recompress_files), (gpointer)"recompressTb"); + + /* Hook up the edit comment button to the edit comment dialog box */ + g_signal_connect(G_OBJECT(editCommentTb), "clicked", G_CALLBACK(edit_comment), (gpointer)"editCommentTb"); /* Hook up the disk sector viewer button to the disk sector viewer popup menu */ - g_signal_connect(G_OBJECT(diskSectorViewerTb), "clicked", G_CALLBACK(disk_sector_viewer_popup), NULL); + g_signal_connect(G_OBJECT(diskSectorViewerTb), "clicked", G_CALLBACK(disk_sector_viewer_popup), (gpointer)"diskSectorViewerTb"); + + /* Hook up the disk image converter button to the disk image converter dialog box */ + g_signal_connect(G_OBJECT(diskImageConverterTb), "clicked", G_CALLBACK(disk_image_converter), (gpointer)"diskImageConverterTb"); + + /* Hook up the volume copier button to the volume copier dialog box */ +/* FIXME */ + g_signal_connect(G_OBJECT(volumeCopierTb), "clicked", G_CALLBACK(select_volume), (gpointer)"volumeCopierTb"); + + /* Hook up the 'Select image convert' button item to the select image conversions dialog box */ + g_signal_connect(G_OBJECT(diskImageConverterTb), "clicked", G_CALLBACK(select_image_convert), (gpointer)"diskImageConverterTb"); + + /* Hook up the merge sst images button to the merge sst images dialog box */ + g_signal_connect(G_OBJECT(mergeSSTImagesTb), "clicked", G_CALLBACK(select_first_sst_image), (gpointer)"mergeSSTImagesTb"); /* Hook up the exit button to the quit function */ - g_signal_connect(G_OBJECT(exitTb), "clicked", G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect(G_OBJECT(exitTb), "clicked", G_CALLBACK(gtk_main_quit), (gpointer)"exitTb"); /* Add the tool bar to the vbox */ gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5); - /*button = gtk_button_new_with_label("Hello Window"); - gtk_container_add(GTK_CONTAINER(vbox), button); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_main_quit), NULL);*/ - /* Add the status bar */ statusbar = gtk_statusbar_new(); gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, TRUE, 0); diff --git a/calvados.h b/calvados.h index a4a983f..6b32963 100644 --- a/calvados.h +++ b/calvados.h @@ -6,12 +6,16 @@ * */ +/* Main window size */ #define WINDOW_WIDTH 1300 #define WINDOW_HEIGHT 725 +#define LIST_WIDTH 1280 +#define LIST_HEIGHT 705 +/* Prototypes */ void close_dialog(GtkWidget *widget, gpointer data); void closing_dialog(GtkWidget *widget, gpointer data); -void select_volume(); +void select_volume(GtkWidget *widget, gpointer data); void show_about(GtkWidget *widget, gpointer data); void disk_sector_viewer_popup(); void okfunc_create_disk_image(GtkWidget *widget, gpointer data); @@ -22,6 +26,44 @@ void create_disk_image(); void do_open_file(char *filename); void open_file(); void save_to_file(char *filename); +void do_new_archive(char *filename); void new_archive(); void preferences(); +void print_page(GtkWidget *widget, gpointer user_data); +void add_files(); +GtkWidget *create_radio(GtkWidget *box, GSList **group, char *rLabel); +void acceptfunc_add_files(GtkWidget *widget, gpointer data); +void help_func_add_files(GtkWidget *widget, gpointer data); +void extract_files(); +void extractfunc_extract_files(GtkWidget *widget, gpointer data); +void help_func_extract_files(GtkWidget *widget, gpointer data); +void disk_image_converter(GtkWidget *widget, gpointer data); +void do_image_converter(char *filename); +void do_add_files(char *filename); +void archive_info(); +void help_func_archive_info(GtkWidget *widget, gpointer data); +void delete_file(GtkWidget *widget, gpointer data); +void rename_file(GtkWidget *widget, gpointer data); +void select_first_sst_image(GtkWidget *widget, gpointer data); +void select_image_convert(GtkWidget *widget, gpointer data); +void recompress_files(GtkWidget *widget, gpointer data); +void show_error(GtkWidget *widget, gpointer data, char *message); +GtkWidget *display_image(GtkWidget *widget, gpointer data, GtkWidget *mw_box); +void file_viewer(GtkWidget *widget, gpointer data); +void donefunc_file_viewer(GtkWidget *widget, gpointer data); +void help_func_file_viewer(GtkWidget *widget, gpointer data); +void add_disk_image(GtkWidget *widget, gpointer data); +void test(GtkWidget *widget, gpointer data); +void edit_comment(GtkWidget *widget, gpointer data); +void findfunc_file_viewer(GtkWidget *widget, gpointer data); +void bulk_disk_image_converter(GtkWidget *widget, gpointer data); +void close_menu_item(GtkWidget *widget, gpointer data); +void save_changes(GtkWidget *widget, gpointer data); +void reopen_menu_item(GtkWidget *widget, gpointer data); +void copy_menu_item(GtkWidget *widget, gpointer data); +void paste(GtkWidget *widget, gpointer data); +void paste_special(GtkWidget *widget, gpointer data); +void find(GtkWidget *widget, gpointer data); +void select_all(GtkWidget *widget, gpointer data); +void invert_selection(GtkWidget *widget, gpointer data); diff --git a/close.c b/close.c new file mode 100644 index 0000000..90a716b --- /dev/null +++ b/close.c @@ -0,0 +1,15 @@ +#include + +/* + * + * close_menu_item() + * + * Close from the menu. + * + */ +void close_menu_item(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Close function goes here.\n"); +} + diff --git a/copy.c b/copy.c new file mode 100644 index 0000000..80fa731 --- /dev/null +++ b/copy.c @@ -0,0 +1,15 @@ +#include + +/* + * + * copy_menu_item() + * + * Copy from the menu. + * + */ +void copy_menu_item(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Copy function goes here.\n"); +} + diff --git a/create_disk_image.c b/create_disk_image.c index c4ef9bf..c14bc30 100644 --- a/create_disk_image.c +++ b/create_disk_image.c @@ -1,8 +1,73 @@ +#include #include #include +#include #include "calvados.h" +GtkWidget *allocateDOSTracksCb; +GtkWidget *diskVolumeEntry; +GtkWidget *prodosVolumeEntry; +GtkWidget *pascalVolumeEntry; +GtkWidget *hfsVolumeEntry; +GtkWidget *blocksEntry; +GtkWidget *blocksLabel; + +/* + * + * Grey out radio buttons, checkboxes and entries as appropriate + * for filesystem radio button group. + * + */ +void filesystemRbCallback(GtkWidget *widget, gpointer *data) +{ + if ((strcmp((char *)data, "dos32Rb") == 0) || + (strcmp((char *)data, "dos33Rb") == 0)) { + gtk_widget_set_sensitive(allocateDOSTracksCb, TRUE); + gtk_widget_set_sensitive(diskVolumeEntry, TRUE); + gtk_widget_set_sensitive(prodosVolumeEntry, FALSE); + gtk_widget_set_sensitive(pascalVolumeEntry, FALSE); + gtk_widget_set_sensitive(hfsVolumeEntry, FALSE); + } else if (strcmp((char *)data, "prodosRb") == 0) { + gtk_widget_set_sensitive(allocateDOSTracksCb, FALSE); + gtk_widget_set_sensitive(diskVolumeEntry, FALSE); + gtk_widget_set_sensitive(prodosVolumeEntry, TRUE); + gtk_widget_set_sensitive(pascalVolumeEntry, FALSE); + gtk_widget_set_sensitive(hfsVolumeEntry, FALSE); + } else if (strcmp((char *)data, "pascalRb") == 0) { + gtk_widget_set_sensitive(allocateDOSTracksCb, FALSE); + gtk_widget_set_sensitive(diskVolumeEntry, FALSE); + gtk_widget_set_sensitive(prodosVolumeEntry, FALSE); + gtk_widget_set_sensitive(pascalVolumeEntry, TRUE); + gtk_widget_set_sensitive(hfsVolumeEntry, FALSE); + } else if (strcmp((char *)data, "hfsRb") == 0) { + gtk_widget_set_sensitive(allocateDOSTracksCb, FALSE); + gtk_widget_set_sensitive(diskVolumeEntry, FALSE); + gtk_widget_set_sensitive(prodosVolumeEntry, FALSE); + gtk_widget_set_sensitive(pascalVolumeEntry, FALSE); + gtk_widget_set_sensitive(hfsVolumeEntry, TRUE); + } else if (strcmp((char *)data, "blankRb") == 0) { + gtk_widget_set_sensitive(allocateDOSTracksCb, FALSE); + gtk_widget_set_sensitive(diskVolumeEntry, FALSE); + gtk_widget_set_sensitive(prodosVolumeEntry, FALSE); + gtk_widget_set_sensitive(pascalVolumeEntry, FALSE); + gtk_widget_set_sensitive(hfsVolumeEntry, FALSE); + } +} + + +void newDiskSizeRbCallback(GtkWidget *widget, gpointer *data) +{ + if (strcmp((char *)data, "specifyRb") == 0) { + gtk_widget_set_sensitive(blocksEntry, TRUE); + gtk_widget_set_sensitive(blocksLabel, TRUE); + } else { + gtk_widget_set_sensitive(blocksEntry, FALSE); + gtk_widget_set_sensitive(blocksLabel, FALSE); + } +} + + /* * * create_disk_image() @@ -12,7 +77,7 @@ */ void create_disk_image() { - GtkWidget *dialog_window; + GtkWidget *dialog; GtkWidget *ok_button; GtkWidget *cancel_button; GtkWidget *help_button; @@ -37,6 +102,7 @@ void create_disk_image() GtkWidget *pascalRb; GtkWidget *hfsRb; GtkWidget *blankRb; + GSList *filesystemRbGroup = NULL; GtkWidget *s140kRb; GtkWidget *s800kRb; GtkWidget *s14MRb; @@ -44,38 +110,37 @@ void create_disk_image() GtkWidget *s16MBRb; GtkWidget *s20MBRb; GtkWidget *s32MBRb; - GtkWidget *specifyRb; - GtkWidget *blocksEntry; - GtkWidget *blocksLabel; GtkWidget *specifyHbox; - GtkWidget *allocateDOSTracksCb; + GtkWidget *specifyRb; + GSList *newDiskSizeRbGroup = NULL; + /*GtkWidget *allocateDOSTracksCb;*/ GtkWidget *diskVolumeLabel; - GtkWidget *diskVolumeEntry; + /*GtkWidget *diskVolumeEntry;*/ GtkWidget *diskVolumeHbox; GtkWidget *prodosVolumeLabel; - GtkWidget *prodosVolumeEntry; + /*GtkWidget *prodosVolumeEntry;*/ GtkWidget *pascalVolumeLabel; - GtkWidget *pascalVolumeEntry; + /*GtkWidget *pascalVolumeEntry;*/ GtkWidget *hfsVolumeLabel; - GtkWidget *hfsVolumeEntry; + /*GtkWidget *hfsVolumeEntry;*/ /* --- Create the dialog --- */ - dialog_window = gtk_dialog_new(); + dialog = gtk_dialog_new(); /* --- Trap the window close signal to release the grab --- */ - gtk_signal_connect(GTK_OBJECT(dialog_window), "destroy", + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", GTK_SIGNAL_FUNC(closing_dialog), - &dialog_window); + &dialog); /* --- Set the title --- */ - gtk_window_set_title(GTK_WINDOW(dialog_window), "Create Disk Image"); + gtk_window_set_title(GTK_WINDOW(dialog), "Create Disk Image"); /* --- Add a small border --- */ - gtk_container_border_width(GTK_CONTAINER(dialog_window), 5); + gtk_container_border_width(GTK_CONTAINER(dialog), 5); /* Two columns top portion of dialog vbox */ hbox1 = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->vbox), hbox1, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox1, TRUE, TRUE, 0); gtk_widget_show(hbox1); @@ -138,68 +203,36 @@ void create_disk_image() gtk_container_add(GTK_CONTAINER(hfsOptionsFrame), hfsOptionsVbox); gtk_widget_show(hfsOptionsVbox); - dos32Rb = gtk_radio_button_new_with_label(NULL, "DOS 3.2 (13-sector)"); - dos33Rb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(dos32Rb), "DOS 3.3"); - prodosRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(dos33Rb), "ProDOS"); - pascalRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(prodosRb), "Pascal"); - hfsRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pascalRb), "HFS"); - blankRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(hfsRb), "Blank"); - - gtk_box_pack_start(GTK_BOX(filesystemVbox), dos32Rb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(filesystemVbox), dos33Rb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(filesystemVbox), prodosRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(filesystemVbox), pascalRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(filesystemVbox), hfsRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(filesystemVbox), blankRb, TRUE, TRUE, 0); - - gtk_widget_show(dos32Rb); - gtk_widget_show(dos33Rb); - gtk_widget_show(prodosRb); - gtk_widget_show(pascalRb); - gtk_widget_show(hfsRb); - gtk_widget_show(blankRb); - - s140kRb = gtk_radio_button_new_with_label(NULL, "140KB (5.25\" floppy)"); - s800kRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(s140kRb), "800KB (3.5\" floppy)"); - s14MRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(s800kRb), "1.4MB (3.5\" PC floppy)"); - s5MBRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(s14MRb), "5MB"); - s16MBRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(s5MBRb), "16MB"); - s20MBRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(s16MBRb), "20MB"); - s32MBRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(s20MBRb), "32MB (largest ProDOS volume)"); - specifyRb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(s32MBRb), "Specify size:"); + dos32Rb = create_radio(filesystemVbox, &filesystemRbGroup, "DOS 3.2 (13-sector)"); + dos33Rb = create_radio(filesystemVbox, &filesystemRbGroup, "DOS 3.3"); + prodosRb = create_radio(filesystemVbox, &filesystemRbGroup, "ProDOS"); + pascalRb = create_radio(filesystemVbox, &filesystemRbGroup, "Pascal"); + hfsRb = create_radio(filesystemVbox, &filesystemRbGroup, "HFS"); + blankRb = create_radio(filesystemVbox, &filesystemRbGroup, "Blank"); specifyHbox = gtk_hbox_new(FALSE, 0); + gtk_widget_show(specifyHbox); + + s140kRb = create_radio(newDiskSizeVbox, &newDiskSizeRbGroup, "140KB (5.25\" floppy)"); + s800kRb = create_radio(newDiskSizeVbox, &newDiskSizeRbGroup, "800KB (3.5\" floppy)"); + s14MRb = create_radio(newDiskSizeVbox, &newDiskSizeRbGroup, "1.4MB (3.5\" PC floppy)"); + s5MBRb = create_radio(newDiskSizeVbox, &newDiskSizeRbGroup, "5MB"); + s16MBRb = create_radio(newDiskSizeVbox, &newDiskSizeRbGroup, "16MB"); + s20MBRb = create_radio(newDiskSizeVbox, &newDiskSizeRbGroup, "20MB"); + s32MBRb = create_radio(newDiskSizeVbox, &newDiskSizeRbGroup, "32MB (largest ProDOS volume)"); + specifyRb = create_radio(specifyHbox, &newDiskSizeRbGroup, "Specify size:"); blocksEntry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(blocksEntry), 8); + gtk_box_pack_start(GTK_BOX(specifyHbox), blocksEntry, TRUE, TRUE, 0); + gtk_widget_show(blocksEntry); blocksLabel = gtk_label_new(" blocks"); gtk_misc_set_alignment(GTK_MISC(blocksLabel), 0, 0.5); - - gtk_box_pack_start(GTK_BOX(specifyHbox), specifyRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(specifyHbox), blocksEntry, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(specifyHbox), blocksLabel, TRUE, TRUE, 0); - - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), s140kRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), s800kRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), s14MRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), s5MBRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), s16MBRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), s20MBRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), s32MBRb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), specifyHbox, TRUE, TRUE, 0); - - gtk_widget_show(s140kRb); - gtk_widget_show(s800kRb); - gtk_widget_show(s14MRb); - gtk_widget_show(s5MBRb); - gtk_widget_show(s16MBRb); - gtk_widget_show(s20MBRb); - gtk_widget_show(s32MBRb); - gtk_widget_show(specifyRb); - gtk_widget_show(blocksEntry); gtk_widget_show(blocksLabel); - gtk_widget_show(specifyHbox); + + gtk_box_pack_start(GTK_BOX(newDiskSizeVbox), specifyHbox, TRUE, TRUE, 0); allocateDOSTracksCb = gtk_check_button_new_with_label("Allocate DOS tracks"); @@ -258,6 +291,46 @@ void create_disk_image() gtk_widget_show(hfsVolumeLabel); gtk_widget_show(hfsVolumeEntry); + /* Set default selections. */ + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(prodosRb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(s140kRb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(allocateDOSTracksCb), TRUE); + + gtk_entry_set_text(GTK_ENTRY(blocksEntry), "280"); + gtk_entry_set_text(GTK_ENTRY(diskVolumeEntry), "254"); + gtk_entry_set_text(GTK_ENTRY(prodosVolumeEntry), "NEW.DISK"); + gtk_entry_set_text(GTK_ENTRY(pascalVolumeEntry), "BLANK"); + gtk_entry_set_text(GTK_ENTRY(hfsVolumeEntry), "New Disk"); + + /* Set default sensitivity to prodos */ + gtk_widget_set_sensitive(allocateDOSTracksCb, FALSE); + gtk_widget_set_sensitive(diskVolumeEntry, FALSE); + gtk_widget_set_sensitive(prodosVolumeEntry, TRUE); + gtk_widget_set_sensitive(pascalVolumeEntry, FALSE); + gtk_widget_set_sensitive(hfsVolumeEntry, FALSE); + + /* Set up callbacks for filesystem frame */ + gtk_signal_connect(GTK_OBJECT(dos32Rb), "clicked", GTK_SIGNAL_FUNC(filesystemRbCallback), (gpointer)"dos32Rb"); + gtk_signal_connect(GTK_OBJECT(dos33Rb), "clicked", GTK_SIGNAL_FUNC(filesystemRbCallback), (gpointer)"dos33Rb"); + gtk_signal_connect(GTK_OBJECT(prodosRb), "clicked", GTK_SIGNAL_FUNC(filesystemRbCallback), (gpointer)"prodosRb"); + gtk_signal_connect(GTK_OBJECT(pascalRb), "clicked", GTK_SIGNAL_FUNC(filesystemRbCallback), (gpointer)"pascalRb"); + gtk_signal_connect(GTK_OBJECT(hfsRb), "clicked", GTK_SIGNAL_FUNC(filesystemRbCallback), (gpointer)"hfsRb"); + gtk_signal_connect(GTK_OBJECT(blankRb), "clicked", GTK_SIGNAL_FUNC(filesystemRbCallback), (gpointer)"blankRb"); + + /* Set up callbacks for new disk size frame */ + gtk_signal_connect(GTK_OBJECT(s140kRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"s140kRb"); + gtk_signal_connect(GTK_OBJECT(s800kRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"s800kRb"); + gtk_signal_connect(GTK_OBJECT(s14MRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"s14MRb"); + gtk_signal_connect(GTK_OBJECT(s5MBRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"s5MBRb"); + gtk_signal_connect(GTK_OBJECT(s16MBRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"s16MBRb"); + gtk_signal_connect(GTK_OBJECT(s20MBRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"s20MBRb"); + gtk_signal_connect(GTK_OBJECT(s32MBRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"s32MBRb"); + gtk_signal_connect(GTK_OBJECT(specifyRb), "clicked", GTK_SIGNAL_FUNC(newDiskSizeRbCallback), (gpointer)"specifyRb"); + + /* Set default sensitivity to not specify */ + gtk_widget_set_sensitive(blocksEntry, FALSE); + gtk_widget_set_sensitive(blocksLabel, FALSE); + /* * --- OK button */ @@ -267,13 +340,13 @@ void create_disk_image() gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", GTK_SIGNAL_FUNC(okfunc_create_disk_image), - dialog_window); + dialog); /* --- Allow "Cancel" to be a default --- */ GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); /* --- Add the OK button to the bottom hbox2 --- */ - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area), ok_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), ok_button, TRUE, TRUE, 0); /* --- Make the "OK" the default --- */ gtk_widget_grab_default(ok_button); @@ -290,13 +363,13 @@ void create_disk_image() gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", GTK_SIGNAL_FUNC(close_dialog), - dialog_window); + dialog); /* --- Allow "Cancel" to be a default --- */ GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); /* --- Add the "Cancel" button to the dialog --- */ - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area), cancel_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), cancel_button, TRUE, TRUE, 0); /* --- Make the button visible. --- */ gtk_widget_show(cancel_button); @@ -310,18 +383,18 @@ void create_disk_image() gtk_signal_connect(GTK_OBJECT(help_button), "clicked", GTK_SIGNAL_FUNC(help_func_create_disk_image), - dialog_window); + dialog); /* --- Add the "Help" button to the dialog --- */ - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), help_button, TRUE, TRUE, 0); /* --- Make the button visible. --- */ gtk_widget_show(help_button); /* --- Show the dialog --- */ - gtk_widget_show(dialog_window); + gtk_widget_show(dialog); /* --- Only this window can be used for now --- */ - gtk_grab_add(dialog_window); + gtk_grab_add(dialog); } diff --git a/create_radio.c b/create_radio.c new file mode 100644 index 0000000..61e3206 --- /dev/null +++ b/create_radio.c @@ -0,0 +1,29 @@ +#include + +#include "calvados.h" + +/* + * + * create_radio() + * + * Create a radio button. Handles putting them into groups. + * + */ +GtkWidget *create_radio(GtkWidget *box, GSList **group, char *rLabel) +{ + GtkWidget *radio; + + /* --- Get the radio button --- */ + radio = gtk_radio_button_new_with_label (*group, rLabel); + + *group = gtk_radio_button_group(GTK_RADIO_BUTTON(radio)); + + /* --- Pack the radio button into the vertical/horizontal box (box). --- */ + gtk_box_pack_start(GTK_BOX(box), radio, FALSE, FALSE, 10); + + /* --- Show the widget --- */ + gtk_widget_show(radio); + + return (radio); +} + diff --git a/delete_file.c b/delete_file.c new file mode 100644 index 0000000..ed7036b --- /dev/null +++ b/delete_file.c @@ -0,0 +1,28 @@ +#include + +#include "calvados.h" + +/* + * + * delete_file() + * + * Display yes no question dialog box for file deletion. + * + */ +void delete_file(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + + /*g_print("Delete file goes here.\n");*/ + + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + "Delete 1 file?"); + + gtk_window_set_title(GTK_WINDOW(dialog), "Delete?"); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); +} + diff --git a/disk_image_converter.c b/disk_image_converter.c new file mode 100644 index 0000000..b889e8a --- /dev/null +++ b/disk_image_converter.c @@ -0,0 +1,77 @@ +#include +#include + +#include "calvados.h" + +/* + * + * disk_image_converter() + * + * Disk image converter file dialog + * + */ +void disk_image_converter(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + gint res; + GtkFileFilter *diskImagesFilt; + GtkFileFilter *allFilesFilt; + + /* Filter for disk images */ + diskImagesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(diskImagesFilt, "Disk Images"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Hh][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Dd][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Ss][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Pp][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd]13"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.2[Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Ii][Bb]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Bb]2"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Rr][Aa][Ww]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Hh][Dd][Vv]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]6"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Dd][Dd]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Aa][Pp][Pp]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ff][Dd][Ii]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Ss][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Gg][Zz]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Zz][Ii][Pp]"); + + /* Filter for all files */ + allFilesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(allFilesFilt, "All Files"); + gtk_file_filter_add_pattern(allFilesFilt, "*"); + + /* Creae the file opener dialog */ + dialog = gtk_file_chooser_dialog_new("Select image to convert", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, + NULL); + + /* Add the filters */ + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), diskImagesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), allFilesFilt); + + /* Set disk images filter as default */ + gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), diskImagesFilt); + + res = gtk_dialog_run(GTK_DIALOG(dialog)); + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); + filename = gtk_file_chooser_get_filename(chooser); + do_image_converter(filename); + g_free(filename); + } + + gtk_widget_destroy(dialog); +} + diff --git a/disk_sector_viewer_popup.c b/disk_sector_viewer_popup.c index 17dd432..d0aa289 100644 --- a/disk_sector_viewer_popup.c +++ b/disk_sector_viewer_popup.c @@ -12,7 +12,7 @@ */ void disk_sector_viewer_popup() { - GtkWidget *dialog_window; + GtkWidget *dialog; GtkWidget *vbox; GtkWidget *openDiskButton; GtkWidget *openVolumeButton; @@ -20,22 +20,22 @@ void disk_sector_viewer_popup() GtkWidget *cancelButton; /* --- Create a dialog window --- */ - dialog_window = gtk_dialog_new(); + dialog = gtk_dialog_new(); /* --- Trap the destroy button --- */ - gtk_signal_connect(GTK_OBJECT(dialog_window), "destroy", + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), - &dialog_window); + &dialog); /* --- Add a title to the window --- */ - /*gtk_window_set_title(GTK_WINDOW(dialog_window), "Disk sector viewer");*/ - gtk_window_set_title(GTK_WINDOW(dialog_window), " "); + /*gtk_window_set_title(GTK_WINDOW(dialog), "Disk sector viewer");*/ + gtk_window_set_title(GTK_WINDOW(dialog), " "); /* --- Create a small border --- */ - gtk_container_border_width(GTK_CONTAINER(dialog_window), 5); + gtk_container_border_width(GTK_CONTAINER(dialog), 5); vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->vbox), vbox, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0); gtk_widget_show(vbox); /* @@ -48,7 +48,7 @@ void disk_sector_viewer_popup() /* --- Need to close the window if they press "ok" --- */ gtk_signal_connect(GTK_OBJECT(openDiskButton), "clicked", GTK_SIGNAL_FUNC(close_dialog), - dialog_window); + dialog); /* --- Add the button to the dialog --- */ gtk_box_pack_start(GTK_BOX(vbox), openDiskButton, TRUE, TRUE, 0); @@ -66,7 +66,7 @@ void disk_sector_viewer_popup() /* --- Need to close the window if they press "ok" --- */ gtk_signal_connect(GTK_OBJECT(openVolumeButton), "clicked", GTK_SIGNAL_FUNC(close_dialog), - dialog_window); + dialog); /* --- Add the button to the dialog --- */ gtk_box_pack_start(GTK_BOX(vbox), openVolumeButton, TRUE, TRUE, 0); @@ -84,7 +84,7 @@ void disk_sector_viewer_popup() /* --- Need to close the window if they press "ok" --- */ gtk_signal_connect(GTK_OBJECT(openArchiveButton), "clicked", GTK_SIGNAL_FUNC(close_dialog), - dialog_window); + dialog); /* --- Add the button to the dialog --- */ gtk_box_pack_start(GTK_BOX(vbox), openArchiveButton, TRUE, TRUE, 0); @@ -102,7 +102,7 @@ void disk_sector_viewer_popup() /* --- Need to close the window if they press "ok" --- */ gtk_signal_connect(GTK_OBJECT(cancelButton), "clicked", GTK_SIGNAL_FUNC(close_dialog), - dialog_window); + dialog); /* --- Allow it to be the default button --- */ GTK_WIDGET_SET_FLAGS(cancelButton, GTK_CAN_DEFAULT); @@ -117,8 +117,8 @@ void disk_sector_viewer_popup() gtk_widget_show(cancelButton); /* --- Make the dialog visible --- */ - gtk_widget_show(dialog_window); + gtk_widget_show(dialog); - gtk_grab_add(dialog_window); + gtk_grab_add(dialog); } diff --git a/do_add_files.c b/do_add_files.c new file mode 100644 index 0000000..2059247 --- /dev/null +++ b/do_add_files.c @@ -0,0 +1,17 @@ +#include +#include + +#include "calvados.h" + +/* + * + * do_add_files() + * + * Actually add files + * + */ +void do_add_files(char *filename) +{ + g_print("Do add files goes here.\n"); +} + diff --git a/do_image_converter.c b/do_image_converter.c new file mode 100644 index 0000000..f2d838d --- /dev/null +++ b/do_image_converter.c @@ -0,0 +1,18 @@ +#include +#include + +#include "calvados.h" + +/* + * + * do_image_converter() + * + * Convert an image. + * + */ +void do_image_converter(char *filename) +{ + /* --- Display message --- */ + g_print("Image converter function goes here.\n"); +} + diff --git a/do_new_archive.c b/do_new_archive.c new file mode 100644 index 0000000..778653c --- /dev/null +++ b/do_new_archive.c @@ -0,0 +1,17 @@ +#include +#include + +#include "calvados.h" + +/* + * + * do_new_archive() + * + * Actually create a new archive + * + */ +void do_new_archive(char *filename) +{ + g_print("Do new archive goes here.\n"); +} + diff --git a/do_open_file.c b/do_open_file.c index fcf09f8..d7b3bfc 100644 --- a/do_open_file.c +++ b/do_open_file.c @@ -12,7 +12,7 @@ */ void do_open_file(char *filename) { - /* --- Display message --- */ - g_print("Open file function goes here.\n"); + /* --- Display message --- */ + g_print("Open file function goes here.\n"); } diff --git a/donefunc_file_viewer.c b/donefunc_file_viewer.c new file mode 100644 index 0000000..0352c71 --- /dev/null +++ b/donefunc_file_viewer.c @@ -0,0 +1,23 @@ +#include +#include + +#include "calvados.h" + +/* + * + * donefunc_file_viewer() + * + * Done Function for file viewer + * + * Show that the "Done" button was pressed + * + */ +void donefunc_file_viewer(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("File viewer done function goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); +} + diff --git a/edit_comment.c b/edit_comment.c new file mode 100644 index 0000000..8291eb3 --- /dev/null +++ b/edit_comment.c @@ -0,0 +1,101 @@ +#include + +#include "calvados.h" + +/* + * + * edit_comment() + * + * Edit a comment about a file. + * + */ +void edit_comment(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + GtkWidget *ok_button; + GtkWidget *cancel_button; + GtkWidget *help_button; + + g_print("edit comment goes here\n"); + + /* --- Create the dialog --- */ + dialog = gtk_dialog_new(); + + /* --- Trap the window close signal to release the grab --- */ + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + GTK_SIGNAL_FUNC(closing_dialog), + &dialog); + + /* --- Set the title --- */ + gtk_window_set_title(GTK_WINDOW(dialog), "Edit Comment"); + + /* --- Add a small border --- */ + gtk_container_border_width(GTK_CONTAINER(dialog), 5); + + /* + * --- OK button + */ + + /* --- Create the "OK" button --- */ + ok_button = gtk_button_new_with_label("OK"); + + gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(okfunc_select_volume), + dialog); + + /* --- Allow "Cancel" to be a default --- */ + GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); + + /* --- Add the OK button to the bottom hbox2 --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), ok_button, TRUE, TRUE, 0); + + /* --- Make the "OK" the default --- */ + gtk_widget_grab_default(ok_button); + + /* --- Make the button visible --- */ + gtk_widget_show(ok_button); + + /* + * --- Cancel button + */ + + /* --- Create the "Cancel" button --- */ + cancel_button = gtk_button_new_with_label("Cancel"); + + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(close_dialog), + dialog); + + /* --- Allow "Cancel" to be a default --- */ + GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + + /* --- Add the "Cancel" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), cancel_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(cancel_button); + + /* + * --- Help button + */ + + /* --- Create the "Help" button --- */ + help_button = gtk_button_new_with_label("Help"); + + gtk_signal_connect(GTK_OBJECT(help_button), "clicked", + GTK_SIGNAL_FUNC(help_func_select_volume), + dialog); + + /* --- Add the "Help" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), help_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(help_button); + + /* --- Show the dialog --- */ + gtk_widget_show(dialog); + + /* --- Only this window can be used for now --- */ + gtk_grab_add(dialog); +} + diff --git a/extract_files.c b/extract_files.c new file mode 100644 index 0000000..66ba0a4 --- /dev/null +++ b/extract_files.c @@ -0,0 +1,379 @@ +#include +#include +#include +#include +#include +#include + +#include "calvados.h" + +GtkWidget *extractAllFilesRb; +GtkWidget *convertToNonAppleIIFormatsCb; +GtkWidget *extractDisksAs2MGCb; +GtkWidget *dontConvertTextFilesRb; +GtkWidget *autoDetectConvertFilesWithRb; +GtkWidget *stripHighASCIIFilesCb; +GtkWidget *dataForksCb; +GtkWidget *resourceForksCb; +GtkWidget *diskImagesCb; +GtkWidget *addFileAttributePreservationCb; +GtkWidget *addTypeExtensionCb; + +/* FIXME -- need to add a callback to the folder chooser to un-grey extract selected files radio button when there are selections */ + +void filesToExtractRbCallback(GtkWidget *widget, gpointer *data) +{ + g_print("clicked %s\n", (char *)data); +} + + +void textConversionRbCallback2(GtkWidget *widget, gpointer *data) +{ + /*g_print("clicked %s\n", (char *)data);*/ + + if (strcmp((char *)data, "dontConvertTextFilesRb") == 0) { + gtk_widget_set_sensitive(stripHighASCIIFilesCb, FALSE); + } else { + gtk_widget_set_sensitive(stripHighASCIIFilesCb, TRUE); + } +} + + +void configureToPreserveAppleIIFormatsCallback(GtkWidget *widget, gpointer *data) +{ + g_print("clicked %s\n", (char *)data); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(extractAllFilesRb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(convertToNonAppleIIFormatsCb), FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(extractDisksAs2MGCb), FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(dontConvertTextFilesRb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(autoDetectConvertFilesWithRb), FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stripHighASCIIFilesCb), FALSE); + gtk_widget_set_sensitive(stripHighASCIIFilesCb, FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(dataForksCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(resourceForksCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(diskImagesCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(addFileAttributePreservationCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(addTypeExtensionCb), FALSE); +} + + +void configureForEasyAccessInLinuxCallback(GtkWidget *widget, gpointer *data) +{ + g_print("clicked %s\n", (char *)data); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(extractAllFilesRb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(convertToNonAppleIIFormatsCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(extractDisksAs2MGCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(dontConvertTextFilesRb), FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(autoDetectConvertFilesWithRb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stripHighASCIIFilesCb), TRUE); + gtk_widget_set_sensitive(stripHighASCIIFilesCb, TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(dataForksCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(resourceForksCb), FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(diskImagesCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(addFileAttributePreservationCb), FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(addTypeExtensionCb), TRUE); +} + + +/* + * + * extract_files() + * + * Extract files dialog box + * + */ +void extract_files() +{ + GtkWidget *dialog; + GtkWidget *chooser_dialog; + GtkWidget *hbox1; + GtkWidget *vboxl; + GtkWidget *vboxr; + GtkWidget *hbox2; + GtkWidget *folderLabel; + GtkWidget *folderFileChooserButton; + GtkWidget *filesToExtractFrame; + GtkWidget *filesToExtractVbox; + GSList *filesToExtractRbGroup = NULL; + GtkWidget *extractNSelectedFilesRb; + GtkWidget *formatConversionFrame; + GtkWidget *formatConversionVbox; + GtkWidget *textConversionFrame; + GtkWidget *textConversionVbox; + GSList *textConversionRbGroup = NULL; + GtkWidget *convertTextFilesByFileTypeRb; + GtkWidget *convertAllFilesRb; + GtkWidget *partsToExtractFrame; + GtkWidget *partsToExtractVbox; + GtkWidget *filenamesFrame; + GtkWidget *filenamesVbox; + GtkWidget *miscellaneousFrame; + GtkWidget *miscellaneousVbox; + GtkWidget *stripFolderNamesCb; + GtkWidget *overwriteExistingFilesCb; + GtkWidget *configureToPreserveAppleIIFormatsButton; + GtkWidget *configureForEasyAccessInLinuxButton; + GtkWidget *extract_button; + GtkWidget *cancel_button; + GtkWidget *help_button; + /* For getting user's home directory */ + struct passwd *pw; + const char *homedir; + + /* Get their home directory for use in folder picker */ + if ((homedir = getenv("HOME")) == NULL) { + pw = getpwuid(getuid()); + homedir = pw->pw_dir; + } + + g_print("homedir=%s", homedir); + + /* --- Create the dialog --- */ + dialog = gtk_dialog_new(); + + /* --- Trap the window close signal to release the grab --- */ + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + GTK_SIGNAL_FUNC(closing_dialog), + &dialog); + + /* --- Set the title --- */ + gtk_window_set_title(GTK_WINDOW(dialog), "Extract Files"); + + /* --- Add a small border --- */ + gtk_container_border_width(GTK_CONTAINER(dialog), 5); + + /* Create file chooser dialog */ + chooser_dialog = gtk_file_chooser_dialog_new("Select folder", + NULL, + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, + NULL); + + folderLabel = gtk_label_new("Folder where files will be extracted:"); + gtk_widget_show(folderLabel); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), folderLabel, TRUE, TRUE, 0); + + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser_dialog), homedir); + + folderFileChooserButton = gtk_file_chooser_button_new_with_dialog(chooser_dialog); + gtk_widget_show(folderFileChooserButton); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), folderFileChooserButton, TRUE, TRUE, 0); + + hbox1 = gtk_hbox_new(FALSE, 0); + gtk_widget_show(hbox1); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox1, TRUE, TRUE, 0); + + vboxl = gtk_vbox_new(FALSE, 0); + gtk_widget_show(vboxl); + gtk_box_pack_start(GTK_BOX(hbox1), vboxl, TRUE, TRUE, 0); + + vboxr = gtk_vbox_new(FALSE, 0); + gtk_widget_show(vboxr); + gtk_box_pack_start(GTK_BOX(hbox1), vboxr, TRUE, TRUE, 0); + + filesToExtractFrame = gtk_frame_new("Files to extract"); + gtk_widget_show(filesToExtractFrame); + gtk_box_pack_start(GTK_BOX(vboxl), filesToExtractFrame, TRUE, TRUE, 0); + + filesToExtractVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(filesToExtractVbox); + gtk_container_add(GTK_CONTAINER(filesToExtractFrame), filesToExtractVbox); + + extractNSelectedFilesRb = create_radio(filesToExtractVbox, &filesToExtractRbGroup, "Extract N selected files"); + extractAllFilesRb = create_radio(filesToExtractVbox, &filesToExtractRbGroup, "Extract all files"); + + /* Set default selected item */ + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(extractAllFilesRb), TRUE); + + /* Default grey out extract selected files radio button */ + gtk_widget_set_sensitive(extractNSelectedFilesRb, FALSE); + + /* Set up callbacks for files to extract frame */ + gtk_signal_connect(GTK_OBJECT(extractNSelectedFilesRb), "clicked", GTK_SIGNAL_FUNC(filesToExtractRbCallback), (gpointer)"extractNSelectedFilesRb"); + gtk_signal_connect(GTK_OBJECT(extractAllFilesRb), "clicked", GTK_SIGNAL_FUNC(filesToExtractRbCallback), (gpointer)"extractAllFilesRb"); + + formatConversionFrame = gtk_frame_new("Format conversion"); + gtk_widget_show(formatConversionFrame); + gtk_box_pack_start(GTK_BOX(vboxl), formatConversionFrame, TRUE, TRUE, 0); + + formatConversionVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(formatConversionVbox); + gtk_container_add(GTK_CONTAINER(formatConversionFrame), formatConversionVbox); + + convertToNonAppleIIFormatsCb = gtk_check_button_new_with_label("Convert to non-Apple II formats"); + gtk_widget_show(convertToNonAppleIIFormatsCb); + gtk_box_pack_start(GTK_BOX(formatConversionVbox), convertToNonAppleIIFormatsCb, TRUE, TRUE, 0); + extractDisksAs2MGCb = gtk_check_button_new_with_label("Extract disks as 2MG"); + gtk_widget_show(extractDisksAs2MGCb); + gtk_box_pack_start(GTK_BOX(formatConversionVbox), extractDisksAs2MGCb, TRUE, TRUE, 0); + + textConversionFrame = gtk_frame_new("Text conversion"); + gtk_widget_show(textConversionFrame); + gtk_box_pack_start(GTK_BOX(vboxl), textConversionFrame, TRUE, TRUE, 0); + + textConversionVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(textConversionVbox); + gtk_container_add(GTK_CONTAINER(textConversionFrame), textConversionVbox); + + dontConvertTextFilesRb = create_radio(textConversionVbox, &textConversionRbGroup, "Don't convert text files"); + convertTextFilesByFileTypeRb = create_radio(textConversionVbox, &textConversionRbGroup, "Convert text files by file type"); + autoDetectConvertFilesWithRb = create_radio(textConversionVbox, &textConversionRbGroup, "Auto-detect & convert files with"); + convertAllFilesRb = create_radio(textConversionVbox, &textConversionRbGroup, "Convert All files"); + stripHighASCIIFilesCb = gtk_check_button_new_with_label("Strip \"high ASCII\" files"); + gtk_widget_show(stripHighASCIIFilesCb); + gtk_box_pack_start(GTK_BOX(textConversionVbox), stripHighASCIIFilesCb, TRUE, TRUE, 0); + + /* Set default active and selected items */ + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(dontConvertTextFilesRb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stripHighASCIIFilesCb), TRUE); + + /* Default grey out strip high ascii files checkbox */ + gtk_widget_set_sensitive(stripHighASCIIFilesCb, FALSE); + + /* Set up callbacks for text conversion frame */ + gtk_signal_connect(GTK_OBJECT(dontConvertTextFilesRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback2), (gpointer)"dontConvertTextFilesRb"); + gtk_signal_connect(GTK_OBJECT(convertTextFilesByFileTypeRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback2), (gpointer)"convertTextFilesByFileTypeRb"); + gtk_signal_connect(GTK_OBJECT(autoDetectConvertFilesWithRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback2), (gpointer)"autoDetectConvertFilesWithRb"); + gtk_signal_connect(GTK_OBJECT(convertAllFilesRb), "clicked", GTK_SIGNAL_FUNC(textConversionRbCallback2), (gpointer)"convertAllFilesRb"); + + partsToExtractFrame = gtk_frame_new("Parts to extract"); + gtk_widget_show(partsToExtractFrame); + gtk_box_pack_start(GTK_BOX(vboxr), partsToExtractFrame, TRUE, TRUE, 0); + + partsToExtractVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(partsToExtractVbox); + gtk_container_add(GTK_CONTAINER(partsToExtractFrame), partsToExtractVbox); + + dataForksCb = gtk_check_button_new_with_label("Data forks"); + gtk_widget_show(dataForksCb); + gtk_box_pack_start(GTK_BOX(partsToExtractVbox), dataForksCb, TRUE, TRUE, 0); + resourceForksCb = gtk_check_button_new_with_label("Resource forks"); + gtk_widget_show(resourceForksCb); + gtk_box_pack_start(GTK_BOX(partsToExtractVbox), resourceForksCb, TRUE, TRUE, 0); + diskImagesCb = gtk_check_button_new_with_label("Disk images"); + gtk_widget_show(diskImagesCb); + gtk_box_pack_start(GTK_BOX(partsToExtractVbox), diskImagesCb, TRUE, TRUE, 0); + + /* Set default selected items */ + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(dataForksCb), TRUE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(diskImagesCb), TRUE); + + filenamesFrame = gtk_frame_new("Filenames"); + gtk_widget_show(filenamesFrame); + gtk_box_pack_start(GTK_BOX(vboxr), filenamesFrame, TRUE, TRUE, 0); + + filenamesVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(filenamesVbox); + gtk_container_add(GTK_CONTAINER(filenamesFrame), filenamesVbox); + + addFileAttributePreservationCb = gtk_check_button_new_with_label("Add file attribute preservation"); + gtk_widget_show(addFileAttributePreservationCb); + gtk_box_pack_start(GTK_BOX(filenamesVbox), addFileAttributePreservationCb, TRUE, TRUE, 0); + addTypeExtensionCb = gtk_check_button_new_with_label("Add type extension"); + gtk_widget_show(addTypeExtensionCb); + gtk_box_pack_start(GTK_BOX(filenamesVbox), addTypeExtensionCb, TRUE, TRUE, 0); + + /* Set default selected item */ + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(addFileAttributePreservationCb), TRUE); + + miscellaneousFrame = gtk_frame_new("Miscellaneous"); + gtk_widget_show(miscellaneousFrame); + gtk_box_pack_start(GTK_BOX(vboxr), miscellaneousFrame, TRUE, TRUE, 0); + + miscellaneousVbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(miscellaneousVbox); + gtk_container_add(GTK_CONTAINER(miscellaneousFrame), miscellaneousVbox); + + stripFolderNamesCb = gtk_check_button_new_with_label("Strip folder names"); + gtk_widget_show(stripFolderNamesCb); + gtk_box_pack_start(GTK_BOX(miscellaneousVbox), stripFolderNamesCb, TRUE, TRUE, 0); + overwriteExistingFilesCb = gtk_check_button_new_with_label("Overwrite existing files"); + gtk_widget_show(overwriteExistingFilesCb); + gtk_box_pack_start(GTK_BOX(miscellaneousVbox), overwriteExistingFilesCb, TRUE, TRUE, 0); + + hbox2 = gtk_hbox_new(FALSE, 0); + gtk_widget_show(hbox2); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox2, TRUE, TRUE, 0); + + configureToPreserveAppleIIFormatsButton = gtk_button_new_with_label("Configure to preserve Apple II formats"); + gtk_widget_show(configureToPreserveAppleIIFormatsButton); + gtk_box_pack_start(GTK_BOX(hbox2), configureToPreserveAppleIIFormatsButton, TRUE, TRUE, 0); + + gtk_signal_connect(GTK_OBJECT(configureToPreserveAppleIIFormatsButton), "clicked", GTK_SIGNAL_FUNC(configureToPreserveAppleIIFormatsCallback), (gpointer)"configureToPreserveAppleIIFormatsButton"); + + configureForEasyAccessInLinuxButton = gtk_button_new_with_label("Configure for easy access in Linux"); + gtk_widget_show(configureForEasyAccessInLinuxButton); + gtk_box_pack_start(GTK_BOX(hbox2), configureForEasyAccessInLinuxButton, TRUE, TRUE, 0); + + gtk_signal_connect(GTK_OBJECT(configureForEasyAccessInLinuxButton), "clicked", GTK_SIGNAL_FUNC(configureForEasyAccessInLinuxCallback), (gpointer)"configureForEasyAccessInLinuxButton"); + + /* + * --- Extract button + */ + + /* --- Create the "Extract" button --- */ + extract_button = gtk_button_new_with_label("Extract"); + + gtk_signal_connect(GTK_OBJECT(extract_button), "clicked", + GTK_SIGNAL_FUNC(extractfunc_extract_files), + dialog); + + /* --- Allow "Extract" to be a default --- */ + GTK_WIDGET_SET_FLAGS(extract_button, GTK_CAN_DEFAULT); + + /* --- Add the Extract button to the bottom hbox2 --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), extract_button, TRUE, TRUE, 0); + + /* --- Make the "Extract" the default --- */ + gtk_widget_grab_default(extract_button); + + /* --- Make the button visible --- */ + gtk_widget_show(extract_button); + + /* + * --- Cancel button + */ + + /* --- Create the "Cancel" button --- */ + cancel_button = gtk_button_new_with_label("Cancel"); + + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(close_dialog), + dialog); + + /* --- Allow "Cancel" to be a default --- */ + GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + + /* --- Add the "Cancel" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), cancel_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(cancel_button); + + /* + * --- Help button + */ + + /* --- Create the "Help" button --- */ + help_button = gtk_button_new_with_label("Help"); + + gtk_signal_connect(GTK_OBJECT(help_button), "clicked", + GTK_SIGNAL_FUNC(help_func_extract_files), + dialog); + + /* --- Add the "Help" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), help_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(help_button); + + /* --- Show the dialog --- */ + gtk_widget_show(dialog); + + /* --- Only this window can be used for now --- */ + gtk_grab_add(dialog); +} + diff --git a/extractfunc_extract_files.c b/extractfunc_extract_files.c new file mode 100644 index 0000000..dbebfba --- /dev/null +++ b/extractfunc_extract_files.c @@ -0,0 +1,23 @@ +#include +#include + +#include "calvados.h" + +/* + * + * extractunc_extract_files() + * + * Extract Function for extract files + * + * Show that the "Extract" button was pressed + * + */ +void extractfunc_extract_files(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Extract function goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); +} + diff --git a/file_viewer.c b/file_viewer.c new file mode 100644 index 0000000..911b385 --- /dev/null +++ b/file_viewer.c @@ -0,0 +1,178 @@ +#include + +#include "calvados.h" + +/* + * + * file_viewer() + * + * Display file viewer dialog box + * + */ +void file_viewer(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + GtkWidget *scrolled_window; + GtkWidget *table; + GtkWidget *hbox1; + GtkWidget *dataForkRb; + GtkWidget *resourceForkRb; + GtkWidget *commentRb; + GtkWidget *fileCombo; + GtkWidget *next_button; + GtkWidget *prev_button; + GtkWidget *best_button; + GtkWidget *raw_button; + GtkWidget *find_button; + GtkWidget *hbox2; + GtkWidget *print_button; + GtkWidget *font_button; + GtkWidget *done_button; + GtkWidget *help_button; + + g_print("File viewer dialog box goes here\n"); + + /* --- Create the dialog --- */ + dialog = gtk_dialog_new(); + + /* --- Trap the window close signal to release the grab --- */ + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + GTK_SIGNAL_FUNC(closing_dialog), + &dialog); + + /* --- Set the title --- */ + gtk_window_set_title(GTK_WINDOW(dialog), "File Viewer"); +/* FIXME -- need to put filename in title. */ + + /* --- Add a small border --- */ + gtk_container_border_width(GTK_CONTAINER(dialog), 5); + + /* create a new scrolled window. */ + scrolled_window = gtk_scrolled_window_new(NULL, NULL); + + gtk_container_set_border_width(GTK_CONTAINER(scrolled_window), 10); + + /* the policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. + * GTK_POLICY_AUTOMATIC will automatically decide whether you need + * scrollbars, whereas GTK_POLICY_ALWAYS will always leave the scrollbars + * there. The first one is the horizontal scrollbar, the second, + * the vertical. */ + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + /* The dialog window is created with a vbox packed into it. */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show(scrolled_window); + +/* FIXME -- should display the file here */ + /* create a table of 10 by 10 squares. */ + table = gtk_table_new(10, 10, FALSE); + + /* set the spacing to 10 on x and 10 on y */ + gtk_table_set_row_spacings(GTK_TABLE(table), 10); + gtk_table_set_col_spacings(GTK_TABLE(table), 10); + + /* pack the table into the scrolled window */ + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), table); + gtk_widget_show(table); + + hbox1 = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), hbox1, TRUE, TRUE, 0); + gtk_widget_show(hbox1); + + hbox2 = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox1), hbox2, TRUE, TRUE, 0); + gtk_widget_show(hbox2); + + /* + * --- Done button + */ + + /* --- Create the "Done" button --- */ + done_button = gtk_button_new_with_label("Done"); + + gtk_signal_connect(GTK_OBJECT(done_button), "clicked", + GTK_SIGNAL_FUNC(donefunc_file_viewer), + dialog); + + /* --- Allow "Done" to be a default --- */ + GTK_WIDGET_SET_FLAGS(done_button, GTK_CAN_DEFAULT); + + /* --- Add the Done button to the bottom right --- */ + gtk_box_pack_start(GTK_BOX(hbox2), done_button, TRUE, TRUE, 0); + + /* --- Make the "Done" the default --- */ + gtk_widget_grab_default(done_button); + + /* --- Make the button visible --- */ + gtk_widget_show(done_button); + + /* + * --- Font button + */ + + /* --- Create the "Font" button --- */ + font_button = gtk_button_new_with_label("Font"); + + gtk_signal_connect(GTK_OBJECT(done_button), "clicked", + GTK_SIGNAL_FUNC(donefunc_file_viewer), + dialog); + + /* --- Allow "Font" to be a default --- */ + GTK_WIDGET_SET_FLAGS(font_button, GTK_CAN_DEFAULT); + + /* --- Add the Font button to the bottom right --- */ + gtk_box_pack_start(GTK_BOX(hbox2), font_button, TRUE, TRUE, 0); + + /* --- Make the "Font" the default --- */ + gtk_widget_grab_default(font_button); + + /* --- Make the button visible --- */ + gtk_widget_show(font_button); + + /* + * --- Find button + */ + + /* --- Create the "Find" button --- */ + find_button = gtk_button_new_with_label("Find"); + + gtk_signal_connect(GTK_OBJECT(done_button), "clicked", + GTK_SIGNAL_FUNC(findfunc_file_viewer), + dialog); + + /* --- Allow "Font" to be a default --- */ + GTK_WIDGET_SET_FLAGS(find_button, GTK_CAN_DEFAULT); + + /* --- Add the Font button to the bottom right --- */ + gtk_box_pack_start(GTK_BOX(hbox2), find_button, TRUE, TRUE, 0); + + /* --- Make the "Find" the default --- */ + gtk_widget_grab_default(find_button); + + /* --- Make the button visible --- */ + gtk_widget_show(find_button); + + /* + * --- Help button + */ + + /* --- Create the "Help" button --- */ + help_button = gtk_button_new_with_label("Help"); + + gtk_signal_connect(GTK_OBJECT(help_button), "clicked", + GTK_SIGNAL_FUNC(help_func_file_viewer), + dialog); + + /* --- Add the "Help" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(hbox2), done_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(help_button); + + /* --- Show the dialog --- */ + gtk_widget_show(dialog); + + /* --- Only this window can be used for now --- */ + gtk_grab_add(dialog); +} + diff --git a/find.c b/find.c new file mode 100644 index 0000000..29dd71b --- /dev/null +++ b/find.c @@ -0,0 +1,15 @@ +#include + +/* + * + * find() + * + * Find from the menu. + * + */ +void find(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Find function goes here.\n"); +} + diff --git a/findfunc_file_viewer.c b/findfunc_file_viewer.c new file mode 100644 index 0000000..a4ebe79 --- /dev/null +++ b/findfunc_file_viewer.c @@ -0,0 +1,26 @@ +#include +#include + +#include "calvados.h" + +/* + * + * findfunc_file_viewer() + * + * Find Function for file viewer image + * + * Show that the "Find" button was pressed + * + */ +void findfunc_file_viewer(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Find function for file viewer goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); + + /* Now open the find dialog */ +/*FIXME*/ +} + diff --git a/help_func_add_files.c b/help_func_add_files.c new file mode 100644 index 0000000..af51345 --- /dev/null +++ b/help_func_add_files.c @@ -0,0 +1,26 @@ +#include +#include + +#include "calvados.h" + +/* + * + * help_func_add_files() + * + * Help Function for add files + * + * Show that the "Help" button was pressed + * + */ +void help_func_add_files(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Help function for add files goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); + + /* Now open the help dialog */ +/*FIXME*/ +} + diff --git a/help_func_archive_info.c b/help_func_archive_info.c new file mode 100644 index 0000000..bc70f63 --- /dev/null +++ b/help_func_archive_info.c @@ -0,0 +1,26 @@ +#include +#include + +#include "calvados.h" + +/* + * + * help_func_archive_info() + * + * Help Function for archive info + * + * Show that the "Help" button was pressed + * + */ +void help_func_archive_info(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Help function for archive info goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); + + /* Now open the help dialog */ +/*FIXME*/ +} + diff --git a/help_func_create_disk_image.c b/help_func_create_disk_image.c index ab6c0a1..252124d 100644 --- a/help_func_create_disk_image.c +++ b/help_func_create_disk_image.c @@ -14,13 +14,13 @@ */ void help_func_create_disk_image(GtkWidget *widget, gpointer data) { - /* --- Display message --- */ - g_print("Help function goes here.\n"); + /* --- Display message --- */ + g_print("Help function for create disk images goes here.\n"); - /* --- Close it. --- */ - gtk_widget_destroy(GTK_WIDGET(data)); + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); - /* Now open the help dialog */ + /* Now open the help dialog */ /*FIXME*/ } diff --git a/help_func_extract_files.c b/help_func_extract_files.c new file mode 100644 index 0000000..850bff9 --- /dev/null +++ b/help_func_extract_files.c @@ -0,0 +1,26 @@ +#include +#include + +#include "calvados.h" + +/* + * + * help_func_extract_files() + * + * Help Function for extract files + * + * Show that the "Help" button was pressed + * + */ +void help_func_extract_files(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Help function for extract files goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); + + /* Now open the help dialog */ +/* FIXME*/ +} + diff --git a/help_func_file_viewer.c b/help_func_file_viewer.c new file mode 100644 index 0000000..7ab5f82 --- /dev/null +++ b/help_func_file_viewer.c @@ -0,0 +1,26 @@ +#include +#include + +#include "calvados.h" + +/* + * + * help_func_file_viewer() + * + * Help Function for file viewer image + * + * Show that the "Help" button was pressed + * + */ +void help_func_file_viewer(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Help function for file viewer goes here.\n"); + + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); + + /* Now open the help dialog */ +/*FIXME*/ +} + diff --git a/help_func_select_volume.c b/help_func_select_volume.c index 61279e0..58d3e6b 100644 --- a/help_func_select_volume.c +++ b/help_func_select_volume.c @@ -14,13 +14,13 @@ */ void help_func_select_volume(GtkWidget *widget, gpointer data) { - /* --- Display message --- */ - g_print("Help function goes here.\n"); + /* --- Display message --- */ + g_print("Help function for select volume goes here.\n"); - /* --- Close it. --- */ - gtk_widget_destroy(GTK_WIDGET(data)); + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); - /* Now open the help dialog */ + /* Now open the help dialog */ /*FIXME*/ } diff --git a/invert_selection.c b/invert_selection.c new file mode 100644 index 0000000..7e2e546 --- /dev/null +++ b/invert_selection.c @@ -0,0 +1,15 @@ +#include + +/* + * + * invert_selection() + * + * Invert Selection from the menu. + * + */ +void invert_selection(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Invert Selection function goes here.\n"); +} + diff --git a/new_archive.c b/new_archive.c index effc5de..9742a8b 100644 --- a/new_archive.c +++ b/new_archive.c @@ -13,24 +13,31 @@ void new_archive() { GtkWidget *dialog; + GtkFileFilter *fileTypeFilt; dialog = gtk_file_chooser_dialog_new("New Archive", - NULL, - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, - NULL); + NULL, + 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); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), "Desktop"); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "new.shk"); + fileTypeFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(fileTypeFilt, "ShrinkIt Archives (*.shk)"); + gtk_file_filter_add_pattern(fileTypeFilt, "*.[Ss][Hh][Kk]"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), fileTypeFilt); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - save_to_file(filename); + do_new_archive(filename); g_free(filename); } diff --git a/okfunc_create_disk_image.c b/okfunc_create_disk_image.c index bfccadc..a8b20cc 100644 --- a/okfunc_create_disk_image.c +++ b/okfunc_create_disk_image.c @@ -14,10 +14,10 @@ */ void okfunc_create_disk_image(GtkWidget *widget, gpointer data) { - /* --- Display message --- */ - g_print("Create function goes here.\n"); + /* --- Display message --- */ + g_print("Create function goes here.\n"); - /* --- Close it. --- */ - gtk_widget_destroy(GTK_WIDGET(data)); + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); } diff --git a/okfunc_select_volume.c b/okfunc_select_volume.c index ac48042..1ff5778 100644 --- a/okfunc_select_volume.c +++ b/okfunc_select_volume.c @@ -14,10 +14,10 @@ */ void okfunc_select_volume(GtkWidget *widget, gpointer data) { - /* --- Display message --- */ - g_print("Create function goes here.\n"); + /* --- Display message --- */ + g_print("Create function goes here.\n"); - /* --- Close it. --- */ - gtk_widget_destroy(GTK_WIDGET(data)); + /* --- Close it. --- */ + gtk_widget_destroy(GTK_WIDGET(data)); } diff --git a/open_file.c b/open_file.c index 5c81d41..8e7b1bf 100644 --- a/open_file.c +++ b/open_file.c @@ -14,6 +14,62 @@ void open_file() { GtkWidget *dialog; gint res; + GtkFileFilter *shrinkItArchivesFilt; + GtkFileFilter *binaryIIArchivesFilt; + GtkFileFilter *acuArchivesFilt; + GtkFileFilter *appleSingleFilesFilt; + GtkFileFilter *diskImagesFilt; + GtkFileFilter *allFilesFilt; + GtkWidget *openAsReadOnlyCb; + + shrinkItArchivesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(shrinkItArchivesFilt, "ShrinkIt Archives"); + gtk_file_filter_add_pattern(shrinkItArchivesFilt, "*.[Ss][Hh][Kk]"); + gtk_file_filter_add_pattern(shrinkItArchivesFilt, "*.[Ss][Dd][Kk]"); + gtk_file_filter_add_pattern(shrinkItArchivesFilt, "*.[Bb][Xx][Yy]"); + gtk_file_filter_add_pattern(shrinkItArchivesFilt, "*.[Ss][Ee][Aa]"); + gtk_file_filter_add_pattern(shrinkItArchivesFilt, "*.[Bb][Ss][Ee]"); + + binaryIIArchivesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(binaryIIArchivesFilt, "Binary II Archives"); + gtk_file_filter_add_pattern(binaryIIArchivesFilt, "*.[Bb][Nn][Yy]"); + gtk_file_filter_add_pattern(binaryIIArchivesFilt, "*.[Bb][Qq][Yy]"); + gtk_file_filter_add_pattern(binaryIIArchivesFilt, "*.[Bb][Xx][Yy]"); + + acuArchivesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(acuArchivesFilt, "ACU Archives"); + gtk_file_filter_add_pattern(acuArchivesFilt, "*.[Aa][Cc][Uu]"); + + appleSingleFilesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(appleSingleFilesFilt, "AppleSingle Files"); + gtk_file_filter_add_pattern(appleSingleFilesFilt, "*.[Aa][Ss]"); + + diskImagesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(diskImagesFilt, "Disk Images"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Hh][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Dd][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Ss][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Pp][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd]13"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.2[Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Ii][Bb]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Bb]2"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Rr][Aa][Ww]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Hh][Dd][Vv]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]6"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Dd][Dd]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Aa][Pp][Pp]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ff][Dd][Ii]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Ss][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Gg][Zz]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Zz][Ii][Pp]"); + + allFilesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(allFilesFilt, "All Files"); + gtk_file_filter_add_pattern(allFilesFilt, "*"); dialog = gtk_file_chooser_dialog_new("Open", NULL, @@ -24,6 +80,19 @@ void open_file() GTK_RESPONSE_ACCEPT, NULL); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), shrinkItArchivesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), binaryIIArchivesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), acuArchivesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), appleSingleFilesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), diskImagesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), allFilesFilt); + + gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), allFilesFilt); + + openAsReadOnlyCb = gtk_check_button_new_with_label("Open as read-only"); + gtk_box_pack_end(GTK_BOX(GTK_DIALOG(dialog)->action_area), openAsReadOnlyCb, TRUE, TRUE, 0); + gtk_widget_show(openAsReadOnlyCb); + res = gtk_dialog_run(GTK_DIALOG(dialog)); if (res == GTK_RESPONSE_ACCEPT) { char *filename; diff --git a/paste.c b/paste.c new file mode 100644 index 0000000..2203c2e --- /dev/null +++ b/paste.c @@ -0,0 +1,15 @@ +#include + +/* + * + * paste() + * + * Paste from the menu. + * + */ +void paste(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Paste function goes here.\n"); +} + diff --git a/paste_special.c b/paste_special.c new file mode 100644 index 0000000..1846c4a --- /dev/null +++ b/paste_special.c @@ -0,0 +1,15 @@ +#include + +/* + * + * paste_special() + * + * Paste Special from the menu. + * + */ +void paste_special(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Paste Special function goes here.\n"); +} + diff --git a/preferences.c b/preferences.c index bc24989..30613e1 100644 --- a/preferences.c +++ b/preferences.c @@ -3,6 +3,17 @@ #include "calvados.h" +/* + * + * select_temporary_files_folder() + * + */ +void select_temporary_files_folder() +{ + g_print("Select folder function goes here.\n"); +} + + /* * * apply_func_preferences() @@ -137,7 +148,7 @@ GtkWidget *create_notebook(GtkWidget *window, GtkPositionType pos) */ void preferences() { - GtkWidget *dialog_window; + GtkWidget *dialog; GtkWidget *dialogVbox; GtkWidget *notebook; GtkWidget *generalTab; @@ -251,38 +262,45 @@ void preferences() GtkWidget *bzip2Cb; GtkWidget *bzip2Label; GtkWidget *filesVbox; + GtkWidget *folderForTemporaryFilesHbox; GtkWidget *folderForTemporaryFilesLabel; + GtkWidget *folderForTemporaryFilesEntry; + GtkWidget *folderForTemporaryFilesButton; + GtkWidget *folderForTemporaryFilesImage; + GtkWidget *externalFileViewerExtensionsLabel; + GtkWidget *externalFileViewerExtensionsEntry; + GtkWidget *filesSpacer; GtkWidget *ok_button; GtkWidget *cancel_button; GtkWidget *apply_button; GtkWidget *help_button; /* --- Create the dialog --- */ - /*dialog_window = gtk_dialog_new();*/ - dialog_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + /*dialog = gtk_dialog_new();*/ + dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* --- Trap the window close signal to release the grab --- */ - gtk_signal_connect(GTK_OBJECT(dialog_window), "destroy", + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", GTK_SIGNAL_FUNC(closing_dialog), - &dialog_window); + &dialog); /* --- Set the title --- */ - gtk_window_set_title(GTK_WINDOW(dialog_window), "Preferences"); + gtk_window_set_title(GTK_WINDOW(dialog), "Preferences"); /* --- Add a small border --- */ - gtk_container_border_width(GTK_CONTAINER(dialog_window), 5); + gtk_container_border_width(GTK_CONTAINER(dialog), 5); /* --- Set the window size. --- */ - /*gtk_widget_set_usize(dialog_window, 500, 450);*/ + /*gtk_widget_set_usize(dialog, 500, 450);*/ /* --- Show the dialog --- */ - gtk_widget_show(dialog_window); + gtk_widget_show(dialog); dialogVbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(dialog_window), dialogVbox); + gtk_container_add(GTK_CONTAINER(dialog), dialogVbox); gtk_widget_show(dialogVbox); - /*notebook = create_notebook(dialog_window, GTK_POS_TOP);*/ + /*notebook = create_notebook(dialog, GTK_POS_TOP);*/ notebook = create_notebook(dialogVbox, GTK_POS_TOP); /* --- Add pages to the notebook --- */ @@ -313,38 +331,46 @@ void preferences() gtk_widget_show(generalLeftVbox); pathnameCb = gtk_check_button_new_with_label("Pathname"); - typeCb = gtk_check_button_new_with_label("Type"); - auxTypeCb = gtk_check_button_new_with_label("Aux Type"); - modDateCb = gtk_check_button_new_with_label("Mod Date"); - formatCb = gtk_check_button_new_with_label("Format"); - sizeCb = gtk_check_button_new_with_label("Size"); - ratioCb = gtk_check_button_new_with_label("Ratio"); - packedCb = gtk_check_button_new_with_label("Packed"); - accessCb = gtk_check_button_new_with_label("Access"); - defaultsButton = gtk_button_new_with_label("Defaults"); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), pathnameCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), typeCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), auxTypeCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), modDateCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), formatCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), sizeCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), ratioCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), packedCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), accessCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalLeftVbox), defaultsButton, TRUE, TRUE, 0); - gtk_widget_show(pathnameCb); + + typeCb = gtk_check_button_new_with_label("Type"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), typeCb, TRUE, TRUE, 0); gtk_widget_show(typeCb); + + auxTypeCb = gtk_check_button_new_with_label("Aux Type"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), auxTypeCb, TRUE, TRUE, 0); gtk_widget_show(auxTypeCb); + + modDateCb = gtk_check_button_new_with_label("Mod Date"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), modDateCb, TRUE, TRUE, 0); gtk_widget_show(modDateCb); + + formatCb = gtk_check_button_new_with_label("Format"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), formatCb, TRUE, TRUE, 0); gtk_widget_show(formatCb); + + sizeCb = gtk_check_button_new_with_label("Size"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), sizeCb, TRUE, TRUE, 0); gtk_widget_show(sizeCb); + + ratioCb = gtk_check_button_new_with_label("Ratio"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), ratioCb, TRUE, TRUE, 0); gtk_widget_show(ratioCb); + + packedCb = gtk_check_button_new_with_label("Packed"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), packedCb, TRUE, TRUE, 0); gtk_widget_show(packedCb); + + accessCb = gtk_check_button_new_with_label("Access"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), accessCb, TRUE, TRUE, 0); gtk_widget_show(accessCb); + + defaultsButton = gtk_button_new_with_label("Defaults"); + gtk_box_pack_start(GTK_BOX(generalLeftVbox), defaultsButton, TRUE, TRUE, 0); gtk_widget_show(defaultsButton); + /* Left spacer */ generalLeftSpacerBox = gtk_button_new_with_label(" "); gtk_box_pack_start(GTK_BOX(generalLeftVbox), generalLeftSpacerBox, TRUE, TRUE, 0); @@ -358,58 +384,57 @@ void preferences() gtk_widget_show(generalRightVbox); nufxArchivesFrame = gtk_frame_new("NuFX (ShrinkIt) archives"); - filenameMungingFrame = gtk_frame_new("Filename munging"); - systemFrame = gtk_frame_new("System"); - miscellaneousFrame = gtk_frame_new("Miscellaneous"); - gtk_box_pack_start(GTK_BOX(generalRightVbox), nufxArchivesFrame, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalRightVbox), filenameMungingFrame, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalRightVbox), systemFrame, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(generalRightVbox), miscellaneousFrame, TRUE, TRUE, 0); - gtk_widget_show(nufxArchivesFrame); - gtk_widget_show(filenameMungingFrame); - gtk_widget_show(systemFrame); - gtk_widget_show(miscellaneousFrame); - nufxArchivesVbox = gtk_vbox_new(FALSE, 0); - filenameMungingVbox = gtk_vbox_new(FALSE, 0); - systemVbox = gtk_vbox_new(FALSE, 0); - miscellaneousVbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(nufxArchivesFrame), nufxArchivesVbox); - gtk_container_add(GTK_CONTAINER(filenameMungingFrame), filenameMungingVbox); - gtk_container_add(GTK_CONTAINER(systemFrame), systemVbox); - gtk_container_add(GTK_CONTAINER(miscellaneousFrame), miscellaneousVbox); - gtk_widget_show(nufxArchivesVbox); + + filenameMungingFrame = gtk_frame_new("Filename munging"); + gtk_box_pack_start(GTK_BOX(generalRightVbox), filenameMungingFrame, TRUE, TRUE, 0); + gtk_widget_show(filenameMungingFrame); + filenameMungingVbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(filenameMungingFrame), filenameMungingVbox); gtk_widget_show(filenameMungingVbox); + + systemFrame = gtk_frame_new("System"); + gtk_box_pack_start(GTK_BOX(generalRightVbox), systemFrame, TRUE, TRUE, 0); + gtk_widget_show(systemFrame); + systemVbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(systemFrame), systemVbox); gtk_widget_show(systemVbox); + + miscellaneousFrame = gtk_frame_new("Miscellaneous"); + gtk_box_pack_start(GTK_BOX(generalRightVbox), miscellaneousFrame, TRUE, TRUE, 0); + gtk_widget_show(miscellaneousFrame); + miscellaneousVbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(miscellaneousFrame), miscellaneousVbox); gtk_widget_show(miscellaneousVbox); + /* NuFX frame */ mimicShrinkitQuirksCb = gtk_check_button_new_with_label("Mimic ShrinkIt Quirks"); - handleBadMacArchivesCb = gtk_check_button_new_with_label("Handle \"bad Mac\" archives"); - reduceErrorCheckingCb = gtk_check_button_new_with_label("Reduce error checking (not recommended)"); - gtk_box_pack_start(GTK_BOX(nufxArchivesVbox), mimicShrinkitQuirksCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(nufxArchivesVbox), handleBadMacArchivesCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(nufxArchivesVbox), reduceErrorCheckingCb, TRUE, TRUE, 0); - gtk_widget_show(mimicShrinkitQuirksCb); + + handleBadMacArchivesCb = gtk_check_button_new_with_label("Handle \"bad Mac\" archives"); + gtk_box_pack_start(GTK_BOX(nufxArchivesVbox), handleBadMacArchivesCb, TRUE, TRUE, 0); gtk_widget_show(handleBadMacArchivesCb); + + reduceErrorCheckingCb = gtk_check_button_new_with_label("Reduce error checking (not recommended)"); + gtk_box_pack_start(GTK_BOX(nufxArchivesVbox), reduceErrorCheckingCb, TRUE, TRUE, 0); gtk_widget_show(reduceErrorCheckingCb); /* Filename munging frame */ displayDOS33FilenamesCb = gtk_check_button_new_with_label("Display DOS 3.3 Filenames in lower case"); - showSpacesAsUnderscoresCb = gtk_check_button_new_with_label("Show spaces as underscores"); - gtk_box_pack_start(GTK_BOX(filenameMungingVbox), displayDOS33FilenamesCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(filenameMungingVbox), showSpacesAsUnderscoresCb, TRUE, TRUE, 0); - gtk_widget_show(displayDOS33FilenamesCb); + + showSpacesAsUnderscoresCb = gtk_check_button_new_with_label("Show spaces as underscores"); + gtk_box_pack_start(GTK_BOX(filenameMungingVbox), showSpacesAsUnderscoresCb, TRUE, TRUE, 0); gtk_widget_show(showSpacesAsUnderscoresCb); + /* System frame */ fileTypeAssociationsButton = gtk_button_new_with_label("File type associations"); @@ -419,12 +444,11 @@ void preferences() /* Miscellaneous frame */ stripPathnamesWhenPastingFilesCb = gtk_check_button_new_with_label("Strip pathnames when pasting files"); - beepWhenActionsCompleteSuccessfullyCb = gtk_check_button_new_with_label("Beep when actions complete successfully"); - gtk_box_pack_start(GTK_BOX(miscellaneousVbox), stripPathnamesWhenPastingFilesCb, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(miscellaneousVbox), beepWhenActionsCompleteSuccessfullyCb, TRUE, TRUE, 0); - gtk_widget_show(stripPathnamesWhenPastingFilesCb); + + beepWhenActionsCompleteSuccessfullyCb = gtk_check_button_new_with_label("Beep when actions complete successfully"); + gtk_box_pack_start(GTK_BOX(miscellaneousVbox), beepWhenActionsCompleteSuccessfullyCb, TRUE, TRUE, 0); gtk_widget_show(beepWhenActionsCompleteSuccessfullyCb); /* Right spacer */ @@ -805,6 +829,49 @@ void preferences() gtk_widget_show(folderForTemporaryFilesLabel); gtk_box_pack_start(GTK_BOX(filesVbox), folderForTemporaryFilesLabel, TRUE, TRUE, 0); + folderForTemporaryFilesHbox = gtk_hbox_new(FALSE, 0); + + gtk_container_add(GTK_CONTAINER(filesVbox), folderForTemporaryFilesHbox); + + gtk_widget_show(folderForTemporaryFilesHbox); + + folderForTemporaryFilesEntry = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(folderForTemporaryFilesEntry), 255); + gtk_widget_set_size_request(folderForTemporaryFilesEntry, 350, 32); + gtk_box_pack_start(GTK_BOX(folderForTemporaryFilesHbox), folderForTemporaryFilesEntry, TRUE, TRUE, 0); + gtk_widget_show(folderForTemporaryFilesEntry); + + folderForTemporaryFilesImage = gtk_image_new(); + gtk_image_set_from_file(GTK_IMAGE(folderForTemporaryFilesImage), "images/openTb.png"); + folderForTemporaryFilesButton = gtk_button_new(); + gtk_widget_set_size_request(folderForTemporaryFilesButton, 32, 32); + gtk_button_set_image((GtkButton *)folderForTemporaryFilesButton, folderForTemporaryFilesImage); + + gtk_box_pack_start(GTK_BOX(folderForTemporaryFilesHbox), folderForTemporaryFilesButton, TRUE, TRUE, 0); + + /* You should be getting used to seeing most of these functions by now */ + gtk_signal_connect(GTK_OBJECT(folderForTemporaryFilesButton), "clicked", + GTK_SIGNAL_FUNC(select_temporary_files_folder), + (gpointer)"Select Folder"); + + gtk_widget_show(folderForTemporaryFilesImage); + gtk_widget_show(folderForTemporaryFilesButton); + + externalFileViewerExtensionsLabel = gtk_label_new("External file viewer extensions (separated by semicolons):"); + gtk_widget_show(externalFileViewerExtensionsLabel); + gtk_box_pack_start(GTK_BOX(filesVbox), externalFileViewerExtensionsLabel, TRUE, TRUE, 0); + + externalFileViewerExtensionsEntry = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(externalFileViewerExtensionsEntry), 255); + gtk_widget_show(externalFileViewerExtensionsEntry); + gtk_box_pack_start(GTK_BOX(filesVbox), externalFileViewerExtensionsEntry, TRUE, TRUE, 0); + + /* spacer */ + filesSpacer = gtk_button_new_with_label(" "); + gtk_widget_set_size_request(filesSpacer, 256, 256); + gtk_box_pack_start(GTK_BOX(filesVbox), filesSpacer, TRUE, TRUE, 0); + gtk_widget_show(filesSpacer); + /* spacer */ /*spacerBox = gtk_button_new_with_label(" "); @@ -827,7 +894,7 @@ void preferences() gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", GTK_SIGNAL_FUNC(okfunc_create_disk_image), - dialog_window); + dialog); /* --- Allow "Cancel" to be a default --- */ GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); @@ -850,7 +917,7 @@ void preferences() gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", GTK_SIGNAL_FUNC(close_dialog), - dialog_window); + dialog); /* --- Allow "Cancel" to be a default --- */ GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); @@ -870,7 +937,7 @@ void preferences() gtk_signal_connect(GTK_OBJECT(apply_button), "clicked", GTK_SIGNAL_FUNC(apply_func_preferences), - dialog_window); + dialog); /* --- Add the "Apply" button to the dialog --- */ gtk_box_pack_start(GTK_BOX(actionHbox), apply_button, TRUE, TRUE, 0); @@ -887,7 +954,7 @@ void preferences() gtk_signal_connect(GTK_OBJECT(help_button), "clicked", GTK_SIGNAL_FUNC(help_func_preferences), - dialog_window); + dialog); /* --- Add the "Help" button to the dialog --- */ gtk_box_pack_start(GTK_BOX(actionHbox), help_button, TRUE, TRUE, 0); @@ -896,6 +963,6 @@ void preferences() gtk_widget_show(help_button); /* --- Only this window can be used for now --- */ - gtk_grab_add(dialog_window); + gtk_grab_add(dialog); } diff --git a/print.c b/print.c new file mode 100644 index 0000000..c5ce934 --- /dev/null +++ b/print.c @@ -0,0 +1,77 @@ +#include +#include + +#include "calvados.h" + +GMainLoop *loop; + +/* + * + * print_end() + * + */ +static void print_end(GtkPrintJob *print_job, gpointer user_data, GError *err) +{ + g_main_loop_quit(loop); + g_assert(err == NULL); +} + + +/* + * + * print_page() + * + */ +void print_page(GtkWidget *widget, gpointer user_data) +{ + GtkWindow *parent = user_data; + GtkPrintJob *print_job; + GtkPrinter *printer; + GtkPrintSettings *settings; + GtkPageSetup *page_setup; + GtkWidget *dialog; + cairo_t *cr; + cairo_surface_t *surface; + + dialog = gtk_print_unix_dialog_new(NULL, parent); + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { + printer = gtk_print_unix_dialog_get_selected_printer(GTK_PRINT_UNIX_DIALOG(dialog)); + settings = gtk_print_unix_dialog_get_settings(GTK_PRINT_UNIX_DIALOG(dialog)); + page_setup = gtk_print_unix_dialog_get_page_setup(GTK_PRINT_UNIX_DIALOG(dialog)); + + print_job = gtk_print_job_new("Example title", printer, settings, page_setup); + surface = gtk_print_job_get_surface(print_job, NULL); + + cr = cairo_create(surface); + + cairo_set_source_rgb(cr, 0.6, 0.6, 0.6); + cairo_set_line_width(cr, 1); + + cairo_rectangle(cr, 20, 20, 120, 80); + cairo_rectangle(cr, 180, 20, 80, 80); + cairo_stroke_preserve(cr); + cairo_fill(cr); + + cairo_show_page(cr); + + cairo_surface_finish(surface); + + loop = g_main_loop_new(NULL,FALSE); + + gtk_print_job_send(print_job, print_end, NULL, NULL); + + g_main_loop_run(loop); + + cairo_destroy(cr); + cairo_surface_destroy(surface); + + g_main_loop_unref(loop); + g_object_unref(settings); + g_object_unref(page_setup); + g_object_unref(printer); + } + gtk_widget_destroy(dialog); + + return; +} + diff --git a/recompress_files.c b/recompress_files.c new file mode 100644 index 0000000..b238430 --- /dev/null +++ b/recompress_files.c @@ -0,0 +1,81 @@ +#include + +#include "calvados.h" + +/* + * + * recompress_files() + * + */ +void recompress_files(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + GtkWidget *ok_button; + GtkWidget *cancel_button; + + g_print("recompress files goes here\n"); + + /* --- Create the dialog --- */ + dialog = gtk_dialog_new(); + + /* --- Trap the window close signal to release the grab --- */ + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + GTK_SIGNAL_FUNC(closing_dialog), + &dialog); + + /* --- Set the title --- */ + gtk_window_set_title(GTK_WINDOW(dialog), "Recompress Files"); + + /* --- Add a small border --- */ + gtk_container_border_width(GTK_CONTAINER(dialog), 5); + + /* + * --- OK button + */ + + /* --- Create the "OK" button --- */ + ok_button = gtk_button_new_with_label("OK"); + + gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(okfunc_select_volume), + dialog); + + /* --- Allow "Cancel" to be a default --- */ + GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); + + /* --- Add the OK button to the bottom hbox2 --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), ok_button, TRUE, TRUE, 0); + + /* --- Make the "OK" the default --- */ + gtk_widget_grab_default(ok_button); + + /* --- Make the button visible --- */ + gtk_widget_show(ok_button); + + /* + * --- Cancel button + */ + + /* --- Create the "Cancel" button --- */ + cancel_button = gtk_button_new_with_label("Cancel"); + + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(close_dialog), + dialog); + + /* --- Allow "Cancel" to be a default --- */ + GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + + /* --- Add the "Cancel" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), cancel_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(cancel_button); + + /* --- Show the dialog --- */ + gtk_widget_show(dialog); + + /* --- Only this window can be used for now --- */ + gtk_grab_add(dialog); +} + diff --git a/rename.c b/rename.c new file mode 100644 index 0000000..e22d218 --- /dev/null +++ b/rename.c @@ -0,0 +1,127 @@ +#include + +#include "calvados.h" + +/* + * + * rename_file() + * + */ +void rename_file(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + GtkWidget *currentNameLabel; + GtkWidget *currentNameEntry; + GtkWidget *newNameLabel; + GtkWidget *newNameEntry; + /*GtkWidget *hbox1;*/ + GtkWidget *ok_button; + GtkWidget *cancel_button; + GtkWidget *help_button; + + /*g_print("Rename file goes here.\n");*/ + + /*g_print("data=%s\n", (char *)data);*/ + + /* --- Create the dialog --- */ + dialog = gtk_dialog_new(); + + /* --- Trap the window close signal to release the grab --- */ + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + GTK_SIGNAL_FUNC(closing_dialog), + &dialog); + + /* --- Set the title --- */ + gtk_window_set_title(GTK_WINDOW(dialog), "Rename"); + + /* --- Add a small border --- */ + gtk_container_border_width(GTK_CONTAINER(dialog), 5); + + /*hbox1 = gtk_hbox_new(FALSE, 0); + gtk_widget_show(hbox1);*/ + + currentNameLabel = gtk_label_new("Current name: "); + gtk_widget_show(currentNameLabel); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), currentNameLabel, TRUE, TRUE, 0); + + currentNameEntry = gtk_entry_new(); + gtk_widget_show(currentNameEntry); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), currentNameEntry, TRUE, TRUE, 0); + + newNameLabel = gtk_label_new("New name: "); + gtk_widget_show(newNameLabel); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), newNameLabel, TRUE, TRUE, 0); + + newNameEntry = gtk_entry_new(); + gtk_widget_show(newNameEntry); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), newNameEntry, TRUE, TRUE, 0); + + /* FIXME -- need to add path separator widgets here */ + + /* + * --- OK button + */ + + /* --- Create the "OK" button --- */ + ok_button = gtk_button_new_with_label("OK"); + + gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(okfunc_select_volume), + dialog); + + /* --- Allow "Cancel" to be a default --- */ + GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); + + /* --- Add the OK button to the bottom hbox2 --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), ok_button, TRUE, TRUE, 0); + + /* --- Make the "OK" the default --- */ + gtk_widget_grab_default(ok_button); + + /* --- Make the button visible --- */ + gtk_widget_show(ok_button); + + /* + * --- Cancel button + */ + + /* --- Create the "Cancel" button --- */ + cancel_button = gtk_button_new_with_label("Cancel"); + + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(close_dialog), + dialog); + + /* --- Allow "Cancel" to be a default --- */ + GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + + /* --- Add the "Cancel" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), cancel_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(cancel_button); + + /* + * --- Help button + */ + + /* --- Create the "Help" button --- */ + help_button = gtk_button_new_with_label("Help"); + + gtk_signal_connect(GTK_OBJECT(help_button), "clicked", + GTK_SIGNAL_FUNC(help_func_select_volume), + dialog); + + /* --- Add the "Help" button to the dialog --- */ + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), help_button, TRUE, TRUE, 0); + + /* --- Make the button visible. --- */ + gtk_widget_show(help_button); + + /* --- Show the dialog --- */ + gtk_widget_show(dialog); + + /* --- Only this window can be used for now --- */ + gtk_grab_add(dialog); +} + diff --git a/reopen.c b/reopen.c new file mode 100644 index 0000000..3edfc91 --- /dev/null +++ b/reopen.c @@ -0,0 +1,15 @@ +#include + +/* + * + * reopen_menu_item() + * + * Reopen from the menu. + * + */ +void reopen_menu_item(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Reopen function goes here.\n"); +} + diff --git a/save_changes.c b/save_changes.c new file mode 100644 index 0000000..75941be --- /dev/null +++ b/save_changes.c @@ -0,0 +1,15 @@ +#include + +/* + * + * save_changes() + * + * Save Changes from the menu. + * + */ +void save_changes(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Save Changes function goes here.\n"); +} + diff --git a/save_to_file.c b/save_to_file.c index 3744fe8..1a28c4f 100644 --- a/save_to_file.c +++ b/save_to_file.c @@ -12,6 +12,6 @@ */ void save_to_file(char *filename) { - g_print("Save to file goes here.\n"); + g_print("Save to file goes here.\n"); } diff --git a/select_all.c b/select_all.c new file mode 100644 index 0000000..2653289 --- /dev/null +++ b/select_all.c @@ -0,0 +1,15 @@ +#include + +/* + * + * select_all() + * + * Select All from the menu. + * + */ +void select_all(GtkWidget *widget, gpointer data) +{ + /* --- Display message --- */ + g_print("Select All function goes here.\n"); +} + diff --git a/select_first_sst_image.c b/select_first_sst_image.c new file mode 100644 index 0000000..216880b --- /dev/null +++ b/select_first_sst_image.c @@ -0,0 +1,71 @@ +#include +#include + +#include "calvados.h" + +/* + * + * select_first_sst_image() + * + */ +void select_first_sst_image(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + gint res; + GtkFileFilter *diskImagesFilt; + GtkFileFilter *allFilesFilt; + + g_print("Select first sst image goes here\n"); + + + diskImagesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(diskImagesFilt, "Disk Images"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Hh][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Dd][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Ss][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Pp][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd]13"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.2[Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Ii][Bb]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Bb]2"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Rr][Aa][Ww]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Hh][Dd][Vv]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]6"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Dd][Dd]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Aa][Pp][Pp]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ff][Dd][Ii]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Ss][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Gg][Zz]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Zz][Ii][Pp]"); + + allFilesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(allFilesFilt, "All Files"); + gtk_file_filter_add_pattern(allFilesFilt, "*"); + + dialog = gtk_file_chooser_dialog_new("Select first SST Image", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), diskImagesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), allFilesFilt); + + res = gtk_dialog_run(GTK_DIALOG(dialog)); + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); + filename = gtk_file_chooser_get_filename(chooser); + do_open_file(filename); + g_free(filename); + } + + gtk_widget_destroy(dialog); +} + diff --git a/select_image_convert.c b/select_image_convert.c new file mode 100644 index 0000000..5aa7238 --- /dev/null +++ b/select_image_convert.c @@ -0,0 +1,70 @@ +#include +#include + +#include "calvados.h" + +/* + * + * select_image_convert() + * + */ +void select_image_convert(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + gint res; + GtkFileFilter *diskImagesFilt; + GtkFileFilter *allFilesFilt; + + g_print("Select image convert goes here\n"); + + diskImagesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(diskImagesFilt, "Disk Images"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Hh][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ss][Dd][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Ss][Kk]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Pp][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd]13"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.2[Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Mm][Gg]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Ii][Bb]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Nn][Bb]2"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Rr][Aa][Ww]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Hh][Dd][Vv]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Cc]6"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Dd][Dd][Dd]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Aa][Pp][Pp]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ff][Dd][Ii]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Ii][Ss][Oo]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Gg][Zz]"); + gtk_file_filter_add_pattern(diskImagesFilt, "*.[Zz][Ii][Pp]"); + + allFilesFilt = gtk_file_filter_new(); + gtk_file_filter_set_name(allFilesFilt, "All Files"); + gtk_file_filter_add_pattern(allFilesFilt, "*"); + + dialog = gtk_file_chooser_dialog_new("Select Image to convert", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), diskImagesFilt); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), allFilesFilt); + + res = gtk_dialog_run(GTK_DIALOG(dialog)); + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); + filename = gtk_file_chooser_get_filename(chooser); + do_open_file(filename); + g_free(filename); + } + + gtk_widget_destroy(dialog); +} + diff --git a/select_volume.c b/select_volume.c index b8292c6..19bae99 100644 --- a/select_volume.c +++ b/select_volume.c @@ -17,9 +17,9 @@ enum { * Select volume dialog box * */ -void select_volume() +void select_volume(GtkWidget *widget, gpointer data) { - GtkWidget *dialog_window; + GtkWidget *dialog; GtkWidget *ok_button; GtkWidget *cancel_button; GtkWidget *help_button; @@ -32,21 +32,23 @@ void select_volume() GtkCellRenderer *renderer; GtkTreeModel *model; GtkWidget *view; - GtkWidget *openAsReadOnlyCB; + GtkWidget *openAsReadOnlyCb; + + g_print("data=%s\n", (char *)data); /* --- Create the dialog --- */ - dialog_window = gtk_dialog_new(); + dialog = gtk_dialog_new(); /* --- Trap the window close signal to release the grab --- */ - gtk_signal_connect(GTK_OBJECT(dialog_window), "destroy", + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", GTK_SIGNAL_FUNC(closing_dialog), - &dialog_window); + &dialog); /* --- Set the title --- */ - gtk_window_set_title(GTK_WINDOW(dialog_window), "Select Volume"); + gtk_window_set_title(GTK_WINDOW(dialog), "Select Volume"); /* --- Add a small border --- */ - gtk_container_border_width(GTK_CONTAINER(dialog_window), 5); + gtk_container_border_width(GTK_CONTAINER(dialog), 5); showHbox = gtk_hbox_new(FALSE, 0); @@ -78,7 +80,7 @@ void select_volume() gtk_box_pack_start(GTK_BOX(showHbox), showLabel, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(showHbox), showCombo, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->vbox), showHbox, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), showHbox, TRUE, TRUE, 0); gtk_widget_show(showLabel); gtk_widget_show(showCombo); @@ -96,6 +98,7 @@ void select_volume() -1);*/ view = gtk_tree_view_new(); + gtk_widget_set_size_request(view, 320, 256); /* --- Column #1 --- */ renderer = gtk_cell_renderer_text_new(); @@ -110,7 +113,7 @@ void select_volume() renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, - "Remark", + "Remarks", renderer, "text", COL_REMARK, NULL); @@ -124,16 +127,16 @@ void select_volume() * be freed automatically when the tree view is destroyed */ g_object_unref(model); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->vbox), view, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), view, TRUE, TRUE, 0); gtk_widget_show(view); - openAsReadOnlyCB = gtk_check_button_new_with_label("Open as read-only (writing to the volume will be disabled)"); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(openAsReadOnlyCB), TRUE); + openAsReadOnlyCb = gtk_check_button_new_with_label("Open as read-only (writing to the volume will be disabled)"); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(openAsReadOnlyCb), TRUE); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->vbox), openAsReadOnlyCB, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), openAsReadOnlyCb, TRUE, TRUE, 0); - gtk_widget_show(openAsReadOnlyCB); + gtk_widget_show(openAsReadOnlyCb); /* * --- OK button @@ -144,13 +147,13 @@ void select_volume() gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", GTK_SIGNAL_FUNC(okfunc_select_volume), - dialog_window); + dialog); /* --- Allow "Cancel" to be a default --- */ GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); /* --- Add the OK button to the bottom hbox2 --- */ - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area), ok_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), ok_button, TRUE, TRUE, 0); /* --- Make the "OK" the default --- */ gtk_widget_grab_default(ok_button); @@ -167,13 +170,13 @@ void select_volume() gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", GTK_SIGNAL_FUNC(close_dialog), - dialog_window); + dialog); /* --- Allow "Cancel" to be a default --- */ GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); /* --- Add the "Cancel" button to the dialog --- */ - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area), cancel_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), cancel_button, TRUE, TRUE, 0); /* --- Make the button visible. --- */ gtk_widget_show(cancel_button); @@ -187,18 +190,18 @@ void select_volume() gtk_signal_connect(GTK_OBJECT(help_button), "clicked", GTK_SIGNAL_FUNC(help_func_select_volume), - dialog_window); + dialog); /* --- Add the "Help" button to the dialog --- */ - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), help_button, TRUE, TRUE, 0); /* --- Make the button visible. --- */ gtk_widget_show(help_button); /* --- Show the dialog --- */ - gtk_widget_show(dialog_window); + gtk_widget_show(dialog); /* --- Only this window can be used for now --- */ - gtk_grab_add(dialog_window); + gtk_grab_add(dialog); } diff --git a/show_about.c b/show_about.c index eaf10c4..2a5a942 100644 --- a/show_about.c +++ b/show_about.c @@ -14,8 +14,8 @@ void show_about(GtkWidget *widget, gpointer data) GtkWidget *dialog = gtk_about_dialog_new(); gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog), "Calvados"); - gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), "0.1"); - gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),"(c) Leeland Heins"); + gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), "0.2"); + gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),"(c) 2017 Leeland Heins"); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), "Calvados is intended to be a work-alike of CiderPress for Linux."); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), diff --git a/show_error.c b/show_error.c new file mode 100644 index 0000000..3e42684 --- /dev/null +++ b/show_error.c @@ -0,0 +1,28 @@ +#include + +#include "calvados.h" + +/* + * + * show_error() + * + * Show an error message dialog box + * + */ +void show_error(GtkWidget *widget, gpointer data, char *message) +{ + GtkWidget *dialog; + + /*g_print("Error dialog goes here\n");*/ + + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + message); + + gtk_window_set_title(GTK_WINDOW(dialog), "Error"); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); +} + diff --git a/test.c b/test.c new file mode 100644 index 0000000..fe4da27 --- /dev/null +++ b/test.c @@ -0,0 +1,16 @@ +#include + +#include "calvados.h" + +/* + * + * test() + * + * Display test dialog + * + */ +void test(GtkWidget *widget, gpointer data) +{ + g_print("test goes here\n"); +} +