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 000000000..4611d4582 Binary files /dev/null and b/AppKit/Resources/standardApplicationIcon.png differ diff --git a/Objective-J/CommonJS/lib/objective-j/compiler.js b/Objective-J/CommonJS/lib/objective-j/compiler.js index ccc5f675e..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")); - - OS.exit(1); + 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; } } 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 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)");