From 096f3ed392fce51d2c954be18af867f993150746 Mon Sep 17 00:00:00 2001 From: Sergii Stoian Date: Tue, 9 Jan 2007 16:49:47 +0000 Subject: [PATCH] Builder.gorm, BuilderPanel.gorm added to Framework/English.lproj git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@24331 72102866-910b-0410-8b05-ffd578937521 --- Documentation/ChangeLog | 8 + .../English.lproj/Builder.gorm/data.classes | 48 ++ .../English.lproj/Builder.gorm/data.info | Bin 0 -> 184 bytes .../English.lproj/Builder.gorm/objects.gorm | Bin 0 -> 23543 bytes .../BuilderPanel.gorm/data.classes | 30 + .../English.lproj/BuilderPanel.gorm/data.info | Bin 0 -> 184 bytes .../BuilderPanel.gorm/objects.gorm | Bin 0 -> 1854 bytes Framework/GNUmakefile | 2 + Framework/GNUmakefile.preamble | 5 +- Framework/PCProjectBuilder.m | 581 ++++++++++++------ Framework/PCProjectBuilderPanel.m | 62 +- 11 files changed, 510 insertions(+), 226 deletions(-) create mode 100644 Framework/English.lproj/Builder.gorm/data.classes create mode 100644 Framework/English.lproj/Builder.gorm/data.info create mode 100644 Framework/English.lproj/Builder.gorm/objects.gorm create mode 100644 Framework/English.lproj/BuilderPanel.gorm/data.classes create mode 100644 Framework/English.lproj/BuilderPanel.gorm/data.info create mode 100644 Framework/English.lproj/BuilderPanel.gorm/objects.gorm diff --git a/Documentation/ChangeLog b/Documentation/ChangeLog index efdcd6a..0519457 100644 --- a/Documentation/ChangeLog +++ b/Documentation/ChangeLog @@ -1,3 +1,11 @@ +2007-01-09 Sergii Stoian + + * Framework/English.lproj/Builder.gorm: Added. + * Framework/English.lproj/BuilderPanel.gorm: Added. + * Framework/PCProjectBuilder.m: Use GORM file for interface. + Initial parsing for error logging view was added. + * Framework/PCProjectBuilderPanel.m: Use GORM file for interface. + 2006-12-26 Sergii Stoian * Merge changes from UNSTABLE_0_5 into trunk. diff --git a/Framework/English.lproj/Builder.gorm/data.classes b/Framework/English.lproj/Builder.gorm/data.classes new file mode 100644 index 0000000..39d18ed --- /dev/null +++ b/Framework/English.lproj/Builder.gorm/data.classes @@ -0,0 +1,48 @@ +{ + "## Comment" = "Do NOT change this file, Gorm maintains it"; + FirstResponder = { + Actions = ( + "startInstall:", + "showFindView:", + "showProjectBuild:", + "showProjectInspector:", + "showProjectLaunch:", + "showProjectLoadedFiles:", + "startBuild:", + "startClean:" + ); + Super = NSObject; + }; + PCButton = { + Actions = ( + ); + Outlets = ( + ); + Super = NSButton; + }; + PCProjectBuilder = { + Actions = ( + "startInstall:", + "startBuild:", + "startClean:" + ); + Outlets = ( + buildButton, + cleanButton, + componentView, + installButton, + split, + optionsButton, + buildStatusField, + targetField + ); + Super = NSObject; + }; + PCSplitView = { + Actions = ( + ); + Outlets = ( + ); + Super = NSSplitView; + }; +} \ No newline at end of file diff --git a/Framework/English.lproj/Builder.gorm/data.info b/Framework/English.lproj/Builder.gorm/data.info new file mode 100644 index 0000000000000000000000000000000000000000..152bdecf1368d3ccf77b4dfc8ce7496bfad47564 GIT binary patch literal 184 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 Drhq9Y literal 0 HcmV?d00001 diff --git a/Framework/English.lproj/BuilderPanel.gorm/data.classes b/Framework/English.lproj/BuilderPanel.gorm/data.classes new file mode 100644 index 0000000..096069a --- /dev/null +++ b/Framework/English.lproj/BuilderPanel.gorm/data.classes @@ -0,0 +1,30 @@ +{ + "## Comment" = "Do NOT change this file, Gorm maintains it"; + FirstResponder = { + Actions = ( + "showProjectInspector:", + "showFindView:", + "showProjectBuild:", + "showProjectLaunch:", + "showProjectLoadedFiles:" + ); + Super = NSObject; + }; + PCProjectBuilderPanel = { + Actions = ( + ); + Outlets = ( + contentBox, + emptyBox, + panel + ); + Super = NSPanel; + }; + PCSplitView = { + Actions = ( + ); + Outlets = ( + ); + Super = NSSplitView; + }; +} \ No newline at end of file diff --git a/Framework/English.lproj/BuilderPanel.gorm/data.info b/Framework/English.lproj/BuilderPanel.gorm/data.info new file mode 100644 index 0000000000000000000000000000000000000000..152bdecf1368d3ccf77b4dfc8ce7496bfad47564 GIT binary patch literal 184 zcmZ?w3oR~5El@}-O3uhEOEmxjqht#UD-Z(+j4>DnRtAiQj0_^~`9-;InK`KeMX71U zzKMB>>8V8wKw!wkz~L9{pOlrFTms@Vs4_4zG8r%#GK0i}ONuh{(t)Ck3~E4{qDnuk61ty z4~D}1*FypE5#~e=>f5&E?sWn`a$H}A0AL6M%9g#e_fB>r`VD}F$U}A8esUB!d!DqV zx)xJVwNBp^pkUcU1Gq-MIn0Y9%x>E+U4K95Ka&SN&xs^!M2Vw!Jm>Jx?mNAnicZm{ zM41z?qtNx=u%QAfUnQ~7q@!$DLo_kXh8md^hNysP*-zzRFYxyjTn^X`;#SLi{0YEZ zp9N@{onIt&zJLNYl|{>BJ9G2GC%}R*p=jAJT-m3)e?Snj^5i3fYykb|j2v??7spr> zRj8+Qt%sp=%pRf!CCeWD)RpGA$Q+hLoypt?KJw2$b+DTXIg0j-0#8VSu7^peGJ%pP z531@-bb#rBE}h9)&w&19a>hYN*V)P#v~mK}9Mn_Bvzd;(Ph~o~KAmax1ZXXj>DmuU zj}I!J#m?4P`J?O8nbtKZ;Eb5z2kuDE1LhWI2W2KEpY~YZAl_qah*>t=qVZt0dW5N1 z;c9Xxo(yFuqWRG5Pmqi_j$7v1SFVQ+j;#^^oEyyG{N$99#{UhUK0JrlO@<4i!Cl!2 zynq)%9c8VApgL+I(ob6QhNA!^2M81RZ}ZydSaesYfb;XC)kD{hUgi))|`wom7P2U0&? zOf2$~R8IEe<~Ksv{JaKue$*=$M#4og2lMF!Z@S&c4SXlmV?58h@Z_DsFXEz3yp$$h zBIX0Fq@|4c7(>$qGq$orHF>65|aL zE+_36S49&Rl;6%#Kw0m_WEpSjEGlW$6{AaoDE){k#9M=AvY52-wzkTC9_Skr Y9kb0HWwV5LwM~}4o+9?%U``F@Z#Ru3_5c6? literal 0 HcmV?d00001 diff --git a/Framework/GNUmakefile b/Framework/GNUmakefile index 6dff62d..1ac2299 100644 --- a/Framework/GNUmakefile +++ b/Framework/GNUmakefile @@ -101,6 +101,8 @@ ProjectCenter_RESOURCE_FILES = \ # ProjectCenter_LOCALIZED_RESOURCE_FILES = \ ProjectWindow.gorm \ + BuilderPanel.gorm \ + Builder.gorm \ NewSubproject.gorm \ NewFile.gorm \ ProjectInspector.gorm \ diff --git a/Framework/GNUmakefile.preamble b/Framework/GNUmakefile.preamble index e024c2c..7d3843f 100644 --- a/Framework/GNUmakefile.preamble +++ b/Framework/GNUmakefile.preamble @@ -45,8 +45,9 @@ GDB = `which gdb` ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler -ADDITIONAL_OBJCFLAGS += -W -DPCDefaultBuildTool=@"\"$(GMAKE)\"" \ - -DPCDefaultDebugger=@"\"$(GDB)\"" +ADDITIONAL_OBJCFLAGS += -W -Wno-unused-parameter -DDEVELOPMENT\ + -DPCDefaultBuildTool=@"\"$(GMAKE)\"" \ + -DPCDefaultDebugger=@"\"$(GDB)\"" # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += diff --git a/Framework/PCProjectBuilder.m b/Framework/PCProjectBuilder.m index a18b44b..6bd1f15 100644 --- a/Framework/PCProjectBuilder.m +++ b/Framework/PCProjectBuilder.m @@ -45,108 +45,93 @@ @implementation PCProjectBuilder (UserInterface) -- (void) _createComponentView +- (void)awakeFromNib { - NSSplitView *split; - NSScrollView *scrollView1; + NSScrollView *errorScroll; NSScrollView *scrollView2; - id textField; - componentView = [[NSBox alloc] initWithFrame: NSMakeRect(8,-1,464,322)]; - [componentView setTitlePosition: NSNoTitle]; - [componentView setBorderType: NSNoBorder]; - [componentView setAutoresizingMask: NSViewWidthSizable - | NSViewHeightSizable]; - [componentView setContentViewMargins: NSMakeSize (0.0, 0.0)]; + [componentView retain]; + [componentView removeFromSuperview]; /* * 4 build Buttons */ - buildButton = [[PCButton alloc] initWithFrame: NSMakeRect(0,271,43,43)]; - [buildButton setToolTip: @"Build"]; - [buildButton setTitle: @"Make"]; - [buildButton setImage: IMAGE(@"Build")]; - [buildButton setAlternateImage: IMAGE(@"Stop")]; - [buildButton setTarget: self]; - [buildButton setAction: @selector(startBuild:)]; - [buildButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; - [buildButton setButtonType: NSToggleButton]; - [componentView addSubview: buildButton]; - RELEASE (buildButton); - - cleanButton = [[PCButton alloc] initWithFrame: NSMakeRect(44,271,43,43)]; - [cleanButton setToolTip: @"Clean"]; - [cleanButton setTitle: @"Make-Clean"]; - [cleanButton setImage: IMAGE(@"Clean")]; - [cleanButton setAlternateImage: IMAGE(@"Stop")]; - [cleanButton setTarget: self]; - [cleanButton setAction: @selector(startClean:)]; - [cleanButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; - [cleanButton setButtonType: NSToggleButton]; - [componentView addSubview: cleanButton]; - RELEASE (cleanButton); + [buildButton setToolTip:@"Build"]; +// [buildButton setImage:IMAGE(@"Build")]; - installButton = [[PCButton alloc] initWithFrame: NSMakeRect(88,271,43,43)]; - [installButton setToolTip: @"Install"]; - [installButton setTitle: @"Make-Install"]; - [installButton setImage: IMAGE(@"Install")]; - [installButton setAlternateImage: IMAGE(@"Stop")]; - [installButton setTarget: self]; - [installButton setAction: @selector(startInstall:)]; - [installButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; - [installButton setButtonType: NSToggleButton]; - [componentView addSubview: installButton]; - RELEASE (installButton); + [cleanButton setToolTip:@"Clean"]; +// [cleanButton setImage:IMAGE(@"Clean")]; - optionsButton = [[PCButton alloc] initWithFrame: NSMakeRect(132,271,43,43)]; - [optionsButton setToolTip: @"Options"]; - [optionsButton setTitle: @"Make-Options"]; - [optionsButton setImage: IMAGE(@"Options")]; - [optionsButton setTarget: self]; - [optionsButton setAction: @selector(showOptionsPanel:)]; - [optionsButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; - [optionsButton setButtonType: NSMomentaryPushButton]; - [componentView addSubview: optionsButton]; - RELEASE (optionsButton); + [installButton setToolTip:@"Install"]; +// [installButton setImage:IMAGE(@"Install")]; + + [optionsButton setToolTip:@"Options"]; +// [optionsButton setImage:IMAGE(@"Options")]; /* - * Error and Log output + * Error output */ - scrollView1 = [[NSScrollView alloc] - initWithFrame:NSMakeRect (0, 0, 464, 120)]; - [scrollView1 setHasHorizontalScroller:NO]; - [scrollView1 setHasVerticalScroller:YES]; - [scrollView1 setBorderType: NSBezelBorder]; - [scrollView1 setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + errorArray = [[NSMutableArray alloc] initWithCapacity:0]; + errorString = [[NSMutableString alloc] initWithString:@""]; - errorOutput = [[NSTextView alloc] - initWithFrame: [[scrollView1 contentView] frame]]; - [errorOutput setRichText: NO]; - [errorOutput setEditable: NO]; - [errorOutput setSelectable: YES]; + errorImageColumn = [[NSTableColumn alloc] initWithIdentifier:@"ErrorImage"]; + [errorImageColumn setEditable:NO]; + [errorImageColumn setWidth:20.0]; + errorColumn = [[NSTableColumn alloc] initWithIdentifier:@"Error"]; + [errorColumn setEditable:NO]; + + errorOutputTable = [[NSTableView alloc] + initWithFrame:NSMakeRect(6,6,209,111)]; + [errorOutputTable setAllowsMultipleSelection:NO]; + [errorOutputTable setAllowsColumnReordering:NO]; + [errorOutputTable setAllowsColumnResizing:NO]; + [errorOutputTable setAllowsEmptySelection:YES]; + [errorOutputTable setAllowsColumnSelection:NO]; + [errorOutputTable setRowHeight:18.0]; + [errorOutputTable setCornerView:nil]; + [errorOutputTable setHeaderView:nil]; + [errorOutputTable addTableColumn:errorImageColumn]; + [errorOutputTable addTableColumn:errorColumn]; + [errorOutputTable setDataSource:self]; + [errorOutputTable setBackgroundColor:[NSColor colorWithDeviceRed:0.88 + green:0.76 + blue:0.60 + alpha:1.0]]; + + errorScroll = [[NSScrollView alloc] initWithFrame:NSMakeRect(0,0,464,120)]; + [errorScroll setHasHorizontalScroller:NO]; + [errorScroll setHasVerticalScroller:YES]; + [errorScroll setBorderType:NSBezelBorder]; + [errorScroll setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + +/* errorOutput = [[NSTextView alloc] + initWithFrame:[[scrollView1 contentView] frame]]; + [errorOutput setRichText:NO]; + [errorOutput setEditable:NO]; + [errorOutput setSelectable:YES]; [errorOutput setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; - [errorOutput setBackgroundColor: [NSColor colorWithDeviceRed: 0.88 - green: 0.76 - blue: 0.60 - alpha: 1.0]]; - [errorOutput setHorizontallyResizable: NO]; - [errorOutput setVerticallyResizable: YES]; - [errorOutput setMinSize: NSMakeSize (0, 0)]; - [errorOutput setMaxSize: NSMakeSize (1E7, 1E7)]; + [errorOutput setBackgroundColor:[NSColor colorWithDeviceRed:0.88 + green:0.76 + blue:0.60 + alpha:1.0]]; + [errorOutput setHorizontallyResizable:NO]; + [errorOutput setVerticallyResizable:YES]; + [errorOutput setMinSize:NSMakeSize(0, 0)]; + [errorOutput setMaxSize:NSMakeSize(1E7, 1E7)]; [[errorOutput textContainer] setContainerSize: - NSMakeSize ([errorOutput frame].size.width, 1e7)]; + NSMakeSize([errorOutput frame].size.width, 1e7)]; + [[errorOutput textContainer] setWidthTracksTextView:YES];*/ - [[errorOutput textContainer] setWidthTracksTextView:YES]; - - [scrollView1 setDocumentView:errorOutput]; - RELEASE(errorOutput); + [errorScroll setDocumentView:errorOutputTable]; + RELEASE(errorOutputTable); /* + * Log output */ scrollView2 = [[NSScrollView alloc] initWithFrame:NSMakeRect (0, 0, 480, 133)]; - [scrollView2 setHasHorizontalScroller: NO]; - [scrollView2 setHasVerticalScroller: YES]; + [scrollView2 setHasHorizontalScroller:NO]; + [scrollView2 setHasVerticalScroller:YES]; [scrollView2 setBorderType: NSBezelBorder]; [scrollView2 setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; @@ -159,10 +144,10 @@ [logOutput setBackgroundColor: [NSColor lightGrayColor]]; [[logOutput textContainer] setWidthTracksTextView:YES]; [[logOutput textContainer] setHeightTracksTextView:YES]; - [logOutput setHorizontallyResizable: NO]; - [logOutput setVerticallyResizable: YES]; - [logOutput setMinSize: NSMakeSize (0, 0)]; - [logOutput setMaxSize: NSMakeSize (1E7, 1E7)]; + [logOutput setHorizontallyResizable:NO]; + [logOutput setVerticallyResizable:YES]; + [logOutput setMinSize:NSMakeSize (0, 0)]; + [logOutput setMaxSize:NSMakeSize (1E7, 1E7)]; [[logOutput textContainer] setContainerSize: NSMakeSize ([logOutput frame].size.width, 1e7)]; [[logOutput textContainer] setWidthTracksTextView:YES]; @@ -170,85 +155,17 @@ [scrollView2 setDocumentView:logOutput]; RELEASE(logOutput); - split = [[PCSplitView alloc] initWithFrame: NSMakeRect (0, 0, 464, 255)]; - [split setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; - - [split addSubview: scrollView1]; - RELEASE (scrollView1); - [split addSubview: scrollView2]; + /* + * Split view + */ + [split addSubview:errorScroll]; + RELEASE (errorScroll); + [split addSubview:scrollView2]; RELEASE (scrollView2); - [split adjustSubviews]; - [componentView addSubview: split]; - RELEASE (split); - - /* - * Target - */ - textField = [[NSTextField alloc] - initWithFrame: NSMakeRect (200, 293, 48, 21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setBezeled: NO]; - [textField setEditable: NO]; - [textField setSelectable: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue:@"Target:"]; - [textField setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; - [componentView addSubview: textField]; - RELEASE(textField); - - /* - * Target message - */ - targetField = [[NSTextField alloc] - initWithFrame:NSMakeRect(251, 293, 220, 21)]; - [targetField setAlignment: NSLeftTextAlignment]; - [targetField setBordered: NO]; - [targetField setEditable: NO]; - [targetField setBezeled: NO]; - [targetField setSelectable: NO]; - [targetField setDrawsBackground: NO]; - [targetField setStringValue: @"Default with args ' '"]; - [targetField setAutoresizingMask: (NSViewMaxXMargin | - NSViewWidthSizable | - NSViewMinYMargin)]; - [componentView addSubview:targetField]; - RELEASE (targetField); - - /* - * Status - */ - textField = [[NSTextField alloc] - initWithFrame: NSMakeRect (200, 270, 48, 21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setSelectable: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue:@"Status:"]; - [textField setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; - [componentView addSubview:textField]; - RELEASE(textField); - - /* - * Status message - */ - buildStatusField = [[NSTextField alloc] - initWithFrame: NSMakeRect (251, 270, 220, 21)]; - [buildStatusField setAlignment: NSLeftTextAlignment]; - [buildStatusField setBordered: NO]; - [buildStatusField setEditable: NO]; - [buildStatusField setSelectable: NO]; - [buildStatusField setBezeled: NO]; - [buildStatusField setDrawsBackground: NO]; - [buildStatusField setStringValue: @"Waiting..."]; - [buildStatusField setAutoresizingMask: (NSViewMaxXMargin | - NSViewWidthSizable | - NSViewMinYMargin)]; - [componentView addSubview: buildStatusField]; - RELEASE(buildStatusField); +// [split adjustSubviews]; +// [componentView addSubview:split]; +// RELEASE (split); } - (void) _createOptionsPanel @@ -372,6 +289,14 @@ makeTask = nil; _isBuilding = NO; _isCleaning = NO; + + makePath = [[NSUserDefaults standardUserDefaults] objectForKey:BuildTool]; + + if ([NSBundle loadNibNamed:@"Builder" owner:self] == NO) + { + PCLogError(self, @"error loading Builder NIB file!"); + return nil; + } } return self; @@ -390,17 +315,14 @@ // PCLogInfo(self, @"componentView RC: %i", [componentView retainCount]); // PCLogInfo(self, @"RC: %i", [self retainCount]); [componentView release]; + [errorArray release]; + [errorString release]; [super dealloc]; } - (NSView *)componentView { - if (!componentView) - { - [self _createComponentView]; - } - return componentView; } @@ -453,12 +375,10 @@ {// We've just stopped build process return; } - makePath = [[NSUserDefaults standardUserDefaults] objectForKey:BuildTool]; - [buildTarget setString:[tFArray objectAtIndex:0]]; // Set build arguments - if ([buildTarget isEqualToString: @"Debug"]) + if ([buildTarget isEqualToString:@"Debug"]) { [buildArgs addObject:@"debug=yes"]; } @@ -471,11 +391,11 @@ { [buildArgs addObject:@"dist"]; } - else if ([buildTarget isEqualToString:@"RPM"]) - { - [buildArgs addObject:@"rpm"]; - postProcess = @selector (copyPackageTo:); - } + + currentEL = ELNone; + lastEL = ELNone; + nextEL = ELNone; + lastIndentString = @""; statusString = [NSString stringWithString:@"Building..."]; [buildTarget setString:@"Build"]; @@ -510,7 +430,7 @@ - (void)startClean:(id)sender { if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] - objectForKey: PromptOnClean] isEqualToString: @"YES"]) + objectForKey:PromptOnClean] isEqualToString:@"YES"]) { if (NSRunAlertPanel(@"Clean Project?", @"Do you really want to clean project '%@'?", @@ -521,12 +441,12 @@ return; } } - [buildTarget setString: @"Clean"]; - statusString = [NSString stringWithString: @"Cleaning..."]; - [buildArgs addObject: @"distclean"]; + statusString = [NSString stringWithString:@"Cleaning..."]; + [buildTarget setString:@"Clean"]; + [buildArgs addObject:@"clean"]; [buildButton setEnabled:NO]; [installButton setEnabled:NO]; - [self build: self]; + [self build:self]; _isCleaning = YES; } @@ -554,9 +474,9 @@ { NSPipe *logPipe; NSPipe *errorPipe; - NSDictionary *env = [[NSProcessInfo processInfo] environment]; +// NSDictionary *env = [[NSProcessInfo processInfo] environment]; - // Support build options!!! + //TODO: Support build options!!! //NSDictionary *optionDict = [currentProject buildOptions]; // Checking prerequisites @@ -575,15 +495,6 @@ [currentProject save]; } - if ([buildTarget isEqualToString:@"RPM"] - && [env objectForKey:@"RPM_TOPDIR"] == nil) - { - NSRunAlertPanel(@"Attention!", - @"First set the environment variable 'RPM_TOPDIR'!", - @"OK", nil, nil); - return; - } - // Prepearing to building logPipe = [NSPipe pipe]; readHandle = [logPipe fileHandleForReading]; @@ -606,8 +517,10 @@ [buildStatusField setStringValue:statusString]; // Run make task - [logOutput setString: @""]; - [errorOutput setString: @""]; + [logOutput setString:@""]; +// [errorOutput setString:@""]; + [errorArray removeAllObjects]; + [errorOutputTable reloadData]; [NOTIFICATION_CENTER addObserver:self selector:@selector(buildDidTerminate:) @@ -616,7 +529,7 @@ makeTask = [[NSTask alloc] init]; [makeTask setArguments:buildArgs]; - [makeTask setCurrentDirectoryPath: [currentProject projectPath]]; + [makeTask setCurrentDirectoryPath:[currentProject projectPath]]; [makeTask setLaunchPath:makePath]; [makeTask setStandardOutput:logPipe]; @@ -714,11 +627,11 @@ makeTask = nil; // Run post process if configured - if (status && postProcess) +/* if (status && postProcess) { [self performSelector:postProcess]; postProcess = NULL; - } + }*/ _isBuilding = NO; _isCleaning = NO; @@ -740,7 +653,9 @@ { NSData *data; - if ((data = [readHandle availableData])) +// NSLog(@"logStdOut"); + + if ((data = [readHandle availableData]) && [data length] > 0) { [self logData:data error:NO]; } @@ -761,8 +676,9 @@ { NSData *data; - NSLog(@"logErrOut"); +// NSLog(@"logErrOut"); +// if ((data = [errorReadHandle availableData]) && [data length] > 1) if ((data = [errorReadHandle availableData])) { [self logData:data error:YES]; @@ -809,7 +725,8 @@ error:(BOOL)yn newLine:(BOOL)newLine { - NSTextView *out = (yn) ? errorOutput : logOutput; +// NSTextView *out = (yn) ? errorOutput : logOutput; + NSTextView *out = logOutput; [out replaceCharactersInRange: NSMakeRange([[out string] length],0) withString:str]; @@ -837,10 +754,274 @@ s = [[NSString alloc] initWithData:data encoding:[NSString defaultCStringEncoding]]; - [self logString:s error:yn newLine:NO]; + if (yn) + { + [self logErrorString:s]; + } + else + { + [self logString:s error:yn newLine:NO]; + } RELEASE(s); } @end +@implementation PCProjectBuilder (ErrorLogging) + +- (void)logErrorString:(NSString *)string +{ + NSRange newLineRange; + NSRange lineRange; + NSArray *items; + + // Process new data + lineRange.location = 0; + [errorString appendString:string]; + while (newLineRange.location != NSNotFound) + { + newLineRange = [errorString rangeOfString:@"\n"]; +/* NSLog(@"Line(%i) new line range: %i,%i for string\n<--|%@|-->", + [errorString length], + newLineRange.location, newLineRange.length, + errorString);*/ + + if (newLineRange.location < [errorString length]) + { + NSLog(@"<------%@------>", errorString); + + lineRange.length = newLineRange.location+1; + string = [errorString substringWithRange:lineRange]; + items = [self parseErrorLine:string]; + if (items) + { + [self addItems:items]; + } + [errorString deleteCharactersInRange:lineRange]; + } + else + { + newLineRange.location = NSNotFound; + continue; + } + } +} + +- (void)addItems:(NSArray *)items +{ + [errorArray addObjectsFromArray:items]; + [errorOutputTable reloadData]; + [errorOutputTable scrollRowToVisible:[errorArray count]-1]; +} + +- (NSString *)lineTail:(NSString*)line afterString:(NSString*)string +{ + NSRange substrRange; + + substrRange = [line rangeOfString:string]; +/* NSLog(@"In function ':%i:%i", + substrRange.location, substrRange.length);*/ + substrRange.location += substrRange.length; + substrRange.length = [line length] - (substrRange.location); +/* NSLog(@"In function ':%i:%i", + substrRange.location, substrRange.length);*/ + + return [line substringWithRange:substrRange]; +} + +- (NSArray *)parseErrorLine:(NSString *)string +{ + NSArray *components = [string componentsSeparatedByString:@":"]; + NSString *file = [NSString stringWithString:@""]; + NSString *includedFile = [NSString stringWithString:@""]; + NSString *position = [NSString stringWithString:@"{x=0; y=0}"]; + NSString *type = [NSString stringWithString:@""]; + NSString *message = [NSString stringWithString:@""]; + NSMutableArray *items = [NSMutableArray arrayWithCapacity:1]; + NSMutableDictionary *errorItem; + NSString *indentString = @"\t"; + NSString *lastFile = @""; + NSString *lastIncludedFile = @""; + + if ([errorArray count] > 0) + { + lastFile = [[errorArray lastObject] objectForKey:@"File"]; +// if (!lastFile) lastFile = @""; + lastIncludedFile = [[errorArray lastObject] objectForKey:@"IncludedFile"]; +// if (!lastIncludedFile) lastIncludedFile = @""; + } + + if ([string rangeOfString:@"In file included from "].location != NSNotFound) + { + NSLog(@"In file included from "); + file = [self lineTail:[components objectAtIndex:0] + afterString:@"In file included from "]; + position = [NSString stringWithFormat:@"{x=0; y=%f}", + [components objectAtIndex:1]]; + message = file; + lastEL = currentEL; + currentEL = ELIncluded; + } + else if ([string rangeOfString:@"In function '"].location != NSNotFound) + { + file = [components objectAtIndex:0]; + message = [self lineTail:string afterString:@"In function "]; + lastEL = currentEL; + currentEL = ELFunction; + } + else if ([string rangeOfString:@" At top level:"].location != NSNotFound) + { + lastEL = currentEL; + currentEL = ELFile; + return nil; + } + else if ([components count] > 2) + { + unsigned typeIndex; + NSString *substr; + + // file and includedFile + file = [components objectAtIndex:0]; + if (lastEL == ELIncluded || [file isEqualToString:lastIncludedFile]) + {// first message after "In file included from" + NSLog(@"Inlcuded File: %@", file); + includedFile = file; + file = lastFile; + } + + // type + if ((typeIndex = [components indexOfObject:@" warning"]) != NSNotFound) + { + type = [components objectAtIndex:typeIndex]; + } + else if ((typeIndex = [components indexOfObject:@" error"]) != NSNotFound) + { + type = [components objectAtIndex:typeIndex]; + } + // position + if (typeIndex == 2) // :line: + { + position = [NSString stringWithFormat:@"{x=0; y=%f}", + [components objectAtIndex:1]]; + } + else if (typeIndex == 3) // :line:column: + { + position = [NSString stringWithFormat:@"{x=%f; y=%f}", + [components objectAtIndex:2], [components objectAtIndex:1]]; + } + // message + substr = [NSString stringWithFormat:@"%@:", type]; + message = [self lineTail:string afterString:substr]; + lastEL = currentEL; + currentEL = ELError; + } + else + { + return nil; + } + + // Insert indentation + if (currentEL == ELError) + { + if (lastEL == ELFunction) + { + indentString = @"\t\t"; + } + else if (lastEL == ELError) + { + indentString = [NSString stringWithString:lastIndentString]; + } + } + else if (currentEL == ELFunction) + { + indentString = @"\t"; + } + else if (lastEL == ELNone || currentEL == ELFile) + { + indentString = @""; + } + message = [NSString stringWithFormat:@"%@%@", indentString, message]; + lastIndentString = [indentString copy]; + + // Create array items + if ((lastEL == ELIncluded + || ![includedFile isEqualToString:@""]) + && ![includedFile isEqualToString:lastIncludedFile]) + { +// NSString *includedMessage; + + NSLog(@"lastEL == ELIncluded"); + +// includedMessage = [NSString stringWithFormat:@"%@(%@)", +// [includedFile copy], [file copy]]; + + NSLog(@"Included: %@ != %@", includedFile, lastIncludedFile); + errorItem = [NSMutableDictionary dictionaryWithCapacity:1]; + [errorItem setObject:@"" forKey:@"ErrorImage"]; + [errorItem setObject:[file copy] forKey:@"File"]; + [errorItem setObject:[includedFile copy] forKey:@"IncludedFile"]; + [errorItem setObject:@"" forKey:@"Position"]; + [errorItem setObject:@"" forKey:@"Type"]; + [errorItem setObject:[includedFile copy] forKey:@"Error"]; + + [items addObject:errorItem]; + } + else if ((lastEL == ELNone || ![file isEqualToString:lastFile]) + && currentEL != ELIncluded) + { + NSLog(@"lastEL == ELNone (%@)", includedFile); + NSLog(@"File: %@ != %@", file, lastFile); + errorItem = [NSMutableDictionary dictionaryWithCapacity:1]; + [errorItem setObject:@"" forKey:@"ErrorImage"]; + [errorItem setObject:[file copy] forKey:@"File"]; + [errorItem setObject:[includedFile copy] forKey:@"IncludedFile"]; + [errorItem setObject:@"" forKey:@"Position"]; + [errorItem setObject:@"" forKey:@"Type"]; + [errorItem setObject:[file copy] forKey:@"Error"]; + + [items addObject:errorItem]; + } + + errorItem = [NSMutableDictionary dictionaryWithCapacity:1]; + [errorItem setObject:@"" forKey:@"ErrorImage"]; + [errorItem setObject:[file copy] forKey:@"File"]; + [errorItem setObject:[includedFile copy] forKey:@"IncludedFile"]; + [errorItem setObject:[position copy] forKey:@"Position"]; + [errorItem setObject:[type copy] forKey:@"Type"]; + [errorItem setObject:[message copy] forKey:@"Error"]; + + NSLog(@"Parsed message: %@ (%@)", message, includedFile); + + [items addObject:errorItem]; + + return items; +} + +- (int)numberOfRowsInTableView:(NSTableView *)aTableView +{ + if (errorArray != nil && aTableView == errorOutputTable) + { + return [errorArray count]; + } + + return 0; +} + +- (id) tableView:(NSTableView *)aTableView + objectValueForTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex +{ + NSDictionary *errorItem; + + if (errorArray != nil && aTableView == errorOutputTable) + { + errorItem = [errorArray objectAtIndex:rowIndex]; + + return [errorItem objectForKey:[aTableColumn identifier]]; + } + + return nil; +} + +@end diff --git a/Framework/PCProjectBuilderPanel.m b/Framework/PCProjectBuilderPanel.m index 85d72ea..cf8dad8 100644 --- a/Framework/PCProjectBuilderPanel.m +++ b/Framework/PCProjectBuilderPanel.m @@ -31,41 +31,38 @@ @implementation PCProjectBuilderPanel -- (id)initWithProjectManager:(PCProjectManager *)aManager +- (void)awakeFromNib { - PCProjectBuilder *projectBuilder = nil; - PCProject *activeProject = nil; - - projectManager = aManager; - activeProject = [projectManager rootActiveProject]; - projectBuilder = [activeProject projectBuilder]; - - self = [super initWithContentRect: NSMakeRect (0, 300, 480, 322) + PCProject *activeProject = [projectManager rootActiveProject]; +// PCProjectBuilder *projectBuilder = [activeProject projectBuilder]; + +/* self = [super initWithContentRect: NSMakeRect (0, 300, 480, 322) styleMask: (NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask) backing: NSBackingStoreRetained defer: YES]; [self setMinSize: NSMakeSize(440, 222)]; - [self setFrameAutosaveName: @"ProjectBuilder"]; [self setReleasedWhenClosed: NO]; - [self setHidesOnDeactivate: NO]; - [self setTitle: [NSString stringWithFormat: + [self setHidesOnDeactivate: NO];*/ + [panel setFrameAutosaveName:@"ProjectBuilder"]; + [panel setTitle:[NSString stringWithFormat: @"%@ - Project Build", [activeProject projectName]]]; // Panel's content view - contentBox = [[NSBox alloc] init]; +/* contentBox = [[NSBox alloc] init]; [contentBox setContentViewMargins:NSMakeSize(8.0, 0.0)]; [contentBox setTitlePosition:NSNoTitle]; - [contentBox setBorderType:NSNoBorder]; - [super setContentView:contentBox]; + [contentBox setBorderType:NSNoBorder];*/ + [panel setContentView:contentBox]; // Empty content view of contentBox - emptyBox = [[NSBox alloc] init]; + RETAIN(emptyBox); +/* emptyBox = [[NSBox alloc] init]; [emptyBox setContentViewMargins:NSMakeSize(0.0, 0.0)]; [emptyBox setTitlePosition:NSNoTitle]; [emptyBox setBorderType:NSLineBorder]; - [contentBox setContentView:emptyBox]; + [contentBox setContentView:emptyBox];*/ // Track project switching [[NSNotificationCenter defaultCenter] @@ -74,9 +71,20 @@ name:PCActiveProjectDidChangeNotification object:nil]; - if (![self setFrameUsingName: @"ProjectBuilder"]) + if (![panel setFrameUsingName:@"ProjectBuilder"]) { - [self center]; + [panel center]; + } +} + +- (id)initWithProjectManager:(PCProjectManager *)aManager +{ + projectManager = aManager; + + if ([NSBundle loadNibNamed:@"BuilderPanel" owner:self] == NO) + { + PCLogError(self, @"error loading BuilderPanel NIB file!"); + return nil; } return self; @@ -90,6 +98,8 @@ [[NSNotificationCenter defaultCenter] removeObserver:self]; + RELEASE(emptyBox); + [super dealloc]; } @@ -107,7 +117,7 @@ /* PCLogInfo(self, @"orderFront: %@ -> %@", builderView, [builderView superview]);*/ - [super orderFront:self]; + [panel orderFront:self]; } - (void)close @@ -118,7 +128,7 @@ // PCLogInfo(self, @"close: %@", [contentBox contentView]); - [super close]; + [panel close]; } - (void)activeProjectDidChange:(NSNotification *)aNotif @@ -141,12 +151,16 @@ } else { - [self setTitle: [NSString stringWithFormat: + [panel setTitle:[NSString stringWithFormat: @"%@ - Project Build", [rootProject projectName]]]; - [contentBox - setContentView:[[rootProject projectBuilder] componentView]]; + [contentBox setContentView:[[rootProject projectBuilder] componentView]]; } } +- (BOOL)isVisible +{ + return [panel isVisible]; +} + @end