This is WoodDoc_ValidateMenuCells.m in view mode; [Download] [Up]
#import "wooddoc.h"
@implementation WoodDoc (ValidateMenuCells)
- (BOOL)validateCommand:menuCell
{
SEL action = [menuCell action];
BOOL redraw = NO, enabled = [menuCell isEnabled];
char buffer[100];
if(action == @selector(revertToSaved:)){
if(!enabled && [self needsSaving] && [self hasSavedDocument]){
[menuCell setEnabled:YES];
redraw = YES;
} else if(enabled && (![self needsSaving] || ![self hasSavedDocument])){
[menuCell setEnabled:NO];
redraw = YES;
};
} else if(action == @selector(save:) || action == @selector(saveAs:)
|| action == @selector(print:) || action == @selector(saveTo:)){
if(!enabled){
[menuCell setEnabled:YES];
redraw = YES;
}
} else if(action == @selector(changeZip:)){
if(lastSelectedNode){
if(!enabled){
redraw = YES;
[menuCell setEnabled:YES];
}
if([lastSelectedNode zipped] && strcmp([menuCell title], "Expand")){
[menuCell setTitle:"Expand"];
redraw = YES;
} else if(![lastSelectedNode zipped] && strcmp([menuCell title], "Collapse")){
[menuCell setTitle:"Collapse"];
redraw = YES;
}
} else if(enabled){
[menuCell setEnabled:NO];
redraw = YES;
}
} else if(action == @selector(copy:) || action == @selector(cut:)
|| action == @selector(delete:) || action == @selector(copyStyle:)
|| action == @selector(pasteStyle:) || action == @selector(promoteStyle:)){
if(lastSelectedNode){
if(!enabled){
[menuCell setEnabled:YES];
redraw = YES;
}
} else {
if(enabled){
[menuCell setEnabled:NO];
redraw = YES;
}
}
} else if(action == @selector(paste:) || action == @selector(add:)
|| action == @selector(addFromFilter:)){
if(lastSelectedNode || !tree){
if(!enabled){
[menuCell setEnabled:YES];
redraw = YES;
}
} else {
if(enabled){
[menuCell setEnabled:NO];
redraw = YES;
}
}
} else if(action == @selector(changeDescription:)){
if(lastSelectedNode && !textViewSaved){
if(!enabled){
redraw = YES;
[menuCell setEnabled:YES];
}
} else if(enabled){
[menuCell setEnabled:NO];
redraw = YES;
}
} else if(action == @selector(toggleMarker:)){
if(!enabled){
redraw = YES;
[menuCell setEnabled:YES];
}
if(showMarker && !strcmp([menuCell title], "Show Marker")){
[menuCell setTitle:"Hide Marker"];
redraw = YES;
} else if(!showMarker && !strcmp([menuCell title], "Hide Marker")){
[menuCell setTitle:"Show Marker"];
redraw = YES;
}
} else if(action == @selector(undo:)){
if([undoManager lastUndoName]){
if(!enabled){
redraw = YES;
[menuCell setEnabled:YES];
}
sprintf(buffer,"Undo %s",[undoManager lastUndoName]);
if(strcmp([menuCell title], buffer)){
redraw = YES;
[menuCell setTitle:buffer];
}
} else if(enabled){
[menuCell setEnabled:NO];
redraw = YES;
}
} else if(action == @selector(redo:)){
if([undoManager lastRedoName]){
if(!enabled){
redraw = YES;
[menuCell setEnabled:YES];
}
sprintf(buffer,"Redo %s",[undoManager lastRedoName]);
if(strcmp([menuCell title], buffer)){
redraw = YES;
[menuCell setTitle:buffer];
}
} else if(enabled){
[menuCell setEnabled:NO];
redraw = YES;
}
}
return redraw;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.