Catakig/Source/Cocoa/MyDocument/Actions.m

249 lines
6.2 KiB
Objective-C

#import "Catakig-Cocoa.h"
#import "MyDocument.h"
@implementation MyDocument (Actions)
//---------------------------------------------------------------------------
- (IBAction)ClearPrintSession:(id)sender
{/*
Clears this Apple II's accumulated print session.
*/
[mA2 ClearPrintSession];
BeepFor(YES);
}
//---------------------------------------------------------------------------
- (IBAction)CopyScreenImage:(id)sender
{/*
Copies this screen's content to the general pasteboard as a TIFF
image.
*/
NSData* data;
[self Pause];
data = [[mScreen ReadPixels]
representationUsingType:NSTIFFFileType properties:nil ];
[G.pboard SetData:data forType:NSTIFFPboardType];
[self Unpause];
BeepFor(YES);
}
//---------------------------------------------------------------------------
- (IBAction)PasteScreenText:(id)sender
{/*
Enters the pasteboard's text string (if one exists) into this Apple II,
as if all the characters had been typed.
*/
NSString* str = [G.pboard GetString];
if (str)
{
[self Pause];
[mA2 InputChars:str];
[self Unpause];
}
else
BeepFor(NO);
}
//---------------------------------------------------------------------------
- (IBAction)CopyScreenText:(id)sender
{/*
Copies the Apple II's text screen content (visible or not) to the
general pasteboard as one giant string.
*/
NSString* str;
[self Pause];
str = [mA2 TextScreenAsString:YES];
[self Unpause];
[G.pboard SetString:str];
}
//---------------------------------------------------------------------------
- (IBAction)SaveScreenImage:(id)sender
{/*
Saves this Apple II's screen content to an image file of the user's
choosing.
*/
NSSavePanel* panel = [NSSavePanel savePanel];
// [mSaveImageView retain]; // need retain??
[panel setMessage:@"Save Screen Image to File"];
[panel setAccessoryView:mSaveImageView]; // need retain??
// [panel setCanSelectHiddenExtension:YES];
[panel beginSheetForDirectory:nil
file: nil // @"screen"
modalForWindow: [mScreen window]
modalDelegate: self
didEndSelector: @selector(_SaveScreenImage2:resp:sender:)
contextInfo: sender ];
}
//---------------------------------------------------------------------------
- (void)_SaveScreenImage2:(NSSavePanel*)panel
resp:(int)userResponse sender:(id)sender
{
if (userResponse != NSOKButton)
return;
NSData* data;
NSString* fpath = [panel filename];
int fileType = [mSaveImageTypes selectedTag];
NSString* extensions[/*NSBitmapImageFileType*/] =
{ @"tiff", @"bmp", @"gif", @"jpeg", @"png" };
if ([mSaveImageAddSuffix intValue] == NSOnState)
fpath = [fpath stringByAppendingPathExtension:
extensions[fileType]];
data = [[mScreen ReadPixels]
representationUsingType:fileType properties:nil];
if (data == nil)
{
ErrorAlert([mScreen window],
@"Image can't be created.",
@"Allocation problem??");
return;
}
if (not [data writeToFile:fpath atomically:NO])
ErrorAlert([mScreen window],
@"Sorry, cannot save the image file.",
@"Check that folder write permissions and available disk "
"space are sufficient.");
}
//---------------------------------------------------------------------------
- (IBAction)printDocument:(id)sender
{
NSSavePanel* panel = [NSSavePanel savePanel];
// [mPrSessionView retain];
[mPrSessionSize setStringValue:
[NSString stringWithFormat:@"%lu bytes",
[mA2 SizeOfPrintSession] ]];
[panel setAccessoryView:mPrSessionView];
[panel setMessage:@"Save Print Session to File"];
// [panel setTitle:@"the title"];
[panel beginSheetForDirectory:nil
file: nil
modalForWindow: [mScreen window]
modalDelegate: self
didEndSelector: @selector(_printDocument2:resp:sender:)
contextInfo: sender ];
}
//---------------------------------------------------------------------------
- (void)_printDocument2:(NSSavePanel*)panel
resp:(int)userResponse sender:(id)sender
{
if (userResponse != NSOKButton)
return;
NSString* fpath = [panel filename];
int filter = [mPrSessionFilter selectedTag];
if ([mA2 SavePrintSessionAs:filter toFile:fpath])
{
BeepFor(YES);
return;
}
BeepFor(NO); // and alert!!
}
//---------------------------------------------------------------------------
- (IBAction)HitDiskDrive:(id)sender
{/*
Called when user invokes "Load" or "Unload" on a disk drive.
*/
int index = abs([sender tag]) - 1;
id<A2PrDiskDrive> ddrive = [mA2 DiskDrive:index];
NSControl* dname = (&mDDrive0)[index];
if ([sender tag] < 0) // then unload drive and return
{
[ddrive Unload];
[dname setStringValue:@""];
return;
}
NSOpenPanel* panel = [NSOpenPanel openPanel];
NSString* dirStart = nil;
NSString* headers[/*drive index*/] = {
@"Load Floppy Drive #1",
@"Load Floppy Drive #2" };
mFileFilter = 1; // will filter disk image file names
// dirStart = [[G.bundle bundlePath]
// stringByAppendingPathComponent:@"../Disks"];
[panel setDelegate:self];
[panel setAllowsMultipleSelection:NO];
[panel setMessage:headers[index]];
// [panel setPrompt:@"Load"]; //??
// [panel setNameFieldLabel:@"Label"];
[panel beginSheetForDirectory:dirStart
file: nil
types: nil // (NSArray*)fileTypes
modalForWindow: [mScreen window]
modalDelegate: self
didEndSelector: @selector(_HitDiskDrive2:resp:sender:)
contextInfo: sender ];
}
//---------------------------------------------------------------------------
- (void)_HitDiskDrive2:(NSOpenPanel*)panel
resp:(int)userResponse sender:(id)sender
{
mFileFilter = 0;
if (userResponse != NSOKButton)
return;
int index = abs([sender tag]) - 1;
id<A2PrDiskDrive> ddrive = [mA2 DiskDrive:index];
NSTextField* dname = (&mDDrive0)[index];
if ([ddrive Load:[panel filename]])
{
[dname setTextColor:( [ddrive Content] == kA2DiskReadOnly?
[NSColor yellowColor] : [NSColor greenColor] )];
[dname setStringValue:[ddrive Label]];
return;
}
[dname setStringValue:@""];
ErrorAlert([mScreen window],
@"Failed to load disk!",
@"The chosen disk image does not seem to be in a valid format.");
}
//---------------------------------------------------------------------------
- (BOOL)panel:(id)panel shouldShowFilename:(NSString*)path
{
if (mFileFilter == 0) // then no filtering to be done
return YES;
return [A2Computer ShouldShowDiskFilename:path];
}
//---------------------------------------------------------------------------
@end