Update to current

Added a significant amount more of the UI code
This commit is contained in:
Leeland Heins 2017-04-11 18:22:23 -05:00 committed by GitHub
parent c5dda859f2
commit fbf7281338
53 changed files with 2935 additions and 235 deletions

View File

@ -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

23
acceptfunc_add_files.c Normal file
View File

@ -0,0 +1,23 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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));
}

72
add_disk_image.c Normal file
View File

@ -0,0 +1,72 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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);
}

179
add_files.c Normal file
View File

@ -0,0 +1,179 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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);
}

202
archive_info.c Normal file
View File

@ -0,0 +1,202 @@
#include <string.h>
#include <gtk/gtk.h>
#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);
}

View File

@ -0,0 +1,72 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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);
}

View File

@ -7,11 +7,162 @@
* 20170310 Leeland Heins
*
*/
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <gdk/gdkkeysyms-compat.h>
#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);

View File

@ -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);

15
close.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* close_menu_item()
*
* Close from the menu.
*
*/
void close_menu_item(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Close function goes here.\n");
}

15
copy.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* copy_menu_item()
*
* Copy from the menu.
*
*/
void copy_menu_item(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Copy function goes here.\n");
}

View File

@ -1,8 +1,73 @@
#include <string.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <gdk/gdkkeysyms-compat.h>
#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);
}

29
create_radio.c Normal file
View File

@ -0,0 +1,29 @@
#include <gtk/gtk.h>
#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);
}

28
delete_file.c Normal file
View File

@ -0,0 +1,28 @@
#include <gtk/gtk.h>
#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);
}

77
disk_image_converter.c Normal file
View File

@ -0,0 +1,77 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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);
}

View File

@ -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);
}

17
do_add_files.c Normal file
View File

@ -0,0 +1,17 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include "calvados.h"
/*
*
* do_add_files()
*
* Actually add files
*
*/
void do_add_files(char *filename)
{
g_print("Do add files goes here.\n");
}

18
do_image_converter.c Normal file
View File

@ -0,0 +1,18 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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");
}

17
do_new_archive.c Normal file
View File

@ -0,0 +1,17 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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");
}

View File

@ -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");
}

23
donefunc_file_viewer.c Normal file
View File

@ -0,0 +1,23 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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));
}

101
edit_comment.c Normal file
View File

@ -0,0 +1,101 @@
#include <gtk/gtk.h>
#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);
}

379
extract_files.c Normal file
View File

@ -0,0 +1,379 @@
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <gtk/gtk.h>
#include <string.h>
#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);
}

View File

@ -0,0 +1,23 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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));
}

178
file_viewer.c Normal file
View File

@ -0,0 +1,178 @@
#include <gtk/gtk.h>
#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);
}

15
find.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* find()
*
* Find from the menu.
*
*/
void find(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Find function goes here.\n");
}

26
findfunc_file_viewer.c Normal file
View File

@ -0,0 +1,26 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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*/
}

26
help_func_add_files.c Normal file
View File

@ -0,0 +1,26 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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*/
}

26
help_func_archive_info.c Normal file
View File

@ -0,0 +1,26 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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*/
}

View File

@ -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*/
}

26
help_func_extract_files.c Normal file
View File

@ -0,0 +1,26 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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*/
}

26
help_func_file_viewer.c Normal file
View File

@ -0,0 +1,26 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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*/
}

View File

@ -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*/
}

15
invert_selection.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* invert_selection()
*
* Invert Selection from the menu.
*
*/
void invert_selection(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Invert Selection function goes here.\n");
}

View File

@ -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);
}

View File

@ -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));
}

View File

@ -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));
}

View File

@ -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;

15
paste.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* paste()
*
* Paste from the menu.
*
*/
void paste(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Paste function goes here.\n");
}

15
paste_special.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* paste_special()
*
* Paste Special from the menu.
*
*/
void paste_special(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Paste Special function goes here.\n");
}

View File

@ -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);
}

77
print.c Normal file
View File

@ -0,0 +1,77 @@
#include <gtk/gtk.h>
#include <gtk/gtkunixprint.h>
#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;
}

81
recompress_files.c Normal file
View File

@ -0,0 +1,81 @@
#include <gtk/gtk.h>
#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);
}

127
rename.c Normal file
View File

@ -0,0 +1,127 @@
#include <gtk/gtk.h>
#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);
}

15
reopen.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* reopen_menu_item()
*
* Reopen from the menu.
*
*/
void reopen_menu_item(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Reopen function goes here.\n");
}

15
save_changes.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* save_changes()
*
* Save Changes from the menu.
*
*/
void save_changes(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Save Changes function goes here.\n");
}

View File

@ -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");
}

15
select_all.c Normal file
View File

@ -0,0 +1,15 @@
#include <gtk/gtk.h>
/*
*
* select_all()
*
* Select All from the menu.
*
*/
void select_all(GtkWidget *widget, gpointer data)
{
/* --- Display message --- */
g_print("Select All function goes here.\n");
}

71
select_first_sst_image.c Normal file
View File

@ -0,0 +1,71 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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);
}

70
select_image_convert.c Normal file
View File

@ -0,0 +1,70 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#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);
}

View File

@ -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);
}

View File

@ -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),

28
show_error.c Normal file
View File

@ -0,0 +1,28 @@
#include <gtk/gtk.h>
#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);
}

16
test.c Normal file
View File

@ -0,0 +1,16 @@
#include <gtk/gtk.h>
#include "calvados.h"
/*
*
* test()
*
* Display test dialog
*
*/
void test(GtkWidget *widget, gpointer data)
{
g_print("test goes here\n");
}