diff --git a/Tools/XcodeCapp/AppController.h b/Tools/XcodeCapp/AppController.h index 08b48ebe3..da1ee84f5 100644 --- a/Tools/XcodeCapp/AppController.h +++ b/Tools/XcodeCapp/AppController.h @@ -39,6 +39,7 @@ IBOutlet TNXCodeCapp *xcc; IBOutlet NSWindow *windowDebug; IBOutlet NSMenuItem *menuDebug; + IBOutlet NSMenuItem *menuHistory; IBOutlet TNErrorDataView *dataViewError; NSImage *_iconActive; @@ -58,6 +59,7 @@ - (void)registerDefaults; - (void)growlWithTitle:(NSString *)aTitle message:(NSString *)aMessage; - (void)openCenteredWindow:(NSWindow *)aWindow; +- (void)_prepareHistoryMenu; - (IBAction)chooseFolder:(id)aSender; - (IBAction)openErrors:(id)sender; @@ -67,6 +69,8 @@ - (IBAction)openHelp:(id)aSender; - (IBAction)openAbout:(id)aSender; - (IBAction)updatePreferences:(id)aSender; +- (IBAction)switchProject:(id)aSender; +- (IBAction)clearProjectHistory:(id)aSender; @end diff --git a/Tools/XcodeCapp/AppController.m b/Tools/XcodeCapp/AppController.m index 176e90624..730709a4d 100644 --- a/Tools/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/AppController.m @@ -93,15 +93,17 @@ float heightForStringDrawing(NSString *myString, NSFont *myFont, float myWidth) } [xcc setDelegate:self]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappConversionDidStart:) name:XCCConversionStartNotification object:xcc]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappConversionDidStop:) name:XCCConversionStopNotification object:xcc]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappPopulateProject:) name:XCCDidPopulateProjectNotification object:xcc]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappListeningDidStart:) name:XCCListeningStartNotification object:xcc]; - + [helpTextView setTextContainerInset:NSSizeFromCGSize(CGSizeMake(10.0, 10.0))]; - + [xcc start]; + + [self _prepareHistoryMenu]; } /*! @@ -133,6 +135,7 @@ float heightForStringDrawing(NSString *myString, NSFont *myFont, float myWidth) [appDefaults setObject:[NSNumber numberWithInt:0] forKey:@"XCCAPIMode"]; [appDefaults setObject:[NSNumber numberWithInt:1] forKey:@"XCCReactMode"]; [appDefaults setObject:[NSNumber numberWithInt:1] forKey:@"XCCReopenLastProject"]; + [appDefaults setObject:[[NSArray alloc] init] forKey:@"XCCProjectHistory"]; [defaults registerDefaults:appDefaults]; } @@ -215,6 +218,33 @@ float heightForStringDrawing(NSString *myString, NSFont *myFont, float myWidth) clickContext:nil]; } +/*! + Prepare the history menu + */ +- (void)_prepareHistoryMenu +{ + NSMenu *menu = [[NSMenu alloc] init]; + NSArray *projectHistory = [[NSUserDefaults standardUserDefaults] objectForKey:@"XCCProjectHistory"]; + + for(int i = 0; i < [projectHistory count]; i++) + { + NSString *itemTitle = [[projectHistory objectAtIndex:i] lastPathComponent]; + NSString *projectPath = [[projectHistory objectAtIndex:i] stringByStandardizingPath]; + NSString *currentProjectPath = [[[xcc currentProjectURL] path] stringByStandardizingPath]; + NSMenuItem *item = [menu addItemWithTitle:itemTitle action:@selector(switchProject:) keyEquivalent:@""]; + + [item setRepresentedObject:projectPath]; + + if ([currentProjectPath isEqualToString:projectPath]) + [item setAction:nil]; + } + + [menu addItem:[NSMenuItem separatorItem]]; + [menu addItemWithTitle:@"Clear history" action:@selector(clearProjectHistory:) keyEquivalent:@""]; + + [menuHistory setEnabled:([projectHistory count]) ? YES : NO]; + [menuHistory setSubmenu:menu]; +} #pragma mark - @@ -250,7 +280,19 @@ float heightForStringDrawing(NSString *myString, NSFont *myFont, float myWidth) if ([openPanel runModal] != NSFileHandlingPanelOKButton) return; - [xcc listenProjectAtPath:[NSString stringWithFormat:@"%@/", [[[openPanel URLs] objectAtIndex:0] path]]]; + NSString *projectPath = [NSString stringWithFormat:@"%@/", [[[openPanel URLs] objectAtIndex:0] path]]; + NSMutableArray *projectHistory = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"XCCProjectHistory"]]; + + if ([projectHistory containsObject:[projectPath stringByStandardizingPath]]) + [projectHistory removeObject:[projectPath stringByStandardizingPath]]; + + [projectHistory insertObject:[projectPath stringByStandardizingPath] atIndex:0]; + + [[NSUserDefaults standardUserDefaults] setObject:projectHistory forKey:@"XCCProjectHistory"]; + + [xcc listenProjectAtPath:projectPath]; + + [self _prepareHistoryMenu]; } /*! @@ -268,6 +310,21 @@ float heightForStringDrawing(NSString *myString, NSFont *myFont, float myWidth) [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"LastOpenedPath"]; } +- (IBAction)switchProject:(id)aSender +{ + NSString *newPath = [aSender representedObject]; + + [self stopListener:aSender]; + [xcc listenProjectAtPath:newPath]; + [self _prepareHistoryMenu]; +} + +- (IBAction)clearProjectHistory:(id)aSender +{ + [[NSUserDefaults standardUserDefaults] setObject:[NSArray array] forKey:@"XCCProjectHistory"]; + [self _prepareHistoryMenu]; +} + /*! Open the xCode support project in xCode @param aSender the sender of the action diff --git a/Tools/XcodeCapp/English.lproj/MainMenu.nib/designable.nib b/Tools/XcodeCapp/English.lproj/MainMenu.nib/designable.nib index c200e4951..732003036 100644 --- a/Tools/XcodeCapp/English.lproj/MainMenu.nib/designable.nib +++ b/Tools/XcodeCapp/English.lproj/MainMenu.nib/designable.nib @@ -2,13 +2,13 @@ 1050 - 12D54 - 2844 + 12D61 + 3084 1187.37 626.00 com.apple.InterfaceBuilder.CocoaPlugin - 2844 + 3084 NSButton @@ -60,7 +60,7 @@ - + 256 @@ -117,6 +117,7 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ {375, 153} + {{0, 0}, {1440, 878}} @@ -166,6 +167,24 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ + + + Open Recent... + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + About... @@ -182,7 +201,7 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ - + YES YES @@ -228,7 +247,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ 256 {512, 249} - YES NO @@ -313,7 +331,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ {{1, 1}, {512, 249}} - @@ -324,7 +341,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ -2147483392 {{413, 17}, {15, 166}} - NO @@ -336,7 +352,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ -2147483392 {{1, 183}, {427, 15}} - NO 1 @@ -347,7 +362,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ {{-1, 35}, {514, 251}} - 133682 @@ -363,7 +377,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ 289 {{314, 8}, {85, 19}} - YES @@ -390,8 +403,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ 289 {{407, 8}, {85, 19}} - - YES -2080374784 @@ -411,7 +422,6 @@ YWppdGFAYXBhcmFqaXRhLmNvbQ {512, 285} - {{0, 0}, {1440, 878}} @@ -860,8 +870,6 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 297 {{182, 19}, {18, 19}} - - YES -2080374784 @@ -887,7 +895,6 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 274 {{7, 9}, {170, 18}} - YES @@ -906,7 +913,6 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 266 {{7, 30}, {170, 17}} - YES @@ -930,7 +936,6 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 {209, 57} - TNErrorDataView @@ -1153,6 +1158,14 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 682 + + + menuHistory + + + + 694 + performClose: @@ -1427,8 +1440,10 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 - + + + @@ -1844,6 +1859,16 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 + + 691 + + + + + 692 + + + @@ -1926,199 +1951,16 @@ d2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzIG9uICJBdXRvIi4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - 690 - - - - - AppController - NSObject - - id - id - id - id - id - id - id - id - - - - chooseFolder: - id - - - clearErrors: - id - - - openAbout: - id - - - openErrors: - id - - - openHelp: - id - - - openXCode: - id - - - stopListener: - id - - - updatePreferences: - id - - - - NSPanel - NSPopUpButton - NSButton - TNErrorDataView - NSPanel - NSTableView - NSTextView - NSWindow - NSTextField - NSMenuItem - NSMenuItem - NSMenuItem - NSUserDefaultsController - NSMenu - NSWindow - TNXCodeCapp - - - - aboutWindow - NSPanel - - - buttonPreferencesAPIMode - NSPopUpButton - - - checkBoxPreferencesReactMode - NSButton - - - dataViewError - TNErrorDataView - - - errorsPanel - NSPanel - - - errorsTable - NSTableView - - - helpTextView - NSTextView - - - helpWindow - NSWindow - - - labelVersion - NSTextField - - - menuDebug - NSMenuItem - - - menuItemOpenXCode - NSMenuItem - - - menuItemStartStop - NSMenuItem - - - preferencesController - NSUserDefaultsController - - - statusMenu - NSMenu - - - windowDebug - NSWindow - - - xcc - TNXCodeCapp - - - - IBProjectSource - ./Classes/AppController.h - - - - TNErrorDataView - NSView - - openFile: - id - - - openFile: - - openFile: - id - - - - NSButton - NSTextField - NSTextField - - - - buttonOpenFile - NSButton - - - fieldFileName - NSTextField - - - fieldMessage - NSTextField - - - - IBProjectSource - ./Classes/TNErrorDataView.h - - - - TNXCodeCapp - NSObject - - IBProjectSource - ./Classes/TNXCodeCapp.h - - - + 694 + 0 IBCocoaFramework diff --git a/Tools/XcodeCapp/English.lproj/MainMenu.nib/keyedobjects.nib b/Tools/XcodeCapp/English.lproj/MainMenu.nib/keyedobjects.nib index 3d5aee710..3d3db2212 100644 Binary files a/Tools/XcodeCapp/English.lproj/MainMenu.nib/keyedobjects.nib and b/Tools/XcodeCapp/English.lproj/MainMenu.nib/keyedobjects.nib differ