From 74db52149f84c636fff49e2859f51ce0d92bdb00 Mon Sep 17 00:00:00 2001 From: Sergii Stoian Date: Tue, 21 Aug 2007 21:30:36 +0000 Subject: [PATCH] * Framework/PCProjectBuilderOptions.m: New file. * Headers/ProjectCenter/PCProjectBuilderOptions.h: New file. * ProjectBuilder options handling finished. * Fixed compliance to GNUstep make v2. * Framework/PCFileNameIcon.m: Start implementing drag/drop. * Images/ProjectCenter.tiff: Use ProjectManager's app icon. * Modules/Projects/*/Resources/Info.table: change default targets. * Headers/ProjectCenter/PCDefines.h: Clean up. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@25406 72102866-910b-0410-8b05-ffd578937521 --- .../English.lproj/Builder.gorm/data.classes | 7 +- .../English.lproj/Builder.gorm/data.info | Bin 184 -> 184 bytes .../English.lproj/Builder.gorm/objects.gorm | Bin 23726 -> 18652 bytes .../BuilderOptions.gorm/data.classes | 10 +- .../BuilderOptions.gorm/data.info | Bin 184 -> 184 bytes .../BuilderOptions.gorm/objects.gorm | Bin 4926 -> 4909 bytes Framework/GNUmakefile | 2 + Framework/PCFileNameIcon.m | 60 +++++- Framework/PCProjectBrowser.m | 31 +++ Framework/PCProjectBuilder.m | 189 +++++++++--------- 10 files changed, 187 insertions(+), 112 deletions(-) diff --git a/Framework/English.lproj/Builder.gorm/data.classes b/Framework/English.lproj/Builder.gorm/data.classes index 6f73604..8f5c2a4 100644 --- a/Framework/English.lproj/Builder.gorm/data.classes +++ b/Framework/English.lproj/Builder.gorm/data.classes @@ -9,8 +9,7 @@ "showProjectLaunch:", "showProjectLoadedFiles:", "startBuild:", - "startClean:", - "startInstall:" + "startClean:" ); Super = NSObject; }; @@ -23,7 +22,6 @@ }; PCProjectBuilder = { Actions = ( - "startInstall:", "startBuild:", "startClean:", "showOptionsPanel:" @@ -32,10 +30,9 @@ buildButton, cleanButton, componentView, - installButton, split, optionsButton, - buildStatusField, + statusField, targetField, errorsCountField ); diff --git a/Framework/English.lproj/Builder.gorm/data.info b/Framework/English.lproj/Builder.gorm/data.info index 152bdecf1368d3ccf77b4dfc8ce7496bfad47564..e233f826678d75319f952731e1f6602aa013f991 100644 GIT binary patch delta 12 TcmdnNxPx(mC{t?kMDc|H8x{mB delta 12 TcmdnNxPx(mD3gW7MDc|H8Hoea diff --git a/Framework/English.lproj/Builder.gorm/objects.gorm b/Framework/English.lproj/Builder.gorm/objects.gorm index 171f5a915c847751a721f9fecb2abeddb0c1b870..5a649ef4deb05b0b8168d4c0acf3dd94ed4f26a6 100644 GIT binary patch delta 1404 zcmaKsTTmNS7{~W)3^6X4R!D3pqzR$LbhLh?SZu&jQW{dFNgBw7gjOzzG%ZaKf{heP zD5Q9+E__w1)z-UCadda`;Pjz09iN=>!6$uieDGCY9DUZ&bIw8;yzRr8|Jn0>zyJT7 zIlG_TBtI+@*<6zz@c@6^`_{zpUe#4g44)PSsq0X&{5WYP6-Kil2u55IZxa#yItLNU zr*t4(@@j+sUXtQXw&pLiCj7Q} z&;RtG&V8viIG)esvXih^HH(5p^43s18=wUv-44?uY9;d!SxOQ1VX51xYgMgy>#pC( zqj=5lB>T%>`a!>zw?1$hTYNptzDL-}63Qzwc+|UjP#N0RmB^!SVXrH+wg23jC_p>v zgH7Zyd?@H42k>MtZtBo-X&!J8zX@7NC;k-NZt|*i%vdjV9ux$n6G>kqUOCppBAGTK z9a1gOg=3*cau}CGR^r3e&@N-QYEinB!{Ep7Lk;8z{t@!w?V!o7+M!2FZs2To8V0d9 zKa`)E^vH@Aw}y@~gRL6|M;QtN93JHG5Qhig7>9?kE$plA-L#E9>J!1sVVBOUL}>6Q z{>F@QW{flAoY~KrF-UM`5|?^?)dQQD$0_p!{@81y%oG2@e3CN!2QRXN*B2D+4)DByK42C1^WOUuYv2hTmDDFO~WA}|!siR2m)oE@x#tqL< zi#mj8g+8m+Kn~lYDYj)I;Pt4*FwQHV=9LrpUGxDmiGN0|B#+jZosOPZpn7U87(BBs z&f?Wri>?X^_-m||Jd2faCz(cwZztz48?UQqb}2_-hRPkfB+Q~5w~_PsIbEKk+FH@- zQuaU*e~#CYc{KFfb?tD0_kl|}01I5YT}l`hxomMMDJZed8Y(5YsKv0b8)AVayw$(W zJuS=doa$7H%Crp6Q&CciGQ2>=EE6wMF~`J9RLnDR3AZF{4;GXXysX_i>CUZ_#NnyT zSjsz<&*!r6irT0Ylv$85k+2z;`D_kW@J7P!Mn0Q{%NnBU4x&mN$(C}}Xhq3)zn3-Bg=V>^D8#=O8{zD313Cf=rE zfr)EW%rJ4CGZ)~Uf9B5*O^l}VzD#;71@F@OMOObFuU~}s5eD`fKcIed)bB%_7-%$p g#MfrvW9n|Mr(c}b`-$pcKMoyD)<93Rl6E}&7puOVrvLx| delta 5308 zcmZu#`CAlMx~^)VyP;QT_O)4LQI=wntyvnHW|O7aK?GS95D{4f6>St06p1aRMxsVs z;=Xi`af>lAnMuqxjyh`MWa1>xeePUmOw9Yk{R8gT4ROY2ZavSbdaLT3_j}LxojTt+ z_1AsuLtOD!H|&({?gM!*V~Mf65&Jq24&L0qE6i(07S1PryI zOF_Y6X3mBGM5=d?Pz8HJo1KFQ6+4RsYr{O`JMHY5D0;fGfTgE)R73)nRnj$s5waWI zJ=`znB?f#oRFm=7$>#KbY-mmYyPI6zLhoN6EX#U0N@P1lLSY;|6cSrfg99N?0b?Jh zkO~dnZnB|hU)LLDi6Q^pXVBo}U>44;TZY43IoPvGgI#S&m}<8K9+tOS5f>bE&`Io&MsH+fA=oG&6l(9l)W&$Ib`?ge&$pz-{Hb$U#Lr_5$vE6w zhy%S^%q-VpVr44ESEORJCKID{9jQygmTEm3%M!24BqHB=V@%3nMdOOKS^aq*4;}qu%jXQ$34xuS5xbCnC;SIqCFcsTC=gO zB?F^Pi5P3l#>SQ;Y^+R1-}0pxC`-cH;uQSubTM8$u75E!lrh8#gg%-K?%0bvrdLny zPT`?t2Oggr!{cj{_~yihSGzmvzxDK1%{mC|B1wQ~UIc$nsxaC)6!%wg&-solY-&lw zXk7w!RHb2aWeSXSOR=>!5hIlv^w!0q&k&3LWg2wX#pBYMLSSbc{>j+m7h~ctBcoB~ z^RxZ`gIgv%yJEzHGoyHTbO4_n-;4)``|#l0Cfq-<9wW8-7vVmhyX@^)Yb?aZ1%Lc@ zan20${&cEEkKy`cY$#5~aBT)Q)<$F4KrSdx!AKQ{b%q42DNR6oS}ZOd&BD(I67WPM z#v`Q)&zu$baaRI<`f(k;yRi@Vk8Q!DlSbULiaER!#JX`_4LiyszJgD`QQs z)>mdcRC_8WNJR`4>o~R@4)*M((e^a-H726BEDgQOld!%q9$lp|=qS~otvC*?g)vx} zAB!W$IsCXU5TE&Y;;yR#9|w5gV>d7SK_$iCCIj))?7Ki0Ip*YKj;KhCq+_qQZ16L_-`YUnO%^A1-U2)S>jyrZ@d_U@jAMP#3 zm&Vy4+&S2f8;81Zn_rEK)2+BX(TMXCO*m_;!kMjgI5S#}cl!*#czesO-&gd4AW3k5 z{Njc(@&tvZt1uir1<~j%NkD5!B&xIGanz*7{rxIfluDeFsc^<$0kf+T7u*R4xZyI1 zGM=HAXA}zjdD;cveQkhw?|R(a*9-GlH?El4$P+cVxT6WDM#^xyw+3^YDv%QAdrKf- zLqt;HWpA15A)!zZ?<5qhuE>h|=cUt)o9vie6qr>j z@eT>${gp<%9jL@C#cNJYC4gQ!$#Gojh)28a@${o*FwgX2ZmI(p#u{;KXA|bOl;QBu z3Y;6Q!phRHKa)4Is0i!@f>2Gg_r=x{?mM+wc3SNzd!|{WLQ3F~+!Hht#OVj3*T@QsXg?O>}P}e9%paJu)SBGtSt;$Z>BCgRf3&aBk;noZDJM z9;wCQVFS)ln6@`-;UX4yEQH2-VHpQOcu92V%`1InuO=(vUxm0jgL897QG75B+5r6U zguw&j2?n3fG5E&JVBB4a?NTMi6-tb{5T?*<_aza|N=%cG35wq%3xhAtFnDx{!Hee% z-ZK^8%J_1e?W@MA&6PONp$F&VbDRXo{!Pq06tI5DOM^bTF5fT14@SY5PeoCx$mZL|dM4zt$8{B2sM7Y;SfdQ2qBT5-Qx$Q>@pbC6v z9S*E1Ms3kzl%plA9C&buCiC}Z!1Sn`4ae0 z7sI_=5$)rJ@E~{W+b>3sT!9XSBRXB2(IJ;(wW|cZN@sM+r08`fESKWF_b7-JS{Q4! z7;j9$^y)N>mT8d@zZl8!>X$O9V3aJ2=lg9v^JzZLMoN;x5kq{?%Ui=W_++#a{ly$y z?d{>`Ac8OH*s{$Y?WCzz;fyM!0L>JNX3|khxP_iIla3ArgCiy-I<(2?q*<^tlS68h zKbFwA>7?YazeV?JUscp­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 diff --git a/Framework/English.lproj/BuilderOptions.gorm/data.classes b/Framework/English.lproj/BuilderOptions.gorm/data.classes index b60ae56..e6952ac 100644 --- a/Framework/English.lproj/BuilderOptions.gorm/data.classes +++ b/Framework/English.lproj/BuilderOptions.gorm/data.classes @@ -2,20 +2,22 @@ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( - "popupChanged:" + "optionsButtonClicked:", + "optionsPopupChanged:" ); Super = NSObject; }; - PCProjectBuilder = { + PCProjectBuilderOptions = { Actions = ( - "popupChanged:" + "optionsPopupChanged:", + "optionsButtonClicked:" ); Outlets = ( buildArgsField, debugButton, verboseButton, optionsPanel, - profileButton, + stripButton, sharedLibsButton, targetPopup ); diff --git a/Framework/English.lproj/BuilderOptions.gorm/data.info b/Framework/English.lproj/BuilderOptions.gorm/data.info index 152bdecf1368d3ccf77b4dfc8ce7496bfad47564..e233f826678d75319f952731e1f6602aa013f991 100644 GIT binary patch delta 12 TcmdnNxPx(mC{t?kMDc|H8x{mB delta 12 TcmdnNxPx(mD3gW7MDc|H8Hoea diff --git a/Framework/English.lproj/BuilderOptions.gorm/objects.gorm b/Framework/English.lproj/BuilderOptions.gorm/objects.gorm index ff900c37217bb11f079e4f21f0b04c5f52d05afd..be94118199210e6d16f76823e932dee541263ac6 100644 GIT binary patch delta 1443 zcmbW1&vVm86vtPa_*aabj2$}@lNdWGA)cYhlSBCtQlK%IBn8Jr0YZMYj;#h8M>4kD zkkU47{{qo>>#6q+!)ki(jX!`>uUxovxN+ms?n;g(fuRR<*!k@4d++;wtCjv5dpc&u z`qlC@*iUw<1LtKcb4v2({v{-Mb@0lcE7BW}MDd1i?-MCT2$A5lJVbg5%1u>k&l~Cv zU+W_9spTKzL~zDG;-^F+CY4P5y?YRQz2UPHon4bnn3RaXJ~4Rh6w?ffOna~w?12)B zul;Fh5?>w5N5Kl&t0zSy$W{Wfcqw!oe+k56Q}QtJ6_oj%(zeQXB|;@QgHHn&r7T*W z1iqwRTnH{DK07c0XFCMvtYIE}9@{M^iy7<=raeD^=1eDSfM^mW>t@$1!)@A zVt6@P>~s&e4qyr2hR<{bLBWT8gWjnOy9Ub~hq@-=HooW^@2B11)BD38Cv*TBngH+Q=n}n#TOHF z8x7KyxPr57!_YPO)(%^RUHm69y8lQXC9#86jiz3Ir{gtNgFUBUzgw`M>dr+d>Wy|I zcfX`o ao!9%xsdxDGSJb+?T{2Yo**anW>;41x_D~W4 delta 1397 zcmaKsOH&hB7>2u>OF9NZxMXS|5rUZkQib>>AaWUJfH2W0W+Fknf^?EYY;C$@r(4GH z0;6uNN^yRNRoyiUck>Ho?b34N!g4t)cYdckbcNC)i}SrX{hashbL%%F|BlqdeKRw2 z;QUgP4KXuiCq{X3SzO=(=~w&z+~EIj<9WK`dpz9|<~Xhe#*Q!dHXtyEp$Sa^sv?X00yahRW^*%O)GDZ7*PaLkZ{v-SW?)6Zfu zd@gyC^W_TJ9rVN}JSXrlLzDh_ewse?N9hNlmA>|`4$L0Lz+6MYynPbkU+5Qqsuibx zo<0j?W`8}B^Bd+Yd^?qOq8GIqiD{-$H4W>W^@Fw0oR(Ph(v}*^ns1sM&!)m-W}3e3 z$n-8B$^0ENGxS|xw2k>@j`&{id@mmBo23V0ruWhj-^=K`f@>CuRCR4zR%Epjlhtia z-;oSiQ=M6?G^d@p;-%$|P5Z+RTb+-G zJ`b+-t~Fi{t{sYX`Y|}w5`^pYY1csfhU*gYTtY%Vo!7Pdq+~3avQj2Gecv_MnoL+d z2cZb7=jl*rd{*>Eh(caci82NWs|7Y(zkv5NARHck28_cdjdn#BvvBtqFqNBN*}w0eNdrx=*PV+ z>rNf+*~3=R+Ny($;wBUKQIwf@fZ{e23W|+-9d@u1tSZ*KST(E?1F9%)G4T*Zi3uIW zCKI*fDK4BV!I=$lZp=^hx*N-e1nYoAAUP)%+DHvW;KV zE47SFlrlVZNC}>~Wb@vZNztq{kUuN)v#LI3~& diff --git a/Framework/GNUmakefile b/Framework/GNUmakefile index 45f2aaa..ad8e540 100644 --- a/Framework/GNUmakefile +++ b/Framework/GNUmakefile @@ -39,6 +39,7 @@ ProjectCenter_HEADER_FILES = \ PCProjectWindow.h \ PCProjectInspector.h \ PCProjectBuilder.h \ + PCProjectBuilderOptions.h \ PCProjectBuilderPanel.h \ PCProjectLauncher.h \ PCProjectLauncherPanel.h \ @@ -67,6 +68,7 @@ ProjectCenter_OBJC_FILES = \ PCProjectWindow.m \ PCProjectInspector.m \ PCProjectBuilder.m \ + PCProjectBuilderOptions.m \ PCProjectBuilderPanel.m \ PCProjectLauncher.m \ PCProjectLauncherPanel.m \ diff --git a/Framework/PCFileNameIcon.m b/Framework/PCFileNameIcon.m index e0540d5..6afbb58 100644 --- a/Framework/PCFileNameIcon.m +++ b/Framework/PCFileNameIcon.m @@ -33,8 +33,9 @@ - (void)awakeFromNib { filePath = nil; - msfText = nil; - [self setImage:[NSImage imageNamed:@"projectSuitcase"]]; + [self setImage:[NSImage imageNamed:@"ProjectCenter"]]; + [self + registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; } - (id)initWithFrame:(NSRect)frameRect @@ -42,10 +43,9 @@ self = [super initWithFrame:frameRect]; filePath = nil; - msfText = nil; [self setRefusesFirstResponder:YES]; [self setEditable:NO]; - [self setImage:[NSImage imageNamed:@"projectSuitcase"]]; + [self setImage:[NSImage imageNamed:@"ProjectCenter"]]; return self; } @@ -89,15 +89,59 @@ } } -@end +// --- Drag and drop -@implementation PCFileNameIcon (FileNameIconDelegate) +// --- NSDraggingDestination protocol methods +// -- Before the image is released +- (unsigned int)draggingEntered:(id )sender +{ + NSPasteboard *pb = [sender draggingPasteboard]; + NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; + unsigned int draggingOp = NSDragOperationNone; -- (NSImage *)fileNameIconImage + NSLog(@"Dragging entered"); + + if (![paths isKindOfClass:[NSArray class]] || [paths count] == 0) + { + return draggingOp; + } + + if (delegate && + [delegate respondsToSelector:@selector(canPerformDraggingOf:)] && + [delegate canPerformDraggingOf:paths] == YES) + { + draggingOp = NSDragOperationCopy; + } + + if (draggingOp == NSDragOperationCopy) + { // TODO: Change icon to icon that shows open state of destination + } + + return draggingOp; +} + +- (void)draggingExited:(id )sender { } -- (NSString *)fileNameIconTitle +// -- After the image is released +- (BOOL)prepareForDragOperation:(id )sender +{ + NSLog(@"Prepare for drag operation"); + return YES; +} + +- (BOOL)performDragOperation:(id )sender +{ + NSPasteboard *pb = [sender draggingPasteboard]; + NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; + + NSLog(@"performDragOperation: %@", paths); + + return NO; +} + +- (void)concludeDragOperation:(id )sendera { } diff --git a/Framework/PCProjectBrowser.m b/Framework/PCProjectBrowser.m index 3690d04..bb6f05d 100644 --- a/Framework/PCProjectBrowser.m +++ b/Framework/PCProjectBrowser.m @@ -657,4 +657,35 @@ NSString *PCBrowserDidSetPathNotification = @"PCBrowserDidSetPathNotification"; return PCFileNameFieldNoFiles; } +- (BOOL)canPerformDraggingOf:(NSArray *)paths +{ + NSString *category = [self nameOfSelectedCategory]; + NSString *categoryKey = [project keyForCategory:category]; + NSArray *fileTypes = [project fileTypesForCategoryKey:categoryKey]; + NSEnumerator *e = [paths objectEnumerator]; + NSString *s; + + NSLog(@"PCBrowser: canPerformDraggingOf -> %@", category); + + if (!category) + { + return NO; + } + + if (![project isEditableCategory:category]) + { + return NO; + } + + while ((s = [e nextObject])) + { + if (![fileTypes containsObject:[s pathExtension]]) + { + return NO; + } + } + + return YES; +} + @end diff --git a/Framework/PCProjectBuilder.m b/Framework/PCProjectBuilder.m index 5745c45..3610629 100644 --- a/Framework/PCProjectBuilder.m +++ b/Framework/PCProjectBuilder.m @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -57,8 +58,11 @@ if ((self = [super init])) { project = aProject; - buildTarget = [[NSMutableString alloc] initWithString:@"Default"]; + buildStatusTarget = [[NSMutableString alloc] initWithString:@"all"]; + buildTarget = [[NSMutableString alloc] initWithString:@"all"]; buildArgs = [[NSMutableArray array] retain]; + buildOptions = [[PCProjectBuilderOptions alloc] initWithProject:project + delegate:self]; postProcess = NULL; makeTask = nil; _isBuilding = NO; @@ -81,6 +85,7 @@ NSLog (@"PCProjectBuilder: dealloc"); #endif + [buildStatusTarget release]; [buildTarget release]; [buildArgs release]; [makePath release]; @@ -90,6 +95,7 @@ [componentView release]; [errorArray release]; [errorString release]; + [buildOptions release]; [super dealloc]; } @@ -118,13 +124,11 @@ [cleanButton setToolTip:@"Clean"]; [cleanButton setImage:IMAGE(@"Clean")]; - [installButton setToolTip:@"Install"]; - [installButton setImage:IMAGE(@"Install")]; - [optionsButton setToolTip:@"Build Options"]; [optionsButton setImage:IMAGE(@"Options")]; [errorsCountField setStringValue:@""]; + [self updateTargetField]; /* * Error output @@ -233,6 +237,19 @@ return YES; } +- (void)updateTargetField +{ + NSString *s; + NSString *args; + + args = [[[project projectDict] objectForKey:PCBuilderArguments] + componentsJoinedByString:@" "]; + + s = [NSString stringWithFormat:@"%@ with args '%@'", buildTarget, args]; + + [targetField setStringValue:s]; +} + // --- Accessory - (BOOL)isBuilding { @@ -272,32 +289,58 @@ } } +- (NSArray *)buildArguments +{ + NSDictionary *projectDict = [project projectDict]; + NSString *instDir = [projectDict objectForKey:PCInstallDir]; + NSMutableArray *args = [NSMutableArray new]; + + if (![instDir isEqualToString:@"LOCAL"] && + ![instDir isEqualToString:@"SYSTEM"] && + ![instDir isEqualToString:@"USER"] && + ![instDir isEqualToString:@"NETWORK"] && + ![instDir isEqualToString:@""]) + { + [args addObject:[NSString stringWithFormat:@"DESTDIR=%@", instDir]]; + } + + [args addObjectsFromArray:[projectDict objectForKey:PCBuilderArguments]]; + + // Get arguments from options + if ([[projectDict objectForKey:PCBuilderVerbose] isEqualToString:@"YES"]) + { // default is 'messages=no' + [args addObject:@"messages=yes"]; + } + if ([[projectDict objectForKey:PCBuilderDebug] isEqualToString:@"NO"]) + { // default is 'debug=yes' + [args addObject:@"debug=no"]; + } + if ([[projectDict objectForKey:PCBuilderStrip] isEqualToString:@"YES"]) + { // default is 'strip=no' + [args addObject:@"strip=yes"]; + } + if ([[projectDict objectForKey:PCBuilderSharedLibs] isEqualToString:@"NO"]) + { // default is 'shared=yes' + [args addObject:@"shared=no"]; + } + + return args; +} + // --- GUI Actions - (void)startBuild:(id)sender { - NSString *tFString = [targetField stringValue]; - NSArray *tFArray = [tFString componentsSeparatedByString:@" "]; - if ([self stopMake:self] == YES) {// We've just stopped build process return; } - [buildTarget setString:[tFArray objectAtIndex:0]]; + + [buildArgs addObject:buildTarget]; // Set build arguments - if ([buildTarget isEqualToString:@"Debug"]) - { - [buildArgs addObject:@"debug=yes"]; - } - else if ([buildTarget isEqualToString:@"Profile"]) - { - [buildArgs addObject:@"profile=yes"]; - [buildArgs addObject:@"static=yes"]; - } - else if ([buildTarget isEqualToString:@"Tarball"]) - { - [buildArgs addObject:@"dist"]; - } + [buildArgs addObjectsFromArray:[self buildArguments]]; + + NSLog(@"ProjectBuilder arguments: %@", buildArgs); currentEL = ELNone; lastEL = ELNone; @@ -308,10 +351,9 @@ [currentBuildPath addObject:[project projectPath]]; currentBuildFile = [[NSMutableString alloc] initWithString:@""]; - statusString = [NSString stringWithString:@"Building..."]; - [buildTarget setString:@"Build"]; + buildStatus = [NSString stringWithString:@"Building..."]; + [buildStatusTarget setString:@"Build"]; [cleanButton setEnabled:NO]; - [installButton setEnabled:NO]; [self build:self]; _isBuilding = YES; } @@ -336,30 +378,14 @@ } } - statusString = [NSString stringWithString:@"Cleaning..."]; - [buildTarget setString:@"Clean"]; + buildStatus = [NSString stringWithString:@"Cleaning..."]; + [buildStatusTarget setString:@"Clean"]; [buildArgs addObject:@"clean"]; [buildButton setEnabled:NO]; - [installButton setEnabled:NO]; [self build:self]; _isCleaning = YES; } -- (void)startInstall:(id)sender -{ - if ([self stopMake:self] == YES) - {// We've just stopped build process - return; - } - - [buildTarget setString:@"Install"]; - statusString = [NSString stringWithString:@"Installing..."]; - [buildArgs addObject:@"install"]; - [buildButton setEnabled:NO]; - [cleanButton setEnabled:NO]; - [self build:self]; -} - - (BOOL)stopMake:(id)sender { // [makeTask isRunning] doesn't work here. @@ -382,36 +408,33 @@ return NO; } +- (void)showOptionsPanel:(id)sender +{ + [buildOptions show:[[componentView window] frame]]; +} + - (void)cleanupAfterMake { if (_isBuilding || _isCleaning) { - [buildStatusField setStringValue:[NSString stringWithFormat: - @"%@ - %@ terminated", [project projectName], buildTarget]]; + [statusField setStringValue:[NSString stringWithFormat: + @"%@ - %@ terminated", [project projectName], buildStatusTarget]]; } // Restore buttons state - if ([buildTarget isEqualToString:@"Build"]) + if ([buildStatusTarget isEqualToString:@"Build"]) { [buildButton setState:NSOffState]; [cleanButton setEnabled:YES]; - [installButton setEnabled:YES]; } - else if ([buildTarget isEqualToString:@"Clean"]) + else if ([buildStatusTarget isEqualToString:@"Clean"]) { [cleanButton setState:NSOffState]; [buildButton setEnabled:YES]; - [installButton setEnabled:YES]; - } - else if ([buildTarget isEqualToString:@"Install"]) - { - [installButton setState:NSOffState]; - [buildButton setEnabled:YES]; - [cleanButton setEnabled:YES]; } [buildArgs removeAllObjects]; - [buildTarget setString:@"Default"]; + [buildStatusTarget setString:@"Default"]; if (_isBuilding) { @@ -424,7 +447,6 @@ } // --- Actions - - (BOOL)prebuildCheck { PCPrefController *prefs = [PCPrefController sharedPCPreferences]; @@ -512,7 +534,7 @@ errorsCount = 0; warningsCount = 0; - [buildStatusField setStringValue:statusString]; + [statusField setStringValue:buildStatus]; // Run make task [logOutput setString:@""]; @@ -591,29 +613,29 @@ if (status == 0) { [self logString: - [NSString stringWithFormat:@"=== %@ succeeded! ===", buildTarget] + [NSString stringWithFormat:@"=== %@ succeeded! ===", buildStatusTarget] error:NO newLine:YES]; - [buildStatusField setStringValue:[NSString stringWithFormat: - @"%@ - %@ succeeded", [project projectName], buildTarget]]; + [statusField setStringValue:[NSString stringWithFormat: + @"%@ - %@ succeeded", [project projectName], buildStatusTarget]]; } else { [self logString: - [NSString stringWithFormat:@"=== %@ terminated! ===", buildTarget] + [NSString stringWithFormat:@"=== %@ terminated! ===", buildStatusTarget] error:NO newLine:YES]; if (errorsCount > 0) { - [buildStatusField setStringValue:[NSString stringWithFormat: + [statusField setStringValue:[NSString stringWithFormat: @"%@ - %@ failed (%i errors)", - [project projectName], buildTarget, errorsCount]]; + [project projectName], buildStatusTarget, errorsCount]]; } else { - [buildStatusField setStringValue:[NSString stringWithFormat: + [statusField setStringValue:[NSString stringWithFormat: @"%@ - %@ failed", - [project projectName], buildTarget]]; + [project projectName], buildStatusTarget]]; } } @@ -713,6 +735,13 @@ [errorsCountField setStringValue:string]; } +// --- BuilderOptions delgate +- (void)targetDidSet:(NSString *)target +{ + [buildTarget setString:target]; + [self updateTargetField]; +} + @end @implementation PCProjectBuilder (BuildLogging) @@ -1108,33 +1137,3 @@ @end -@implementation PCProjectBuilder (Options) - -- (void)showOptionsPanel:(id)sender -{ - if (!optionsPanel) - { - if ([NSBundle loadNibNamed:@"BuilderOptions" owner:self] == NO) - { - PCLogError(self, @"error loading BuilderOptions NIB file!"); - return; - } - [targetPopup addItemsWithTitles:[project buildTargets]]; - } - - [optionsPanel makeKeyAndOrderFront:nil]; -} - -- (void)popupChanged:(id)sender -{ - NSString *target = [targetField stringValue]; - - target = [NSString stringWithFormat: - @"%@ with args ' %@ '", - [targetPopup titleOfSelectedItem], - [buildArgsField stringValue]]; - - [targetField setStringValue:target]; -} - -@end