diff --git a/Modules/ApplicationProject/GNUmakefile b/Modules/ApplicationProject/GNUmakefile new file mode 100644 index 0000000..a3260bf --- /dev/null +++ b/Modules/ApplicationProject/GNUmakefile @@ -0,0 +1,73 @@ +# +# GNUmakefile - Generated by ProjectCenter +# Written by Philippe C.D. Robert +# +# NOTE: Do NOT change this file -- ProjectCenter maintains it! +# +# Put all of your customisations in GNUmakefile.preamble and +# GNUmakefile.postamble +# + +include $(GNUSTEP_MAKEFILES)/common.make + +# +# Subprojects +# + + + +# +# Bundle +# + +PACKAGE_NAME = ApplicationProject +BUNDLE_NAME = ApplicationProject +ApplicationProject_PRINCIPAL_CLASS = PCAppProj + + +# +# Additional libraries +# + +ApplicationProject_LIBRARIES_DEPEND_UPON += -lProjectCenter + +# +# Resource files +# + +ApplicationProject_RESOURCE_FILES= \ +Templates/AppController.h \ +Templates/AppController.m \ +Templates/main.m \ +Templates/PC.project \ +Templates/GNUmakefile.preamble \ +Templates/GNUmakefile.postamble \ +Templates/objects.gorm \ +Templates/data.classes + +# +# Header files +# + +ApplicationProject_HEADERS= \ +PCAppProj.h \ +PCAppProject.h + +# +# Class files +# + +ApplicationProject_OBJC_FILES= \ +PCAppProj.m \ +PCAppProject.m + +# +# C files +# + +ApplicationProject_C_FILES= + +include ../GNUmakefile.bundles + +include $(GNUSTEP_MAKEFILES)/bundle.make + diff --git a/Modules/ApplicationProject/Info.table b/Modules/ApplicationProject/Info.table new file mode 100644 index 0000000..e0861e8 --- /dev/null +++ b/Modules/ApplicationProject/Info.table @@ -0,0 +1,29 @@ +{ + AdditionalAttributes = { + PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; + }; + Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); + AttributesInspector = ApplicationInspector; + DefaultExtension = ""; + Default_Localizable_Keys = (INTERFACES); + GeneratedFiles = (Makefile, iconHeader); + INSTALLFLAGS = "-c -s -m 755"; + InfoName = ""; + Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); + MAKEFILE = app.make; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); + PBProjectTypeSubClass = "PBApplicationProjectType"; + ProvidesIcons = Yes; + Public_Keys = (H_FILES); + Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); + SOURCEMODE = 444; + Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); + Subproj_Keys = (SUBPROJECTS); + Targets = (app, debug, profile, install); + ExecutableResults = ( + "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" + ); +} diff --git a/Modules/ApplicationProject/PCAppProj.h b/Modules/ApplicationProject/PCAppProj.h new file mode 100644 index 0000000..f81d0d8 --- /dev/null +++ b/Modules/ApplicationProject/PCAppProj.h @@ -0,0 +1,53 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + 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. + + $Id$ +*/ + +#ifndef _PCAPPPROJ_PCAPPPROJ_H +#define _PCAPPPROJ_PCAPPPROJ_H + +#include +#include + +@interface PCAppProj : NSObject +{ +} + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator; + +- (Class)projectClass; + +- (NSString *)projectTypeName; +- (NSDictionary *)typeTable; + +- (PCProject *)createProjectAt:(NSString *)path; +- (PCProject *)openProjectAt:(NSString *)path; + +@end + +#endif diff --git a/Modules/ApplicationProject/PCAppProj.m b/Modules/ApplicationProject/PCAppProj.m new file mode 100644 index 0000000..50fd60e --- /dev/null +++ b/Modules/ApplicationProject/PCAppProj.m @@ -0,0 +1,222 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + 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. + + $Id$ +*/ + +/* + Description: + + PCAppProj creates new project of the type Application! +*/ + +#include "PCAppProj.h" +#include "PCAppProject.h" + +@implementation PCAppProj + +//static NSString *_projTypeName = @"Application"; +static PCAppProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) + { + _creator = [[[self class] alloc] init]; + } + + return _creator; +} + +- (Class)projectClass +{ + return [PCAppProject class]; +} + +- (NSString *)projectTypeName +{ + return @"Application"; +} + +- (NSDictionary *)typeTable +{ + NSString *_path; + + _path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" + ofType:@"table"]; + + return [NSDictionary dictionaryWithContentsOfFile:_path]; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCAppProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath: path attributes: nil]) + { + NSString *_file = nil; +// NSString *_resourcePath = nil; + NSMutableDictionary *projectDict = nil; + NSDictionary *infoDict = nil; + NSBundle *projBundle = [NSBundle bundleForClass:[self class]]; + NSString *mainNibFile = nil; + + project = [[[PCAppProject alloc] init] autorelease]; + + _file = [projBundle pathForResource:@"PC" ofType:@"project"]; + projectDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + [projectDict setObject:[path lastPathComponent] forKey:PCProjectName]; + [projectDict setObject:[[project principalClass] description] + forKey:PCProjType]; + + // Copy the project files to the provided path + _file = [projBundle pathForResource:@"GNUmakefile" ofType:@"postamble"]; + [fm copyPath:_file + toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] + handler:nil]; + + _file = [projBundle pathForResource:@"GNUmakefile" ofType:@"preamble"]; + [fm copyPath:_file + toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] + handler:nil]; + + _file = [projBundle pathForResource:@"main" ofType:@"m"]; + [fm copyPath:_file + toPath:[path stringByAppendingPathComponent:@"main.m"] + handler:nil]; + + _file = [projBundle pathForResource:@"AppController" ofType:@"m"]; + [fm copyPath:_file + toPath:[path stringByAppendingPathComponent:@"AppController.m"] + handler:nil]; + + _file = [projBundle pathForResource:@"AppController" ofType:@"h"]; + [fm copyPath:_file + toPath:[path stringByAppendingPathComponent:@"AppController.h"] + handler:nil]; + + // Resources +/* _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath + attributes:nil];*/ + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] + attributes:nil]; + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] + attributes:nil]; + + // Gorm files + mainNibFile = [path stringByAppendingPathComponent: + [NSString stringWithFormat:@"%@.gorm", [path lastPathComponent]]]; + [fm createDirectoryAtPath:mainNibFile attributes:nil]; + + _file = [projBundle pathForResource:@"objects" ofType:@"gorm"]; + [fm copyPath:_file + toPath:[mainNibFile stringByAppendingPathComponent:@"objects.gorm"] + handler:nil]; + _file = [projBundle pathForResource:@"data" ofType:@"classes"]; + [fm copyPath:_file + toPath:[mainNibFile stringByAppendingPathComponent:@"data.classes"] + handler:nil]; + [projectDict setObject:[mainNibFile lastPathComponent] + forKey:PCMainInterfaceFile]; + + [projectDict + setObject:[NSArray arrayWithObject:[mainNibFile lastPathComponent]] + forKey:PCInterfaces]; + + // Create the Info-gnutstep.plist + infoDict = [NSDictionary dictionaryWithObjectsAndKeys: + @"Generated by ProjectCenter, do not edit", @"!", + @"", @"ApplicationDescription", + @"", @"ApplicationIcon", + [path lastPathComponent], @"ApplicationName", + @"0.1", @"ApplicationRelease", + [NSArray array], @"Authors", + @"Copyright (C) 200x by ...", @"Copyright", + @"Released under...", @"CopyrightDescription", + @"0.1", @"FullVersionID", + [path lastPathComponent], @"NSExecutable", + @"", @"NSIcon", + [mainNibFile lastPathComponent], @"NSMainNibFile", + @"NSApplication", @"NSPrincipalClass", + @"Application", @"NSRole", + @"", @"URL", + nil]; + + [infoDict + writeToFile:[path stringByAppendingPathComponent:@"Info-gnustep.plist"] + atomically:YES]; + + // Add Info-gnustep.plist into OTHER_RESOURCES + [projectDict + setObject:[NSArray arrayWithObjects:@"Info-gnustep.plist",nil] + forKey:PCOtherResources]; + + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + + // 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 + [projectDict + writeToFile:[path stringByAppendingPathComponent:@"PC.project"] + atomically:YES]; + + } + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + PCAppProject *project = nil; + + project = [[[PCAppProject alloc] + initWithProjectDictionary:dict + path:[path stringByDeletingLastPathComponent]] autorelease]; + + [project loadInfoFileAtPath:[path stringByDeletingLastPathComponent]]; + + return project; +} + +@end diff --git a/Modules/ApplicationProject/PCAppProject.h b/Modules/ApplicationProject/PCAppProject.h new file mode 100644 index 0000000..67a5176 --- /dev/null +++ b/Modules/ApplicationProject/PCAppProject.h @@ -0,0 +1,111 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + 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. + + $Id$ +*/ + +/* + Description: + + This is the project type 'Application' for GNUstep. You never should create + it yourself but use PCAppProj for doing this. Otherwise needed files don't + get copied to the right place. + */ + +#ifndef _PCAppProj_PCAppProject_h_ +#define _PCAppProj_PCAppProject_h_ + +#include +#include +#include + +@interface PCAppProject : PCProject +{ + NSBox *buildAttributesView; + NSTextField *ccOptField; + NSTextField *ldOptField; + NSTextField *installPathField; + NSTextField *toolField; + NSTextField *headersField; + NSTextField *libsField; + + NSBox *projectAttributesView; + NSTextField *projectTypeField; + NSTextField *projectNameField; + NSTextField *projectLanguageField; + NSTextField *appClassField; + NSTextField *appImageField; + NSButton *setAppIconButton; + NSButton *clearAppIconButton; + NSImageView *appIconView; + NSImage *icon; + + NSBox *fileAttributesView; + NSImageView *fileIconView; + NSTextField *fileNameField; + + NSMutableDictionary *infoDict; +} + +// ---------------------------------------------------------------------------- +// --- Init and free +// ---------------------------------------------------------------------------- + +- (id)init; +- (void)assignInfoDict:(NSMutableDictionary *)dict; +- (void)loadInfoFileAtPath:(NSString *)path; +- (void)dealloc; + +// ---------------------------------------------------------------------------- +// --- User Interface +// ---------------------------------------------------------------------------- + +- (void)createInspectors; +- (NSView *)buildAttributesView; +- (NSView *)projectAttributesView; +- (NSView *)fileAttributesView; +- (void)updateInspectorValues:(NSNotification *)aNotif; +- (void)clearAppIcon:(id)sender; +- (void)setAppIcon:(id)sender; +- (BOOL)setAppIconWithImageAtPath:(NSString *)path; +- (void)setAppClass:(id)sender; + +// ---------------------------------------------------------------------------- +// --- Project +// ---------------------------------------------------------------------------- + +- (Class)builderClass; + +- (BOOL)writeMakefile; + +- (NSArray *)sourceFileKeys; +- (NSArray *)resourceFileKeys; +- (NSArray *)otherKeys; +- (NSArray *)buildTargets; +- (NSString *)projectDescription; + +- (BOOL)isExecutable; + +@end + +#endif diff --git a/Modules/ApplicationProject/PCAppProject.m b/Modules/ApplicationProject/PCAppProject.m new file mode 100644 index 0000000..6ace2d1 --- /dev/null +++ b/Modules/ApplicationProject/PCAppProject.m @@ -0,0 +1,830 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + 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. + + $Id$ +*/ + +#include +#include + +#include "PCAppProject.h" +#include "PCAppProj.h" + +@implementation PCAppProject + +// ---------------------------------------------------------------------------- +// --- Init and free +// ---------------------------------------------------------------------------- + +- (id)init +{ + + if ((self = [super init])) + { + rootObjects = [[NSArray arrayWithObjects: PCClasses, + PCHeaders, + PCOtherSources, + PCInterfaces, + PCImages, + PCOtherResources, + PCSubprojects, + PCDocuFiles, + PCSupportingFiles, + PCLibraries, + PCNonProject, + nil] retain]; + + rootKeys = [[NSArray arrayWithObjects: @"Classes", + @"Headers", + @"Other Sources", + @"Interfaces", + @"Images", + @"Other Resources", + @"Subprojects", + @"Documentation", +// @"Context Help", + @"Supporting Files", +// @"Frameworks", + @"Libraries", + @"Non Project Files", + nil] retain]; + + rootCategories = [[NSDictionary + dictionaryWithObjects:rootObjects forKeys:rootKeys] retain]; + + } + return self; +} + +- (void)assignInfoDict:(NSMutableDictionary *)dict +{ + infoDict = [dict mutableCopy]; +} + +- (void)loadInfoFileAtPath:(NSString *)path +{ + NSString *infoFile = nil; + + infoFile = [path stringByAppendingPathComponent:@"Info-gnustep.plist"]; + infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:infoFile]; +} + +- (void)dealloc +{ + NSLog (@"PCAppProject: dealloc"); + + RELEASE(infoDict); + RELEASE(buildAttributesView); + RELEASE(projectAttributesView); + RELEASE(fileAttributesView); + + RELEASE(rootCategories); + RELEASE(rootObjects); + RELEASE(rootKeys); + + [super dealloc]; +} + +// ---------------------------------------------------------------------------- +// --- User Interface +// ---------------------------------------------------------------------------- + +- (void)createInspectors +{ + NSTextField *textField = nil; + NSBox *_iconViewBox = nil; + NSBox *_appIconBox = nil; + NSBox *line = nil; + + if (buildAttributesView && projectAttributesView && fileAttributesView) + { + return; + } + + /* + * "Build Attributes" View + */ + buildAttributesView = [[NSBox alloc] init]; + [buildAttributesView setFrame:NSMakeRect(0,0,295,364)]; + [buildAttributesView setTitlePosition:NSNoTitle]; + [buildAttributesView + setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [buildAttributesView setContentViewMargins:NSMakeSize(0.0, 0.0)]; + + // Compiler Flags -- ADDITIONAL_OBJCFLAGS(?), ADDITIONAL_CFLAGS + textField =[[NSTextField alloc] initWithFrame:NSMakeRect(4,323,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Compiler Flags:"]; + [buildAttributesView addSubview:textField]; + RELEASE(textField); + + ccOptField =[[NSTextField alloc] initWithFrame:NSMakeRect(111,323,165,21)]; + [ccOptField setAlignment: NSLeftTextAlignment]; + [ccOptField setBordered: YES]; + [ccOptField setEditable: YES]; + [ccOptField setBezeled: YES]; + [ccOptField setDrawsBackground: YES]; + [ccOptField setStringValue:@""]; + [ccOptField setAction:@selector(changeCommonProjectEntry:)]; + [ccOptField setTarget:self]; + [buildAttributesView addSubview:ccOptField]; + RELEASE(ccOptField); + + // Linker Flags -- ADDITIONAL_LDFLAGS + textField =[[NSTextField alloc] initWithFrame:NSMakeRect(4,298,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Linker Flags:"]; + [buildAttributesView addSubview:textField]; + RELEASE(textField); + + ldOptField =[[NSTextField alloc] initWithFrame:NSMakeRect(111,298,165,21)]; + [ldOptField setAlignment: NSLeftTextAlignment]; + [ldOptField setBordered: YES]; + [ldOptField setEditable: YES]; + [ldOptField setBezeled: YES]; + [ldOptField setDrawsBackground: YES]; + [ldOptField setStringValue:@""]; + [ldOptField setAction:@selector(changeCommonProjectEntry:)]; + [ldOptField setTarget:self]; + [buildAttributesView addSubview:ldOptField]; + RELEASE(ldOptField); + + // Install In + textField =[[NSTextField alloc] initWithFrame:NSMakeRect(4,273,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Install In:"]; + [buildAttributesView addSubview:textField]; + RELEASE(textField); + + installPathField =[[NSTextField alloc] + initWithFrame:NSMakeRect(111,273,165,21)]; + [installPathField setAlignment: NSLeftTextAlignment]; + [installPathField setBordered: YES]; + [installPathField setEditable: YES]; + [installPathField setBezeled: YES]; + [installPathField setDrawsBackground: YES]; + [installPathField setStringValue:@""]; + [installPathField setAction:@selector(changeCommonProjectEntry:)]; + [installPathField setTarget:self]; + [buildAttributesView addSubview:installPathField]; + RELEASE(installPathField); + + // Build Tool + textField =[[NSTextField alloc] initWithFrame:NSMakeRect(4,248,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Build Tool:"]; + [buildAttributesView addSubview:textField]; + RELEASE(textField); + + toolField =[[NSTextField alloc] initWithFrame:NSMakeRect(111,248,165,21)]; + [toolField setAlignment: NSLeftTextAlignment]; + [toolField setBordered: YES]; + [toolField setEditable: YES]; + [toolField setBezeled: YES]; + [toolField setDrawsBackground: YES]; + [toolField setStringValue:@""]; + [toolField setAction:@selector(changeCommonProjectEntry:)]; + [toolField setTarget:self]; + [buildAttributesView addSubview:toolField]; + RELEASE(toolField); + + // Public Headers In -- ADDITIONAL_INCLUDE_DIRS + textField =[[NSTextField alloc] initWithFrame:NSMakeRect(4,223,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Public Headers In:"]; + [buildAttributesView addSubview:textField]; + RELEASE(textField); + + headersField =[[NSTextField alloc] initWithFrame:NSMakeRect(111,223,165,21)]; + [headersField setAlignment: NSLeftTextAlignment]; + [headersField setBordered: YES]; + [headersField setEditable: YES]; + [headersField setBezeled: YES]; + [headersField setDrawsBackground: YES]; + [headersField setStringValue:@""]; + [headersField setAction:@selector(changeCommonProjectEntry:)]; + [headersField setTarget:self]; + [buildAttributesView addSubview:headersField]; + RELEASE(headersField); + + // Public Libraries In -- ADDITIONAL_TOOL_LIBS + textField =[[NSTextField alloc] initWithFrame:NSMakeRect(4,198,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Public Libraries In:"]; + [buildAttributesView addSubview:textField]; + RELEASE(textField); + + libsField =[[NSTextField alloc] initWithFrame:NSMakeRect(111,198,165,21)]; + [libsField setAlignment: NSLeftTextAlignment]; + [libsField setBordered: YES]; + [libsField setEditable: YES]; + [libsField setBezeled: YES]; + [libsField setDrawsBackground: YES]; + [libsField setStringValue:@""]; + [libsField setAction:@selector(changeCommonProjectEntry:)]; + [libsField setTarget:self]; + [buildAttributesView addSubview:libsField]; + RELEASE(libsField); + + + /* + * "Project Attributes" View + */ + projectAttributesView = [[NSBox alloc] init]; + [projectAttributesView setFrame:NSMakeRect(0,0,295,364)]; + [projectAttributesView setTitlePosition:NSNoTitle]; + [projectAttributesView + setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [projectAttributesView setContentViewMargins:NSMakeSize(0.0, 0.0)]; + + // Project Type + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(4,323,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Project Type:"]; + [projectAttributesView addSubview:textField]; + RELEASE(textField); + + projectTypeField = [[NSTextField alloc] initWithFrame: + NSMakeRect(111,323,165,21)]; + [projectTypeField setAlignment: NSLeftTextAlignment]; + [projectTypeField setBordered: NO]; + [projectTypeField setEditable: NO]; + [projectTypeField setSelectable: NO]; + [projectTypeField setBezeled: NO]; + [projectTypeField setDrawsBackground: NO]; + [projectTypeField setFont:[NSFont boldSystemFontOfSize: 12.0]]; + [projectTypeField setStringValue:@""]; + [projectAttributesView addSubview:projectTypeField]; + RELEASE(projectTypeField); + + // Project Name + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(4,298,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Project Name:"]; + [projectAttributesView addSubview:textField]; + RELEASE(textField); + + projectNameField = [[NSTextField alloc] initWithFrame: + NSMakeRect(111,298,165,21)]; + [projectNameField setAlignment: NSLeftTextAlignment]; + [projectNameField setBordered: NO]; + [projectNameField setEditable: NO]; + [projectNameField setBezeled: YES]; + [projectNameField setDrawsBackground: YES]; + [projectNameField setStringValue:@""]; + [projectAttributesView addSubview:projectNameField]; + RELEASE(projectNameField); + + // Project Language + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(4,273,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Language:"]; + [projectAttributesView addSubview:textField]; + RELEASE(textField); + + projectLanguageField = [[NSTextField alloc] initWithFrame: + NSMakeRect(111,273,165,21)]; + [projectLanguageField setAlignment: NSLeftTextAlignment]; + [projectLanguageField setBordered: NO]; + [projectLanguageField setEditable: NO]; + [projectLanguageField setBezeled: YES]; + [projectLanguageField setDrawsBackground: YES]; + [projectLanguageField setStringValue:@""]; + [projectAttributesView addSubview:projectLanguageField]; + RELEASE(projectLanguageField); + + // Application Class + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(4,248,104,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Application Class:"]; + [projectAttributesView addSubview:textField]; + RELEASE(textField); + + appClassField = [[NSTextField alloc] initWithFrame: + NSMakeRect(111,248,165,21)]; + [appClassField setAlignment: NSLeftTextAlignment]; + [appClassField setBordered: YES]; + [appClassField setEditable: YES]; + [appClassField setBezeled: YES]; + [appClassField setDrawsBackground: YES]; + [appClassField setStringValue:@""]; + [appClassField setTarget:self]; + [appClassField setAction:@selector(setAppClass:)]; + [projectAttributesView addSubview:appClassField]; + RELEASE(appClassField); + + // Application Icon + _appIconBox = [[NSBox alloc] init]; + [_appIconBox setFrame:NSMakeRect(6,154,270,84)]; + [_appIconBox setContentViewMargins:NSMakeSize(4.0, 6.0)]; + [_appIconBox setTitle:@"Application Icon"]; + [projectAttributesView addSubview:_appIconBox]; + + appImageField = [[NSTextField alloc] initWithFrame:NSMakeRect(0,34,195,21)]; + [appImageField setAlignment: NSLeftTextAlignment]; + [appImageField setBordered: YES]; + [appImageField setEditable: YES]; + [appImageField setBezeled: YES]; + [appImageField setDrawsBackground: YES]; + [appImageField setStringValue:@""]; + [_appIconBox addSubview:appImageField]; + RELEASE(appImageField); + + setAppIconButton = [[NSButton alloc] initWithFrame:NSMakeRect(147,0,48,21)]; + [setAppIconButton setTitle:@"Set..."]; + [setAppIconButton setTarget:self]; + [setAppIconButton setAction:@selector(setAppIcon:)]; + [_appIconBox addSubview:setAppIconButton]; + RELEASE(setAppIconButton); + + clearAppIconButton = [[NSButton alloc] initWithFrame:NSMakeRect(95,0,48,21)]; + [clearAppIconButton setTitle:@"Clear"]; + [clearAppIconButton setTarget:self]; + [clearAppIconButton setAction:@selector(clearAppIcon:)]; + [_appIconBox addSubview:clearAppIconButton]; + RELEASE(clearAppIconButton); + + _iconViewBox = [[NSBox alloc] initWithFrame:NSMakeRect(200,0,56,56)]; + [_iconViewBox setTitlePosition:NSNoTitle]; + [_iconViewBox setBorderType:NSBezelBorder]; + [_iconViewBox setContentViewMargins:NSMakeSize(2.0, 2.0)]; + [_appIconBox addSubview:_iconViewBox]; + RELEASE(_iconViewBox); + + appIconView = [[NSImageView alloc] initWithFrame:NSMakeRect(200,0,56,56)]; + [_iconViewBox addSubview:appIconView]; + RELEASE(appIconView); + + RELEASE(_appIconBox); + + /* + * "File Attributes" View + */ + fileAttributesView = [[NSBox alloc] init]; + [fileAttributesView setFrame:NSMakeRect(0,0,295,364)]; + [fileAttributesView setTitlePosition:NSNoTitle]; + [fileAttributesView setAutoresizingMask: + (NSViewWidthSizable | NSViewHeightSizable)]; + [fileAttributesView setContentViewMargins:NSMakeSize(0.0, 0.0)]; + + fileIconView = [[NSImageView alloc] initWithFrame:NSMakeRect(8,290,48,48)]; + [fileIconView setImage:nil]; + [fileAttributesView addSubview:fileIconView]; + RELEASE(fileIconView); + + fileNameField =[[NSTextField alloc] initWithFrame:NSMakeRect(60,290,216,48)]; + [fileNameField setAlignment: NSLeftTextAlignment]; + [fileNameField setBordered: NO]; + [fileNameField setEditable: NO]; + [fileNameField setSelectable: NO]; + [fileNameField setBezeled: NO]; + [fileNameField setDrawsBackground: NO]; + [fileNameField setFont:[NSFont systemFontOfSize:20.0]]; + [fileNameField setStringValue:@"No files selected"]; + [fileAttributesView addSubview:fileNameField]; + RELEASE(fileNameField); + + line = [[NSBox alloc] initWithFrame:NSMakeRect(0,278,295,2)]; + [line setTitlePosition:NSNoTitle]; + [fileAttributesView addSubview:line]; + RELEASE(line); + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(browserDidSetPath:) + name:PCBrowserDidSetPathNotification + object:[self projectBrowser]]; + + [self updateInspectorValues:nil]; +} + +- (NSView *)buildAttributesView +{ + if (!buildAttributesView) + { + [self createInspectors]; + } + + return buildAttributesView; +} + +- (NSView *)projectAttributesView +{ + if (!projectAttributesView) + { + [self createInspectors]; + } + return projectAttributesView; +} + +- (NSView *)fileAttributesView +{ + if (!fileAttributesView) + { + [self createInspectors]; + } + return fileAttributesView; +} + +// ---------------------------------------------------------------------------- +// --- Actions +// ---------------------------------------------------------------------------- + +- (void)changeCommonProjectEntry:(id)sender +{ + NSString *newEntry = [sender stringValue]; + + if (sender == installPathField) + { + [projectDict setObject:newEntry forKey:PCInstallDir]; + } + else if ( sender == toolField ) + { + [projectDict setObject:newEntry forKey:PCBuildTool]; + + if( ![[NSFileManager defaultManager] isExecutableFileAtPath:newEntry] ) + { + NSRunAlertPanel(@"Build Tool Error!", + @"No valid executable found at '%@'!", + @"OK",nil,nil,newEntry); + } + } + else if ( sender == ccOptField ) + { + [projectDict setObject:newEntry forKey:PCCompilerOptions]; + } + else if ( sender == ldOptField ) + { + [projectDict setObject:newEntry forKey:PCLinkerOptions]; + } + + [[NSNotificationCenter defaultCenter] + postNotificationName:ProjectDictDidChangeNotification + object:self]; +} + +- (void)setAppClass:(id)sender +{ + [projectDict setObject:[appClassField stringValue] forKey:PCAppClass]; + + [[NSNotificationCenter defaultCenter] + postNotificationName:ProjectDictDidChangeNotification + object:self]; +} + +- (void)setAppIcon:(id)sender +{ + int result; + NSArray *fileTypes = [NSImage imageFileTypes]; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + NSString *dir = nil; + + [openPanel setAllowsMultipleSelection:NO]; + + dir = [[NSUserDefaults standardUserDefaults] + objectForKey:@"LastOpenDirectory"]; + result = [openPanel runModalForDirectory:dir + file:nil + types:fileTypes]; + + if (result == NSOKButton) + { + NSString *imageFilePath = [[openPanel filenames] objectAtIndex:0]; + + if (![self setAppIconWithImageAtPath:imageFilePath]) + { + NSRunAlertPanel(@"Error while opening file!", + @"Couldn't open %@", @"OK", nil, nil,imageFilePath); + } + } +} + +- (BOOL)setAppIconWithImageAtPath:(NSString *)path +{ + NSRect frame = {{0,0}, {64, 64}}; + NSImage *image = nil; + NSString *imageName = nil; + + if (!(image = [[NSImage alloc] initWithContentsOfFile:path])) + { + return NO; + } + + imageName = [path lastPathComponent]; + + [self addAndCopyFiles:[NSArray arrayWithObject:path] forKey:PCImages]; + + [projectDict setObject:imageName forKey:PCAppIcon]; + + [infoDict setObject:imageName forKey:@"NSIcon"]; + [infoDict setObject:imageName forKey:@"ApplicationIcon"]; + + [appImageField setStringValue:imageName]; + + [appIconView setImage:nil]; + [appIconView display]; + + frame.size = [image size]; + [appIconView setFrame:frame]; + [appIconView setImage:image]; + [appIconView display]; + RELEASE(image); + + [[NSNotificationCenter defaultCenter] + postNotificationName:ProjectDictDidChangeNotification + object:self]; + + return YES; +} + +- (void)clearAppIcon:(id)sender +{ + [projectDict setObject:@"" forKey:PCAppIcon]; + [infoDict setObject:@"" forKey:@"NSIcon"]; + [infoDict setObject:@"" forKey:@"ApplicationIcon"]; + [appImageField setStringValue:@""]; + [appIconView setImage:nil]; + [appIconView display]; + + [[NSNotificationCenter defaultCenter] + postNotificationName:ProjectDictDidChangeNotification + object:self]; +} + +// ---------------------------------------------------------------------------- +// --- Notifications +// ---------------------------------------------------------------------------- + +- (void)updateInspectorValues:(NSNotification *)aNotif +{ + NSRect frame = {{0,0}, {48,48}}; + NSImage *image = nil; + NSString *path = nil; + NSString *_icon = nil; + + NSLog (@"PCAppProject: updateInspectorValues"); + + // Build Attributes view + [installPathField setStringValue:[projectDict objectForKey:PCInstallDir]]; + [toolField setStringValue:[projectDict objectForKey:PCBuildTool]]; + [ccOptField setStringValue:[projectDict objectForKey:PCCompilerOptions]]; + [ldOptField setStringValue:[projectDict objectForKey:PCLinkerOptions]]; + + // Project Attributes view + [projectTypeField setStringValue:[projectDict objectForKey:PCProjType]]; + [projectNameField setStringValue:[projectDict objectForKey:PCProjectName]]; + [projectLanguageField setStringValue:[projectDict objectForKey:@"LANGUAGE"]]; + [appClassField setStringValue:[projectDict objectForKey:PCAppClass]]; + [appImageField setStringValue:[projectDict objectForKey:PCAppIcon]]; + + _icon = [projectDict objectForKey:PCAppIcon]; + if (_icon && ![_icon isEqualToString:@""]) + { + path = [self dirForCategory:PCImages]; + path = [path stringByAppendingPathComponent:_icon]; + } + + if (path && (image = [[NSImage alloc] initWithContentsOfFile:path])) + { + frame.size = [image size]; + [appIconView setFrame:frame]; + [appIconView setImage:image]; + [appIconView display]; + RELEASE(image); + } + + // File Attributes view +} + +- (void)browserDidSetPath:(NSNotification *)aNotif +{ + NSString *fileName = [[aNotif object] nameOfSelectedFile]; + + if (fileName) + { + [fileNameField setStringValue:fileName]; + } + else + { + [fileNameField setStringValue:@"No files selected"]; + } +} + +// ---------------------------------------------------------------------------- +// --- Project +// ---------------------------------------------------------------------------- + +- (Class)builderClass +{ + return [PCAppProj class]; +} + +- (BOOL)writeMakefile +{ + NSData *mfd; + NSString *mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + int i,j; + PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; + NSDictionary *dict = [self projectDict]; + NSString *infoFile = nil; + + // Save the project file + [super writeMakefile]; + + // Save Info-gnustep.plist + infoFile = [projectPath stringByAppendingPathComponent:@"Info-gnustep.plist"]; + [infoDict writeToFile:infoFile atomically:YES]; + + // Create the new file + [mf createMakefileForProject:[self projectName]]; + + [mf appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"]; + + [mf appendSubprojects:[dict objectForKey:PCSubprojects]]; + + [mf appendApplication]; + [mf appendAppIcon:[dict objectForKey:PCAppIcon]]; + [mf appendGuiLibraries:[dict objectForKey:PCLibraries]]; + + [mf appendResources]; + for (i=0; i<[[self resourceFileKeys] count]; i++) + { + NSString *k = [[self resourceFileKeys] objectAtIndex:i]; + NSMutableArray *resources = [[dict objectForKey:k] mutableCopy]; + + if ([k isEqualToString:PCImages]) + { + for (j=0; j<[resources count]; j++) + { + [resources replaceObjectAtIndex:j + withObject:[NSString stringWithFormat:@"Images/%@", + [resources objectAtIndex:j]]]; + } + } + + [mf appendResourceItems:resources]; + [resources release]; + } + + [mf appendHeaders:[dict objectForKey:PCHeaders]]; + [mf appendClasses:[dict objectForKey:PCClasses]]; + [mf appendOtherSources:[dict objectForKey:PCOtherSources]]; + + [mf appendTailForApp]; + + // Write the new file to disc! + if ((mfd = [mf encodedMakefile])) + { + if ([mfd writeToFile:mfl atomically:YES]) + { + return YES; + } + } + + return NO; +} + +- (NSArray *)fileTypesForCategory:(NSString *)category +{ + NSLog(@"Category: %@", category); + + if ([category isEqualToString:PCClasses]) + { + return [NSArray arrayWithObjects:@"m",nil]; + } + else if ([category isEqualToString:PCHeaders]) + { + return [NSArray arrayWithObjects:@"h",nil]; + } + else if ([category isEqualToString:PCOtherSources]) + { + return [NSArray arrayWithObjects:@"c",@"C",nil]; + } + else if ([category isEqualToString:PCInterfaces]) + { + return [NSArray arrayWithObjects:@"gmodel",@"gorm",nil]; + } + else if ([category isEqualToString:PCImages]) + { + return [NSImage imageFileTypes]; + } + else if ([category isEqualToString:PCSubprojects]) + { + return [NSArray arrayWithObjects:@"subproj",nil]; + } + else if ([category isEqualToString:PCLibraries]) + { + return [NSArray arrayWithObjects:@"so",@"a",@"lib",nil]; + } + + return nil; +} + +- (NSString *)dirForCategory:(NSString *)category +{ + if ([category isEqualToString:PCImages]) + { + return [projectPath stringByAppendingPathComponent:@"Images"]; + } + else if ([category isEqualToString:PCDocuFiles]) + { + return [projectPath stringByAppendingPathComponent:@"Documentation"]; + } + + return projectPath; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects: + PCClasses, PCOtherSources, nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects: + PCInterfaces, PCOtherResources, PCImages, nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects: + PCDocuFiles, PCSupportingFiles, PCNonProject, nil]; +} + +- (NSArray *)buildTargets +{ + return [NSArray arrayWithObjects: @"app", @"debug", @"profile", nil]; +} + +- (NSString *)projectDescription +{ + return @"Project that handles GNUstep/ObjC based applications."; +} + +- (BOOL)isExecutable +{ + return YES; +} + +@end diff --git a/Modules/ApplicationProject/Templates/AppController.h b/Modules/ApplicationProject/Templates/AppController.h new file mode 100644 index 0000000..24a954c --- /dev/null +++ b/Modules/ApplicationProject/Templates/AppController.h @@ -0,0 +1,39 @@ +/* + * AppController.h created by phr on 2000-08-27 11:38:59 +0000 + * + * GNUstep Application Controller + * + * Created with ProjectCenter - http://www.gnustep.org + * + * $Id$ + */ + +#ifndef _PCAPPPROJ_APPCONTROLLER_H +#define _PCAPPPROJ_APPCONTROLLER_H + +#include + +@interface AppController : NSObject +{ +} + ++ (void)initialize; + +- (id)init; +- (void)dealloc; + +- (void)awakeFromNib; + +- (void)applicationDidFinishLaunching:(NSNotification *)notif; + +- (BOOL)applicationShouldTerminate:(id)sender; +- (void)applicationWillTerminate:(NSNotification *)notification; + +- (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName; + +- (void)showPrefPanel:(id)sender; +- (void)showInfoPanel:(id)sender; + +@end + +#endif diff --git a/Modules/ApplicationProject/Templates/AppController.m b/Modules/ApplicationProject/Templates/AppController.m new file mode 100644 index 0000000..9a4333e --- /dev/null +++ b/Modules/ApplicationProject/Templates/AppController.m @@ -0,0 +1,75 @@ +/* + * AppController.m created by phr on 2000-08-27 11:38:58 +0000 + * + * GNUstep Application Controller + * + * Created with ProjectCenter - http://www.gnustep.org + * + * $Id$ + */ + +#include "AppController.h" + +@implementation AppController + +static NSDictionary *infoDict = nil; + ++ (void)initialize +{ + NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; + + /* + * Register your app's defaults here by adding objects to the + * dictionary, eg + * + * [defaults setObject:anObject forKey:keyForThatObject]; + * + */ + + [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (void)dealloc +{ + [super dealloc]; +} + +- (void)awakeFromNib +{ +} + +- (void)applicationDidFinishLaunching:(NSNotification *)notif +{ +} + +- (BOOL)applicationShouldTerminate:(id)sender +{ + return YES; +} + +- (void)applicationWillTerminate:(NSNotification *)notification +{ +} + +- (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName +{ +} + +- (void)showPrefPanel:(id)sender +{ +} + +- (void)showInfoPanel:(id)sender +{ + [[NSApplication sharedApplication] orderFrontStandardInfoPanel:sender]; +} + +@end diff --git a/Modules/ApplicationProject/Templates/GNUmakefile.postamble b/Modules/ApplicationProject/Templates/GNUmakefile.postamble new file mode 100644 index 0000000..00007e8 --- /dev/null +++ b/Modules/ApplicationProject/Templates/GNUmakefile.postamble @@ -0,0 +1,40 @@ +# +# GNUmakefile.postamble - Generated by ProjectCenter +# + +# Things to do before compiling +# before-all:: + +# Things to do after compiling +# after-all:: + +# Things to do before installing +# before-install:: + +# Things to do after installing +# after-install:: + +# Things to do before uninstalling +# before-uninstall:: + +# Things to do after uninstalling +# after-uninstall:: + +# Things to do before cleaning +# before-clean:: + +# Things to do after cleaning +# after-clean:: + +# Things to do before distcleaning +# before-distclean:: + +# Things to do after distcleaning +# after-distclean:: + +# Things to do before checking +# before-check:: + +# Things to do after checking +# after-check:: + diff --git a/Modules/ApplicationProject/Templates/GNUmakefile.preamble b/Modules/ApplicationProject/Templates/GNUmakefile.preamble new file mode 100644 index 0000000..0aa73bd --- /dev/null +++ b/Modules/ApplicationProject/Templates/GNUmakefile.preamble @@ -0,0 +1,32 @@ +# +# GNUmakefile.preamble - Generated by ProjectCenter +# + + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += + +# Additional LDFLAGS to pass to the linker +ADDITIONAL_LDFLAGS += + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS += + diff --git a/PCAppProj/Templates/PC.project b/Modules/ApplicationProject/Templates/PC.project similarity index 100% rename from PCAppProj/Templates/PC.project rename to Modules/ApplicationProject/Templates/PC.project diff --git a/PCAppProj/Templates/data.classes b/Modules/ApplicationProject/Templates/data.classes similarity index 100% rename from PCAppProj/Templates/data.classes rename to Modules/ApplicationProject/Templates/data.classes diff --git a/Modules/ApplicationProject/Templates/main.m b/Modules/ApplicationProject/Templates/main.m new file mode 100644 index 0000000..b09df4d --- /dev/null +++ b/Modules/ApplicationProject/Templates/main.m @@ -0,0 +1,103 @@ +/* $Id$ */ + +#include +#include "AppController.h" + +#define APP_NAME @"GNUstep" + +/* + * Create the application's menu + */ + +void createMenu(); + +/* + * Initialise and go! + */ + +int main(int argc, const char *argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + AppController *controller; + + [NSApplication sharedApplication]; + + createMenu(); + + controller = [[AppController alloc] init]; + [NSApp setDelegate:controller]; + + RELEASE(pool); + + return NSApplicationMain (argc, argv); +} + +void createMenu() +{ + NSMenu *menu; + NSMenu *info; + NSMenu *edit; + NSMenu *services; + NSMenu *windows; + + SEL action = @selector(method:); + + menu = [[NSMenu alloc] initWithTitle:APP_NAME]; + + [menu addItemWithTitle:@"Info" action:@selector(showInfoPanel:) + keyEquivalent:@""]; + [menu addItemWithTitle:@"Edit" action:action keyEquivalent:@""]; + [menu addItemWithTitle:@"Windows" action:action keyEquivalent:@""]; + [menu addItemWithTitle:@"Services" action:action keyEquivalent:@""]; + [menu addItemWithTitle:@"Hide" action:@selector(hide:) keyEquivalent:@"h"]; + [menu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"]; + + info = AUTORELEASE([[NSMenu alloc] init]); + [menu setSubmenu:info forItem:[menu itemWithTitle:@"Info"]]; + [info addItemWithTitle:@"Info Panel..." + action:@selector(showInfoPanel:) keyEquivalent:@""]; + [info addItemWithTitle:@"Preferences" + action:@selector(showPrefPanel:) keyEquivalent:@""]; + [info addItemWithTitle:@"Help" action:action keyEquivalent:@"?"]; + + edit = AUTORELEASE([[NSMenu alloc] init]); + [edit addItemWithTitle:@"Cut" + action:@selector(cut:) + keyEquivalent:@"x"]; + [edit addItemWithTitle:@"Copy" + action:@selector(copy:) + keyEquivalent:@"c"]; + [edit addItemWithTitle:@"Paste" + action:@selector(paste:) + keyEquivalent:@"v"]; + [edit addItemWithTitle:@"Delete" + action:@selector(delete:) + keyEquivalent:@""]; + [edit addItemWithTitle:@"Select All" + action:@selector(selectAll:) + keyEquivalent:@"a"]; + [menu setSubmenu:edit forItem:[menu itemWithTitle:@"Edit"]]; + + windows = AUTORELEASE([[NSMenu alloc] init]); + [windows addItemWithTitle:@"Arrange" + action:@selector(arrangeInFront:) + keyEquivalent:@""]; + [windows addItemWithTitle:@"Miniaturize" + action:@selector(performMiniaturize:) + keyEquivalent:@"m"]; + [windows addItemWithTitle:@"Close" + action:@selector(performClose:) + keyEquivalent:@"w"]; + [menu setSubmenu:windows forItem:[menu itemWithTitle:@"Windows"]]; + + services = AUTORELEASE([[NSMenu alloc] init]); + [menu setSubmenu:services forItem:[menu itemWithTitle:@"Services"]]; + + [NSApp setMainMenu:menu]; + [NSApp setServicesMenu: services]; +} + + + + + diff --git a/PCAppProj/Templates/objects.gorm b/Modules/ApplicationProject/Templates/objects.gorm similarity index 100% rename from PCAppProj/Templates/objects.gorm rename to Modules/ApplicationProject/Templates/objects.gorm