From 7ff8bda52a698bd9f123bdc2e04ce878d47aa3a2 Mon Sep 17 00:00:00 2001 From: Blair Duncan Date: Mon, 18 Feb 2013 01:04:59 -0500 Subject: [PATCH] CPDictionaryController initial commit --- AppKit/CPDictionaryController.j | 172 ++++ .../AppController.j | 35 + .../CPDictionaryControllerTest/Info.plist | 10 + .../CPDictionaryControllerTest/Jakefile | 94 +++ .../Resources/MainMenu.cib | 1 + .../Resources/MainMenu.xib | 794 ++++++++++++++++++ .../Resources/spinner.gif | Bin 0 -> 1434 bytes .../index-debug.html | 107 +++ .../CPDictionaryControllerTest/index.html | 77 ++ .../Manual/CPDictionaryControllerTest/main.j | 18 + Tools/nib2cib/NSAppKit.j | 1 + Tools/nib2cib/NSDictionaryController.j | 54 ++ 12 files changed, 1363 insertions(+) create mode 100644 AppKit/CPDictionaryController.j create mode 100644 Tests/Manual/CPDictionaryControllerTest/AppController.j create mode 100644 Tests/Manual/CPDictionaryControllerTest/Info.plist create mode 100644 Tests/Manual/CPDictionaryControllerTest/Jakefile create mode 100644 Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPDictionaryControllerTest/Resources/spinner.gif create mode 100644 Tests/Manual/CPDictionaryControllerTest/index-debug.html create mode 100644 Tests/Manual/CPDictionaryControllerTest/index.html create mode 100644 Tests/Manual/CPDictionaryControllerTest/main.j create mode 100644 Tools/nib2cib/NSDictionaryController.j diff --git a/AppKit/CPDictionaryController.j b/AppKit/CPDictionaryController.j new file mode 100644 index 000000000..803b249f2 --- /dev/null +++ b/AppKit/CPDictionaryController.j @@ -0,0 +1,172 @@ +/* + * CPDictionaryController.j + * AppKit + * + * Adapted from Cocotron, by Johannes Fortmann + * + * Created by Blair Duncan + * Copyright 2013, SGL Studio, BBDO Toronto All rights reserved. + * + * 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 "CPArrayController.j" + +@implementation CPDictionaryController : CPArrayController +{ + CPDictionary _contentDictionary; + + CPArray _includedKeys @accessors(property=includedKeys); + CPArray _excludedKeys @accessors(property=excludedKeys); + + CPString _initialKey @accessors(property=initialKey); + id _initialValue @accessors(property=initialValue); +} + +- (id)init +{ + self = [super init]; + + if (self) + { + // CPDictionaryController has a default sort descriptor, CPArrayController does not + [self setSortDescriptors:[CPArray arrayWithObject:[CPSortDescriptor sortDescriptorWithKey:@"key" ascending:YES]]]; + _initialKey = @"key"; + _initialValue = @"value"; + } + return self; +} + +- (id)newObject +{ + var keys = [_contentDictionary allKeys], + newKey = _initialKey, + count = 0; + + if ([keys containsObject:newKey]) + while ([keys containsObject:newKey]) + newKey = [CPString stringWithFormat:@"%@%i", _initialKey, ++count]; + + [_contentDictionary setObject:_initialValue forKey:newKey]; + + var keyValuePairProtocol = [_CPDictionaryControllerKeyValuePair new]; + keyValuePairProtocol._key = newKey; + keyValuePairProtocol._dictionary = _contentDictionary; + keyValuePairProtocol._controller = self; + return keyValuePairProtocol; +} + +- (CPDictionary)contentDictionary +{ + return _contentDictionary; +} + +- (void)setContent:(id)value +{ + [self setContentDictionary:value]; +} + +- (void)setContentDictionary:(CPDictionary)aDictionary +{ + if (aDictionary == _contentDictionary) + return; + + if ([aDictionary isKindOfClass:[CPDictionary class]]) + _contentDictionary = aDictionary; + else + _contentDictionary = nil; + + var array = [CPArray array], + allKeys = [_contentDictionary allKeys]; + + [allKeys addObjectsFromArray:_includedKeys]; + + var iter = [[CPSet setWithArray:allKeys] objectEnumerator], + obj; + + while ((obj = [iter nextObject]) !== nil) + { + if (![_excludedKeys containsObject:obj]) + { + var keyValuePairProtocol = [_CPDictionaryControllerKeyValuePair new]; + keyValuePairProtocol._key = obj; + keyValuePairProtocol._dictionary = _contentDictionary; + keyValuePairProtocol._controller = self; + [array addObject:keyValuePairProtocol]; + } + } + [super setContent:array]; +} + + + +@end + + +var CPIncludedKeys = @"CPIncludedKeys", + CPExcludedKeys = @"CPExcludedKeys"; + +@implementation CPDictionaryController (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super initWithCoder:aCoder]; + + if (self) + { + _includedKeys = [aCoder decodeObjectForKey:CPIncludedKeys]; + _excludedKeys = [aCoder decodeObjectForKey:CPExcludedKeys]; + [self setSortDescriptors:[CPArray arrayWithObject:[CPSortDescriptor sortDescriptorWithKey:@"key" ascending:YES]]]; + _initialKey = @"key"; + _initialValue = @"value"; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeObject:_includedKeys forKey:CPIncludedKeys]; + [aCoder encodeObject:_excludedKeys forKey:CPExcludedKeys]; +} + +@end + +@implementation _CPDictionaryControllerKeyValuePair : CPObject +{ + CPString _key @accessors(property=key); + CPDictionary _dictionary @accessors(property=dictionary); + CPDictionaryController _controller @accessors(property=controller); +} + +- (id)value +{ + return [_dictionary objectForKey:_key]; +} + +- (void)setValue:(id)aValue +{ + [_dictionary setObject:aValue forKey:_key]; +} + +- (BOOL)isExplicitlyIncluded +{ + return [[_controller _includedKeys] containsObject:_key]; +} + + +@end diff --git a/Tests/Manual/CPDictionaryControllerTest/AppController.j b/Tests/Manual/CPDictionaryControllerTest/AppController.j new file mode 100644 index 000000000..4057feaee --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/AppController.j @@ -0,0 +1,35 @@ +/* + * AppController.j + * CPDictionaryControllerTest + * + * Created by Blair Duncan on February 17, 2013. + * Copyright 2013, SGL Studio, BBDO Toronto All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + CPDictionaryController dictionaryController @accessors; +} + +- (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 + [dictionaryController setContent:[CPDictionary dictionaryWithObjectsAndKeys:@"Blair", @"FirstName", @"Duncan", @"LastName", @"Toronto", @"City"]]; + [theWindow setFullPlatformWindow:YES]; +} + +@end diff --git a/Tests/Manual/CPDictionaryControllerTest/Info.plist b/Tests/Manual/CPDictionaryControllerTest/Info.plist new file mode 100644 index 000000000..e645d6dcb --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/Info.plist @@ -0,0 +1,10 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPDictionaryControllerTest + + diff --git a/Tests/Manual/CPDictionaryControllerTest/Jakefile b/Tests/Manual/CPDictionaryControllerTest/Jakefile new file mode 100644 index 000000000..84548c48d --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CPDictionaryControllerTest + * + * Created by Blair Duncan on February 17, 2013. + * Copyright 2013, SGL Studio, BBDO Toronto 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 ("CPDictionaryControllerTest", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPDictionaryControllerTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPDictionaryControllerTest"); + task.setIdentifier("com.yourcompany.CPDictionaryControllerTest"); + task.setVersion("1.0"); + task.setAuthor("SGL Studio, BBDO Toronto"); + task.setEmail("Blair.Duncan@BBDO.com"); + task.setSummary("CPDictionaryControllerTest"); + 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", ["CPDictionaryControllerTest"], 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", "CPDictionaryControllerTest", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPDictionaryControllerTest", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPDictionaryControllerTest")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPDictionaryControllerTest"), FILE.join("Build", "Deployment", "CPDictionaryControllerTest")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPDictionaryControllerTest")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPDictionaryControllerTest"), FILE.join("Build", "Desktop", "CPDictionaryControllerTest", "CPDictionaryControllerTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPDictionaryControllerTest", "CPDictionaryControllerTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPDictionaryControllerTest")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.cib b/Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.cib new file mode 100644 index 000000000..20792ab23 --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.cib @@ -0,0 +1 @@ +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;1;0E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;1;0E;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;41E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;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;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;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;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;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;23E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;28E;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;74E;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;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;76E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;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;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;78E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;79E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;80E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;81E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;84E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;85E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;77E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;86E;K;18;CPScrollerStyleKeyD;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;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;91E;K;6;$afontD;K;6;CP$UIDd;2;93E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;77E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;85E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;95E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;96E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;98E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;77E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;99E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;94E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;77E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;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;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;80E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;81E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;103E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;104E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;85E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;77E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;105E;K;18;CPScrollerStyleKeyD;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;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;106E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;106E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;110E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;111E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;112E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;114E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;115E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;24E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;21E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;116E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;116E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;116E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;116E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;99E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;99E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;99E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;3;118E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;119E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;94E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;77E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;120E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;121E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;122E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;123E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;124E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;125E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;126E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;10;$classnameS;22;CPDictionaryControllerK;8;$classesA;S;22;CPDictionaryControllerS;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;127E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;2;99E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;2;99E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;2;99E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;2;99E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;2;99E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;2;99E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;2;99E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;2;97E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;2;99E;K;14;CPIncludedKeysD;K;6;CP$UIDd;1;0E;K;14;CPExcludedKeysD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;114E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;128E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;128E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;114E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;12;$agrid-colorD;K;6;CP$UIDd;3;132E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;85E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;133E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;134E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;77E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;2;85E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;97E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;99E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;99E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;99E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;99E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;135E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;132E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;77E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;97E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;118E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;41E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;136E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;137E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;138E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;139E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;141E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;143E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;144E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;2;97E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;2;99E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;91E;K;6;$afontD;K;6;CP$UIDd;2;93E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;77E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;85E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;148E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;96E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;98E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;77E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;99E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;94E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;77E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;149E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;150E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;138E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;139E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;151E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;152E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;144E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;2;97E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;2;99E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;3;153E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;155E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;34E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;2;99E;E;S;14;App ControllerS;27;Text Field Cell (Text Cell)S;12;File's OwnerS;29;Text Field Cell (Text Cell)-1S;19;Horizontal ScrollerS;20;Push Button (Remove)S;17;Vertical ScrollerS;12;Content ViewS;33;Bordered Scroll View (Table View)S;17;Button Cell (Add)S;15;Window (Window)S;21;Dictionary ControllerS;23;Table View (Key, Value)S;20;Table Column (value)S;20;Button Cell (Remove)S;17;Push Button (Add)S;11;ApplicationS;18;Table Column (key)S;17;Table Header ViewD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;19E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;23E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;23E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;161E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;162E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;161E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;166E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;136E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;169E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;136E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;172E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;175E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;175E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;177E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;178E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;178E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;179E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;E;E;S;13;AppControllerd;1;0S;20;{{1, 68}, {223, 15}}S;19;{{0, 0}, {223, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:d;1;4f;18;0.5714285969734192S;22;{{152, 227}, {84, 25}}S;18;{{0, 0}, {84, 25}}d;2;36S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;181E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;99E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;99E;E;d;1;2S;6;RemoveS;0;F;d;2;14T;S;22;{{224, 83}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;17;disabled+verticald;2;37S;27;_verticalScrollerDidScroll:f;18;0.1947367936372757S;20;{{0, 0}, {480, 270}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;23E;E;E;S;6;normalS;22;{{56, 20}, {351, 202}}S;20;{{0, 0}, {351, 202}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;E;E;S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;128E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;80E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;184E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;185E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;187E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;80E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;184E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;41E;E;d;2;10D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;117E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;188E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;189E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;80E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;190E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;191E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowd;9;544735232S;24;{{240, 166}, {480, 270}}S;21;{{0, 0}, {1440, 878}}d;2;15S;6;WindowS;19;CPMutableDictionaryS;20;{{0, 0}, {349, 184}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;192E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;129E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;193E;E;d;2;25S;6;{3, 2}D;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;36E;E;E;S;5;valued;3;242d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;191E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;195E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;6;$afontD;K;6;CP$UIDd;3;196E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;197E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;196E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;2;77E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;2;85E;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;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;191E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;198E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;199E;K;6;$afontD;K;6;CP$UIDd;3;201E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;85E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;15;$acontent-insetD;K;6;CP$UIDd;3;203E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;96E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;204E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;85E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;96E;E;d;1;3D;K;10;$classnameS;16;CPSortDescriptorK;8;$classesA;S;16;CPSortDescriptorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;145E;K;22;CPSortDescriptorKeyKeyD;K;6;CP$UIDd;3;136E;K;28;CPSortDescriptorAscendingKeyD;K;6;CP$UIDd;2;99E;K;27;CPSortDescriptorSelectorKeyD;K;6;CP$UIDd;3;205E;E;S;21;{{56, 227}, {84, 25}}S;3;AddS;3;keyd;3;101D;K;6;$classD;K;6;CP$UIDd;3;140E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;191E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;195E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;6;$afontD;K;6;CP$UIDd;3;196E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;207E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;196E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;2;77E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;191E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;198E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;199E;K;6;$afontD;K;6;CP$UIDd;3;208E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;85E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;15;$acontent-insetD;K;6;CP$UIDd;3;209E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;96E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;204E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;85E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;3;145E;K;22;CPSortDescriptorKeyKeyD;K;6;CP$UIDd;3;149E;K;28;CPSortDescriptorAscendingKeyD;K;6;CP$UIDd;2;99E;K;27;CPSortDescriptorSelectorKeyD;K;6;CP$UIDd;3;205E;E;S;19;{{0, 0}, {349, 25}}S;14;tableHeaderRowS;8;delegateS;20;dictionaryControllerS;4;add:S;7;remove:S;18;enabled: canRemoveS;7;enabledS;9;canRemoveD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;E;E;S;15;enabled: canAddS;6;canAddD;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;E;E;S;28;value: arrangedObjects.valueS;21;arrangedObjects.valueD;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;K;23;CPCreatesSortDescriptorD;K;6;CP$UIDd;2;97E;E;E;S;26;value: arrangedObjects.keyS;19;arrangedObjects.keyD;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;K;23;CPCreatesSortDescriptorD;K;6;CP$UIDd;2;97E;E;E;S;32;sortDescriptors: sortDescriptorsS;15;sortDescriptorsD;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;E;E;S;34;selectionIndexes: selectionIndexesS;16;selectionIndexesD;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;E;E;S;28;_CPFontSystemFacePlaceholderd;2;-1S;20;{{1, 1}, {349, 184}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;210E;E;S;21;{{1, 185}, {349, 17}}S;19;{{0, 0}, {349, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;41E;E;E;S;22;{{224, 179}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewS;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;211E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;211E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;214E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;2;92E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;215E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;216E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;S;5;ValueS;9;textfieldS;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;4;nameD;K;6;CP$UIDd;3;217E;K;12;defaultValueD;K;6;CP$UIDd;3;218E;K;6;valuesD;K;6;CP$UIDd;3;219E;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;202E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;220E;E;d;4;3072S;8;compare:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;221E;E;E;S;3;KeyD;K;6;$classD;K;6;CP$UIDd;3;200E;K;4;nameD;K;6;CP$UIDd;3;217E;K;12;defaultValueD;K;6;CP$UIDd;3;218E;K;6;valuesD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;3;202E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;211E;E;E;d;1;1f;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;213E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;141E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;191E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;141E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;223E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;E;S;13;Lucida Granded;2;11S;4;fontD;K;6;$classD;K;6;CP$UIDd;2;92E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;181E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;224E;K;6;normalD;K;6;CP$UIDd;3;225E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;213E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;151E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;191E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;151E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;223E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;3;163E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;224E;K;6;normalD;K;6;CP$UIDd;3;225E;E;E;d;2;18D;K;6;$classD;K;6;CP$UIDd;2;92E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;226E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;227E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;99E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;227E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;99E;E;S;17;Arial, sans-serifd;2;12E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.xib b/Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.xib new file mode 100644 index 000000000..fe2363629 --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/Resources/MainMenu.xib @@ -0,0 +1,794 @@ + + + + 1060 + 10K549 + 788 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 788 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{240, 442}, {480, 270}} + 544735232 + Window + NSWindow + + {1.79769e+308, 1.79769e+308} + + + 256 + + YES + + + 268 + + YES + + + 2304 + + YES + + + 256 + {349, 184} + + YES + + + 256 + {349, 17} + + + + + + -2147483392 + {{224, 0}, {16, 17}} + + + + YES + + key + 101 + 40 + 1000 + + 75628096 + 2048 + Key + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337772096 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + key + YES + compare: + + + + value + 242 + 40 + 1000 + + 75628096 + 2048 + Value + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + value + YES + compare: + + + + 3 + 2 + + 3 + MQA + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -700448768 + + + 4 + 15 + 0 + YES + 0 + + + {{1, 17}, {349, 184}} + + + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + _doScroller: + 37 + 0.1947367936372757 + + + + -2147483392 + {{1, 119}, {223, 15}} + + 1 + + _doScroller: + 0.57142859697341919 + + + + 2304 + + YES + + + {{1, 0}, {349, 17}} + + + + + 4 + + + + {{56, 48}, {351, 202}} + + + 562 + + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 268 + {{50, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Add + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{146, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Remove + + + -2038284033 + 129 + + + 200 + 25 + + + + {480, 270} + + + {{0, 0}, {1440, 878}} + {1.79769e+308, 1.79769e+308} + + + + YES + key + value + + YES + YES + YES + YES + YES + YES + + YES + + key + YES + compare: + + + YES + YES + key + value + + YES + Key1 + Key2 + Key3 + + + + AppController + + + + + YES + + + delegate + + + + 15 + + + + dictionaryController + + + + 16 + + + + add: + + + + 21 + + + + enabled: canRemove + + + + + + enabled: canRemove + enabled + canRemove + 2 + + + 33 + + + + enabled: canAdd + + + + + + enabled: canAdd + enabled + canAdd + 2 + + + 35 + + + + remove: + + + + 36 + + + + selectionIndexes: selectionIndexes + + + + + + selectionIndexes: selectionIndexes + selectionIndexes + selectionIndexes + 2 + + + 44 + + + + sortDescriptors: sortDescriptors + + + + + + sortDescriptors: sortDescriptors + sortDescriptors + sortDescriptors + 2 + + + 45 + + + + value: arrangedObjects.value + + + + + + value: arrangedObjects.value + value + arrangedObjects.value + + NSCreatesSortDescriptor + + + 2 + + + 55 + + + + value: arrangedObjects.key + + + + + + value: arrangedObjects.key + value + arrangedObjects.key + + NSCreatesSortDescriptor + + + 2 + + + 56 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + + 2 + + + YES + + + + + + + + 3 + + + + + 4 + + + YES + + + + + + + + + 5 + + + + + 6 + + + + + 7 + + + YES + + + + + + + 8 + + + + + 9 + + + YES + + + + + + 10 + + + YES + + + + + + 11 + + + + + 12 + + + + + 14 + + + + + 19 + + + YES + + + + + + 20 + + + + + 29 + + + YES + + + + + + 30 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.IBWindowTemplateEditedContentRect + 1.NSWindowTemplate.visibleAtLaunch + 1.WindowOrigin + 1.editorWindowContentRectSynchronizationRect + 10.IBPluginDependency + 11.IBPluginDependency + 12.IBPluginDependency + 14.IBPluginDependency + 19.IBPluginDependency + 2.IBPluginDependency + 20.IBPluginDependency + 29.IBPluginDependency + 3.IBPluginDependency + 30.IBPluginDependency + 4.IBPluginDependency + 5.IBPluginDependency + 6.IBPluginDependency + 7.IBPluginDependency + 8.IBPluginDependency + 9.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{240, 442}, {480, 270}} + com.apple.InterfaceBuilder.CocoaPlugin + {{240, 442}, {480, 270}} + + {196, 240} + {{357, 418}, {480, 270}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 56 + + + + YES + + AppController + NSObject + + updateOrReloadContent: + id + + + updateOrReloadContent: + + updateOrReloadContent: + id + + + + YES + + YES + KeyPathPopup + dictionaryController + lengthField + locationField + + + YES + NSPopUpButton + NSDictionaryController + NSTextField + NSTextField + + + + YES + + YES + KeyPathPopup + dictionaryController + lengthField + locationField + + + YES + + KeyPathPopup + NSPopUpButton + + + dictionaryController + NSDictionaryController + + + lengthField + NSTextField + + + locationField + NSTextField + + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + + 3 + + diff --git a/Tests/Manual/CPDictionaryControllerTest/Resources/spinner.gif b/Tests/Manual/CPDictionaryControllerTest/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..a5e705f6cbdf914e5e714c35a8dfef807f19e3c2 GIT binary patch literal 1434 zcmZvbdrVVj7{t$-UNOu86#VHu^|s&3rWfwHBbPG_8{SrlB{Tv1uvvj4t6zP!)#d!Ogc zP^62J^$0+~?-ZcXXpBaq%jFsw8L`=H2?+@R02Yg-*Xw;gACBV^i3CMahr>Z667S!? zk3LDe>VLEsU;sWo$Py~o!gWuaIAnaG3Sv``&tvc+8DJO!| zt4fcbQ8tW}a&xZfgtQ9BnFYLvGG|PvCNlg&uh@Q^w9Pz}+I^hCj`vu9JQADPqdkyk zR40xycD9geUgJu1e;$L`Fpa)?Wl-2&6hO@U*KrPqK(I1H=1h?2fce}6GhhP1oBZC# z1e@gt-qFa6lZrl%s1>bdxg*W)Ebt__O(4sj6(*2X@ciUClwHH#U(NRM7XAjS z+scDZ32J*PCoslsgS~#ZlCCGo`r>S6F)Ghw5wVlqHioFaw?ucD(XoLJ0j;28oPoPV z9A}dR$0SKn>uExfkl#j09o;v$BZ909R=*p{ATNq8BJW;YduX2QMOU7$a$_L5e!G^g zpbkx5G4&FZ%7m14rTN}5YB(;x7$5XOc_hf3E|Hw$TVg)P#qf~}nOn03uqsp>UG>vi zWThIoO)-1Q#@u#O;fMC#WAf@Xj70-0g9YZ;dA$HH1fW1q=9-c>>_yA0S$7M*5?}vi z)8MU`Q%P!7sEBBnd$DrKgFQ2?O%6LpdaC%F8Pn-)EC2t=j~ zoaLamla$FX!GQqWi!%s>sj-#5SJX0IF!TP=r21Z}s)k#btN0?=I7uD9C)Gb$fZ#sm zaVq7g`LwZ%PfNpN^_N-IGLHj@AV`s#4&va7_{Hw63G6BkSGXHdogTZ%QOiRb bDpZ@qYcJKM>x%b%*HX74c8MnqfHi*u-bC?g literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPDictionaryControllerTest/index-debug.html b/Tests/Manual/CPDictionaryControllerTest/index-debug.html new file mode 100644 index 000000000..63a6fb2c5 --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + CPDictionaryControllerTest + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDictionaryControllerTest/index.html b/Tests/Manual/CPDictionaryControllerTest/index.html new file mode 100644 index 000000000..6c9b5c510 --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + CPDictionaryControllerTest + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDictionaryControllerTest/main.j b/Tests/Manual/CPDictionaryControllerTest/main.j new file mode 100644 index 000000000..8e8418f15 --- /dev/null +++ b/Tests/Manual/CPDictionaryControllerTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPDictionaryControllerTest + * + * Created by Blair Duncan on February 17, 2013. + * Copyright 2013, SGL Studio, BBDO Toronto All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 227d47fbd..8b80ebb6a 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -36,6 +36,7 @@ @import "NSCustomObject.j" @import "NSCustomResource.j" @import "NSCustomView.j" +@import "NSDictionaryController.j" @import "NSEvent.j" @import "NSFont.j" @import "NSIBObjectData.j" diff --git a/Tools/nib2cib/NSDictionaryController.j b/Tools/nib2cib/NSDictionaryController.j new file mode 100644 index 000000000..ab15479d1 --- /dev/null +++ b/Tools/nib2cib/NSDictionaryController.j @@ -0,0 +1,54 @@ +/* + * NSDictionaryController.j + * nib2cib + * + * Created by Blair Duncan on February 17, 2013. + * Copyright 2013, SGL Studio, BBDO Toronto All rights reserved. + * + * 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 CPDictionaryController (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + self = [super NS_initWithCoder:aCoder]; + + if (self) + { + } + + return self; +} + +@end + +@implementation NSDictionaryController : CPDictionaryController +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPDictionaryController class]; +} + +@end