
/* STMenuCategory.m - written by Robert Vasvari 6/94
   this class is created solely for the purpose of dealing with
   menus */

#import "STMenuCategory.h"

@implementation STAppController(MenuController)


- setupMenus:sender
{
id  matrix;
	
	/* take care of the document menu */
	matrix=[documentMenu itemList];
	[[matrix cellAt:2 :0] //save
		setUpdateAction:@selector(updateDocMenus:) forMenu:documentMenu];
	[[matrix cellAt:3 :0] //saveAs
		setUpdateAction:@selector(updateDocMenus:) forMenu:documentMenu];
	[[matrix cellAt:4 :0] //SaveTo
		setUpdateAction:@selector(updateDocMenus:) forMenu:documentMenu];
	[[matrix cellAt:5 :0] //SaveAll
		setUpdateAction:@selector(updateDocMenus:) forMenu:documentMenu];
	[[matrix cellAt:6 :0] //Revert
		setUpdateAction:@selector(updateDocMenus:) forMenu:documentMenu];
	[[matrix cellAt:7 :0] //Close
		setUpdateAction:@selector(updateDocMenus:) forMenu:documentMenu];

	/* take care of the window menu */
    [windowsMiniaturize setUpdateAction:
	     @selector(updateWindowsMiniaturize:) forMenu:[NXApp windowsMenu]];
    [windowsClose setUpdateAction:
		 @selector(updateWindowsClose:) forMenu:[NXApp windowsMenu]];

    /* this will fix all of the edit menus */
    matrix=[editMenu itemList];
	[[matrix cellAt:0 :0] setUpdateAction:
		 @selector(updateEditMenus:) forMenu:editMenu];
	[[matrix cellAt:1 :0] setUpdateAction:
		 @selector(updateEditMenus:) forMenu:editMenu];
	[[matrix cellAt:2 :0] setUpdateAction:
		 @selector(updateEditMenus:) forMenu:editMenu];
	[[matrix cellAt:3 :0] setUpdateAction:
		 @selector(updateEditMenus:) forMenu:editMenu];
	[[matrix cellAt:4 :0] setUpdateAction:
		 @selector(updateEditMenus:) forMenu:editMenu];

	return self;
}

/* menu update methods */

- (BOOL)updateDocMenus:aMenuCell
{	
	return [self setMenu:aMenuCell
			     enable:([self currentDoc]!=nil)];
}

- (BOOL)updateWindowsMiniaturize:aMenuCell
{
    id t;

    t=[NXApp calcTargetForAction:[aMenuCell action]];
	return [self setMenu:aMenuCell
			     enable:(t && ([t buttonMask]&NX_MINIATURIZEBUTTONMASK)!=0)];
}

- (BOOL)updateWindowsClose:aMenuCell
{
    id t=[NXApp calcTargetForAction:[aMenuCell action]];
	return [self setMenu:aMenuCell
			     enable:(t && ([t buttonMask]&NX_CLOSEBUTTONMASK)!=0)];
}

- (BOOL)updateEditMenus:aMenuCell
{	
	return [self setMenu:aMenuCell
			     enable:[[[NXApp keyWindow] firstResponder]
				 			respondsTo:@selector(paste:)]];
}

- (BOOL)isDeleteEnabled
{	return [editDelete isEnabled];
}

- (BOOL)setMenu:aMenuCell enable:(BOOL)flag
{	if(flag)
	 { 	if(![aMenuCell isEnabled]) 
		 { 	[aMenuCell setEnabled:YES];
			return YES;
		 }
	 }
	else
	 { if([aMenuCell isEnabled]) 
		{ [aMenuCell setEnabled:NO];
		return YES;
		}
	 } 
	  
	return NO;
}

@end
