This is WoodDoc_TargetAction.m in view mode; [Download] [Up]
#import "wooddoc.h"
@implementation WoodDoc (TargetAction)
- changeLayout:sender
{
NXRect dummyRect;
if([[NXApp pageLayout:self] runModal] == NX_OKTAG){
[window disableFlushWindow];
calcFrame(printInfo, &dummyRect);
[treeView checkResize:&dummyRect for:tree];
[self dirty:YES];
[scrollView display];
[window reenableFlushWindow];
[window flushWindow];
[window makeFirstResponder:treeView];
}
return self;
}
- save:sender
{
id savepanel;
const char *dir = NULL;
char *oldName = NULL;
BOOL changeName = NO;
if(theOOEClient != nil) {
[self updateOOETarget:sender];
[self clean:self];
return self;
}
savepanel = [SavePanel new];
[savepanel setAccessoryView:nil];
[savepanel setRequiredFileType:[[self class] docExtension]];
if (![self hasSavedDocument]) {
changeName = YES;
if (![savepanel runModalForDirectory:directory file:name])
return nil;
}
if(changeName){
oldName = NXCopyStringBufferFromZone([self fileName],[self zone]);
[self setName:[savepanel filename]];
}
if([self save]){
[self dirty:NO];
[self setSavedDocument:YES];
dir = [self directory];
[NXApp setDefaultDir:dir];
return self;
} else {
if(changeName){
[self setName:oldName];
NX_FREE(oldName);
}
return nil;
}
}
- saveAs:sender
{
BOOL oldSavedFile, oldDirty;
oldDirty = [self needsSaving];
oldSavedFile = [self hasSavedDocument];
[self dirty:YES];
[self setSavedDocument:NO];
if ([self save:sender])
return self;
else {
[self setSavedDocument:oldSavedFile];
[self dirty:oldDirty];
return nil;
}
}
- saveTo:sender
{
id savepanel;
NXStream *stream;
savepanel = [SavePanel new];
if(!saveToAccessoryWindow)
[NXApp loadNibSection:"SaveTo.nib" owner:self withNames:NO];
[savepanel setAccessoryView:[saveToAccessoryWindow contentView]];
[savepanel setTitle:"Save to"];
[savepanel setRequiredFileType:"diagram2"];
//if(![savepanel runModalForDirectory:NXHomeDirectory() file:"Untitled.diagram2"])
if(![savepanel runModal])
return nil;
[printInfo setHorizontalPages:[treeView canvasX]];
[printInfo setVerticalPages:[treeView canvasY]];
if([saveToAccessoryControl selectedCol] == 0)
[Tree saveToD2Tree:tree fromView:treeView toFile:[savepanel filename] printInfo:printInfo];
else {
stream = NXOpenMemory(NULL,0,NX_WRITEONLY);
[treeView writePSToStream:stream usingTree:tree];
NXSaveToFile(stream, [savepanel filename]);
NXCloseMemory(stream,NX_FREEBUFFER);
}
[savepanel setTitle:"Save"];
[savepanel setRequiredFileType:[[self class] docExtension]];
[savepanel setAccessoryView:nil];
return self;
}
- selectSaveToFormat:sender
{
id savepanel;
savepanel = [SavePanel new];
if([saveToAccessoryControl selectedCol] == 0)
[savepanel setRequiredFileType:"diagram2"];
else
[savepanel setRequiredFileType:"eps"];
return self;
}
- revertToSaved:sender
{
WoodDoc *dummy;
if (![self hasSavedDocument] ||
![self needsSaving] ||
(NXRunAlertPanel(localString("Revert"),
localString("%s has been edited. Are you sure you want to undo changes?"),
localString("Revert"),
localString("Cancel"), NULL, name) != NX_ALERTDEFAULT)) {
return self;
}
dummy = self;
[[self class] setIncPos:NO];
self = [[[NXApp docClass] allocFromZone:[NXApp newDocZone]] initFromFile:[dummy fileName]];
[[self class] setIncPos:YES];
[[dummy window] close];
return self;
}
- copy:sender;
{
return [self copyToPasteboard:[Pasteboard new]];
}
- cut:sender
{
if([self copyToPasteboard:[Pasteboard new]])
return [self delete:self];
return nil;
}
- paste:sender
{
return [self pasteFromPasteboard:[Pasteboard new]];
}
- delete:sender
{
if(!lastSelectedNode)
return self;
if(lastSelectedNode == tree){
[undoManager freeUndoArgsOnRecordDiscard];
[undoManager setUndoName:"Deletion"];
[undoManager setRedoName:"Addition"];
[[undoManager setUndoTarget:self] makeAddTree:tree];
tree = lastSelectedNode = nil;
[self setEmpty:YES];
[self updateViewsDirty:YES rect:NULL flag:UPDATE_ALL];
} else
[[lastSelectedNode parent] removeChild:lastSelectedNode];
[[NXApp inspectorManager] revert:self];
return self;
}
- add:sender
{
[self makeAddTree:[[Tree allocFromZone:[self zone]] initLabel:NULL props:&defaultProps]];
return self;
}
- addFromFilter:sender
{
id filter;
filter = [NXApp filter:[[sender selectedCell] tag]];
if([filter conformsTo:@protocol(PFilter)]){
[self makeAddTree:[[filter class] filterWithProps:&defaultProps inZone:[self zone]]];
}
return self;
}
- print:sender
{
[treeView printPSCode:nil];
return self;
}
- copyStyle:sender;
{
return [self copyStyleToPasteboard:[Pasteboard new]];
}
- pasteStyle:sender
{
return [self pasteStyleFromPasteboard:[Pasteboard new]];
}
- promoteStyle:sender;
{
if(!lastSelectedNode)
return nil;
[lastSelectedNode applyStyleToSubtree];
return self;
}
- toggleMarker:sender
{
showMarker = !showMarker;
[self updateViewsDirty:NO rect:NULL flag:UPDATE_TREEVIEW];
return self;
}
- changeFont:sender
{
if(!lastSelectedNode)
return nil;
[lastSelectedNode changeFont:sender];
return self;
}
- changeZip:sender
{
if(!lastSelectedNode)
return nil;
[lastSelectedNode changeZipped];
return self;
}
- changeDescription:sender
{
if(!lastSelectedNode)
return nil;
[lastSelectedNode changeDescriptionFrom:[textView docView]];
textViewSaved = YES;
return self;
}
- undo:sender
{
[undoManager undo:sender];
return self;
}
- redo:sender
{
[undoManager redo:sender];
return self;
}
- clean:sender
{
[window setDocEdited:NO];
return self;
}
- close:sender
{
[window performClose:self];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.