apps-projectcenter/Modules/RenaissanceProject/PCRenaissanceProj.m
Sergii Stoian cfe02368c5 Various fixes and cleanups
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@19527 72102866-910b-0410-8b05-ffd578937521
2004-06-15 20:41:49 +00:00

221 lines
7.6 KiB
Objective-C

/*
GNUstep ProjectCenter - http://www.gnustep.org
Copyright (C) 2001-2004 Free Software Foundation
Authors: Philippe C.D. Robert
Pierre-Yves Rivaille
Daniel Luederwald
Serg Stoyan
Description: Creates new project of the type RenaissanceApplication!
This file is part of GNUstep.
This application is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This application is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
*/
#include "ProjectCenter/PCFileCreator.h"
#include "ProjectCenter/PCMakefileFactory.h"
#include "PCRenaissanceProj.h"
#include "PCRenaissanceProject.h"
@implementation PCRenaissanceProj
static PCRenaissanceProj *_creator = nil;
//----------------------------------------------------------------------------
// ProjectType
//----------------------------------------------------------------------------
+ (id)sharedCreator
{
if (!_creator)
{
_creator = [[[self class] alloc] init];
}
return _creator;
}
- (Class)projectClass
{
return [PCRenaissanceProject class];
}
- (NSString *)projectTypeName
{
return @"Renaissance Application";
}
- (PCProject *)createProjectAt:(NSString *)path
{
PCRenaissanceProject *project = nil;
NSFileManager *fm = [NSFileManager defaultManager];
NSAssert(path,@"No valid project path provided!");
if ([fm createDirectoryAtPath:path attributes:nil])
{
NSBundle *projectBundle = nil;
NSMutableDictionary *projectDict = nil;
NSString *projectName = nil;
NSString *_file = nil;
NSString *_2file = nil;
// NSString *_lresourcePath = nil;
NSString *_resourcePath = nil;
NSDictionary *infoDict = nil;
NSString *mainMarkup = nil;
PCFileCreator *fc = [PCFileCreator sharedCreator];
project = [[[PCRenaissanceProject alloc] init] autorelease];
projectBundle = [NSBundle bundleForClass:[self class]];
_file = [projectBundle pathForResource:@"PC" ofType:@"project"];
projectDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file];
// Customise the project
projectName = [path lastPathComponent];
if ([[projectName pathExtension] isEqualToString:@"subproj"])
{
projectName = [projectName stringByDeletingPathExtension];
}
[projectDict setObject:projectName forKey:PCProjectName];
[projectDict setObject:[self projectTypeName] forKey:PCProjectType];
[projectDict setObject:[[NSCalendarDate date] description]
forKey:PCCreationDate];
[projectDict setObject:NSFullUserName() forKey:PCProjectCreator];
[projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer];
// The path cannot be in the PC.project file!
[project setProjectPath:path];
[project setProjectName:projectName];
// Copy the project files to the provided path
_file = [projectBundle pathForResource:@"main" ofType:@"m"];
_2file = [path stringByAppendingPathComponent:@"main.m"];
[fm copyPath:_file toPath:_2file handler:nil];
[fc replaceTagsInFileAtPath:_2file withProject:project];
_file = [projectBundle pathForResource:@"AppController" ofType:@"m"];
_2file = [path stringByAppendingPathComponent:@"AppController.m"];
[fm copyPath:_file toPath:_2file handler:nil];
[fc replaceTagsInFileAtPath:_2file withProject:project];
_file = [projectBundle pathForResource:@"AppController" ofType:@"h"];
_2file = [path stringByAppendingPathComponent:@"AppController.h"];
[fm copyPath:_file toPath:_2file handler:nil];
[fc replaceTagsInFileAtPath:_2file withProject:project];
// GNUmakefile.postamble
[[PCMakefileFactory sharedFactory] createPostambleForProject:project];
// GNUmakefile.postamble
[[PCMakefileFactory sharedFactory] createPostambleForProject:project];
// Resources
/* _lresourcePath = [path stringByAppendingPathComponent:@"English.lproj"];
[fm createDirectoryAtPath:_resourcePath attributes:nil];*/
_resourcePath = [path stringByAppendingPathComponent:@"Resources"];
[fm createDirectoryAtPath:_resourcePath attributes:nil];
#ifdef GNUSTEP
_file = [projectBundle pathForResource:@"MainMenu-GNUstep"
ofType:@"gsmarkup"];
_2file = [_resourcePath stringByAppendingPathComponent:
@"MainMenu-GNUstep.gsmarkup"];
mainMarkup = [NSString stringWithString:@"MainMenu-GNUstep.gsmarkup"];
[fm copyPath:_file toPath:_2file handler:nil];
#else
_file = [projectBundle pathForResource:@"MainMenu-OSX"
ofType:@"gsmarkup"];
_2file = [_resourcePath stringByAppendingPathComponent:
@"MainMenu-OSX.gsmarkup"];
[fm copyPath:_file toPath:_2file handler:nil];
mainMarkup = [NSString stringWithString:@"MainMenu-OSX.gsmarkup"];
#endif
[projectDict setObject:mainMarkup forKey:PCMainInterfaceFile];
_file = [projectBundle pathForResource:@"Main" ofType:@"gsmarkup"];
_2file = [_resourcePath stringByAppendingPathComponent:@"Main.gsmarkup"];
[fm copyPath:_file toPath:_2file handler:nil];
[projectDict setObject:
[NSArray arrayWithObjects:@"Main.gsmarkup",mainMarkup,nil]
forKey:PCInterfaces];
// Create the Info-gnustep.plist
infoDict = [NSDictionary dictionaryWithObjectsAndKeys:
@"Generated by ProjectCenter, do not edit", @"!",
@"", @"ApplicationDescription",
@"", @"ApplicationIcon",
projectName, @"ApplicationName",
@"0.1", @"ApplicationRelease",
[NSArray array], @"Authors",
@"Copyright (C) 200x by ...", @"Copyright",
@"Released under...", @"CopyrightDescription",
@"0.1", @"FullVersionID",
projectName, @"NSExecutable",
@"", @"NSIcon",
mainMarkup, @"GSMainMarkupFile",
[projectDict objectForKey:PCPrincipalClass], @"NSPrincipalClass",
@"Application", @"NSRole",
@"", @"URL",
nil];
_2file = [_resourcePath
stringByAppendingPathComponent:@"Info-gnustep.plist"];
[infoDict writeToFile:_2file atomically:YES];
[projectDict
setObject:[NSArray arrayWithObjects:@"Info-gnustep.plist",nil]
forKey:PCOtherResources];
// Set the new dictionary - this causes the GNUmakefile
// to be written to disc
if (![project assignProjectDict:projectDict])
{
NSRunAlertPanel(@"Attention!",
@"Could not load %@!",
@"OK",nil,nil,path);
return nil;
}
[project assignInfoDict:(NSMutableDictionary *)infoDict];
// Save the project to disc
[project save];
}
return project;
}
- (PCProject *)openProjectAt:(NSString *)path
{
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
PCRenaissanceProject *project = nil;
project = [[[PCRenaissanceProject alloc]
initWithProjectDictionary:dict
path:[path stringByDeletingLastPathComponent]] autorelease];
[project loadInfoFileAtPath:[path stringByDeletingLastPathComponent]];
return project;
}
@end