From b5e6f888d7214cd553cd383dde5c219e6c90ee36 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 5 Feb 2013 18:24:32 -0800 Subject: [PATCH] Support for project history and quick switch in XCC --- Tools/XcodeCapp/AppController.h | 4 + Tools/XcodeCapp/AppController.m | 65 ++++- .../English.lproj/MainMenu.nib/designable.nib | 256 ++++-------------- .../MainMenu.nib/keyedobjects.nib | Bin 22936 -> 23129 bytes 4 files changed, 114 insertions(+), 211 deletions(-) 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 3d5aee7108868d04159663be9f71988cf9f06905..3d3db2212465c2fd398cc75cdd1cef39d690e3ce 100644 GIT binary patch literal 23129 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 J_P^zm{}+@bD1!h1 literal 22936 zcmd742Y3`!_b`6%w4F4vlb(>W>BW>y-6W*!X0yA15RlOOCRsut$;Mf&~->r6V9%P(-jJD5C#!XEq@q@B93|=l6X7=gSf@J9FpUbI(2foSCYo z`nndEUVju}#2^-Nh)06>j`;52xCxHtmO5wS;5cX1I7hXsWk{U8xq56JobDgzayI!P zJZsg962l`65>XV2MR6zvrK2n~3e}=iam@zWtY3%sJ*fbA|bZ`IWiG++e$~zHAU1%!aX1td31! z)7cC*hs|a4k%sNYma<0H%$Bo#+56c3>;QH&YiDa%2kT@fvH+Kz%o0{+r?J!78SG4U z9y_0XlzoQX%s$7y!oJDwXFp~?Wsk9^*>mhy?6>Tn9E&b-9OuD#a=x6F^XDSCNG^(t z;gYyyT*9SsnOqiU;PSa*t_RnXyO-<5_2UL|HQYF^k#lk`u9bU`Bg{c=CO4Ox$34O= z;+Akrxz*enZY{TtThDFaHgcP|7q~6l4sI9s8n>H!i`&N?;6CC$<_>eGxX-xL+--=5O@R?uK@_|MZ^1|K6a0k`AykMIqJ%ghUPuw{ z5%fZ)kSBB#iUgBTCfJ1TLVsa^Fi;pIj6k!6Q9_L{UZ@uugjQjKFj1H!JS5B#W(#wK zxx(YZ6T(vANnx4rl(0@%FKiGt3Oj|Dg;#`EghI3gU?gllRv zC&ZrOy<#u1w^$+e5&MewiT%V%vA;M#94HPF2a7|*q2e%cxHv)_DUK3Hi*~U}tQKoT zhd4&86~~Ho;y7`x_Tg7eSc5#RJlDJcRS$su& zRoo@MChig68W7jmT3>$}c_2^Zg}jju>VkZc7D>nt`J(_7h=Ncs3PGVL41U8=1d1G3 zQQ6Pwbd9K}G&>s`LCt{1X&GKo*{80iWuU#j)zLCa>kD616{Mbl!S3((Iwr&Q(27b^ zb+x0VrLL;3zRoqd^S#=N%7Jxoq24j5uCc~B5rzlfW%%6zxlwX9w+xJ{uD7?e3{?@M zqX|PaGF~L(M`Zl4%&>%q|73=d8BWHJ9!5G?b2N$>1`DHiR@fUHge4r{ZfXLZTWzN+ zJ&fW}0!lwjP8L6Qc)V9lYdqW{X6>*gFs6MZDEr8jE6xC+rOD3v9Tn*;!xj zXdYbSsCU%bT@IC^4XAOHHlU)iqOPh>tE=AO>R^qvr~x@qGHe!H>o|K0qZ-tVTF@An zunS2e-e=JSG!acglhFfc3VIMwZbJ{DsfZvMO+(Ys3^WtXLbK5vG#AZ7^U(r0_b_ax z%Dw$SKt^dJDk=xGIGTGjx*W}8?A4AQE=NO;8b_n6ZcLq{c?j&heNtuJ19b7~ZT;&2 zl_o6#i$p1wDbcCIh!f3z?jPFW{0Cuod^U^9aCnn9$(j33!n$}x7OQhTRK21 z%neLVfhxzNv{L(Bm9EM4j^6f`@x+%Pau3lGKM#^ZQnid<%_M|~M3AHl9;FSRG9@=V zD?K+=mz@WH+ER5>vJLPpGdH`fZGfrD+3JFw>uYax)E`HS(Gv7HknIVy6iBlSJ%yH| z6=82zo`(&ag;t}jXf|jwv!lKq zuvO+8rHuq}udfHS)5}>4GGE`zJ{eY1Ue~N@IzX(lwaL*;u>|5;8tEp~kYExhl33yg zpCAeQc#P5pPMMNrNY&+KE5ymtr|Jy)wziYE;j|QOLNB469T)*VB%Z{%A$gocucJMH z{u}5`^cH#>?M3gv>fS@|qkU*U`T%`MRTUuLzQ1l+pi~0X0L><6GcX_QF6D;WW@l?- zjoDf6Y=-;#14Wf%AUeGdc#$gc4scn1oE8~@kTE2bgp+6z;wP4IXq0yT;A&@$!)$MA z($zR7IO?5Ejv8InWSyze<*aLT=z2SvtL-)Rde5fjx(0iFgOh4aqvD4)IqI95ozyc; zcQ)60dQPl!jn!3C0j{fRRm_NPOtZ5=XKJ!H+sD

^f^*%h(2cqo=+7jIrY=z1rDu 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 QMEMc-sejx5w_W=G0O+9xCjbBd