diff --git a/Documentation/ANNOUNCE b/Documentation/ANNOUNCE index 0029c1e..0eaffbc 100644 --- a/Documentation/ANNOUNCE +++ b/Documentation/ANNOUNCE @@ -1,7 +1,7 @@ ANNOUNCE ************ -This is version 0.4.0 of ProjectCenter. +This is version 0.4.1 of ProjectCenter. This is a bugfix version. What is ProjectCenter? ====================== @@ -10,38 +10,26 @@ What is ProjectCenter? application. It is a clone of the OPENSTEP ProjectBuilder application for GNUstep. - ProjectCenter is covered under the GNU Public License. This means if you - make changes to these programs, you cannot charge a fee, other than + ProjectCenter is covered under the GNU General Public License. This means + if you make changes to these programs, you cannot charge a fee, other than distribution fees, for others to use the program. You should read the Documentation/COPYING file for more information. -Noteworthy changes in version `0.4.0'. +Noteworthy changes in version `0.4.1'. ====================================== - * A lot of refactoring and cleanup was made + * Fixes in file and subprojects handling. - * Some parts of interface were recreated using GORM + * Improvements and fixes in file selection dialog. - * Most part of Project Inspector is completed + * Rewritten toolips code for buttons. Made it NSView compatible + (ready for incorporation into NSView code). - * Finished Loaded Files and appropriate menu items + * All .gorm files updated with latest GORM. - * Stability issues fixed in Project Builder + * Added support for document-based applications (added "Document Types" + panel into Project Inspector). - * Interaces fixes were made in Project Launcher - - * Added subprojects support - - * Preferences recreated and cleaned up. - - * Many browser fixes were made in Project Window - - * Much time was spent to fix stability problems - - * Added "Aggregate" project type - - * "Application" and "GormApplication" project types merged - into "Application" project type How can I get support for this software? ======================================== diff --git a/Documentation/AUTHORS b/Documentation/AUTHORS index 0fae3dc..0d5d8ce 100644 --- a/Documentation/AUTHORS +++ b/Documentation/AUTHORS @@ -6,3 +6,4 @@ Nicola Pero Pierre-Yves Rivaille Adam Fedor Daniel Luederwald +Gregory Jonh Casamento \ No newline at end of file diff --git a/Documentation/ChangeLog b/Documentation/ChangeLog index 8c730ad..d40b127 100644 --- a/Documentation/ChangeLog +++ b/Documentation/ChangeLog @@ -1,8 +1,24 @@ +2005-01-22 Serg Stoyan + + * Release 0.4.1 + + * Modules/ApplicationProject/PCAppProject+Inspector.m: + (addDocType:): Set all textfields to default values. + (removeDocType:): Call fillFieldsForRow: after row removing. + +2005-01-09 Gregory Jonh Casamento + + * Library/PCProjectBuilder.m: + (build:): Exception handler added. + 2005-01-09 Serg Stoyan * Library/PCButton.m: (release): Added and implemented. Remove tooltips if object is about to be dealloced. + + * Library/PCProjectBuilder.m: + (stopBuild:): Eception handler added. 2005-01-05 Serg Stoyan diff --git a/GNUmakefile b/GNUmakefile index d432b14..c8e8e10 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -8,7 +8,7 @@ GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT) # # Main application # -VERSION = 0.4.1pre +VERSION = 0.4.1 PACKAGE_NAME = ProjectCenter APP_NAME = ProjectCenter ProjectCenter_APPLICATION_ICON = Images/ProjectCenter.tiff @@ -84,7 +84,6 @@ Modules/LibraryProject/LibraryProject.bundle \ Modules/RenaissanceProject/RenaissanceProject.bundle \ Modules/ToolProject/ToolProject.bundle - # # Header files # @@ -106,11 +105,6 @@ PCMenuController.m \ PCPrefController.m \ ProjectCenter_main.m -# -# C files -# -ProjectCenter_C_FILES = - -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make diff --git a/GNUmakefile.postamble b/GNUmakefile.postamble index b80e36e..88d7953 100644 --- a/GNUmakefile.postamble +++ b/GNUmakefile.postamble @@ -23,11 +23,7 @@ # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. before-all:: -# rm -f ProjectCenter -# $(LN_S) . ProjectCenter after-clean:: -# rm -f ProjectCenter after-uninstall:: - rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Headers/ProjectCenter diff --git a/GNUmakefile.preamble b/GNUmakefile.preamble index 5318084..d9330cb 100644 --- a/GNUmakefile.preamble +++ b/GNUmakefile.preamble @@ -47,8 +47,6 @@ ADDITIONAL_LDFLAGS += -lProjectCenter #ADDITIONAL_LIB_DIRS += -L./Library/$(GNUSTEP_OBJ_DIR) ADDITIONAL_LIB_DIRS += -L./Library/ProjectCenter.framework/Versions/Current -ADDITIONAL_TOOL_LIBS += - # # Flags dealing with installing and uninstalling # diff --git a/Library/GNUmakefile b/Library/GNUmakefile index 1d22fcd..410f21d 100644 --- a/Library/GNUmakefile +++ b/Library/GNUmakefile @@ -9,9 +9,9 @@ GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT) # # Framework # -VERSION = 0.4.0 +VERSION = 0.4.1 FRAMEWORK_NAME = ProjectCenter -ProjectCenter_CURRENT_VERSION_NAME = 0.4.0 +ProjectCenter_CURRENT_VERSION_NAME = 0.4.1 ProjectCenter_DEPLOY_WITH_CURRENT_VERSION = yes ProjectCenter_LIBRARIES_DEPEND_UPON += -lgnustep-gui diff --git a/Library/GNUmakefile.postamble b/Library/GNUmakefile.postamble index 461bf15..fce9554 100644 --- a/Library/GNUmakefile.postamble +++ b/Library/GNUmakefile.postamble @@ -29,6 +29,7 @@ after-clean:: rm -f ../ProjectCenter after-uninstall:: - rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Headers/ProjectCenter - rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Libraries/Resources/ProjectCenter +# rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Headers/ProjectCenter +# rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Libraries/Resources/ProjectCenter + rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Libraries/libProjectCenter* diff --git a/Library/PCProjectBuilder.h b/Library/PCProjectBuilder.h index 286aa98..d52abf6 100644 --- a/Library/PCProjectBuilder.h +++ b/Library/PCProjectBuilder.h @@ -97,8 +97,8 @@ @interface PCProjectBuilder (UserInterface) -- (void) _createComponentView; -- (void) _createOptionsPanel; +- (void)_createComponentView; +- (void)_createOptionsPanel; @end diff --git a/Library/PCProjectBuilder.m b/Library/PCProjectBuilder.m index 16e4520..b006102 100644 --- a/Library/PCProjectBuilder.m +++ b/Library/PCProjectBuilder.m @@ -382,6 +382,7 @@ #ifdef DEVELOPMENT NSLog (@"PCProjectBuilder: dealloc"); #endif + [buildTarget release]; [buildArgs release]; [makePath release]; @@ -459,25 +460,25 @@ // Set build arguments if ([buildTarget isEqualToString: @"Debug"]) { - [buildArgs addObject: @"debug=yes"]; + [buildArgs addObject:@"debug=yes"]; } - else if ([buildTarget isEqualToString: @"Profile"]) + else if ([buildTarget isEqualToString:@"Profile"]) { - [buildArgs addObject: @"profile=yes"]; - [buildArgs addObject: @"static=yes"]; + [buildArgs addObject:@"profile=yes"]; + [buildArgs addObject:@"static=yes"]; } - else if ([buildTarget isEqualToString: @"Tarball"]) + else if ([buildTarget isEqualToString:@"Tarball"]) { - [buildArgs addObject: @"dist"]; + [buildArgs addObject:@"dist"]; } - else if ([buildTarget isEqualToString: @"RPM"]) + else if ([buildTarget isEqualToString:@"RPM"]) { - [buildArgs addObject: @"rpm"]; + [buildArgs addObject:@"rpm"]; postProcess = @selector (copyPackageTo:); } - statusString = [NSString stringWithString: @"Building..."]; - [buildTarget setString: @"Build"]; + statusString = [NSString stringWithString:@"Building..."]; + [buildTarget setString:@"Build"]; [cleanButton setEnabled:NO]; [installButton setEnabled:NO]; [self build:self]; @@ -513,13 +514,10 @@ { if (NSRunAlertPanel(@"Clean Project?", @"Do you really want to clean project '%@'?", - @"Yes", - @"No", - nil, - [currentProject projectName]) + @"Yes", @"No", nil, [currentProject projectName]) == NSAlertAlternateReturn) { - [cleanButton setState: NSOffState]; + [cleanButton setState:NSOffState]; return; } } @@ -534,12 +532,12 @@ - (void)startInstall:(id)sender { - [buildTarget setString: @"Install"]; - statusString = [NSString stringWithString: @"Installing..."]; - [buildArgs addObject: @"install"]; + [buildTarget setString:@"Install"]; + statusString = [NSString stringWithString:@"Installing..."]; + [buildArgs addObject:@"install"]; [buildButton setEnabled:NO]; [cleanButton setEnabled:NO]; - [self build: self]; + [self build:self]; } - (void)showOptionsPanel:(id)sender @@ -548,7 +546,7 @@ { [self _createOptionsPanel]; } - [optionsPanel orderFront: nil]; + [optionsPanel orderFront:nil]; } // --- Actions @@ -566,7 +564,7 @@ { if (NSRunAlertPanel(@"Project Changed!", @"Should it be saved first?", - @"Yes",@"No",nil) == NSAlertDefaultReturn) + @"Yes", @"No", nil) == NSAlertDefaultReturn) { [currentProject save]; } @@ -577,12 +575,12 @@ [currentProject save]; } - if( [buildTarget isEqualToString: @"RPM"] - && [env objectForKey:@"RPM_TOPDIR"] == nil ) + if ([buildTarget isEqualToString:@"RPM"] + && [env objectForKey:@"RPM_TOPDIR"] == nil) { NSRunAlertPanel(@"Attention!", @"First set the environment variable 'RPM_TOPDIR'!", - @"OK",nil,nil); + @"OK", nil, nil); return; } @@ -591,38 +589,38 @@ readHandle = [logPipe fileHandleForReading]; [readHandle waitForDataInBackgroundAndNotify]; - [NOTIFICATION_CENTER addObserver: self - selector: @selector (logStdOut:) - name: NSFileHandleDataAvailableNotification - object: readHandle]; + [NOTIFICATION_CENTER addObserver:self + selector:@selector(logStdOut:) + name:NSFileHandleDataAvailableNotification + object:readHandle]; errorPipe = [NSPipe pipe]; errorReadHandle = [errorPipe fileHandleForReading]; [errorReadHandle waitForDataInBackgroundAndNotify]; - [NOTIFICATION_CENTER addObserver: self - selector: @selector (logErrOut:) - name: NSFileHandleDataAvailableNotification - object: errorReadHandle]; + [NOTIFICATION_CENTER addObserver:self + selector:@selector(logErrOut:) + name:NSFileHandleDataAvailableNotification + object:errorReadHandle]; - [buildStatusField setStringValue: statusString]; + [buildStatusField setStringValue:statusString]; // Run make task [logOutput setString: @""]; [errorOutput setString: @""]; - [NOTIFICATION_CENTER addObserver: self - selector: @selector (buildDidTerminate:) - name: NSTaskDidTerminateNotification - object: nil]; + [NOTIFICATION_CENTER addObserver:self + selector:@selector(buildDidTerminate:) + name:NSTaskDidTerminateNotification + object:nil]; makeTask = [[NSTask alloc] init]; - [makeTask setArguments: buildArgs]; + [makeTask setArguments:buildArgs]; [makeTask setCurrentDirectoryPath: [currentProject projectPath]]; - [makeTask setLaunchPath: makePath]; + [makeTask setLaunchPath:makePath]; - [makeTask setStandardOutput: logPipe]; - [makeTask setStandardError: errorPipe]; + [makeTask setStandardOutput:logPipe]; + [makeTask setStandardError:errorPipe]; NS_DURING { @@ -632,11 +630,12 @@ { NSRunAlertPanel(@"Problem Launching Build Tool", [localException reason], - @"OK", - nil, - nil, - nil); - + @"OK", nil, nil, nil); + + //Clean up after task is terminated + [[NSNotificationCenter defaultCenter] + postNotificationName:NSTaskDidTerminateNotification + object:makeTask]; } NS_ENDHANDLER } @@ -650,50 +649,66 @@ return; } - [NOTIFICATION_CENTER removeObserver:self]; + NSLog(@"task did terminate"); - status = [makeTask terminationStatus]; +// [NOTIFICATION_CENTER removeObserver:self]; + + [NOTIFICATION_CENTER removeObserver:self + name:NSTaskDidTerminateNotification + object:nil]; + + // If task was not launched catch exception + NS_DURING + { + status = [makeTask terminationStatus]; + } + NS_HANDLER + { + status = 1; + } + NS_ENDHANDLER + if (status == 0) { [self logString: - [NSString stringWithFormat: @"=== %@ succeeded!", buildTarget] - error: NO newLine: NO]; - [buildStatusField setStringValue: - [NSString stringWithFormat: + [NSString stringWithFormat:@"=== %@ succeeded!", buildTarget] + error:NO + newLine:NO]; + [buildStatusField setStringValue:[NSString stringWithFormat: @"%@ - %@ succeeded...", [currentProject projectName], buildTarget]]; } else { [self logString: - [NSString stringWithFormat: @"=== %@ terminated!", buildTarget] - error: NO newLine: NO]; - [buildStatusField setStringValue: - [NSString stringWithFormat: + [NSString stringWithFormat:@"=== %@ terminated!", buildTarget] + error:NO + newLine:NO]; + [buildStatusField setStringValue:[NSString stringWithFormat: @"%@ - %@ terminated...", [currentProject projectName], buildTarget]]; } // Rstore buttons state - if ([buildTarget isEqualToString: @"Build"]) + if ([buildTarget isEqualToString:@"Build"]) { - [buildButton setState: NSOffState]; - [cleanButton setEnabled: YES]; - [installButton setEnabled: YES]; + [buildButton setState:NSOffState]; + [cleanButton setEnabled:YES]; + [installButton setEnabled:YES]; } - else if ([buildTarget isEqualToString: @"Clean"]) + else if ([buildTarget isEqualToString:@"Clean"]) { - [cleanButton setState: NSOffState]; - [buildButton setEnabled: YES]; - [installButton setEnabled: YES]; + [cleanButton setState:NSOffState]; + [buildButton setEnabled:YES]; + [installButton setEnabled:YES]; } - else if ([buildTarget isEqualToString: @"Install"]) + else if ([buildTarget isEqualToString:@"Install"]) { - [installButton setState: NSOffState]; - [buildButton setEnabled: YES]; - [cleanButton setEnabled: YES]; + [installButton setState:NSOffState]; + [buildButton setEnabled:YES]; + [cleanButton setEnabled:YES]; } [buildArgs removeAllObjects]; - [buildTarget setString: @"Default"]; + [buildTarget setString:@"Default"]; RELEASE(makeTask); makeTask = nil; @@ -701,7 +716,7 @@ // Run post process if configured if (status && postProcess) { - [self performSelector: postProcess]; + [self performSelector:postProcess]; postProcess = NULL; } @@ -719,7 +734,6 @@ [buildTargetArgsField stringValue]]; [targetField setStringValue: target]; - } - (void)logStdOut:(NSNotification *)aNotif @@ -728,22 +742,42 @@ if ((data = [readHandle availableData])) { - [self logData: data error: NO]; + [self logData:data error:NO]; } - [readHandle waitForDataInBackgroundAndNotifyForModes: nil]; + if (makeTask) + { + [readHandle waitForDataInBackgroundAndNotify]; + } + else + { + [NOTIFICATION_CENTER removeObserver:self + name:NSFileHandleDataAvailableNotification + object:readHandle]; + } } - (void)logErrOut:(NSNotification *)aNotif { NSData *data; + NSLog(@"logErrOut"); + if ((data = [errorReadHandle availableData])) { [self logData:data error:YES]; } - [errorReadHandle waitForDataInBackgroundAndNotifyForModes:nil]; + if (makeTask) + { + [errorReadHandle waitForDataInBackgroundAndNotify]; + } + else + { + [NOTIFICATION_CENTER removeObserver:self + name:NSFileHandleDataAvailableNotification + object:errorReadHandle]; + } } - (void)copyPackageTo:(NSString *)path @@ -765,43 +799,46 @@ @implementation PCProjectBuilder (BuildLogging) -- (void)logString: (NSString *)string - error: (BOOL)yn +- (void)logString:(NSString *)string + error:(BOOL)yn { - [self logString: string error: yn newLine: NO]; + [self logString:string error:yn newLine:NO]; } -- (void)logString: (NSString *)str - error: (BOOL)yn - newLine: (BOOL)newLine +- (void)logString:(NSString *)str + error:(BOOL)yn + newLine:(BOOL)newLine { NSTextView *out = (yn) ? errorOutput : logOutput; [out replaceCharactersInRange: - NSMakeRange ([[out string] length],0) withString: str]; + NSMakeRange([[out string] length],0) withString:str]; if (newLine) { [out replaceCharactersInRange: - NSMakeRange ([[out string] length], 0) withString: @"\n"]; + NSMakeRange([[out string] length], 0) withString:@"\n"]; } else { [out replaceCharactersInRange: - NSMakeRange ([[out string] length], 0) withString: @" "]; + NSMakeRange([[out string] length], 0) withString:@" "]; } - [out scrollRangeToVisible: NSMakeRange([[out string] length], 0)]; - [out setNeedsDisplay: YES]; + [out scrollRangeToVisible:NSMakeRange([[out string] length], 0)]; + [out setNeedsDisplay:YES]; } -- (void)logData: (NSData *)data - error: (BOOL)yn +- (void)logData:(NSData *)data + error:(BOOL)yn { - NSString *s = [[NSString alloc] initWithData: data - encoding: [NSString defaultCStringEncoding]]; + NSString *s = nil; + + s = [[NSString alloc] initWithData:data + encoding:[NSString defaultCStringEncoding]]; + + [self logString:s error:yn newLine:NO]; - [self logString: s error: yn newLine: NO]; RELEASE(s); } diff --git a/Modules/ApplicationProject/PCAppProject+Inspector.m b/Modules/ApplicationProject/PCAppProject+Inspector.m index 9696ae5..8cb21b0 100644 --- a/Modules/ApplicationProject/PCAppProject+Inspector.m +++ b/Modules/ApplicationProject/PCAppProject+Inspector.m @@ -384,12 +384,12 @@ NSString *PCITextFieldGetFocus = @"PCITextFieldGetFocusNotification"; NSMutableDictionary *entry = [NSMutableDictionary dictionaryWithCapacity:6]; int selectedRow = [docTypesList selectedRow]; - [entry setObject:[docTypeField stringValue] forKey:@"NSName"]; - [entry setObject:[docNameField stringValue] forKey:@"NSHumanReadableName"]; - [entry setObject:[[docExtensionsField stringValue] componentsSeparatedByString:@","] forKey:@"NSUnixExtensions"]; - [entry setObject:[docIconField stringValue] forKey:@"NSIcon"]; - [entry setObject:[docRoleField stringValue] forKey:@"NSRole"]; - [entry setObject:[docClassField stringValue] forKey:@"NSDocumentClass"]; + [entry setObject:@"" forKey:@"NSName"]; + [entry setObject:@"" forKey:@"NSHumanReadableName"]; + [entry setObject:[NSArray array] forKey:@"NSUnixExtensions"]; + [entry setObject:@"" forKey:@"NSIcon"]; + [entry setObject:@"" forKey:@"NSRole"]; + [entry setObject:@"NSDocumentClass" forKey:@"NSDocumentClass"]; if (selectedRow >= 0 && [docTypesItems count] > 0) { @@ -404,6 +404,7 @@ NSString *PCITextFieldGetFocus = @"PCITextFieldGetFocusNotification"; [docTypesList reloadData]; [docTypesList selectRow:row byExtendingSelection:NO]; + [docTypesList scrollRowToVisible:row]; [self fillFieldsForRow:row]; @@ -425,9 +426,10 @@ NSString *PCITextFieldGetFocus = @"PCITextFieldGetFocusNotification"; if (([docTypesList selectedRow] < 0) && ([docTypesItems count] > 0)) { [docTypesList selectRow:[docTypesItems count]-1 byExtendingSelection:NO]; - [self fillFieldsForRow:[docTypesItems count]-1]; } + [self fillFieldsForRow:[docTypesList selectedRow]]; + [self setProjectDictObject:docTypesItems forKey:PCDocumentTypes notify:YES]; diff --git a/Resources/Info-gnustep.plist b/Resources/Info-gnustep.plist index ab1faa0..fb494dc 100644 --- a/Resources/Info-gnustep.plist +++ b/Resources/Info-gnustep.plist @@ -1,10 +1,10 @@ { NOTE = "Automatically generated, do not edit!"; ApplicationName = "ProjectCenter"; - ApplicationDescription = "GNUstep IDE"; + ApplicationDescription = "GNUstep Integrated Development Environment"; ApplicationIcon = "ProjectCenter.tiff"; - ApplicationRelease = "0.4.1pre"; - FullVersionID = "development"; + ApplicationRelease = "0.4.1"; + FullVersionID = "HEAD"; Authors = ( "Philippe C.D. Robert", "Serg Stoyan", @@ -12,7 +12,8 @@ "Richard Frith-Macdonald", "Nicola Pero", "Pierre-Yves Rivaille", - "Adam Fedor"); + "Adam Fedor", + "Gregory Jonh Casamento"); NSIcon = "ProjectCenter.tiff"; NSExecutable = ProjectCenter; NSMainNibFile = ProjectCenter.gorm; @@ -41,6 +42,6 @@ } ); URL = "See http://www.gnustep.org/"; - Copyright = "Copyright (C) 1999 - 2003 Free Software Foundation"; + Copyright = "Copyright (C) 1999 - 2005 Free Software Foundation"; CopyrightDescription = "Released under the GNU General Public License 2.0"; }