From ab49986238ab7e15cc6b17cf333a261c2b8dc087 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Thu, 19 Nov 2009 14:18:49 -0800 Subject: [PATCH 1/4] Add --clone option to bootstrap, and prompt for location --- bootstrap.sh | 52 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 3d52fa98d..2a1dcbfc6 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash function prompt () { while true; do @@ -25,23 +25,39 @@ function path_instructions () { echo " export PATH=$INSTALL_DIRECTORY/bin:\$PATH" } -TEMPZIP="/tmp/narwhal.zip" +if [ "--clone" = "$1" ]; then + GITCLONE=1 +fi + INSTALL_DIRECTORY="/usr/local/narwhal" +TEMPZIP="/tmp/narwhal.zip" ORIGINAL_PATH="$PATH" if ! which "narwhal"; then echo "================================================================================" - echo "Narwhal JavaScript platform is required. Install it into \"$INSTALL_DIRECTORY\"?" + echo "Narwhal JavaScript platform is required. Install it automatically?" if prompt; then - echo "Downloading Narwhal..." - curl -L -o "$TEMPZIP" "http://github.com/280north/narwhal/zipball/master" - echo "Installing Narwhal..." - unzip "$TEMPZIP" -d "$INSTALL_DIRECTORY" - rm "$TEMPZIP" - - mv $INSTALL_DIRECTORY/280north-narwhal-*/* $INSTALL_DIRECTORY/. - rm -rf $INSTALL_DIRECTORY/280north-narwhal-* + echo "================================================================================" + echo "To use the default location, \"$INSTALL_DIRECTORY\", just hit enter/return, or enter another path:" + read INSTALL_DIRECTORY_INPUT + if [ "$INSTALL_DIRECTORY_INPUT" ]; then + INSTALL_DIRECTORY="$INSTALL_DIRECTORY_INPUT" + fi + + if [ "$GITCLONE" ]; then + echo "Cloning Narwhal..." + git clone git://github.com/280north/narwhal.git "$INSTALL_DIRECTORY" + else + echo "Downloading Narwhal..." + curl -L -o "$TEMPZIP" "http://github.com/280north/narwhal/zipball/master" + echo "Installing Narwhal..." + unzip "$TEMPZIP" -d "$INSTALL_DIRECTORY" + rm "$TEMPZIP" + + mv $INSTALL_DIRECTORY/280north-narwhal-*/* $INSTALL_DIRECTORY/. + rm -rf $INSTALL_DIRECTORY/280north-narwhal-* + fi if ! which "narwhal"; then export PATH="$INSTALL_DIRECTORY/bin:$PATH" @@ -58,14 +74,24 @@ if ! which "narwhal"; then fi echo "Installing necessary dependencies..." -tusk install browserjs jake + +if [ "$GITCLONE" ]; then + tusk update + tusk clone browserjs jake +else + tusk install browserjs jake +fi if [ `uname` = "Darwin" ]; then echo "================================================================================" echo "Would you like to install the JavaScriptCore engine for Narwhal?" echo "This is optional but will make building and running Objective-J much faster." if prompt; then - tusk install narwhal-jsc + if [ "$GITCLONE" ]; then + tusk clone narwhal-jsc + else + tusk install narwhal-jsc + fi pushd "$INSTALL_DIRECTORY/packages/narwhal-jsc" make webkit popd From 0639f4b00fc4ad9af3ea29a380d8f8324d6ab5da Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 19 Nov 2009 14:48:18 -0800 Subject: [PATCH 2/4] Exit from subjake if the subjake returns non zero status code. Don't exit in the compiler (required for building in Atlas to not kill the process) --- Objective-J/CommonJS/lib/objective-j/compiler.js | 2 +- common.jake | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j/compiler.js b/Objective-J/CommonJS/lib/objective-j/compiler.js index ccc5f675e..cb1e5a5a2 100644 --- a/Objective-J/CommonJS/lib/objective-j/compiler.js +++ b/Objective-J/CommonJS/lib/objective-j/compiler.js @@ -105,7 +105,7 @@ function compileWithResolvedFlags(aFilePath, objjcFlags, gccFlags) " on preprocessed line number "+e.lineNumber+"\n"+ "\t"+lines.slice(Math.max(0, e.lineNumber - 1 - PAD), e.lineNumber+PAD).join("\n\t")); - OS.exit(1); + throw e; } } diff --git a/common.jake b/common.jake index 6691dc603..fdf280550 100644 --- a/common.jake +++ b/common.jake @@ -203,8 +203,9 @@ global.subjake = function(/*Array*/ directories, /*String*/ aTaskName) { if (FILE.isDirectory(aDirectory) && FILE.isFile(FILE.join(aDirectory, "Jakefile"))) { - OS.system("cd " + aDirectory + " && " + serializedENV() + " " + ARGV[0] + " " + aTaskName); - //rake abort if ($? != 0) + var returnCode = OS.system("cd " + aDirectory + " && " + serializedENV() + " " + ARGV[0] + " " + aTaskName); + if (returnCode) + OS.exit(returnCode); } else print("warning: subjake missing: " + aDirectory + " (this is not necessarily an error, " + aDirectory + " may be optional)"); From b9664681a376b7cf511a47e72d055b73ae1ac817 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 19 Nov 2009 15:29:20 -0800 Subject: [PATCH 3/4] Better error reporting for narwhal-jsc --- .../CommonJS/lib/objective-j/compiler.js | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j/compiler.js b/Objective-J/CommonJS/lib/objective-j/compiler.js index cb1e5a5a2..a5c88233e 100644 --- a/Objective-J/CommonJS/lib/objective-j/compiler.js +++ b/Objective-J/CommonJS/lib/objective-j/compiler.js @@ -83,11 +83,11 @@ function compileWithResolvedFlags(aFilePath, objjcFlags, gccFlags) for (var index = 0; index < fragments.length; index++) { var fragment = fragments[index]; - + if (IS_FILE(fragment)) preprocessed += (IS_LOCAL(fragment) ? MARKER_IMPORT_LOCAL : MARKER_IMPORT_STD) + ';' + GET_PATH(fragment).length + ';' + GET_PATH(fragment); else - { + { var code = GET_CODE(fragment); if (shouldCheckSyntax) @@ -99,23 +99,25 @@ function compileWithResolvedFlags(aFilePath, objjcFlags, gccFlags) catch (e) { var lines = code.split("\n"), - PAD = 3; - - print("Syntax error in "+GET_FILE(fragment).path+ - " on preprocessed line number "+e.lineNumber+"\n"+ - "\t"+lines.slice(Math.max(0, e.lineNumber - 1 - PAD), e.lineNumber+PAD).join("\n\t")); - - throw e; + PAD = 3, + lineNumber = e.lineNumber || e.line, + errorInfo = "Syntax error in "+GET_FILE(fragment).path+ + " on preprocessed line number "+lineNumber+"\n\n"+ + "\t"+lines.slice(Math.max(0, lineNumber - 1 - PAD), lineNumber+PAD).join("\n\t"); + + print(errorInfo); + + throw errorInfo; } } - + if (shouldCompress) { code = compress("function(){" + code + '}', FILE.basename(aFilePath)); - + code = code.substr("function(){".length, code.length - "function(){};\n\n".length); } - + preprocessed += MARKER_CODE + ';' + code.length + ';' + code; } } From 72d01865ae695a460784a56e05517980ff562349 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Fri, 20 Nov 2009 18:06:16 -0800 Subject: [PATCH 4/4] Add about panel --- AppKit/CPApplication.j | 97 ++++++++++++++++--- AppKit/CPView.j | 2 +- AppKit/Resources/AboutPanel.cib | 1 + AppKit/Resources/standardApplicationIcon.png | Bin 0 -> 13275 bytes 4 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 AppKit/Resources/AboutPanel.cib create mode 100644 AppKit/Resources/standardApplicationIcon.png diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 64e914b3b..581dbe82a 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -96,6 +96,10 @@ CPRunContinuesResponse = -1002; CPDictionary _namedArgs; CPArray _args; CPString _fullArgsString; + + CPImage _applicationIconImage; + + CPPanel _aboutPanel; } /*! @@ -302,11 +306,88 @@ CPRunContinuesResponse = -1002; - (void)terminate:(id)aSender { - [[CPDocumentController sharedDocumentController] closeAllDocumentsWithDelegate:self - didCloseAllSelector:@selector(_documentController:didCloseAll:context:) - contextInfo:nil]; + if (![CPPlatform isBrowser]) + { + [[CPDocumentController sharedDocumentController] closeAllDocumentsWithDelegate:self + didCloseAllSelector:@selector(_documentController:didCloseAll:context:) + contextInfo:nil]; + } + else + { + [[[CPApp mainWindow] platformWindow] _propagateCurrentDOMEvent:YES]; + } } +- (void)setApplicationIconImage:(CPImage)anImage +{ + _applicationIconImage = anImage; +} + +- (CPImage)applicationIconImage +{ + if (_applicationIconImage) + return _applicationIconImage; + + var imagePath = [[CPBundle mainBundle] objectForInfoDictionaryKey:@"CPApplicationIcon"]; + if (imagePath) + _applicationIconImage = [[CPImage alloc] initWithContentsOfFile:imagePath]; + + return _applicationIconImage; +} + +- (void)orderFrontStandardAboutPanel:(id)sender +{ + [self orderFrontStandardAboutPanelWithOptions:nil]; +} + +- (void)orderFrontStandardAboutPanelWithOptions:(CPDictionary)options +{ + if (!_aboutPanel) + { + var mainInfo = [[CPBundle mainBundle] infoDictionary], + applicationTitle = [options objectForKey:"ApplicationName"] || [mainInfo objectForKey:@"CPBundleName"], + applicationIcon = [options objectForKey:@"ApplicationIcon"] || [self applicationIconImage], + version = [options objectForKey:@"Version"] || [mainInfo objectForKey:@"CPBundleVersion"], + applicationVersion = [options objectForKey:@"ApplicationVersion"] || [mainInfo objectForKey:@"CPBundleShortVersionString"], + copyright = [options objectForKey:@"Copyright"] || [mainInfo objectForKey:@"CPHumanReadableCopyright"]; + + var aboutPanelController = [[CPWindowController alloc] initWithWindowCibName:@"AboutPanel"], + aboutPanel = [aboutPanelController window], + contentView = [aboutPanel contentView], + imageView = [contentView viewWithTag:1], + applicationLabel = [contentView viewWithTag:2], + versionLabel = [contentView viewWithTag:3], + copyrightLabel = [contentView viewWithTag:4], + standardPath = [[CPBundle bundleForClass:[self class]] pathForResource:@"standardApplicationIcon.png"]; + + // FIXME move this into the CIB eventually + [applicationLabel setFont:[CPFont boldSystemFontOfSize:14.0]]; + [applicationLabel setAlignment:CPCenterTextAlignment]; + [versionLabel setAlignment:CPCenterTextAlignment]; + [copyrightLabel setAlignment:CPCenterTextAlignment]; + + [imageView setImage:applicationIcon || [[CPImage alloc] initWithContentsOfFile:standardPath + size:CGSizeMake(256, 256)]]; + + [applicationLabel setStringValue:applicationTitle || ""]; + + if (version && applicationVersion) + [versionLabel setStringValue:sprintf(@"Version %@ (%@)", applicationVersion, version)]; + else if (applicationVersion || version) + [versionLabel setStringValue:sprintf(@"Version %@", applicationVersion || version)]; + else + [versionLabel setStringValue:@""]; + + [copyrightLabel setStringValue:copyright || ""]; + [aboutPanel center]; + + _aboutPanel = aboutPanel; + } + + [_aboutPanel orderFront:self]; +} + + - (void)_documentController:(NSDocumentController *)docController didCloseAll:(BOOL)didCloseAll context:(Object)info { // callback method for terminate: @@ -559,16 +640,6 @@ CPRunContinuesResponse = -1002; [[CPColorPanel sharedColorPanel] orderFront:self]; } -- (void)orderFrontStandardAboutPanel:(id)aSender -{ - [self orderFrontStandardAboutPanelWithOptions:nil]; -} - -- (void)orderFrontStandardAboutPanelWithOptions:(CPDictionary)aDictionary -{ - // FIXME: Implement. -} - // Posting Actions /*! Tries to perform the action with an argument. Performs diff --git a/AppKit/CPView.j b/AppKit/CPView.j index c53892f76..ae8aeb595 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -596,7 +596,7 @@ var CPViewFlags = { }, - (void)viewWithTag:(CPInteger)aTag { - if ([self tag] === aTag) + if ([self tag] == aTag) return self; var index = 0, diff --git a/AppKit/Resources/AboutPanel.cib b/AppKit/Resources/AboutPanel.cib new file mode 100644 index 000000000..0f3bfd601 --- /dev/null +++ b/AppKit/Resources/AboutPanel.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;K;21;CPCibObjectRecordsKeyD;K;6;CP$UIDd;1;4E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;6E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;7E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;8E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;2;10E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;11E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;12E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;13E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;15E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;17E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;19E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;E;E;S;16;IBCocoaFrameworkd;3;461D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;57E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;15;CibObjectRecordK;8;$classesA;S;15;CibObjectRecordS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;59E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;60E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;61E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;62E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;63E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;64E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;48E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;65E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;66E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;67E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;68E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;69E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;47E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;70E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;71E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;72E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;73E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;74E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;46E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;75E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;76E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;77E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;78E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;79E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;80E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;81E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;44E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;82E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;17E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;39E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;83E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;42E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;84E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;39E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;85E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;40E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;86E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;87E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;88E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;89E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;92E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;107E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;108E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;112E;K;12;$atext-colorD;K;6;CP$UIDd;3;114E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;115E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;121E;K;12;$atext-colorD;K;6;CP$UIDd;3;122E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;123E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;124E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;127E;K;12;$atext-colorD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;129E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;12;File's OwnerS;6;WindowS;11;ApplicationS;4;ViewS;10;Image viewS;10;Text fieldD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;17E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;39E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;130E;E;S;18;CPWindowControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;ArrayD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;22;{{72, 57}, {219, 263}}d;1;7S;0;S;13;CPApplicationS;5;$nullS;21;{{0, 26}, {219, 263}}S;20;{{0, 0}, {219, 263}}S;5;$nullD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;d;2;18S;6;normalS;1;1S;24;{{45.5, 16}, {128, 128}}S;20;{{0, 0}, {128, 128}}d;2;37d;1;0D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;131E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;132E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;134E;E;d;1;4S;1;2S;22;{{16, 165}, {187, 25}}S;19;{{0, 0}, {187, 25}}d;2;36D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;137E;E;S;7;AppNamed;4;3072F;S;1;3S;22;{{16, 194}, {187, 20}}S;19;{{0, 0}, {187, 20}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;138E;E;S;19;Version XXX (build)S;1;4S;22;{{16, 222}, {187, 22}}S;19;{{0, 0}, {187, 22}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;139E;E;S;9;CopyrightS;6;windowS;7;CPImageS;8;Icon.pngD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;141E;E;E;S;5;Ariald;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;143E;E;d;1;1S;24;{"width":-1,"height":-1}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/AppKit/Resources/standardApplicationIcon.png b/AppKit/Resources/standardApplicationIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..4611d45826d9efde3bc8d59e778a9a0d6b8aa63d GIT binary patch literal 13275 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 literal 0 HcmV?d00001