From 6485275f2188f6a5d1b5efd1f8ee80da6c9ed9a8 Mon Sep 17 00:00:00 2001 From: "Philippe C.D. Robert" Date: Sat, 2 Feb 2002 21:15:38 +0000 Subject: [PATCH] Menus are now enabled/disabled whenever they should... git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@12391 72102866-910b-0410-8b05-ffd578937521 --- ProjectCenter/PCAppController+MenuHandling.h | 3 +- ProjectCenter/PCAppController+MenuHandling.m | 10 +-- ProjectCenter/PCMenuController.h | 6 +- ProjectCenter/PCMenuController.m | 95 +++++++++++++++----- ProjectCenter/ProjectCenter_main.m | 11 ++- 5 files changed, 88 insertions(+), 37 deletions(-) diff --git a/ProjectCenter/PCAppController+MenuHandling.h b/ProjectCenter/PCAppController+MenuHandling.h index 5737225..41e5894 100644 --- a/ProjectCenter/PCAppController+MenuHandling.h +++ b/ProjectCenter/PCAppController+MenuHandling.h @@ -52,11 +52,12 @@ - (void)addFile:(id)sender; - (void)openFile:(id)sender; - (void)saveFile:(id)sender; -- (void)saveFileAs:(id)sender; - (void)revertFile:(id)sender; - (void)renameFile:(id)sender; - (void)removeFile:(id)sender; +- (BOOL)validateMenuItem:(id )menuItem; + @end diff --git a/ProjectCenter/PCAppController+MenuHandling.m b/ProjectCenter/PCAppController+MenuHandling.m index 76ca1ca..aa01c26 100644 --- a/ProjectCenter/PCAppController+MenuHandling.m +++ b/ProjectCenter/PCAppController+MenuHandling.m @@ -122,11 +122,6 @@ [menuController saveFile:sender]; } -- (void)saveFileAs:(id)sender -{ - [menuController saveFileAs:sender]; -} - - (void)revertFile:(id)sender { [menuController revertFile:sender]; @@ -142,4 +137,9 @@ [menuController removeFile:sender]; } +- (BOOL)validateMenuItem:(id )menuItem +{ + return [menuController validateMenuItem:menuItem]; +} + @end diff --git a/ProjectCenter/PCMenuController.h b/ProjectCenter/PCMenuController.h index b725638..90867ac 100644 --- a/ProjectCenter/PCMenuController.h +++ b/ProjectCenter/PCMenuController.h @@ -38,6 +38,8 @@ NSBox *projectTypeAccessaryView; id projectTypePopup; + + BOOL editorIsKey; } //============================================================================ @@ -74,7 +76,6 @@ - (void)addFile:(id)sender; - (void)openFile:(id)sender; - (void)saveFile:(id)sender; -- (void)saveFileAs:(id)sender; - (void)revertFile:(id)sender; - (void)renameFile:(id)sender; - (void)removeFile:(id)sender; @@ -85,4 +86,7 @@ - (BOOL)validateMenuItem:(id )menuItem; +- (void)editorDidResignKey:(NSNotification *)aNotification; +- (void)editorDidBecomeKey:(NSNotification *)aNotification; + @end diff --git a/ProjectCenter/PCMenuController.m b/ProjectCenter/PCMenuController.m index 5d33ead..d3dd142 100644 --- a/ProjectCenter/PCMenuController.m +++ b/ProjectCenter/PCMenuController.m @@ -37,10 +37,24 @@ - (id)init { - if ((self = [super init])) { - // The accessory view + if ((self = [super init])) + { + NSRect fr = NSMakeRect(20,30,160,20); + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(editorDidBecomeKey:) + name:PCEditorDidBecomeKeyNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(editorDidResignKey:) + name:PCEditorDidResignKeyNotification + object:nil]; + + editorIsKey = NO; + projectTypeAccessaryView = [[NSBox alloc] init]; - projectTypePopup = [[[NSPopUpButton alloc] initWithFrame:NSMakeRect(20,30,160,20) pullsDown:NO] autorelease]; + projectTypePopup = [[NSPopUpButton alloc] initWithFrame:fr pullsDown:NO]; [projectTypePopup addItemWithTitle:@"No type available!"]; [projectTypeAccessaryView setTitle:@"Project Types"]; @@ -49,13 +63,18 @@ [projectTypeAccessaryView addSubview:projectTypePopup]; [projectTypeAccessaryView sizeToFit]; [projectTypeAccessaryView setAutoresizingMask: NSViewWidthSizable]; + + RELEASE(projectTypePopup); } return self; } - (void)dealloc { - [projectTypeAccessaryView release]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + RELEASE(projectTypeAccessaryView); + [super dealloc]; } @@ -63,7 +82,8 @@ { static BOOL _firstItem = YES; - if (_firstItem) { + if (_firstItem) + { _firstItem = NO; [projectTypePopup removeItemWithTitle:@"No type available!"]; } @@ -106,15 +126,18 @@ retval = [openPanel runModalForDirectory:[[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenDirectory"] file:nil types:[NSArray arrayWithObjects:@"project",@"pcproj",nil]]; - if (retval == NSOKButton) { + if (retval == NSOKButton) + { BOOL isDir; [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + projPath = [[openPanel filenames] objectAtIndex:0]; if ([[NSFileManager defaultManager] fileExistsAtPath:projPath - isDirectory:&isDir] && !isDir){ + isDirectory:&isDir] && !isDir) + { if (![projectManager openProjectAt:projPath]) { NSRunAlertPanel(@"Attention!", @@ -221,11 +244,16 @@ BOOL isDir; [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + filePath = [[openPanel filenames] objectAtIndex:0]; - if ([[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDir] && !isDir) { - if (![projectManager openFile:filePath]) { - NSRunAlertPanel(@"Attention!",@"Couldn't open %@!",@"OK",nil,nil,filePath); + if ([[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDir] && !isDir) + { + if (![projectManager openFile:filePath]) + { + NSRunAlertPanel(@"Attention!", + @"Couldn't open %@!", + @"OK",nil,nil,filePath); } } } @@ -241,15 +269,6 @@ [projectManager saveFile]; } -- (void)saveFileAs:(id)sender -{ - NSString *proj; - -// Show open panel - - [projectManager saveFileAs:proj]; -} - - (void)revertFile:(id)sender { [projectManager revertFile]; @@ -274,7 +293,8 @@ ret = NSRunAlertPanel(@"Remove File!",@"Really remove %@ in project %@?",@"Cancel",@"...from Project only",@"...from Project and Disk",file,[proj projectName]); - if (ret == NSAlertAlternateReturn || ret == NSAlertOtherReturn) { + if (ret == NSAlertAlternateReturn || ret == NSAlertOtherReturn) + { BOOL flag = (ret == NSAlertOtherReturn) ? YES : NO; [projectManager removeFilePermanently:flag]; @@ -288,13 +308,40 @@ - (BOOL)validateMenuItem:(id )menuItem { - if (![[projectManager loadedProjects] count]) { - if ([menuItem title] == @"New in Project") return NO; - if ([menuItem title] == @"Add File") return NO; - if ([menuItem title] == @"Remove File") return NO; + if ([[projectManager loadedProjects] count] == 0) + { + // File related menu items + if ([[menuItem title] isEqualToString:@"New in Project"]) return NO; + if ([[menuItem title] isEqualToString:@"Add File"]) return NO; + if ([[menuItem title] isEqualToString:@"Remove File"]) return NO; + if ([[menuItem title] isEqualToString:@"Save File"]) return NO; + if ([[menuItem title] isEqualToString:@"Revert"]) return NO; + if ([[menuItem title] isEqualToString:@"Rename"]) return NO; + + // Project related menu items + if ([[menuItem title] isEqualToString:@"Close"]) return NO; + if ([[menuItem title] isEqualToString:@"Save..."]) return NO; + if ([[menuItem title] isEqualToString:@"Save As..."]) return NO; + } + + // File related menu items + if( editorIsKey == NO ) + { + if ([[menuItem title] isEqualToString:@"Save File"]) return NO; + if ([[menuItem title] isEqualToString:@"Revert"]) return NO; + if ([[menuItem title] isEqualToString:@"Rename"]) return NO; } return YES; } +- (void)editorDidResignKey:(NSNotification *)aNotification +{ + editorIsKey = NO; +} +- (void)editorDidBecomeKey:(NSNotification *)aNotification +{ + editorIsKey = YES; +} + @end diff --git a/ProjectCenter/ProjectCenter_main.m b/ProjectCenter/ProjectCenter_main.m index 5af037f..be4efea 100644 --- a/ProjectCenter/ProjectCenter_main.m +++ b/ProjectCenter/ProjectCenter_main.m @@ -98,8 +98,8 @@ void createMenu() [menu setSubmenu:project forItem:[menu itemWithTitle:@"Project"]]; [project addItemWithTitle:@"Open" action:@selector(openProject:) keyEquivalent:@"o"]; [project addItemWithTitle:@"New" action:@selector(newProject:) keyEquivalent:@"n"]; - [project addItemWithTitle:@"Save" action:@selector(saveProject:) keyEquivalent:@"s"]; - [project addItemWithTitle:@"Save As" action:@selector(saveProjectAs:) keyEquivalent:@"S"]; + [project addItemWithTitle:@"Save..." action:@selector(saveProject:) keyEquivalent:@"s"]; + [project addItemWithTitle:@"Save As..." action:@selector(saveProjectAs:) keyEquivalent:@"S"]; [project addItemWithTitle:@"Subprojects" action:action keyEquivalent:@""]; [project addItemWithTitle:@"Close" action:@selector(closeProject:) keyEquivalent:@""]; @@ -115,12 +115,11 @@ void createMenu() file = [[[NSMenu alloc] init] autorelease]; [menu setSubmenu:file forItem:[menu itemWithTitle:@"File"]]; - [file addItemWithTitle:@"Open..." action:@selector(openFile:) keyEquivalent:@"O"]; - [file addItemWithTitle:@"Add..." action:@selector(addFile:) keyEquivalent:@"A"]; + [file addItemWithTitle:@"Open File" action:@selector(openFile:) keyEquivalent:@"O"]; + [file addItemWithTitle:@"Add File" action:@selector(addFile:) keyEquivalent:@"A"]; [file addItemWithTitle:@"New in Project" action:@selector(newFile:) keyEquivalent:@"N"]; [file addItemWithTitle:@"Remove File" action:@selector(removeFile:) keyEquivalent:@""]; - [file addItemWithTitle:@"Save..." action:@selector(saveFile:) keyEquivalent:@""]; - [file addItemWithTitle:@"Save as..." action:@selector(saveFileAs:) keyEquivalent:@""]; + [file addItemWithTitle:@"Save File" action:@selector(saveFile:) keyEquivalent:@""]; [file addItemWithTitle:@"Revert" action:@selector(revertFile:) keyEquivalent:@""]; [file addItemWithTitle:@"Rename" action:@selector(renameFile:) keyEquivalent:@""];