diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index 0a98e86d1..aad960d62 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -37,6 +37,7 @@ @import "CPCibControlConnector.j" @import "CPCibLoading.j" @import "CPCibOutletConnector.j" +@import "CPCibRuntimeAttributesConnector.j" @import "CPClipView.j" @import "CPCollectionView.j" @import "CPCollectionViewItem.j" diff --git a/AppKit/Cib/CPCibRuntimeAttributesConnector.j b/AppKit/Cib/CPCibRuntimeAttributesConnector.j new file mode 100644 index 000000000..b6a71d64c --- /dev/null +++ b/AppKit/Cib/CPCibRuntimeAttributesConnector.j @@ -0,0 +1,64 @@ +/* + * CPCibRuntimeAttributesConnector.j + * AppKit + * + * Created by Aparajita Fishman. + * Copyright 2011, 280 North, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import "CPCibConnector.j" + +var CPCibRuntimeAttributesConnectorObjectKey = @"CPCibRuntimeAttributesConnectorObjectKey", + CPCibRuntimeAttributesConnectorKeyPathsKey = @"CPCibRuntimeAttributesConnectorKeyPathsKey", + CPCibRuntimeAttributesConnectorValuesKey = @"CPCibRuntimeAttributesConnectorValuesKey"; + +@implementation CPCibRuntimeAttributesConnector : CPCibConnector +{ + id _keyPaths; + id _values; +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super initWithCoder:aCoder]) + { + _source = [aCoder decodeObjectForKey:CPCibRuntimeAttributesConnectorObjectKey]; + _keyPaths = [aCoder decodeObjectForKey:CPCibRuntimeAttributesConnectorKeyPathsKey]; + _values = [aCoder decodeObjectForKey:CPCibRuntimeAttributesConnectorValuesKey]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeObject:_source forKey:CPCibRuntimeAttributesConnectorObjectKey]; + [aCoder encodeObject:_keyPaths forKey:CPCibRuntimeAttributesConnectorKeyPathsKey]; + [aCoder encodeObject:_values forKey:CPCibRuntimeAttributesConnectorValuesKey]; +} + +- (void)establishConnection +{ + var count = [_keyPaths count]; + + while (count--) + [_source setValue:_values[count] forKeyPath:_keyPaths[count]]; +} + +@end diff --git a/AppKit/Cib/_CPCibObjectData.j b/AppKit/Cib/_CPCibObjectData.j index 22e511592..72288e919 100644 --- a/AppKit/Cib/_CPCibObjectData.j +++ b/AppKit/Cib/_CPCibObjectData.j @@ -29,6 +29,7 @@ @import "CPCibControlConnector.j" @import "CPCibOutletConnector.j" @import "CPCibBindingConnector.j" +@import "CPCibRuntimeAttributesConnector.j" @implementation _CPCibObjectData : CPObject @@ -257,11 +258,29 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey _replacementObjects[[_fileOwner UID]] = anOwner; var index = 0, - count = _connections.length; + count = _connections.length, + runtimeAttributeConnectors = [], + connection = nil; for (; index < count; ++index) { - var connection = _connections[index]; + connection = _connections[index]; + + if ([connection isKindOfClass:[CPCibRuntimeAttributesConnector class]]) + // Defer runtime attribute connections until after all other connections are made + runtimeAttributeConnectors.push(connection); + else + { + [connection replaceObjects:_replacementObjects]; + [connection establishConnection]; + } + } + + count = runtimeAttributeConnectors.length; + + for (index = 0; index < count; ++index) + { + connection = runtimeAttributeConnectors[index]; [connection replaceObjects:_replacementObjects]; [connection establishConnection]; diff --git a/Tests/Manual/RuntimeAttributesTest/AppController.j b/Tests/Manual/RuntimeAttributesTest/AppController.j new file mode 100644 index 000000000..0561523da --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/AppController.j @@ -0,0 +1,43 @@ +/* + * AppController.j + * RuntimeAttributesTest + * + * Created by Aparajita Fishman on March 26, 2011. + * Copyright 2009, 280 North, Inc. All rights reserved. + */ + +@import + + +@implementation AppController : CPObject +{ + CPWindow theWindow; //this "outlet" is connected automatically by the Cib + CPView firstResponder; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (void)awakeFromCib +{ + // This is called when the cib is done loading. + // You can implement this method on any object instantiated from a Cib. + // It's a useful hook for setting up current UI values, and other things. + + // In this case, we want the window from Cib to become our full browser window + //[theWindow setFullPlatformWindow:YES]; +} + +- (void)setInitialResponder:(CPInteger)tag +{ + [theWindow setInitialFirstResponder:[[theWindow contentView] viewWithTag:tag]]; +} + +- (void)setValue:(id)value forUndefinedKey:(CPString)key +{ + console.log("setValue:" + value + " forKey:" + key); +} + +@end diff --git a/Tests/Manual/RuntimeAttributesTest/Info.plist b/Tests/Manual/RuntimeAttributesTest/Info.plist new file mode 100644 index 000000000..e9e570865 --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/Info.plist @@ -0,0 +1,10 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + RuntimeAttributesTest + + diff --git a/Tests/Manual/RuntimeAttributesTest/Jakefile b/Tests/Manual/RuntimeAttributesTest/Jakefile new file mode 100644 index 000000000..68f1674da --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * test + * + * Created by aparajita on March 26, 2011. + * Copyright 2011, Victory-Heart Productions All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("test", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "test.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("test"); + task.setIdentifier("com.aparajitaworld.test"); + task.setVersion("1.0"); + task.setAuthor("Victory-Heart Productions"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("test"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["test"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "test", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "test", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "test")); + OS.system(["press", "-f", FILE.join("Build", "Release", "test"), FILE.join("Build", "Deployment", "test")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "test")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "test"), FILE.join("Build", "Desktop", "test", "test.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "test", "test.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "test")); + print("----------------------------"); +} diff --git a/Tests/Manual/RuntimeAttributesTest/Resources/MainMenu.cib b/Tests/Manual/RuntimeAttributesTest/Resources/MainMenu.cib new file mode 100644 index 000000000..6e4cb2429 --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/Resources/MainMenu.cib @@ -0,0 +1,2 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;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;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;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;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;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;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;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;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;E;E;S;16;IBCocoaFrameworkD;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;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;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;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;21E;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;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;68E;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;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;70E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;78E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;77E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;81E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;84E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;86E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;87E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;91E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;69E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;76E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;92E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;75E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;93E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;94E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;95E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;96E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;97E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;100E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;87E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;102E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;103E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;87E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;87E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;106E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;91E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;69E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;76E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;90E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;75E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;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;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;107E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;110E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;111E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;112E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;87E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;87E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;113E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;78E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;77E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;81E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;1;0S;1;1S;1;2S;1;5S;1;3S;1;4S;1;6S;1;7S;12;File's OwnerS;1;8S;1;9S;2;10S;2;11S;2;12S;2;13S;2;15S;2;14S;2;16S;2;17S;2;18S;2;19S;2;20S;2;21D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;19E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;2;19E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;114E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;115E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;2;30E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;116E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;24E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;2;24E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;118E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;119E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;19E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;S;8;CPObjectD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;S;13;AppControllerd;1;1S;22;{{34, 189}, {125, 29}}S;19;{{0, 0}, {125, 29}}d;2;36S;9;textfieldS;19;bezeled+placeholderd;1;2d;1;4T;S;0;d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;80E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;122E;E;d;1;0S;21;{{34, 20}, {389, 45}}S;19;{{0, 0}, {389, 45}}S;6;normalS;104;See the User Defined Runtime Attributes for each view below and for the AppController to see the effect.F;S;22;{{37, 138}, {118, 24}}S;19;{{0, 0}, {118, 24}}S;6;buttonS;17;selected+borderedS;8;disabledS;32;{10000000000000, 10000000000000}S;8;CPWindowS;24;{{162, 112}, {548, 314}}d;2;15S;22;RuntimeAttributes TestS;23;{{179, 103}, {166, 17}}S;19;{{0, 0}, {166, 17}}S;27;This button's title was setS;23;{{179, 241}, {352, 51}}S;19;{{0, 0}, {352, 51}}S;88;This was set to be first responder by the +AppController -setInitialFirstResponder methodS;23;{{179, 141}, {166, 17}}S;24;This button was disabledS;21;{{37, 99}, {118, 24}}S;20;{{0, 0}, {548, 314}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;28E;E;E;S;13;CPApplicationS;23;{{179, 196}, {255, 17}}S;19;{{0, 0}, {255, 17}}S;40;This ordinarily would be first responderS;22;{{34, 235}, {125, 29}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;75E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;126E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;87E;E;E;S;8;delegateS;9;theWindowD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;E;E;S;16;initialResponderS;6;hiddenS;5;titleS;6;Hello!S;7;enabledE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/RuntimeAttributesTest/Resources/MainMenu.xib b/Tests/Manual/RuntimeAttributesTest/Resources/MainMenu.xib new file mode 100644 index 000000000..c1594db54 --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/Resources/MainMenu.xib @@ -0,0 +1,609 @@ + + + + 1060 + 10J869 + 804 + 1038.35 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 804 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + NSObject + + + FirstResponder + + + NSApplication + + + AppController + + + 15 + 2 + {{162, 992}, {548, 314}} + 611844096 + RuntimeAttributes Test + NSWindow + + {1.79769e+308, 1.79769e+308} + + + 256 + + + + 268 + {{37, 187}, {118, 25}} + + YES + + -2080244224 + 134217728 + button + + LucidaGrande + 13 + 1044 + + + -2038152961 + 163 + + + 400 + 75 + + + + + 268 + {{37, 148}, {118, 25}} + + YES + + -2080244224 + 134217728 + disabled + + + -2038152961 + 163 + + + 400 + 75 + + + + + 268 + {{37, 99}, {118, 22}} + + 1 + YES + + -1804468671 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + + 268 + {{37, 53}, {118, 22}} + + 2 + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{179, 194}, {166, 17}} + + YES + + 68288064 + 272630784 + This button's title was set + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + + + + 268 + {{34, 249}, {389, 45}} + + YES + + 67239424 + 272629760 + See the User Defined Runtime Attributes for each view below and for the AppController to see the effect. + + + + + + + + + 268 + {{179, 156}, {166, 17}} + + YES + + 68288064 + 272630784 + This button was disabled + + + + + + + + + 268 + {{179, 101}, {255, 17}} + + YES + + 68288064 + 272630784 + This ordinarily would be first responder + + + + + + + + + 268 + {{179, 22}, {352, 51}} + + YES + + 67239424 + 272629760 + VGhpcyB3YXMgc2V0IHRvIGJlIGZpcnN0IHJlc3BvbmRlciBieSB0aGUKQXBwQ29udHJvbGxlciAtc2V0 +SW5pdGlhbEZpcnN0UmVzcG9uZGVyIG1ldGhvZA + + + + + + + + {548, 314} + + + {{0, 0}, {2560, 1418}} + {1.79769e+308, 1.79769e+308} + + + + + + + delegate + + + + 10 + + + + theWindow + + + + 25 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 9 + + + App Controller + + + 23 + + + + + + + + 24 + + + + + + + + + + + + + + + + 26 + + + + + + + + 27 + + + + + 32 + + + + + + + + 33 + + + + + 34 + + + + + + + + 35 + + + + + 36 + + + + + + + + 37 + + + + + 39 + + + + + + + + 40 + + + + + 41 + + + + + + + + 42 + + + + + 43 + + + + + + + + 44 + + + + + 45 + + + + + + + + 46 + + + + + 47 + + + + + + + + 48 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{719, 660}, {548, 314}} + com.apple.InterfaceBuilder.CocoaPlugin + {{719, 660}, {548, 314}} + + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.boolean + hidden + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.string + title + Hello! + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCDAAAw3IAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCFAAAwsgAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCDAAAwtIAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.boolean + enabled + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCDAAAw0sAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDMwAAwzwAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDMQAAw0oAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDMQAAwxQAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDMQAAws4AAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCCAAAw5MAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.number + initialResponder + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.string + localized + foo + YES + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.nil + null + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 48 + + + + + AppController + NSObject + + theWindow + id + + + theWindow + + theWindow + id + + + + IBUserSource + + + + + NSObject + + delegate + id + + + delegate + + delegate + id + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + + 3 + + diff --git a/Tests/Manual/RuntimeAttributesTest/Resources/spinner.gif b/Tests/Manual/RuntimeAttributesTest/Resources/spinner.gif new file mode 100644 index 000000000..06dbc2bc2 Binary files /dev/null and b/Tests/Manual/RuntimeAttributesTest/Resources/spinner.gif differ diff --git a/Tests/Manual/RuntimeAttributesTest/index-debug.html b/Tests/Manual/RuntimeAttributesTest/index-debug.html new file mode 100644 index 000000000..4a301abeb --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/index-debug.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + RuntimeAttributesTest + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/RuntimeAttributesTest/index.html b/Tests/Manual/RuntimeAttributesTest/index.html new file mode 100644 index 000000000..2c49b5954 --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + RuntimeAttributesTest + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/RuntimeAttributesTest/main.j b/Tests/Manual/RuntimeAttributesTest/main.j new file mode 100644 index 000000000..00aef0641 --- /dev/null +++ b/Tests/Manual/RuntimeAttributesTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * test + * + * Created by aparajita on March 26, 2011. + * Copyright 2011, Victory-Heart Productions All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tools/nib2cib/NSFoundation.j b/Tools/nib2cib/NSFoundation.j index 499e2a544..5b12c138f 100644 --- a/Tools/nib2cib/NSFoundation.j +++ b/Tools/nib2cib/NSFoundation.j @@ -24,4 +24,5 @@ @import "NSExpression.j" @import "NSDictionary.j" @import "NSMutableString.j" +@import "NSNull.j" @import "NSSet.j" diff --git a/Tools/nib2cib/NSNibConnector.j b/Tools/nib2cib/NSNibConnector.j index f30b90dc5..6633da218 100644 --- a/Tools/nib2cib/NSNibConnector.j +++ b/Tools/nib2cib/NSNibConnector.j @@ -23,6 +23,7 @@ @import @import @import +@import NIB_CONNECTION_EQUIVALENCY_TABLE = {}; @@ -167,3 +168,42 @@ var NSTransformers = [CPSet setWithObjects: } @end + +@implementation CPCibRuntimeAttributesConnector (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + self = [super NS_initWithCoder:aCoder]; + + if (self) + { + _source = [aCoder decodeObjectForKey:@"NSObject"]; + _keyPaths = [aCoder decodeObjectForKey:@"NSKeyPaths"]; + _values = [aCoder decodeObjectForKey:@"NSValues"]; + + var count = [_keyPaths count]; + + CPLog.debug(@"NSNibConnector: runtime attributes connector: " + [_source description]); + + while (count--) + CPLog.debug(@" %s (%s): %s", _keyPaths[count], [_values[count] className], _values[count]); + } + + return self; +} + +@end + +@implementation NSIBUserDefinedRuntimeAttributesConnector : CPCibRuntimeAttributesConnector + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPCibRuntimeAttributesConnector class]; +} + +@end diff --git a/Tools/nib2cib/NSNull.j b/Tools/nib2cib/NSNull.j new file mode 100644 index 000000000..a1af4df00 --- /dev/null +++ b/Tools/nib2cib/NSNull.j @@ -0,0 +1,37 @@ +/* + * NSNull.j + * nib2cib + * + * Created by Aparajita Fishman. + * Copyright 2011, 280 North, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import + +@implementation NSNull : CPNull + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [CPNull null]; +} + +- (Class)classForKeyedArchiver +{ + return [CPNull class]; +} + +@end