diff --git a/AppKit/CPAccordionView.j b/AppKit/CPAccordionView.j index c3e4b4f52..e043677ba 100644 --- a/AppKit/CPAccordionView.j +++ b/AppKit/CPAccordionView.j @@ -414,3 +414,85 @@ var secondItem = [[CPAccordionViewItem alloc] initWithIdentifier:@"secondSection } @end + + +var CPAccordionViewItemIdentifierKey = @"CPAccordionViewItemIdentifierKey", + CPAccordionViewItemViewKey = @"CPAccordionViewItemViewKey", + CPAccordionViewItemLabelKey = @"CPAccordionViewItemLabelKey"; + +@implementation CPAccordionViewItem (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super init]; + + if (self) + { + _identifier = [aCoder decodeObjectForKey:CPAccordionViewItemIdentifierKey]; + _view = [aCoder decodeObjectForKey:CPAccordionViewItemViewKey]; + _label = [aCoder decodeObjectForKey:CPAccordionViewItemLabelKey]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_identifier forKey:CPAccordionViewItemIdentifierKey]; + [aCoder encodeObject:_view forKey:CPAccordionViewItemViewKey]; + [aCoder encodeObject:_label forKey:CPAccordionViewItemLabelKey]; +} + +@end + +var CPAccordionViewItemsKey = @"CPAccordionViewItemsKey", + CPAccordionViewItemHeaderPrototypeKey = @"CPAccordionViewItemHeaderPrototypeKey", + CPAccordionViewExpandedItemIndexesKey = @"CPAccordionViewExpandedItemIndexesKey"; + +@implementation CPAccordionView (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super initWithCoder:aCoder]; + + if (self) + { + _items = []; + _itemViews = []; + _expandedItemIndexes = [CPIndexSet indexSet]; + + [self setItemHeaderPrototype:[aCoder decodeObjectForKey:CPAccordionViewItemHeaderPrototypeKey]]; + + var items = [aCoder decodeObjectForKey:CPAccordionViewItemsKey], + expandedItemIndexes = [aCoder decodeObjectForKey:CPAccordionViewExpandedItemIndexesKey]; + + items.forEach(function(anItem) + { + [self addItem:anItem]; + }); + + items.forEach(function(anItem, anIndex) + { + if (![expandedItemIndexes containsIndex:anIndex]) + [self collapseItemAtIndex:anIndex]; + }); + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + // The item views are recreated on decode from the items, so they are not encoded. + var subviews = [self subviews]; + + [_itemViews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [super encodeWithCoder:aCoder]; + [self setSubviews:subviews]; + + [aCoder encodeObject:_items forKey:CPAccordionViewItemsKey]; + [aCoder encodeObject:_itemHeaderPrototype forKey:CPAccordionViewItemHeaderPrototypeKey]; + [aCoder encodeObject:_expandedItemIndexes forKey:CPAccordionViewExpandedItemIndexesKey]; +} + +@end diff --git a/AppKit/CPAppearance.j b/AppKit/CPAppearance.j index d0dcc9ce0..208c429ce 100644 --- a/AppKit/CPAppearance.j +++ b/AppKit/CPAppearance.j @@ -125,6 +125,11 @@ CPThemeStateAppearanceVibrantDark = CPThemeState("appearance-vibrant-dark") // MARK: - // MARK: Implementation +- (CPString)name +{ + return _name; +} + - (BOOL)isEqual:(id)anObject { if (![anObject isKindOfClass:CPAppearance]) diff --git a/AppKit/CPBox.j b/AppKit/CPBox.j index 5a94fb70d..fffb422fe 100644 --- a/AppKit/CPBox.j +++ b/AppKit/CPBox.j @@ -869,6 +869,11 @@ var CPBoxTypeKey = @"CPBoxTypeKey", // We're coming from elsewhere _titleView = [aCoder decodeObjectForKey:CPBoxTitleViewKey]; + + // The archiver encodes these views after encodeWithCoder: returns, when they + // are subviews again. They are added back below. + _boxView._superview = nil; + _titleView._superview = nil; } _contentView = [aCoder decodeObjectForKey:CPBoxContentViewKey]; @@ -877,7 +882,9 @@ var CPBoxTypeKey = @"CPBoxTypeKey", // FIXME: (see encodeWithCoder to understand why this is not possible) // FIXME: we fix this by hand. This is horrible so please find a structural solution ! - if (_contentView) + var contentViewNeedsBoxView = _contentView && [_contentView superview] !== _boxView; + + if (contentViewNeedsBoxView) _contentView._superview = nil; [_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; @@ -885,7 +892,7 @@ var CPBoxTypeKey = @"CPBoxTypeKey", [_boxView setAutoresizesSubviews:YES]; [self setAutoresizesSubviews:YES]; - if (_contentView) + if (contentViewNeedsBoxView) [_boxView setSubviews:@[_contentView]]; [self addSubview:_boxView]; @@ -945,9 +952,9 @@ var CPBoxTypeKey = @"CPBoxTypeKey", [aCoder encodeInt:_borderType forKey:CPBoxBorderTypeKey]; [aCoder encodeObject:_title forKey:CPBoxTitleKey]; [aCoder encodeInt:_titlePosition forKey:CPBoxTitlePositionKey]; - [aCoder encodeConditionalObject:_contentView forKey:CPBoxContentViewKey]; - [aCoder encodeConditionalObject:_titleView forKey:CPBoxTitleViewKey]; - [aCoder encodeConditionalObject:_boxView forKey:CPBoxBoxViewKey]; + [aCoder encodeObject:_contentView forKey:CPBoxContentViewKey]; + [aCoder encodeObject:_titleView forKey:CPBoxTitleViewKey]; + [aCoder encodeObject:_boxView forKey:CPBoxBoxViewKey]; } @end diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 4af9feee2..0c1e9f076 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -202,6 +202,8 @@ CPButtonImageOffset = 3.0; [self setBezelStyle:CPRoundRectBezelStyle]; [self setBordered:YES]; + _value = CPOffState; + [self _init]; } diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 44aba3384..e32f17a5f 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -390,6 +390,11 @@ var CPButtonBarHasResizeControlKey = @"CPButtonBarHasResizeControlKey", _rightButtons = [aCoder decodeObjectForKey:CPButtonBarRightButtonsKey] || []; _hasResizeControl = [aCoder decodeBoolForKey:CPButtonBarHasResizeControlKey]; _resizeControlIsLeftAligned = [aCoder decodeBoolForKey:CPButtonBarResizeControlIsLeftAlignedKey]; + + var buttons = [_buttons arrayByAddingObjectsFromArray:_rightButtons]; + + for (var i = [buttons count] - 1; i >= 0; i--) + [buttons[i] addObserver:self forKeyPath:@"hidden" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:nil]; } return self; diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 79f1cad5d..6a94ef52b 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -1581,7 +1581,9 @@ function SHOULD_SELECT_ITEM(anOutlineView, anItem) _retargedChildIndex = theIndex; _shouldRetargetChildIndex = YES; - // set CPTableView's _retargetedDropRow based on retargetedItem and retargetedChildIndex + // set CPTableView's _retargetedDropOperation and _retargetedDropRow based on retargetedItem and retargetedChildIndex + _retargetedDropOperation = (_retargedChildIndex === CPOutlineViewDropOnItemIndex) ? CPTableViewDropOn : CPTableViewDropAbove; + var retargetedItemInfo = (_retargetedItem != nil) ? _itemInfosForItems[[_retargetedItem UID]] : _rootItemInfo; if (_retargedChildIndex === [retargetedItemInfo.children count]) @@ -2330,12 +2332,17 @@ var CPOutlineViewIndentationPerLevelKey = @"CPOutlineViewIndentationPerLevelKey" _outlineTableColumn = [aCoder decodeObjectForKey:CPOutlineViewOutlineTableColumnKey]; _indentationPerLevel = [aCoder decodeFloatForKey:CPOutlineViewIndentationPerLevelKey]; - _outlineViewDataSource = [aCoder decodeObjectForKey:CPOutlineViewDataSourceKey]; - _outlineViewDelegate = [aCoder decodeObjectForKey:CPOutlineViewDelegateKey]; - [super setDataSource:self]; [super setDelegate:self]; + // The setters record which optional methods each object implements. + var dataSource = [aCoder decodeObjectForKey:CPOutlineViewDataSourceKey]; + + if (dataSource) + [self setDataSource:dataSource]; + + [self setDelegate:[aCoder decodeObjectForKey:CPOutlineViewDelegateKey]]; + [self _updateIsViewBased]; } diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index d5d412466..b2eb99c0d 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -79,6 +79,9 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); if (self) { + // The value of a pop up button is its selected index, and not a button state. + _value = nil; + [self selectItemAtIndex:CPNotFound]; _preferredEdge = CPMaxYEdge; diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index 28bd5cb45..271b57bdd 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -464,6 +464,12 @@ var CPAutosavedRecentsChangedNotification = @"CPAutosavedRecentsChangedNotificat return [super isOpaque] && [_cancelButton isOpaque] && [_searchButton isOpaque]; } +- (void)setObjectValue:(id)anObject +{ + [super setObjectValue:anObject]; + [self _updateCancelButtonVisibility]; +} + - (void)_updateCancelButtonVisibility { [_cancelButton setHidden:([[self stringValue] length] === 0)]; diff --git a/AppKit/CPShadow.j b/AppKit/CPShadow.j index 06656f2c6..6733d16fe 100644 --- a/AppKit/CPShadow.j +++ b/AppKit/CPShadow.j @@ -52,6 +52,14 @@ } /* @ignore */ +/*! + Initializes a shadow with no offset or blur, and a black color at one third opacity. +*/ +- (id)init +{ + return [self _initWithOffset:CGSizeMakeZero() blurRadius:0.0 color:[CPColor colorWithWhite:0.0 alpha:1.0 / 3.0]]; +} + - (id)_initWithOffset:(CGSize)anOffset blurRadius:(float)aBlurRadius color:(CPColor)aColor { self = [super init]; @@ -82,3 +90,25 @@ } @end + +var CPShadowOffsetKey = @"CPShadowOffsetKey", + CPShadowBlurRadiusKey = @"CPShadowBlurRadiusKey", + CPShadowColorKey = @"CPShadowColorKey"; + +@implementation CPShadow (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self _initWithOffset:[aCoder decodeSizeForKey:CPShadowOffsetKey] + blurRadius:[aCoder decodeFloatForKey:CPShadowBlurRadiusKey] + color:[aCoder decodeObjectForKey:CPShadowColorKey]]; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeSize:_offset forKey:CPShadowOffsetKey]; + [aCoder encodeFloat:_blurRadius forKey:CPShadowBlurRadiusKey]; + [aCoder encodeObject:_color forKey:CPShadowColorKey]; +} + +@end diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index 18fee079b..e42ba4ead 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -221,7 +221,10 @@ var CPThemeStatesForSplitViewDivider = @[@"dummy one as CPSplitViewDividerStyle if (_dividerStyle === CPSplitViewDividerStyleThin) return [self currentValueForThemeAttribute:@"pane-divider-color"]; - return [CPColor colorWithPatternImage:[self currentValueForThemeAttribute:(_isVertical ? @"vertical-divider-color" : @"horizontal-divider-color")]]; + // A theme may define no divider image, and a pattern needs one. + var image = [self currentValueForThemeAttribute:(_isVertical ? @"vertical-divider-color" : @"horizontal-divider-color")]; + + return image ? [CPColor colorWithPatternImage:image] : nil; } /*! diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j index 81a41d786..798476446 100644 --- a/AppKit/CPStepper.j +++ b/AppKit/CPStepper.j @@ -322,6 +322,8 @@ var CPStepperMinValue = @"CPStepperMinValue", _valueWraps = [aCoder decodeBoolForKey:CPStepperValueWraps]; _autorepeat = [aCoder decodeBoolForKey:CPStepperAutorepeat]; + // The archive holds the buttons as subviews, and _init creates them again. + [self setSubviews:@[]]; [self _init]; [self setEnabled:[self isEnabled]]; } diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 44cdccecb..bd9857485 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -826,9 +826,14 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", var items = [aCoder decodeObjectForKey:CPTabViewItemsKey] || [CPArray array]; [self _insertTabViewItems:items atIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [items count])] canUpdateSelectedTab:NO]; - [self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]]; + // Inserting the items selected the first one. This is done before there is a + // delegate, because decoding is not a selection made by the user. + var selectedItem = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey]; - _selectedTabViewItem = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey]; + if (selectedItem) + [self _selectTabViewItemAtIndex:[self indexOfTabViewItem:selectedItem]]; + + [self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]]; _type = [aCoder decodeIntForKey:CPTabViewTypeKey]; } @@ -866,15 +871,17 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", - (void)encodeWithCoder:(CPCoder)aCoder { - // Don't bother to encode the CPBox. We will recreate it on decode and its content view is already + // Don't bother to encode the CPBox or the tabs. We will recreate them on decode and its content view is already // stored by the tab view item. Not encoding _box makes the resulting archive smaller and reduces // the surface for decoding bugs (of which we've had many in tab view). var subviews = [self subviews]; [_box removeFromSuperview]; + [_tabs removeFromSuperview]; [super encodeWithCoder:aCoder]; [self setSubviews:subviews]; - [aCoder encodeObject:_items forKey:CPTabViewItemsKey]; + // nib2cib stores its items in _items. Otherwise the items are the segments of _tabs. + [aCoder encodeObject:_items || [self items] forKey:CPTabViewItemsKey]; [aCoder encodeConditionalObject:_selectedTabViewItem forKey:CPTabViewSelectedItemKey]; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 41f3fdce0..9d6a12daf 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -6269,14 +6269,15 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", _headerView = [aCoder decodeObjectForKey:CPTableViewHeaderViewKey]; _cornerView = [aCoder decodeObjectForKey:CPTableViewCornerViewKey]; - [self setDataSource:[aCoder decodeObjectForKey:CPTableViewDataSourceKey]]; - [self setDelegate:[aCoder decodeObjectForKey:CPTableViewDelegateKey]]; - [self _init]; if ([aCoder containsValueForKey:CPTableViewArchivedReusableViewsKey]) _archivedDataViews = [aCoder decodeObjectForKey:CPTableViewArchivedReusableViewsKey]; + // Setting the data source reloads the table, which needs the state set by _init. + [self setDataSource:[aCoder decodeObjectForKey:CPTableViewDataSourceKey]]; + [self setDelegate:[aCoder decodeObjectForKey:CPTableViewDelegateKey]]; + [self _updateIsViewBased]; [self viewWillMoveToSuperview:[self superview]]; diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 5558ee60a..0152a7389 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -2273,7 +2273,8 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", CPTextFieldPlaceholderStringKey = "CPTextFieldPlaceholderStringKey", CPTextFieldUsesSingleLineMode = "CPTextFieldUsesSingleLineMode", CPTextFieldWraps = "CPTextFieldWraps", - CPTextFieldScrolls = "CPTextFieldScrolls"; + CPTextFieldScrolls = "CPTextFieldScrolls", + CPTextFieldDelegateKey = "CPTextFieldDelegateKey"; @implementation CPTextField (CPCoding) @@ -2303,6 +2304,8 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [self _setUsesSingleLineMode:[aCoder decodeBoolForKey:CPTextFieldUsesSingleLineMode]]; [self _setWraps:[aCoder decodeBoolForKey:CPTextFieldWraps]]; [self _setScrolls:[aCoder decodeBoolForKey:CPTextFieldScrolls]]; + + [self setDelegate:[aCoder decodeObjectForKey:CPTextFieldDelegateKey]]; [self updateTrackingAreas]; } @@ -2332,6 +2335,8 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [aCoder encodeBool:_usesSingleLineMode forKey:CPTextFieldUsesSingleLineMode]; [aCoder encodeBool:_wraps forKey:CPTextFieldWraps]; [aCoder encodeBool:_scrolls forKey:CPTextFieldScrolls]; + + [aCoder encodeConditionalObject:_delegate forKey:CPTextFieldDelegateKey]; } @end diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 30fb5b58a..e40ccba0a 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1741,8 +1741,17 @@ var CPTokenFieldTokenizingCharacterSetKey = "CPTokenFieldTokenizingCharacterSe _completionDelay = [aCoder decodeDoubleForKey:CPTokenFieldCompletionDelayKey] || [[self class] defaultCompletionDelay]; _buttonType = [aCoder decodeIntForKey:CPTokenFieldButtonTypeKey] || CPTokenFieldDisclosureButtonType; + // The archive holds the token scroll view as a subview, and _init creates it again. + [self setSubviews:@[]]; [self _init]; + // The tokens were created by setObjectValue: before the scroll view existed. + var contentView = [_tokenScrollView documentView], + tokens = [self _tokens]; + + for (var i = 0, count = [tokens count]; i < count; i++) + [contentView addSubview:tokens[i]]; + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } diff --git a/AppKit/CPVisualEffectView.j b/AppKit/CPVisualEffectView.j index b5eb5e05f..d19c85440 100644 --- a/AppKit/CPVisualEffectView.j +++ b/AppKit/CPVisualEffectView.j @@ -121,7 +121,6 @@ CPVisualEffectStateInactive = 2; - (void)_setEffectEnabled:(BOOL)shouldEnable { var dark = [[self appearance] isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]], - prop = CPBrowserStyleProperty("backdrop-filter"), color = (dark ? [CPColor colorWithHexString:@"1e1e1e"] : [CPColor whiteColor]), finalColor = shouldEnable ? [color colorWithAlphaComponent:0.6] : color; @@ -129,7 +128,7 @@ CPVisualEffectStateInactive = 2; if (CPDOMAvailable) { - self._DOMElement.style[prop] = shouldEnable ? "blur(30px)" : nil; + self._DOMElement.style[CPBrowserStyleProperty("backdrop-filter")] = shouldEnable ? "blur(30px)" : nil; } } diff --git a/AppKit/Jakefile b/AppKit/Jakefile index 9836e39bf..fb989a80e 100644 --- a/AppKit/Jakefile +++ b/AppKit/Jakefile @@ -63,3 +63,4 @@ task ("Theme", [$BUILD_CJS_CAPPUCCINO_APPKIT], function() task ("build", ["AppKit", $BUILD_CJS_CAPPUCCINO_APPKIT, "Theme"]); CLOBBER.include($BUILD_CJS_CAPPUCCINO_APPKIT); +CLOBBER.include(path.join(__dirname, "Build")); diff --git a/Foundation/CPMapTable.j b/Foundation/CPMapTable.j index bc853e78c..753a3f71b 100644 --- a/Foundation/CPMapTable.j +++ b/Foundation/CPMapTable.j @@ -137,3 +137,34 @@ } @end + +var CPMapTableKeysKey = @"CPMapTableKeysKey", + CPMapTableObjectsKey = @"CPMapTableObjectsKey"; + +@implementation CPMapTable (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [self init]; + + if (self) + { + var keys = [aCoder decodeObjectForKey:CPMapTableKeysKey], + objects = [aCoder decodeObjectForKey:CPMapTableObjectsKey]; + + keys.forEach(function(aKey, anIndex) + { + [self setObject:objects[anIndex] forKey:aKey]; + }); + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:Array.from(_map.keys()) forKey:CPMapTableKeysKey]; + [aCoder encodeObject:Array.from(_map.values()) forKey:CPMapTableObjectsKey]; +} + +@end diff --git a/Foundation/CPPredicate/_CPPredicate.j b/Foundation/CPPredicate/_CPPredicate.j index cf1628990..bd47c2844 100644 --- a/Foundation/CPPredicate/_CPPredicate.j +++ b/Foundation/CPPredicate/_CPPredicate.j @@ -526,7 +526,21 @@ type = CPBetweenPredicateOperatorType; } else - CPRaiseParseError(self, @"comparison predicate"); + { + /* + A selector such as isKindOfClass: is a custom comparison operator. As in + Cocoa, a custom selector comparison has no modifier. + */ + var selector = [self parseCustomSelector]; + + if (!selector || modifier !== CPDirectPredicateModifier) + CPRaiseParseError(self, @"comparison predicate"); + + right = [self parseExpression]; + p = [CPComparisonPredicate predicateWithLeftExpression:left rightExpression:right customSelector:selector]; + + return negate ? [CPCompoundPredicate notPredicateWithSubpredicate:p] : p; + } if ([self scanString:@"[cd]" intoString:NULL]) { @@ -552,6 +566,23 @@ return negate ? [CPCompoundPredicate notPredicateWithSubpredicate:p]:p; } +/* + Scans a one-argument selector, such as isKindOfClass:, and returns it. Returns nil + and leaves the scan location unchanged when there is none. +*/ +- (SEL)parseCustomSelector +{ + var location = [self scanLocation], + name = [self scanCharactersFromSet:[CPCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"]]; + + if (name && [self scanString:@":" intoString:NULL]) + return CPSelectorFromString(name + ":"); + + [self setScanLocation:location]; + + return nil; +} + - (CPExpression)parseExpression { return [self parseBinaryExpression]; diff --git a/Foundation/CPTimeZone.j b/Foundation/CPTimeZone.j index f02b07fdb..962189c3c 100644 --- a/Foundation/CPTimeZone.j +++ b/Foundation/CPTimeZone.j @@ -320,7 +320,7 @@ function _systemTimeZoneFromRuntime() { CPData _data @accessors(property=data, readonly); CPInteger _secondsFromGMT @accessors(property=secondFromGMT, readonly); - CPString _abbreviation @accessors(property=abbreviation, readonly); + CPString _abbreviation; CPString _name @accessors(property=name, readonly); // Set only for zones created with +timeZoneForSecondsFromGMT:, which per @@ -738,6 +738,14 @@ function _systemTimeZoneFromRuntime() Returns nil if the date is nil @return the abbreviation */ +/*! + Returns the abbreviation for the current date, as abbreviationForDate: does. +*/ +- (CPString)abbreviation +{ + return [self abbreviationForDate:[CPDate date]]; +} + - (CPString)abbreviationForDate:(CPDate)date { if (!date) @@ -856,7 +864,7 @@ function _systemTimeZoneFromRuntime() */ - (CPString)description { - return [CPString stringWithFormat:@"%s (%s) offset %i", _name, _abbreviation, [self secondsFromGMT]]; + return [CPString stringWithFormat:@"%s (%s) offset %i", _name, [self abbreviation], [self secondsFromGMT]]; } diff --git a/Foundation/Jakefile b/Foundation/Jakefile index 19ed1ed2c..097212738 100644 --- a/Foundation/Jakefile +++ b/Foundation/Jakefile @@ -70,3 +70,4 @@ filedir ($BUILD_CJS_FOUNDATION, ["Foundation"], function() task ("build", ["Foundation", $BUILD_CJS_FOUNDATION]); CLOBBER.include($BUILD_CJS_FOUNDATION); +CLOBBER.include(path.join(__dirname, "Build")); diff --git a/Tests/AppKit/CPBoxTest.j b/Tests/AppKit/CPBoxTest.j new file mode 100644 index 000000000..47210f011 --- /dev/null +++ b/Tests/AppKit/CPBoxTest.j @@ -0,0 +1,114 @@ +/* + * CPBoxTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + A box that is archived and read back must keep its content view, its title and + its internal views, and the content view must remain inside the box. +*/ +@implementation CPBoxTest : OJTestCase +{ + CPBox box; + CPView contentView; + Function logWarning; + CPArray warnings; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + warnings = []; + logWarning = CPLog.warn; + + CPLog.warn = function(aMessage) + { + warnings.push(String(aMessage)); + }; + + box = [[CPBox alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 100.0)]; + contentView = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 40.0)]; + + [contentView addSubview:[[CPView alloc] initWithFrame:CGRectMake(3.0, 5.0, 20.0, 10.0)]]; + [box setContentView:contentView]; +} + +- (void)tearDown +{ + CPLog.warn = logWarning; +} + +- (CPBox)archivedBox +{ + return [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:box]]; +} + +- (void)testArchivingKeepsTheContentView +{ + var decodedContentView = [[self archivedBox] contentView]; + + [self assertNotNull:decodedContentView]; + [self assert:1 equals:[[decodedContentView subviews] count]]; + [self assertTrue:CGRectEqualToRect([contentView frame], [decodedContentView frame])]; +} + +- (void)testArchivingKeepsTheContentViewInsideTheBox +{ + var decodedBox = [self archivedBox], + boxView = [[decodedBox contentView] superview]; + + [self assertNotNull:boxView]; + [self assert:decodedBox equals:[boxView superview]]; + [self assertTrue:[[decodedBox subviews] containsObject:boxView]]; +} + +- (void)testArchivingLeavesTheBoxUnchanged +{ + var subviews = [box subviews]; + + [self archivedBox]; + + [self assert:subviews equals:[box subviews]]; + [self assert:contentView equals:[box contentView]]; +} + +- (void)testArchivingKeepsTheTitle +{ + [box setTitle:@"Title"]; + [box setTitlePosition:CPAtTop]; + + var decodedBox = [self archivedBox]; + + [self assert:@"Title" equals:[decodedBox title]]; + [self assert:CPAtTop equals:[decodedBox titlePosition]]; +} + +- (void)testUntitledBoxDecodesWithoutAWarning +{ + [self archivedBox]; + + [self assert:[] equals:warnings]; +} + +@end diff --git a/Tests/AppKit/CPButtonBarTest.j b/Tests/AppKit/CPButtonBarTest.j new file mode 100644 index 000000000..8054d3225 --- /dev/null +++ b/Tests/AppKit/CPButtonBarTest.j @@ -0,0 +1,152 @@ +/* + * CPButtonBarTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + CPButtonBar has no Cocoa counterpart. It is the strip of add, remove and action + buttons that applications place below a table or outline view, and those buttons + are often the only way a person can change the list above them. + + These tests run with no theme loaded. A button bar has to work whatever a theme + chooses to define, so the class itself must supply usable buttons. +*/ +@implementation CPButtonBarTest : OJTestCase +{ + CPWindow theWindow; + CPButtonBar buttonBar; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 400.0, 400.0) styleMask:CPWindowNotSizable]; + + buttonBar = [[CPButtonBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 26.0)]; + [[theWindow contentView] addSubview:buttonBar]; +} + +- (void)assertButtonHasStandardSize:(CPView)aButton +{ + [self assert:35.0 equals:CGRectGetWidth([aButton frame])]; + [self assert:25.0 equals:CGRectGetHeight([aButton frame])]; +} + +- (void)testPlusButtonHasTheStandardSize +{ + [self assertButtonHasStandardSize:[CPButtonBar plusButton]]; +} + +- (void)testMinusButtonHasTheStandardSize +{ + [self assertButtonHasStandardSize:[CPButtonBar minusButton]]; +} + +- (void)testActionPopupButtonHasTheStandardSize +{ + [self assertButtonHasStandardSize:[CPButtonBar actionPopupButton]]; +} + +/* + A button must take up space in the bar and stay inside it, or a person cannot + click it. The first button starts one point before the bar, so that its border + falls outside the bar's edge. +*/ +- (void)testLayoutPlacesEachButtonInsideTheBar +{ + var buttons = [[CPButtonBar plusButton], [CPButtonBar minusButton], [CPButtonBar actionPopupButton]]; + + [buttonBar setButtons:buttons]; + [buttonBar layoutSubviews]; + + buttons.forEach(function(aButton) + { + [self assert:buttonBar equals:[aButton superview]]; + [self assertTrue:CGRectGetWidth([aButton frame]) > 0.0]; + [self assertTrue:CGRectGetMinX([aButton frame]) >= -1.0]; + [self assertTrue:CGRectGetMaxX([aButton frame]) <= CGRectGetWidth([buttonBar bounds])]; + }); +} + +/* + Adjacent buttons share a one-point border, and they overlap by no more than that. +*/ +- (void)testLayoutPlacesButtonsInOrderSharingABorder +{ + var plusButton = [CPButtonBar plusButton], + minusButton = [CPButtonBar minusButton]; + + [buttonBar setButtons:[plusButton, minusButton]]; + [buttonBar layoutSubviews]; + + [self assert:CGRectGetMaxX([plusButton frame]) - 1.0 equals:CGRectGetMinX([minusButton frame])]; +} + +/* + A hidden button leaves no gap, and the buttons after it move up. +*/ +- (void)testHidingAButtonClosesTheGap +{ + var plusButton = [CPButtonBar plusButton], + minusButton = [CPButtonBar minusButton]; + + [buttonBar setButtons:[plusButton, minusButton]]; + [buttonBar layoutSubviews]; + + var firstOrigin = CGRectGetMinX([plusButton frame]); + + [plusButton setHidden:YES]; + [buttonBar layoutSubviews]; + + [self assert:firstOrigin equals:CGRectGetMinX([minusButton frame])]; +} + +- (void)testRightButtonsAreAlignedToTheRightEdge +{ + var button = [CPButtonBar plusButton]; + + [buttonBar setRightButtons:[button]]; + [buttonBar layoutSubviews]; + + [self assert:buttonBar equals:[button superview]]; + [self assertTrue:CGRectGetWidth([button frame]) > 0.0]; + [self assertTrue:CGRectGetMaxX([button frame]) >= CGRectGetWidth([buttonBar bounds]) - 1.0]; +} + +/* + Applications add their own buttons to a bar, so any button is acceptable, not + only those the class creates. +*/ +- (void)testAnApplicationButtonCanBeAdded +{ + var button = [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 35.0, 25.0)]; + + [buttonBar setButtons:[button]]; + [buttonBar layoutSubviews]; + + [self assert:[button] equals:[buttonBar buttons]]; + [self assert:buttonBar equals:[button superview]]; +} + +@end diff --git a/Tests/AppKit/CPButtonTest.j b/Tests/AppKit/CPButtonTest.j index 9abf42e27..ecacb5049 100644 --- a/Tests/AppKit/CPButtonTest.j +++ b/Tests/AppKit/CPButtonTest.j @@ -104,6 +104,12 @@ [self assertTrue:wasClicked]; } +- (void)testNewButtonValueIsOff +{ + [self assert:CPOffState equals:[button objectValue] message:@"a new button should be off"]; + [self assert:CPOffState equals:[button state] message:@"state should be CPOffState"]; +} + - (void)testSetObjectValue { [button setObjectValue:CPOnState]; diff --git a/Tests/AppKit/CPObjectArchivingTest.j b/Tests/AppKit/CPObjectArchivingTest.j new file mode 100644 index 000000000..9eadf3a49 --- /dev/null +++ b/Tests/AppKit/CPObjectArchivingTest.j @@ -0,0 +1,356 @@ +/* + * CPObjectArchivingTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + Views hold and share objects that are not views, and those objects are archived + with them. An object that is archived and read back must keep the properties that + an application reads. DropInArchiveTest.j and CPViewDecodedBehaviorTest.j cover + the views. +*/ + +@implementation CPObjectArchivingTest : OJTestCase + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + +- (id)archived:(id)anObject +{ + return [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:anObject]]; +} + +// MARK: Foundation collections and values + +- (void)testAnArrayKeepsItsObjects +{ + [self assert:[@"One", 2, YES] equals:[self archived:[@"One", 2, YES]]]; +} + +- (void)testADictionaryKeepsItsEntries +{ + var dictionary = @{ @"one": @"first", @"two": 2 }; + + [self assert:dictionary equals:[self archived:dictionary]]; +} + +- (void)testASetKeepsItsObjects +{ + var set = [CPSet setWithArray:[@"One", @"Two"]]; + + [self assert:set equals:[self archived:set]]; +} + +- (void)testAnIndexSetKeepsItsIndexes +{ + var indexes = [CPMutableIndexSet indexSetWithIndexesInRange:CPMakeRange(2, 3)]; + + [indexes addIndex:9]; + + [self assert:indexes equals:[self archived:indexes]]; +} + +- (void)testAnIndexPathKeepsItsIndexes +{ + var indexPath = [CPIndexPath indexPathWithIndexes:[1, 2, 3] length:3]; + + [self assert:indexPath equals:[self archived:indexPath]]; +} + +- (void)testADateKeepsItsTime +{ + var date = [CPDate dateWithTimeIntervalSince1970:1000.0]; + + [self assert:1000.0 equals:[[self archived:date] timeIntervalSince1970]]; +} + +- (void)testNullStaysTheSingleton +{ + [self assert:[CPNull null] equals:[self archived:[CPNull null]]]; +} + +- (void)testADecimalNumberKeepsItsValue +{ + var number = [CPDecimalNumber decimalNumberWithString:@"12.5"]; + + [self assert:[number stringValue] equals:[[self archived:number] stringValue]]; +} + +- (void)testAnAttributedStringKeepsItsText +{ + var string = [[CPAttributedString alloc] initWithString:@"Text" attributes:@{ @"key": @"value" }]; + + [self assert:string equals:[self archived:string]]; +} + +- (void)testASortDescriptorKeepsItsDefinition +{ + var descriptor = [CPSortDescriptor sortDescriptorWithKey:@"name" ascending:NO selector:@selector(compare:)], + decoded = [self archived:descriptor]; + + [self assert:@"name" equals:[decoded key]]; + [self assertFalse:[decoded ascending]]; + [self assert:@selector(compare:) equals:[decoded selector]]; +} + +- (void)testACharacterSetKeepsItsMembers +{ + var decoded = [self archived:[CPCharacterSet characterSetWithCharactersInString:@"ab"]]; + + [self assertTrue:[decoded characterIsMember:@"a"]]; + [self assertFalse:[decoded characterIsMember:@"c"]]; +} + +- (void)testAnErrorKeepsItsDefinition +{ + var error = [CPError errorWithDomain:@"Domain" code:7 userInfo:@{ @"key": @"value" }], + decoded = [self archived:error]; + + [self assert:@"Domain" equals:[decoded domain]]; + [self assert:7 equals:[decoded code]]; + [self assert:@"value" equals:[[decoded userInfo] objectForKey:@"key"]]; +} + +- (void)testAnExceptionKeepsItsDefinition +{ + var exception = [CPException exceptionWithName:@"Name" reason:@"Reason" userInfo:nil], + decoded = [self archived:exception]; + + [self assert:@"Name" equals:[decoded name]]; + [self assert:@"Reason" equals:[decoded reason]]; +} + +- (void)testALocaleKeepsItsIdentifier +{ + var locale = [[CPLocale alloc] initWithLocaleIdentifier:@"fr_FR"]; + + [self assert:@"fr_FR" equals:[[self archived:locale] localeIdentifier]]; +} + +- (void)testANumberFormatterKeepsItsStyle +{ + var formatter = [[CPNumberFormatter alloc] init]; + + [formatter setNumberStyle:CPNumberFormatterDecimalStyle]; + + [self assert:CPNumberFormatterDecimalStyle equals:[[self archived:formatter] numberStyle]]; +} + +- (void)testADateFormatterKeepsItsFormat +{ + var formatter = [[CPDateFormatter alloc] init]; + + [formatter setDateFormat:@"yyyy-MM-dd"]; + + [self assert:@"yyyy-MM-dd" equals:[[self archived:formatter] dateFormat]]; +} + +- (void)testAComparisonPredicateStillEvaluates +{ + var decoded = [self archived:[CPPredicate predicateWithFormat:@"self BEGINSWITH 'a'"]]; + + [self assertTrue:[decoded evaluateWithObject:@"apple"]]; + [self assertFalse:[decoded evaluateWithObject:@"pear"]]; +} + +- (void)testACompoundPredicateStillEvaluates +{ + var decoded = [self archived:[CPPredicate predicateWithFormat:@"self BEGINSWITH 'a' AND self ENDSWITH 'e'"]]; + + [self assertTrue:[decoded evaluateWithObject:@"apple"]]; + [self assertFalse:[decoded evaluateWithObject:@"apricot"]]; +} + +// MARK: AppKit values + +- (void)testAColorKeepsItsComponents +{ + var color = [CPColor colorWithRed:0.25 green:0.5 blue:0.75 alpha:0.5]; + + [self assert:[color cssString] equals:[[self archived:color] cssString]]; +} + +- (void)testANamedFontKeepsItsDefinition +{ + var font = [CPFont boldFontWithName:@"Courier" size:21.0], + decoded = [self archived:font]; + + [self assert:[font cssString] equals:[decoded cssString]]; + [self assertTrue:[decoded isBold]]; +} + +- (void)testASystemFontStaysASystemFont +{ + var decoded = [self archived:[CPFont systemFontOfSize:15.0]]; + + [self assertTrue:[decoded isSystem]]; + [self assert:15.0 equals:[decoded size]]; +} + +- (void)testAnImageKeepsItsDefinition +{ + var image = [[CPImage alloc] initWithContentsOfFile:@"image.png" size:CGSizeMake(16.0, 32.0)], + decoded = [self archived:image]; + + [self assert:@"image.png" equals:[decoded filename]]; + [self assertTrue:CGSizeEqualToSize(CGSizeMake(16.0, 32.0), [decoded size])]; +} + +- (void)testAShadowKeepsItsDefinition +{ + var shadow = [[CPShadow alloc] init]; + + [shadow setShadowOffset:CGSizeMake(2.0, 3.0)]; + [shadow setShadowBlurRadius:4.0]; + [shadow setShadowColor:[CPColor redColor]]; + + var decoded = [self archived:shadow]; + + [self assertTrue:CGSizeEqualToSize(CGSizeMake(2.0, 3.0), [decoded shadowOffset])]; + [self assert:4.0 equals:[decoded shadowBlurRadius]]; + [self assert:[[CPColor redColor] cssString] equals:[[decoded shadowColor] cssString]]; +} + +- (void)testANewShadowKeepsItsDefaults +{ + var decoded = [self archived:[[CPShadow alloc] init]]; + + [self assertTrue:CGSizeEqualToSize(CGSizeMakeZero(), [decoded shadowOffset])]; + [self assert:0.0 equals:[decoded shadowBlurRadius]]; + [self assert:1.0 / 3.0 equals:[[decoded shadowColor] alphaComponent]]; +} + +- (void)testAParagraphStyleKeepsItsAlignment +{ + var style = [[CPMutableParagraphStyle alloc] init]; + + [style setAlignment:CPCenterTextAlignment]; + + [self assert:CPCenterTextAlignment equals:[[self archived:style] alignment]]; +} + +- (void)testAnAppearanceKeepsItsName +{ + var appearance = [CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]; + + [self assert:CPAppearanceNameVibrantDark equals:[[self archived:appearance] name]]; +} + +// MARK: Objects that belong to views + +- (void)testAMenuKeepsItsItems +{ + var menu = [[CPMenu alloc] initWithTitle:@"Menu"], + item = [[CPMenuItem alloc] initWithTitle:@"Item" action:@selector(performAction:) keyEquivalent:@"i"], + submenu = [[CPMenu alloc] initWithTitle:@""]; + + [item setTag:7]; + [item setState:CPOnState]; + [item setKeyEquivalentModifierMask:CPShiftKeyMask]; + [menu addItem:item]; + [menu addItem:[CPMenuItem separatorItem]]; + [menu setSubmenu:submenu forItem:[menu addItemWithTitle:@"Parent" action:nil keyEquivalent:@""]]; + + var decoded = [self archived:menu], + decodedItem = [decoded itemAtIndex:0]; + + [self assert:@"Menu" equals:[decoded title]]; + [self assert:3 equals:[decoded numberOfItems]]; + [self assert:@"Item" equals:[decodedItem title]]; + [self assert:@selector(performAction:) equals:[decodedItem action]]; + [self assert:@"i" equals:[decodedItem keyEquivalent]]; + [self assert:CPShiftKeyMask equals:[decodedItem keyEquivalentModifierMask]]; + [self assert:7 equals:[decodedItem tag]]; + [self assert:CPOnState equals:[decodedItem state]]; + [self assert:decoded equals:[decodedItem menu]]; + [self assertTrue:[[decoded itemAtIndex:1] isSeparatorItem]]; + [self assert:@"Parent" equals:[[[decoded itemAtIndex:2] submenu] title]]; + [self assert:decoded equals:[[[decoded itemAtIndex:2] submenu] supermenu]]; +} + +- (void)testATableColumnKeepsItsDefinition +{ + var column = [[CPTableColumn alloc] initWithIdentifier:@"Column"]; + + [column setWidth:120.0]; + [column setMinWidth:50.0]; + [column setMaxWidth:300.0]; + [column setEditable:YES]; + [column setHidden:YES]; + [[column headerView] setStringValue:@"Title"]; + [column setSortDescriptorPrototype:[CPSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; + + var decoded = [self archived:column]; + + [self assert:@"Column" equals:[decoded identifier]]; + [self assert:120.0 equals:[decoded width]]; + [self assert:50.0 equals:[decoded minWidth]]; + [self assert:300.0 equals:[decoded maxWidth]]; + [self assertTrue:[decoded isEditable]]; + [self assertTrue:[decoded isHidden]]; + [self assert:@"Title" equals:[[decoded headerView] stringValue]]; + [self assert:@"name" equals:[[decoded sortDescriptorPrototype] key]]; +} + +- (void)testATabViewItemKeepsItsDefinition +{ + var item = [[CPTabViewItem alloc] initWithIdentifier:@"identifier"]; + + [item setLabel:@"Label"]; + [item setView:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 10.0, 20.0)]]; + + var decoded = [self archived:item]; + + [self assert:@"identifier" equals:[decoded identifier]]; + [self assert:@"Label" equals:[decoded label]]; + [self assertNotNull:[decoded view]]; +} + +- (void)testAnObjectControllerKeepsItsContent +{ + var controller = [[CPObjectController alloc] initWithContent:@"Content"]; + + [controller setEditable:NO]; + + var decoded = [self archived:controller]; + + [self assert:@"Content" equals:[decoded content]]; + [self assertFalse:[decoded isEditable]]; +} + +- (void)testAnArrayControllerKeepsItsConfiguration +{ + var controller = [[CPArrayController alloc] initWithContent:[@"One", @"Two"]]; + + [controller setAvoidsEmptySelection:NO]; + [controller setPreservesSelection:NO]; + + var decoded = [self archived:controller]; + + [self assertFalse:[decoded avoidsEmptySelection]]; + [self assertFalse:[decoded preservesSelection]]; +} + +@end diff --git a/Tests/AppKit/CPOutlineViewInteractionTest.j b/Tests/AppKit/CPOutlineViewInteractionTest.j new file mode 100644 index 000000000..5493aab23 --- /dev/null +++ b/Tests/AppKit/CPOutlineViewInteractionTest.j @@ -0,0 +1,348 @@ +/* + * CPOutlineViewInteractionTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + An outline view adds a parent to every row, so it reports a drag by item and a drop + by parent item and child index. Selection and editing come from CPTableView, and + CPTableViewInteractionTest.j covers them. These tests cover what an outline view + changes. +*/ + +var OutlineInteractionDragType = @"OutlineInteractionDragType"; + +@implementation _CPOutlineInteractionView : CPOutlineView +{ + CPArray dragCalls @accessors; +} + +- (void)dragView:(CPView)aView at:(CGPoint)aLocation offset:(CGSize)mouseOffset event:(CPEvent)anEvent pasteboard:(CPPasteboard)aPasteboard source:(id)aSourceObject slideBack:(BOOL)slideBack +{ + if (!dragCalls) + dragCalls = []; + + dragCalls.push(aPasteboard); +} + +@end + +@implementation _CPOutlineInteractionDataSource : CPObject +{ + id tree @accessors; + CPArray writtenItems @accessors; + CPArray validations @accessors; + CPArray acceptedDrops @accessors; + id retargetItem @accessors; + id retargetIndex @accessors; + BOOL shouldRetarget @accessors; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + tree = { + @"root": [@"A", @"B", @"C"], + @"A": [@"A1", @"A2"], + @"B": [], + @"C": [@"C1"] + }; + validations = []; + acceptedDrops = []; + } + + return self; +} + +- (CPArray)childrenOfItem:(id)anItem +{ + return tree[anItem || @"root"] || []; +} + +- (id)outlineView:(CPOutlineView)anOutlineView child:(int)anIndex ofItem:(id)anItem +{ + return [self childrenOfItem:anItem][anIndex]; +} + +- (BOOL)outlineView:(CPOutlineView)anOutlineView isItemExpandable:(id)anItem +{ + return [self childrenOfItem:anItem].length > 0; +} + +- (int)outlineView:(CPOutlineView)anOutlineView numberOfChildrenOfItem:(id)anItem +{ + return [self childrenOfItem:anItem].length; +} + +- (id)outlineView:(CPOutlineView)anOutlineView objectValueForTableColumn:(CPTableColumn)aColumn byItem:(id)anItem +{ + return anItem; +} + +- (BOOL)outlineView:(CPOutlineView)anOutlineView writeItems:(CPArray)theItems toPasteboard:(CPPasteboard)aPasteboard +{ + writtenItems = theItems; + + [aPasteboard declareTypes:[OutlineInteractionDragType] owner:self]; + [aPasteboard setData:@"items" forType:OutlineInteractionDragType]; + + return YES; +} + +- (CPDragOperation)outlineView:(CPOutlineView)anOutlineView validateDrop:(id)anInfo proposedItem:(id)anItem proposedChildIndex:(int)anIndex +{ + validations.push({ @"item": anItem, @"index": anIndex }); + + if (shouldRetarget) + [anOutlineView setDropItem:retargetItem dropChildIndex:retargetIndex]; + + return CPDragOperationMove; +} + +- (BOOL)outlineView:(CPOutlineView)anOutlineView acceptDrop:(id)anInfo item:(id)anItem childIndex:(int)anIndex +{ + acceptedDrops.push({ @"item": anItem, @"index": anIndex }); + + return YES; +} + +@end + +@implementation _CPOutlineInteractionDraggingInfo : CPObject +{ + CPPasteboard draggingPasteboard @accessors; + CGPoint draggingLocation @accessors; +} + +@end + +@implementation CPOutlineViewInteractionTest : OJTestCase +{ + CPWindow theWindow; + _CPOutlineInteractionView outlineView; + _CPOutlineInteractionDataSource dataSource; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 400.0, 400.0) styleMask:CPWindowNotSizable]; + outlineView = [[_CPOutlineInteractionView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 300.0)]; + + var column = [[CPTableColumn alloc] initWithIdentifier:@"Column"]; + + [column setWidth:200.0]; + [outlineView addTableColumn:column]; + [outlineView setOutlineTableColumn:column]; + [outlineView setAllowsMultipleSelection:YES]; + [[theWindow contentView] addSubview:outlineView]; + + dataSource = [[_CPOutlineInteractionDataSource alloc] init]; + + [outlineView setDataSource:dataSource]; + [outlineView registerForDraggedTypes:[OutlineInteractionDragType]]; + [outlineView expandItem:@"A"]; + [outlineView reloadData]; +} + +- (CGPoint)pointInItem:(id)anItem +{ + return CGPointMake(100.0, CGRectGetMidY([outlineView rectOfRow:[outlineView rowForItem:anItem]])); +} + +- (id)draggingInfoAtPoint:(CGPoint)aPoint +{ + var info = [[_CPOutlineInteractionDraggingInfo alloc] init], + pasteboard = [CPPasteboard pasteboardWithName:CPDragPboard]; + + [pasteboard declareTypes:[OutlineInteractionDragType] owner:self]; + [info setDraggingPasteboard:pasteboard]; + [info setDraggingLocation:[outlineView convertPoint:aPoint toView:nil]]; + + return info; +} + +- (void)sendMouse:(CPEventType)aType atPoint:(CGPoint)aPoint +{ + var event = [CPEvent mouseEventWithType:aType + location:[outlineView convertPoint:aPoint toView:nil] + modifierFlags:0 + timestamp:0 + windowNumber:[theWindow windowNumber] + context:nil + eventNumber:0 + clickCount:1 + pressure:0]; + + [CPApp sendEvent:event]; + [outlineView trackMouse:event]; +} + +- (void)testDraggingARowWritesItsItem +{ + var start = [self pointInItem:@"A1"]; + + [self sendMouse:CPLeftMouseDown atPoint:start]; + [self sendMouse:CPLeftMouseDragged atPoint:CGPointMake(start.x + 20.0, start.y)]; + + [self assert:[@"A1"] equals:[dataSource writtenItems]]; + [self assert:1 equals:[[outlineView dragCalls] count]]; +} + +- (void)testDraggingASelectionWritesEachItem +{ + var firstRow = [outlineView rowForItem:@"A1"]; + + [outlineView selectRowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(firstRow, 2)] byExtendingSelection:NO]; + + var start = [self pointInItem:@"A2"]; + + [self sendMouse:CPLeftMouseDown atPoint:start]; + [self sendMouse:CPLeftMouseDragged atPoint:CGPointMake(start.x + 20.0, start.y)]; + + [self assert:[@"A1", @"A2"] equals:[dataSource writtenItems]]; +} + +- (void)testTheMiddleOfARowProposesADropOnThatItem +{ + [outlineView draggingUpdated:[self draggingInfoAtPoint:[self pointInItem:@"B"]]]; + + [self assert:@"B" equals:[dataSource validations][0].item]; + [self assert:CPOutlineViewDropOnItemIndex equals:[dataSource validations][0].index]; +} + +- (void)testTheTopOfAChildRowProposesADropInItsParent +{ + var rect = [outlineView rectOfRow:[outlineView rowForItem:@"A2"]]; + + [outlineView draggingUpdated:[self draggingInfoAtPoint:CGPointMake(100.0, CGRectGetMinY(rect) + 1.0)]]; + + [self assert:@"A" equals:[dataSource validations][0].item]; + [self assert:1 equals:[dataSource validations][0].index]; +} + +/* + Between a child and a root row, either parent is possible, and the horizontal + position of the drag chooses between them. +*/ +- (void)testAnUnindentedDropAboveARootRowProposesTheRoot +{ + var rect = [outlineView rectOfRow:[outlineView rowForItem:@"B"]]; + + [outlineView draggingUpdated:[self draggingInfoAtPoint:CGPointMake(5.0, CGRectGetMinY(rect) + 1.0)]]; + + [self assertNull:[dataSource validations][0].item]; + [self assert:1 equals:[dataSource validations][0].index]; +} + +- (void)testAnIndentedDropAboveARootRowProposesTheEndOfThePreviousParent +{ + var rect = [outlineView rectOfRow:[outlineView rowForItem:@"B"]]; + + [outlineView draggingUpdated:[self draggingInfoAtPoint:CGPointMake(100.0, CGRectGetMinY(rect) + 1.0)]]; + + [self assert:@"A" equals:[dataSource validations][0].item]; + [self assert:2 equals:[dataSource validations][0].index]; +} + +- (void)testBelowTheLastRowProposesADropAtTheEndOfTheRoot +{ + [outlineView draggingUpdated:[self draggingInfoAtPoint:CGPointMake(100.0, 290.0)]]; + + [self assertNull:[dataSource validations][0].item]; + [self assert:3 equals:[dataSource validations][0].index]; +} + +- (void)testAcceptingADropReceivesTheProposedItem +{ + var info = [self draggingInfoAtPoint:[self pointInItem:@"B"]]; + + [outlineView draggingUpdated:info]; + + [self assertTrue:[outlineView performDragOperation:info]]; + [self assert:@"B" equals:[dataSource acceptedDrops][0].item]; + [self assert:CPOutlineViewDropOnItemIndex equals:[dataSource acceptedDrops][0].index]; +} + +- (void)testDataSourceCanRetargetADropBetweenChildren +{ + [dataSource setShouldRetarget:YES]; + [dataSource setRetargetItem:@"A"]; + [dataSource setRetargetIndex:0]; + + var info = [self draggingInfoAtPoint:[self pointInItem:@"B"]]; + + [outlineView draggingUpdated:info]; + [outlineView performDragOperation:info]; + + [self assert:@"A" equals:[dataSource acceptedDrops][0].item]; + [self assert:0 equals:[dataSource acceptedDrops][0].index]; +} + +- (void)testDataSourceCanRetargetADropOnAnItem +{ + [dataSource setShouldRetarget:YES]; + [dataSource setRetargetItem:@"C"]; + [dataSource setRetargetIndex:CPOutlineViewDropOnItemIndex]; + + var info = [self draggingInfoAtPoint:[self pointInItem:@"B"]]; + + [outlineView draggingUpdated:info]; + [outlineView performDragOperation:info]; + + [self assert:@"C" equals:[dataSource acceptedDrops][0].item]; + [self assert:CPOutlineViewDropOnItemIndex equals:[dataSource acceptedDrops][0].index]; +} + +- (void)testHoveringOverACollapsedItemExpandsIt +{ + [self assertFalse:[outlineView isItemExpanded:@"C"]]; + + [outlineView setDropItem:@"C" dropChildIndex:CPOutlineViewDropOnItemIndex]; + [outlineView._dragHoverTimer fire]; + + [self assertTrue:[outlineView isItemExpanded:@"C"]]; +} + +- (void)testAChildIndexCancelsTheHover +{ + [outlineView setDropItem:@"C" dropChildIndex:CPOutlineViewDropOnItemIndex]; + [outlineView setDropItem:@"C" dropChildIndex:0]; + + [self assertNull:outlineView._dragHoverTimer]; +} + +- (void)testEndingADragCancelsTheHover +{ + [outlineView setDropItem:@"C" dropChildIndex:CPOutlineViewDropOnItemIndex]; + [outlineView draggedView:nil endedAt:CGPointMakeZero() operation:CPDragOperationNone]; + + [self assertNull:outlineView._dragHoverTimer]; + [self assertFalse:[outlineView isItemExpanded:@"C"]]; +} + +@end diff --git a/Tests/AppKit/CPOutlineViewRowContentTest.j b/Tests/AppKit/CPOutlineViewRowContentTest.j new file mode 100644 index 000000000..ebf3939f0 --- /dev/null +++ b/Tests/AppKit/CPOutlineViewRowContentTest.j @@ -0,0 +1,400 @@ +/* + * CPOutlineViewRowContentTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + Applications draw their own content on table and outline rows. A source list + draws a count badge beside an item, for example, as SmartFoldersDemo does in its + BadgedOutlineView. That content is correct only if the table keeps redrawing it + as a person uses the table. + + These tests take such a view through ordinary use: selecting, scrolling, resizing + a column, expanding an item, reloading. After each action, the table must ask for + its content again, and only for the rows now on screen. + + The tests observe what a subclass observes. They do not depend on which view + performs the table's drawing. +*/ +@implementation RowContentItem : CPObject +{ + CPString title @accessors; + CPArray children @accessors; +} + ++ (id)itemWithTitle:(CPString)aTitle children:(CPArray)someChildren +{ + var item = [[self alloc] init]; + + [item setTitle:aTitle]; + [item setChildren:someChildren]; + + return item; +} + +@end + +/* + Records what it is asked to draw, in place of drawing. The default implementations + need a canvas, which a unit test does not have. +*/ +@implementation RowContentOutlineView : CPOutlineView +{ + CPArray drawnSteps @accessors; + CPArray drawnRows @accessors; + CPArray drawnClipRects @accessors; +} + +- (void)drawBackgroundInClipRect:(CGRect)aRect +{ + [drawnSteps addObject:@"background"]; +} + +- (void)highlightSelectionInClipRect:(CGRect)aRect +{ + [drawnSteps addObject:@"selection"]; +} + +- (void)drawGridInClipRect:(CGRect)aRect +{ + [drawnSteps addObject:@"grid"]; +} + +- (void)drawRow:(CPInteger)aRow clipRect:(CGRect)aRect +{ + [drawnRows addObject:aRow]; + [drawnClipRects addObject:aRect]; +} + +@end + +@implementation CPOutlineViewRowContentTest : OJTestCase +{ + CPWindow theWindow; + CPScrollView scrollView; + RowContentOutlineView outlineView; + CPTableColumn firstColumn; + CPTableColumn secondColumn; + CPArray rootItems; + CPView drawingView; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 400.0, 400.0) styleMask:CPWindowNotSizable]; + + rootItems = []; + + for (var index = 0; index < 40; index++) + { + var children = [[RowContentItem itemWithTitle:@"Child A" children:[]], + [RowContentItem itemWithTitle:@"Child B" children:[]]]; + + rootItems.push([RowContentItem itemWithTitle:@"Item" children:children]); + } + + firstColumn = [[CPTableColumn alloc] initWithIdentifier:@"First"]; + secondColumn = [[CPTableColumn alloc] initWithIdentifier:@"Second"]; + + outlineView = [[RowContentOutlineView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)]; + [outlineView setDrawnSteps:[]]; + [outlineView setDrawnRows:[]]; + [outlineView setDrawnClipRects:[]]; + [outlineView addTableColumn:firstColumn]; + [outlineView addTableColumn:secondColumn]; + [outlineView setOutlineTableColumn:firstColumn]; + + scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)]; + [scrollView setDocumentView:outlineView]; + [[theWindow contentView] addSubview:scrollView]; + + [outlineView setDataSource:self]; + [outlineView reloadData]; + + [self settle]; +} + +- (id)outlineView:(CPOutlineView)anOutlineView child:(CPInteger)anIndex ofItem:(id)anItem +{ + return anItem ? [anItem children][anIndex] : rootItems[anIndex]; +} + +- (BOOL)outlineView:(CPOutlineView)anOutlineView isItemExpandable:(id)anItem +{ + return [[anItem children] count] > 0; +} + +- (int)outlineView:(CPOutlineView)anOutlineView numberOfChildrenOfItem:(id)anItem +{ + return anItem ? [[anItem children] count] : rootItems.length; +} + +- (id)outlineView:(CPOutlineView)anOutlineView objectValueForTableColumn:(CPTableColumn)aColumn byItem:(id)anItem +{ + return [anItem title]; +} + +/* + The views that make up the table: the outline view and its subviews. Controls + are left out. Data views and disclosure buttons draw themselves, and they need + a canvas to do so. +*/ +- (CPArray)tableViews +{ + return [outlineView].concat([outlineView subviews].filter(function(aView) + { + return ![aView isKindOfClass:[CPControl class]]; + })); +} + +/* + Brings the table to rest, as the end of a display cycle does: the layout is + current, nothing is waiting to draw, and nothing has been recorded. +*/ +- (void)settle +{ + [outlineView layoutIfNeeded]; + [[self tableViews] makeObjectsPerformSelector:@selector(displayIfNeeded)]; + + [[outlineView drawnSteps] removeAllObjects]; + [[outlineView drawnRows] removeAllObjects]; + [[outlineView drawnClipRects] removeAllObjects]; +} + +/* + CPView does not draw without a DOM, so the display cycle cannot reach drawRect: + in a unit test. This does its work: it lays the table out, then sends drawRect: + to each view that has been marked for display, and only to those. +*/ +- (void)redraw +{ + [outlineView layoutIfNeeded]; + + var graphicsPort = { path: NULL, gState: CGGStateCreate(), gStateStack: [] }; + + [CPGraphicsContext setCurrentContext:[CPGraphicsContext graphicsContextWithGraphicsPort:graphicsPort flipped:YES]]; + + drawingView = nil; + + [self tableViews].forEach(function(aView) + { + if (![aView needsDisplay]) + return; + + var rowCount = [[outlineView drawnRows] count]; + + [aView drawRect:[aView bounds]]; + + if ([[outlineView drawnRows] count] > rowCount) + drawingView = aView; + }); +} + +/* + A badge has to remain visible, including on a selected or alternating row. So the + view that draws the row content must stay in front of anything that paints a row. + Only controls may sit in front of it. Without a DOM a subview may not yet have + its colors, so this does not look at colors. It looks at what is in front. +*/ +- (void)assertNothingCoversRowContent:(CPString)anAction +{ + var subviews = [outlineView subviews], + firstCovering = drawingView === outlineView ? 0 : [subviews indexOfObject:drawingView] + 1; + + for (var index = firstCovering; index < [subviews count]; index++) + { + var aView = subviews[index]; + + if ([aView isKindOfClass:[CPControl class]] || [aView isHidden]) + continue; + + [self fail:anAction + ": " + [aView className] + " covers the row content"]; + } +} + +- (CPArray)rowsOnScreen +{ + var range = [outlineView rowsInRect:[outlineView exposedRect]], + rows = []; + + for (var row = range.location; row < CPMaxRange(range); row++) + rows.push(row); + + return rows; +} + +/* + The table has been redrawn through each of its drawing steps, for exactly the + rows on screen, and each row was asked to draw only within the visible part of + the table. +*/ +- (void)assertRowContentIsCurrentAfter:(CPString)anAction +{ + [self redraw]; + + var rows = [self rowsOnScreen], + exposedRect = [outlineView exposedRect]; + + [self assert:[@"background", @"selection", @"grid"] equals:[outlineView drawnSteps] message:anAction]; + [self assert:rows equals:[outlineView drawnRows] message:anAction]; + + [outlineView drawnClipRects].forEach(function(aRect) + { + [self assertTrue:CGRectContainsRect(exposedRect, aRect) message:anAction + ": clip rect is outside the visible area"]; + }); + + [self assertNothingCoversRowContent:anAction]; +} + +/* + Redrawing costs time, and a table can be large. A table with nothing to change + has nothing to draw. +*/ +- (void)testNothingIsRedrawnWithoutAChange +{ + [self redraw]; + + [self assert:[] equals:[outlineView drawnSteps]]; + [self assert:[] equals:[outlineView drawnRows]]; +} + +- (void)testContentIsDrawnWhenTheOutlineFirstAppears +{ + [outlineView setNeedsDisplay:YES]; + + [self assertRowContentIsCurrentAfter:@"first display"]; +} + +- (void)testContentIsRedrawnAfterSelectingARow +{ + [outlineView selectRowIndexes:[CPIndexSet indexSetWithIndex:2] byExtendingSelection:NO]; + + [self assertRowContentIsCurrentAfter:@"selecting a row"]; +} + +- (void)testContentIsRedrawnAfterChangingTheSelection +{ + [outlineView selectRowIndexes:[CPIndexSet indexSetWithIndex:2] byExtendingSelection:NO]; + [self settle]; + + [outlineView selectRowIndexes:[CPIndexSet indexSetWithIndex:4] byExtendingSelection:NO]; + + [self assertRowContentIsCurrentAfter:@"changing the selection"]; +} + +- (void)testContentIsRedrawnAfterClearingTheSelection +{ + [outlineView selectRowIndexes:[CPIndexSet indexSetWithIndex:2] byExtendingSelection:NO]; + [self settle]; + + [outlineView deselectAll:nil]; + + [self assertRowContentIsCurrentAfter:@"clearing the selection"]; +} + +- (void)testContentIsRedrawnAfterSelectingAColumn +{ + [outlineView selectColumnIndexes:[CPIndexSet indexSetWithIndex:1] byExtendingSelection:NO]; + + [self assertRowContentIsCurrentAfter:@"selecting a column"]; +} + +- (void)testContentIsRedrawnAfterChangingTheGridStyle +{ + [outlineView setGridStyleMask:CPTableViewSolidVerticalGridLineMask]; + + [self assertRowContentIsCurrentAfter:@"changing the grid style"]; +} + +- (void)testContentIsRedrawnAfterChangingTheGridColor +{ + [outlineView setGridColor:[CPColor redColor]]; + + [self assertRowContentIsCurrentAfter:@"changing the grid color"]; +} + +- (void)testContentIsRedrawnAfterChangingTheRowColors +{ + [outlineView setAlternatingRowBackgroundColors:[[CPColor redColor], [CPColor blueColor]]]; + + [self assertRowContentIsCurrentAfter:@"changing the row colors"]; +} + +- (void)testContentIsRedrawnAfterChangingTheHighlightStyle +{ + [outlineView setSelectionHighlightStyle:CPTableViewSelectionHighlightStyleNone]; + + [self assertRowContentIsCurrentAfter:@"changing the highlight style"]; +} + +- (void)testContentIsRedrawnAfterReloadingTheData +{ + [outlineView reloadData]; + + [self assertRowContentIsCurrentAfter:@"reloading the data"]; +} + +- (void)testContentIsRedrawnForTheNewRowsAfterScrolling +{ + var firstRows = [self rowsOnScreen]; + + [[scrollView contentView] scrollToPoint:CGPointMake(0.0, 300.0)]; + + [self assertFalse:[firstRows isEqual:[self rowsOnScreen]] message:@"scrolling must change the rows on screen"]; + [self assertRowContentIsCurrentAfter:@"scrolling"]; +} + +- (void)testContentIsRedrawnAfterResizingAColumn +{ + [secondColumn setWidth:40.0]; + + [self assertRowContentIsCurrentAfter:@"resizing a column"]; +} + +- (void)testContentIsRedrawnAfterHidingAColumn +{ + [secondColumn setHidden:YES]; + + [self assertRowContentIsCurrentAfter:@"hiding a column"]; +} + +- (void)testContentIsRedrawnAfterExpandingAnItem +{ + [outlineView expandItem:rootItems[1]]; + + [self assertRowContentIsCurrentAfter:@"expanding an item"]; +} + +- (void)testContentIsRedrawnAfterCollapsingAnItem +{ + [outlineView expandItem:rootItems[1]]; + [self settle]; + + [outlineView collapseItem:rootItems[1]]; + + [self assertRowContentIsCurrentAfter:@"collapsing an item"]; +} + +@end diff --git a/Tests/AppKit/CPScrollViewTest.j b/Tests/AppKit/CPScrollViewTest.j index f2d6ad3d0..f1a193dee 100644 --- a/Tests/AppKit/CPScrollViewTest.j +++ b/Tests/AppKit/CPScrollViewTest.j @@ -5,12 +5,24 @@ @implementation CPScrollViewTest : OJTestCase { + CPScrollerStyle globalScrollerStyle; } - (void)setUp { // This will init the global var CPApp which are used internally in the AppKit [[CPApplication alloc] init]; + + globalScrollerStyle = [CPScrollView globalScrollerStyle]; +} + +/* + The global scroller style applies to every scroll view, including those in later + test suites, so a test that changes it must not leave it changed. +*/ +- (void)tearDown +{ + [CPScrollView setGlobalScrollerStyle:globalScrollerStyle]; } /*! diff --git a/Tests/AppKit/CPTableViewDrawingTest.j b/Tests/AppKit/CPTableViewDrawingTest.j new file mode 100644 index 000000000..75227c326 --- /dev/null +++ b/Tests/AppKit/CPTableViewDrawingTest.j @@ -0,0 +1,198 @@ +/* + * CPTableViewDrawingTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + NSTableView draws itself as a sequence of named steps: the background, then + the selection highlight, then the grid, then the rows. Each step is a method. + A subclass overrides one step to change it and inherits the others, so it can + extend the table without owning the table's internals. + + CPTableView follows the same design. These tests confirm that each step reaches + a subclass. How the table organizes its drawing is its own concern, so the tests + observe only what a subclass can observe. +*/ +@implementation DrawingRecordingTableView : CPTableView +{ + CPArray drawnSteps @accessors; + CPArray drawnRows @accessors; +} + +/* + Applications override this method to draw something other than a solid color + or alternating rows behind the table's content. +*/ +- (void)drawBackgroundInClipRect:(CGRect)aRect +{ + [drawnSteps addObject:@"background"]; +} + +/* + Applications override this method to change how selected rows appear. + In Cocoa this applies to cell-based tables. A view-based NSTableView uses + NSTableRowView for this purpose. CPTableView supports the method on its + view-based tables, and existing applications depend on it. +*/ +- (void)highlightSelectionInClipRect:(CGRect)aRect +{ + [drawnSteps addObject:@"selection"]; +} + +/* + Cocoa documents this method for all tables: subclasses override it to draw + grid lines other than the standard ones. +*/ +- (void)drawGridInClipRect:(CGRect)aRect +{ + [drawnSteps addObject:@"grid"]; +} + +/* + Applications override this method to draw over a row. A source list, for + example, can draw a badge beside an item this way. Cocoa also restricts this + method to cell-based tables, and CPTableView supports it as it does the + selection highlight. +*/ +- (void)drawRow:(CPInteger)aRow clipRect:(CGRect)aRect +{ + [drawnRows addObject:aRow]; +} + +@end + +@implementation CPTableViewDrawingTest : OJTestCase +{ + CPWindow theWindow; + DrawingRecordingTableView tableView; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 400.0, 400.0) styleMask:CPWindowNotSizable]; + + tableView = [[DrawingRecordingTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)]; + [tableView setDrawnSteps:[]]; + [tableView setDrawnRows:[]]; + + [tableView addTableColumn:[[CPTableColumn alloc] initWithIdentifier:@"Column"]]; + [tableView setDataSource:self]; + + [[theWindow contentView] addSubview:tableView]; + [tableView reloadData]; +} + +- (int)numberOfRowsInTableView:(CPTableView)aTableView +{ + return 3; +} + +- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRow +{ + return @"Value"; +} + +/* + Unit tests run without a DOM, and CPView does not draw without one, so the + display cycle never reaches drawRect: here. This method does what the display + cycle does: it sends drawRect: to the table view and to each of its subviews. + The graphics port has no backing store, because creating a bitmap context + requires a DOM. The tests therefore show that the steps run, not what they draw. +*/ +- (void)display +{ + [tableView load]; + + var graphicsPort = { path: NULL, gState: CGGStateCreate(), gStateStack: [] }; + + [CPGraphicsContext setCurrentContext:[CPGraphicsContext graphicsContextWithGraphicsPort:graphicsPort flipped:YES]]; + + [tableView drawRect:[tableView bounds]]; + + var subviews = [tableView subviews], + count = [subviews count]; + + while (count--) + [subviews[count] drawRect:[subviews[count] bounds]]; +} + +- (void)testDrawGridInClipRectOverrideIsCalled +{ + [self display]; + + [self assertTrue:[[tableView drawnSteps] containsObject:@"grid"]]; +} + +- (void)testDrawBackgroundInClipRectOverrideIsCalled +{ + [self display]; + + [self assertTrue:[[tableView drawnSteps] containsObject:@"background"]]; +} + +- (void)testHighlightSelectionInClipRectOverrideIsCalled +{ + [self display]; + + [self assertTrue:[[tableView drawnSteps] containsObject:@"selection"]]; +} + +- (void)testDrawRowClipRectOverrideIsCalledForEachExposedRow +{ + [self display]; + + [self assert:[0, 1, 2] equals:[tableView drawnRows]]; +} + +/* + Each step draws over the one before it. The order is part of the contract, + because a subclass that draws a background relies on the selection and the + grid appearing above it. +*/ +- (void)testDrawingStepsRunInOrder +{ + [self display]; + + [self assert:[@"background", @"selection", @"grid"] equals:[tableView drawnSteps]]; +} + +/* + A color that an application sets belongs to the application. Theme states + change often during normal use, for example when the table gains or loses + first responder status, and they must leave that color in place. +*/ +- (void)testBackgroundColorSurvivesThemeStateChange +{ + var color = [CPColor redColor]; + + [tableView setBackgroundColor:color]; + [tableView setThemeState:CPThemeStateFirstResponder]; + [self assert:color equals:[tableView backgroundColor]]; + + [tableView unsetThemeState:CPThemeStateFirstResponder]; + [self assert:color equals:[tableView backgroundColor]]; +} + +@end diff --git a/Tests/AppKit/CPTableViewInteractionTest.j b/Tests/AppKit/CPTableViewInteractionTest.j new file mode 100644 index 000000000..4de7940b6 --- /dev/null +++ b/Tests/AppKit/CPTableViewInteractionTest.j @@ -0,0 +1,785 @@ +/* + * CPTableViewInteractionTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + A person selects, edits and drags rows with the mouse and the keyboard. These tests + send a table the same events, and check what its delegate and data source receive. + + The drag session itself needs a display, so the table subclass records the call + that would start it. A stub stands in for the dragging information. These tests + cannot show that a drag image follows the pointer or that a drop indicator is + visible. +*/ + +var InteractionDragType = @"InteractionDragType"; + +@implementation _CPTableInteractionTable : CPTableView +{ + CPArray dragCalls @accessors; +} + +- (void)dragView:(CPView)aView at:(CGPoint)aLocation offset:(CGSize)mouseOffset event:(CPEvent)anEvent pasteboard:(CPPasteboard)aPasteboard source:(id)aSourceObject slideBack:(BOOL)slideBack +{ + if (!dragCalls) + dragCalls = []; + + dragCalls.push({ @"pasteboard": aPasteboard, @"source": aSourceObject }); +} + +@end + +@implementation _CPTableInteractionDataSource : CPObject +{ + CPArray rows @accessors; + CPArray editedValues @accessors; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + rows = [@"Zero", @"One", @"Two", @"Three", @"Four"]; + editedValues = []; + } + + return self; +} + +- (int)numberOfRowsInTableView:(CPTableView)aTableView +{ + return rows.length; +} + +- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRow +{ + return rows[aRow]; +} + +- (void)tableView:(CPTableView)aTableView setObjectValue:(id)aValue forTableColumn:(CPTableColumn)aColumn row:(int)aRow +{ + editedValues.push({ @"row": aRow, @"value": aValue }); +} + +@end + +@implementation _CPTableInteractionDragDataSource : _CPTableInteractionDataSource +{ + BOOL allowsDrag @accessors; + CPIndexSet writtenRows @accessors; + CPDragOperation validation @accessors; + BOOL acceptsDrop @accessors; + CPArray validations @accessors; + CPArray acceptedDrops @accessors; + id retargetRow @accessors; + id retargetOperation @accessors; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + allowsDrag = YES; + validation = CPDragOperationMove; + acceptsDrop = YES; + validations = []; + acceptedDrops = []; + } + + return self; +} + +- (BOOL)tableView:(CPTableView)aTableView writeRowsWithIndexes:(CPIndexSet)theIndexes toPasteboard:(CPPasteboard)aPasteboard +{ + writtenRows = theIndexes; + + if (allowsDrag) + { + [aPasteboard declareTypes:[InteractionDragType] owner:self]; + [aPasteboard setData:@"rows" forType:InteractionDragType]; + } + + return allowsDrag; +} + +- (CPDragOperation)tableView:(CPTableView)aTableView validateDrop:(id)anInfo proposedRow:(int)aRow proposedDropOperation:(CPTableViewDropOperation)anOperation +{ + validations.push({ @"row": aRow, @"operation": anOperation }); + + if (retargetRow != nil) + [aTableView setDropRow:retargetRow dropOperation:retargetOperation]; + + return validation; +} + +- (BOOL)tableView:(CPTableView)aTableView acceptDrop:(id)anInfo row:(int)aRow dropOperation:(CPTableViewDropOperation)anOperation +{ + acceptedDrops.push({ @"row": aRow, @"operation": anOperation }); + + return acceptsDrop; +} + +@end + +@implementation _CPTableInteractionDelegate : CPObject +{ + CPArray calls @accessors; + BOOL allowsSelectionChange @accessors; + BOOL allowsEditing @accessors; + CPArray refusedRows @accessors; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + calls = []; + allowsSelectionChange = YES; + allowsEditing = YES; + refusedRows = []; + } + + return self; +} + +- (BOOL)selectionShouldChangeInTableView:(CPTableView)aTableView +{ + calls.push(@"selectionShouldChange"); + + return allowsSelectionChange; +} + +- (BOOL)tableView:(CPTableView)aTableView shouldSelectRow:(int)aRow +{ + return refusedRows.indexOf(aRow) === -1; +} + +- (BOOL)tableView:(CPTableView)aTableView shouldEditTableColumn:(CPTableColumn)aColumn row:(int)aRow +{ + calls.push(@"shouldEdit"); + + return allowsEditing; +} + +- (void)tableViewSelectionIsChanging:(CPNotification)aNotification +{ + calls.push(@"selectionIsChanging"); +} + +- (void)tableViewSelectionDidChange:(CPNotification)aNotification +{ + calls.push(@"selectionDidChange"); +} + +@end + +@implementation _CPTableInteractionProposalDelegate : CPObject +{ +} + +- (CPIndexSet)tableView:(CPTableView)aTableView selectionIndexesForProposedSelection:(CPIndexSet)theIndexes +{ + return [CPIndexSet indexSetWithIndex:3]; +} + +@end + +@implementation _CPTableInteractionDraggingInfo : CPObject +{ + CPPasteboard draggingPasteboard @accessors; + CGPoint draggingLocation @accessors; +} + +@end + +@implementation CPTableViewInteractionTest : OJTestCase +{ + CPWindow theWindow; + _CPTableInteractionTable tableView; + CPTableColumn tableColumn; + _CPTableInteractionDataSource dataSource; + _CPTableInteractionDelegate delegate; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 400.0, 400.0) styleMask:CPWindowNotSizable]; + tableView = [[_CPTableInteractionTable alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 300.0)]; + tableColumn = [[CPTableColumn alloc] initWithIdentifier:@"Column"]; + + [tableColumn setWidth:200.0]; + [tableColumn setEditable:YES]; + [tableView addTableColumn:tableColumn]; + [tableView setAllowsMultipleSelection:YES]; + [[theWindow contentView] addSubview:tableView]; + + delegate = [[_CPTableInteractionDelegate alloc] init]; + [self useDataSource:[[_CPTableInteractionDataSource alloc] init]]; + [tableView setDelegate:delegate]; +} + +- (void)useDataSource:(id)aDataSource +{ + dataSource = aDataSource; + + [tableView setDataSource:dataSource]; + [tableView reloadData]; +} + +- (CGPoint)pointInRow:(int)aRow +{ + return CGPointMake(20.0, CGRectGetMidY([tableView rectOfRow:aRow])); +} + +- (CPEvent)mouseEvent:(CPEventType)aType atPoint:(CGPoint)aPoint flags:(unsigned)theFlags clicks:(int)aClickCount +{ + return [CPEvent mouseEventWithType:aType + location:[tableView convertPoint:aPoint toView:nil] + modifierFlags:theFlags + timestamp:0 + windowNumber:[theWindow windowNumber] + context:nil + eventNumber:0 + clickCount:aClickCount + pressure:0]; +} + +- (void)sendEvent:(CPEvent)anEvent +{ + [CPApp sendEvent:anEvent]; + [tableView trackMouse:anEvent]; +} + +- (void)clickPoint:(CGPoint)aPoint flags:(unsigned)theFlags clicks:(int)aClickCount +{ + [self sendEvent:[self mouseEvent:CPLeftMouseDown atPoint:aPoint flags:theFlags clicks:aClickCount]]; + [self sendEvent:[self mouseEvent:CPLeftMouseUp atPoint:aPoint flags:theFlags clicks:aClickCount]]; +} + +- (void)clickRow:(int)aRow +{ + [self clickPoint:[self pointInRow:aRow] flags:0 clicks:1]; +} + +- (void)clickRow:(int)aRow flags:(unsigned)theFlags +{ + [self clickPoint:[self pointInRow:aRow] flags:theFlags clicks:1]; +} + +- (void)pressKey:(CPString)aCharacter flags:(unsigned)theFlags +{ + [tableView keyDown:[CPEvent keyEventWithType:CPKeyDown + location:CGPointMakeZero() + modifierFlags:theFlags + timestamp:0 + windowNumber:[theWindow windowNumber] + context:nil + characters:aCharacter + charactersIgnoringModifiers:aCharacter + isARepeat:NO + keyCode:0]]; +} + +- (CPArray)selectedRows +{ + var rows = []; + + [[tableView selectedRowIndexes] getIndexes:rows maxCount:-1 inIndexRange:nil]; + + return rows; +} + +- (id)draggingInfoAtPoint:(CGPoint)aPoint +{ + var info = [[_CPTableInteractionDraggingInfo alloc] init], + pasteboard = [CPPasteboard pasteboardWithName:CPDragPboard]; + + [pasteboard declareTypes:[InteractionDragType] owner:self]; + [info setDraggingPasteboard:pasteboard]; + [info setDraggingLocation:[tableView convertPoint:aPoint toView:nil]]; + + return info; +} + +- (void)useDragDataSource +{ + [self useDataSource:[[_CPTableInteractionDragDataSource alloc] init]]; + [tableView registerForDraggedTypes:[InteractionDragType]]; +} + +// MARK: Selection + +- (void)testClickSelectsARow +{ + [self clickRow:2]; + + [self assert:[2] equals:[self selectedRows]]; +} + +- (void)testClickReplacesTheSelection +{ + [self clickRow:1]; + [self clickRow:3]; + + [self assert:[3] equals:[self selectedRows]]; +} + +- (void)testClickOutsideTheRowsClearsTheSelection +{ + [self clickRow:1]; + [self clickPoint:CGPointMake(20.0, 290.0) flags:0 clicks:1]; + + [self assert:[] equals:[self selectedRows]]; +} + +- (void)testClickOutsideTheRowsKeepsTheSelectionWhenItCannotBeEmpty +{ + [tableView setAllowsEmptySelection:NO]; + [self clickRow:1]; + [self clickPoint:CGPointMake(20.0, 290.0) flags:0 clicks:1]; + + [self assert:[1] equals:[self selectedRows]]; +} + +- (void)testCommandClickAddsAndRemovesARow +{ + [self clickRow:1]; + [self clickRow:3 flags:CPCommandKeyMask]; + + [self assert:[1, 3] equals:[self selectedRows]]; + + [self clickRow:1 flags:CPCommandKeyMask]; + + [self assert:[3] equals:[self selectedRows]]; +} + +- (void)testCommandClickReplacesTheSelectionWithoutMultipleSelection +{ + [tableView setAllowsMultipleSelection:NO]; + [self clickRow:1]; + [self clickRow:3 flags:CPCommandKeyMask]; + + [self assert:[3] equals:[self selectedRows]]; +} + +- (void)testShiftClickExtendsFromTheAnchor +{ + [self clickRow:1]; + [self clickRow:3 flags:CPShiftKeyMask]; + + [self assert:[1, 2, 3] equals:[self selectedRows]]; +} + +- (void)testDraggingAcrossRowsExtendsTheSelection +{ + [self sendEvent:[self mouseEvent:CPLeftMouseDown atPoint:[self pointInRow:1] flags:0 clicks:1]]; + [self sendEvent:[self mouseEvent:CPLeftMouseDragged atPoint:[self pointInRow:2] flags:0 clicks:1]]; + [self sendEvent:[self mouseEvent:CPLeftMouseDragged atPoint:[self pointInRow:3] flags:0 clicks:1]]; + [self sendEvent:[self mouseEvent:CPLeftMouseUp atPoint:[self pointInRow:3] flags:0 clicks:1]]; + + [self assert:[1, 2, 3] equals:[self selectedRows]]; +} + +- (void)testDelegateCanRefuseASelectionChange +{ + [delegate setAllowsSelectionChange:NO]; + [self clickRow:2]; + + [self assert:[] equals:[self selectedRows]]; + [self assertTrue:[delegate calls].indexOf(@"selectionShouldChange") !== -1]; +} + +- (void)testDelegateCanRefuseARow +{ + [delegate setRefusedRows:[2]]; + [self clickRow:2]; + + [self assert:[] equals:[self selectedRows]]; +} + +- (void)testDelegateCanReplaceTheProposedSelection +{ + [tableView setDelegate:[[_CPTableInteractionProposalDelegate alloc] init]]; + [self clickRow:1]; + + [self assert:[3] equals:[self selectedRows]]; +} + +- (void)testAClickReportsOneSelectionChange +{ + [self clickRow:2]; + + var changes = [delegate calls].filter(function(aCall) + { + return aCall === @"selectionDidChange"; + }); + + [self assert:1 equals:changes.length]; +} + +- (void)testClickingTheSelectedRowReportsNoChange +{ + [self clickRow:2]; + [delegate setCalls:[]]; + [self clickRow:2]; + + [self assertTrue:[delegate calls].indexOf(@"selectionDidChange") === -1]; +} + +- (void)testSelectAllSelectsEveryRow +{ + [tableView selectAll:nil]; + + [self assert:[0, 1, 2, 3, 4] equals:[self selectedRows]]; +} + +- (void)testDownArrowMovesTheSelection +{ + [self clickRow:1]; + [self pressKey:CPDownArrowFunctionKey flags:0]; + + [self assert:[2] equals:[self selectedRows]]; +} + +- (void)testUpArrowMovesTheSelection +{ + [self clickRow:2]; + [self pressKey:CPUpArrowFunctionKey flags:0]; + + [self assert:[1] equals:[self selectedRows]]; +} + +- (void)testArrowStopsAtTheLastRow +{ + [self clickRow:4]; + [self pressKey:CPDownArrowFunctionKey flags:0]; + + [self assert:[4] equals:[self selectedRows]]; +} + +- (void)testArrowSelectsAnEndRowWhenNothingIsSelected +{ + [self pressKey:CPDownArrowFunctionKey flags:0]; + [self assert:[0] equals:[self selectedRows]]; + + [tableView deselectAll:nil]; + [self pressKey:CPUpArrowFunctionKey flags:0]; + [self assert:[4] equals:[self selectedRows]]; +} + +- (void)testShiftArrowExtendsAndShrinksTheSelection +{ + [self clickRow:1]; + [self pressKey:CPDownArrowFunctionKey flags:CPShiftKeyMask]; + + [self assert:[1, 2] equals:[self selectedRows]]; + + [self pressKey:CPUpArrowFunctionKey flags:CPShiftKeyMask]; + + [self assert:[1] equals:[self selectedRows]]; +} + +- (void)testArrowSkipsARefusedRow +{ + [delegate setRefusedRows:[2]]; + [self clickRow:1]; + [self pressKey:CPDownArrowFunctionKey flags:0]; + + [self assert:[3] equals:[self selectedRows]]; +} + +- (void)testArrowRespectsARefusedSelectionChange +{ + [self clickRow:1]; + [delegate setAllowsSelectionChange:NO]; + [self pressKey:CPDownArrowFunctionKey flags:0]; + + [self assert:[1] equals:[self selectedRows]]; +} + +// MARK: Editing + +- (void)testEditingAnUnselectedRowRaises +{ + [self assertThrows:function() + { + [tableView editColumn:0 row:1 withEvent:nil select:YES]; + }]; +} + +- (void)testEditingReportsTheEditedCell +{ + [self clickRow:1]; + [tableView editColumn:0 row:1 withEvent:nil select:YES]; + + [self assert:0 equals:[tableView editedColumn]]; + [self assert:1 equals:[tableView editedRow]]; +} + +- (void)testEditingMakesTheCellTheFirstResponder +{ + [self clickRow:1]; + [tableView editColumn:0 row:1 withEvent:nil select:YES]; + + [self assertTrue:[[theWindow firstResponder] isKindOfClass:[CPTextField class]]]; + [self assert:@"One" equals:[[theWindow firstResponder] stringValue]]; +} + +- (void)testEndingAnEditCommitsTheValue +{ + [self clickRow:1]; + [tableView editColumn:0 row:1 withEvent:nil select:YES]; + + var field = [theWindow firstResponder]; + + [field setStringValue:@"Edited"]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPControlTextDidEndEditingNotification object:field]; + + [self assert:1 equals:[dataSource editedValues].length]; + [self assert:1 equals:[dataSource editedValues][0].row]; + [self assert:@"Edited" equals:[dataSource editedValues][0].value]; + [self assert:tableView equals:[theWindow firstResponder]]; +} + +- (void)testDoubleClickStartsEditing +{ + [self clickRow:1]; + [self clickPoint:[self pointInRow:1] flags:0 clicks:2]; + + [self assert:1 equals:[tableView editedRow]]; + [self assertTrue:[delegate calls].indexOf(@"shouldEdit") !== -1]; +} + +- (void)testDelegateCanRefuseAnEdit +{ + [delegate setAllowsEditing:NO]; + [self clickRow:1]; + [self clickPoint:[self pointInRow:1] flags:0 clicks:2]; + + [self assert:CPNotFound equals:[tableView editedRow]]; +} + +- (void)testAColumnThatIsNotEditableDoesNotStartAnEdit +{ + [tableColumn setEditable:NO]; + [self clickRow:1]; + [self clickPoint:[self pointInRow:1] flags:0 clicks:2]; + + [self assert:CPNotFound equals:[tableView editedRow]]; +} + +// MARK: Starting a drag + +- (void)dragFromRow:(int)aRow toPoint:(CGPoint)aPoint +{ + [self sendEvent:[self mouseEvent:CPLeftMouseDown atPoint:[self pointInRow:aRow] flags:0 clicks:1]]; + [self sendEvent:[self mouseEvent:CPLeftMouseDragged atPoint:aPoint flags:0 clicks:1]]; +} + +- (void)testADraggableTableSelectsOnMouseUp +{ + [self useDragDataSource]; + + [self sendEvent:[self mouseEvent:CPLeftMouseDown atPoint:[self pointInRow:2] flags:0 clicks:1]]; + [self assert:[] equals:[self selectedRows]]; + + [self sendEvent:[self mouseEvent:CPLeftMouseUp atPoint:[self pointInRow:2] flags:0 clicks:1]]; + [self assert:[2] equals:[self selectedRows]]; +} + +- (void)testDraggingARowStartsADrag +{ + [self useDragDataSource]; + + var start = [self pointInRow:2]; + + [self dragFromRow:2 toPoint:CGPointMake(start.x + 20.0, start.y)]; + + [self assert:1 equals:[[tableView dragCalls] count]]; + [self assert:[CPIndexSet indexSetWithIndex:2] equals:[dataSource writtenRows]]; + [self assert:[InteractionDragType] equals:[[tableView dragCalls][0].pasteboard types]]; + [self assert:tableView equals:[tableView dragCalls][0].source]; +} + +- (void)testDraggingASelectedRowDragsTheWholeSelection +{ + [self useDragDataSource]; + [tableView selectRowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(1, 2)] byExtendingSelection:NO]; + + var start = [self pointInRow:2]; + + [self dragFromRow:2 toPoint:CGPointMake(start.x + 20.0, start.y)]; + + [self assert:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(1, 2)] equals:[dataSource writtenRows]]; +} + +- (void)testAMoveWithinTheClickSlopDoesNotStartADrag +{ + [self useDragDataSource]; + + var start = [self pointInRow:2]; + + [self dragFromRow:2 toPoint:CGPointMake(start.x + 2.0, start.y)]; + + [self assertNull:[tableView dragCalls]]; +} + +- (void)testDataSourceCanRefuseADrag +{ + [self useDragDataSource]; + [dataSource setAllowsDrag:NO]; + + var start = [self pointInRow:2]; + + [self dragFromRow:2 toPoint:CGPointMake(start.x + 20.0, start.y)]; + + [self assertNull:[tableView dragCalls]]; +} + +// MARK: Dropping + +- (void)testAnUnregisteredTypeIsRefused +{ + [self useDragDataSource]; + [tableView unregisterDraggedTypes]; + + [self assert:CPDragOperationNone equals:[tableView draggingEntered:[self draggingInfoAtPoint:[self pointInRow:2]]]]; + [self assert:0 equals:[dataSource validations].length]; +} + +- (void)testARegisteredTypeIsValidated +{ + [self useDragDataSource]; + + [self assert:CPDragOperationMove equals:[tableView draggingEntered:[self draggingInfoAtPoint:[self pointInRow:2]]]]; + [self assert:1 equals:[dataSource validations].length]; +} + +- (void)testValidationCanRefuseADrop +{ + [self useDragDataSource]; + [dataSource setValidation:CPDragOperationNone]; + + [self assert:CPDragOperationNone equals:[tableView draggingUpdated:[self draggingInfoAtPoint:[self pointInRow:2]]]]; +} + +- (void)testTheMiddleOfARowProposesADropOnThatRow +{ + [self useDragDataSource]; + [tableView draggingUpdated:[self draggingInfoAtPoint:[self pointInRow:2]]]; + + [self assert:2 equals:[dataSource validations][0].row]; + [self assert:CPTableViewDropOn equals:[dataSource validations][0].operation]; +} + +- (void)testTheTopOfARowProposesADropAboveThatRow +{ + [self useDragDataSource]; + + var rect = [tableView rectOfRow:2]; + + [tableView draggingUpdated:[self draggingInfoAtPoint:CGPointMake(20.0, CGRectGetMinY(rect) + 1.0)]]; + + [self assert:2 equals:[dataSource validations][0].row]; + [self assert:CPTableViewDropAbove equals:[dataSource validations][0].operation]; +} + +- (void)testTheBottomOfARowProposesADropAboveTheNextRow +{ + [self useDragDataSource]; + + var rect = [tableView rectOfRow:2]; + + [tableView draggingUpdated:[self draggingInfoAtPoint:CGPointMake(20.0, CGRectGetMaxY(rect) - 1.0)]]; + + [self assert:3 equals:[dataSource validations][0].row]; + [self assert:CPTableViewDropAbove equals:[dataSource validations][0].operation]; +} + +- (void)testBelowTheLastRowProposesADropAtTheEnd +{ + [self useDragDataSource]; + [tableView draggingUpdated:[self draggingInfoAtPoint:CGPointMake(20.0, 290.0)]]; + + [self assert:5 equals:[dataSource validations][0].row]; + [self assert:CPTableViewDropAbove equals:[dataSource validations][0].operation]; +} + +- (void)testAcceptingADropReceivesTheProposedRow +{ + [self useDragDataSource]; + + var info = [self draggingInfoAtPoint:[self pointInRow:2]]; + + [tableView draggingUpdated:info]; + + [self assertTrue:[tableView prepareForDragOperation:info]]; + [self assertTrue:[tableView performDragOperation:info]]; + [self assert:2 equals:[dataSource acceptedDrops][0].row]; + [self assert:CPTableViewDropOn equals:[dataSource acceptedDrops][0].operation]; +} + +- (void)testDataSourceCanRefuseADrop +{ + [self useDragDataSource]; + [dataSource setAcceptsDrop:NO]; + + var info = [self draggingInfoAtPoint:[self pointInRow:2]]; + + [tableView draggingUpdated:info]; + + [self assertFalse:[tableView performDragOperation:info]]; +} + +- (void)testDataSourceCanRetargetADrop +{ + [self useDragDataSource]; + [dataSource setRetargetRow:4]; + [dataSource setRetargetOperation:CPTableViewDropAbove]; + + var info = [self draggingInfoAtPoint:[self pointInRow:2]]; + + [tableView draggingUpdated:info]; + [tableView performDragOperation:info]; + + [self assert:4 equals:[dataSource acceptedDrops][0].row]; + [self assert:CPTableViewDropAbove equals:[dataSource acceptedDrops][0].operation]; +} + +- (void)testPreparingADropNeedsValidation +{ + var info = [self draggingInfoAtPoint:[self pointInRow:2]]; + + [self assertFalse:[tableView prepareForDragOperation:info]]; +} + +@end diff --git a/Tests/AppKit/CPViewDecodedBehaviorTest.j b/Tests/AppKit/CPViewDecodedBehaviorTest.j new file mode 100644 index 000000000..47781492f --- /dev/null +++ b/Tests/AppKit/CPViewDecodedBehaviorTest.j @@ -0,0 +1,475 @@ +/* + * CPViewDecodedBehaviorTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + DropInArchiveTest.j checks that a decoded view has the right content. These tests + check that it still works: that its connections were restored, and that the + objects a class creates or observes for itself were set up again. + + A target or delegate is encoded conditionally, so each test archives a container + that holds the target too. Bindings are not here. They are stored in cibs as + connectors, and not in the views. +*/ + +@implementation _CPDecodedTarget : CPView +{ + int actionCount @accessors; + id lastSender @accessors; +} + +- (void)performAction:(id)aSender +{ + actionCount++; + lastSender = aSender; +} + +@end + +@implementation _CPDecodedTableDataSource : CPObject +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self init]; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ +} + +- (int)numberOfRowsInTableView:(CPTableView)aTableView +{ + return 3; +} + +- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRow +{ + return @"Row"; +} + +@end + +@implementation _CPDecodedOutlineDataSource : _CPDecodedTableDataSource +{ +} + +- (id)outlineView:(CPOutlineView)anOutlineView child:(int)anIndex ofItem:(id)anItem +{ + return anItem ? @"Child" : @"Parent"; +} + +- (BOOL)outlineView:(CPOutlineView)anOutlineView isItemExpandable:(id)anItem +{ + return anItem === @"Parent"; +} + +- (int)outlineView:(CPOutlineView)anOutlineView numberOfChildrenOfItem:(id)anItem +{ + return (!anItem || anItem === @"Parent") ? 1 : 0; +} + +- (id)outlineView:(CPOutlineView)anOutlineView objectValueForTableColumn:(CPTableColumn)aColumn byItem:(id)anItem +{ + return anItem; +} + +@end + +@implementation CPViewDecodedBehaviorTest : OJTestCase +{ + CPView container; + _CPDecodedTarget target; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + container = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 300.0)]; + target = [[_CPDecodedTarget alloc] initWithFrame:CGRectMakeZero()]; + + [container addSubview:target]; +} + +- (id)archived:(id)anObject +{ + return [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:anObject]]; +} + +/* + Connects a control to the target, archives the container, and returns the decoded + control. The decoded target is its action's receiver. +*/ +- (id)decodedConnectedControl:(CPControl)aControl +{ + [aControl setTarget:target]; + [aControl setAction:@selector(performAction:)]; + [container addSubview:aControl]; + + return [[self archived:container] subviews][1]; +} + +// MARK: Connections + +- (void)testAControlKeepsItsTargetAndAction +{ + var decoded = [self decodedConnectedControl:[[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 80.0, 24.0)]], + decodedTarget = [[decoded superview] subviews][0]; + + [self assert:decodedTarget equals:[decoded target]]; + [self assert:@selector(performAction:) equals:[decoded action]]; +} + +- (void)testADecodedButtonSendsItsAction +{ + var decoded = [self decodedConnectedControl:[[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 80.0, 24.0)]]; + + [decoded performClick:nil]; + + [self assert:1 equals:[[decoded target] actionCount]]; + [self assert:decoded equals:[[decoded target] lastSender]]; +} + +- (void)testADecodedSliderSendsItsAction +{ + var decoded = [self decodedConnectedControl:[[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 80.0, 24.0)]]; + + [decoded sendAction:[decoded action] to:[decoded target]]; + + [self assert:1 equals:[[decoded target] actionCount]]; +} + +- (void)testADecodedTextFieldKeepsItsDelegate +{ + var field = [[CPTextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 80.0, 24.0)]; + + [field setDelegate:target]; + [container addSubview:field]; + + var decoded = [[self archived:container] subviews][1]; + + [self assert:[[decoded superview] subviews][0] equals:[decoded delegate]]; +} + +- (void)testADecodedTabViewKeepsItsDelegate +{ + var tabView = [[CPTabView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + + [tabView setDelegate:target]; + [container addSubview:tabView]; + + var decoded = [[self archived:container] subviews][1]; + + [self assert:[[decoded superview] subviews][0] equals:[decoded delegate]]; +} + +- (void)testADecodedSplitViewKeepsItsDelegate +{ + var splitView = [[CPSplitView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + + [splitView setDelegate:target]; + [container addSubview:splitView]; + + var decoded = [[self archived:container] subviews][1]; + + [self assert:[[decoded superview] subviews][0] equals:[decoded delegate]]; +} + +// MARK: The view hierarchy + +- (void)testADecodedSubviewKeepsItsResponderChain +{ + var child = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [container addSubview:child]; + + var decoded = [self archived:container]; + + [self assert:decoded equals:[[decoded subviews][1] nextResponder]]; +} + +- (void)testADecodedViewAutoresizesItsSubviews +{ + var child = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + + [child setAutoresizingMask:CPViewWidthSizable]; + [container addSubview:child]; + + var decoded = [self archived:container]; + + [decoded setFrameSize:CGSizeMake(400.0, 300.0)]; + + [self assert:200.0 equals:CGRectGetWidth([[decoded subviews][1] frame])]; +} + +// MARK: Objects a class creates or observes + +- (void)testADecodedButtonBarFollowsAHiddenButton +{ + var buttonBar = [[CPButtonBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 26.0)], + buttons = [[CPButtonBar plusButton], [CPButtonBar minusButton]]; + + [buttonBar setButtons:buttons]; + [buttonBar layoutSubviews]; + + var decoded = [self archived:buttonBar], + decodedButtons = [decoded buttons]; + + [decoded layoutSubviews]; + [_CPDisplayServer run]; + + var firstOrigin = CGRectGetMinX([decodedButtons[0] frame]); + + [decodedButtons[0] setHidden:YES]; + [_CPDisplayServer run]; + + [self assert:firstOrigin equals:CGRectGetMinX([decodedButtons[1] frame])]; +} + +- (void)testADecodedStepperStepsItsValue +{ + var stepper = [[CPStepper alloc] initWithFrame:CGRectMake(0.0, 0.0, 30.0, 25.0)]; + + [stepper setMinValue:1.0]; + [stepper setMaxValue:9.0]; + [stepper setDoubleValue:4.0]; + + var decoded = [self decodedConnectedControl:stepper]; + + [decoded performClickUp:nil]; + [self assert:5.0 equals:[decoded doubleValue]]; + + [decoded performClickDown:nil]; + [self assert:4.0 equals:[decoded doubleValue]]; + + [self assert:2 equals:[[decoded target] actionCount]]; +} + +- (void)testADecodedSearchFieldCancelsItsText +{ + var field = [[CPSearchField alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 30.0)]; + + [field setStringValue:@"Text"]; + + var decoded = [self archived:field]; + + [decoded cancelOperation:nil]; + + [self assert:@"" equals:[decoded stringValue]]; + [self assertTrue:[[decoded cancelButton] isHidden]]; +} + +- (void)testADecodedPopUpButtonAcceptsNewItems +{ + var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 24.0)]; + + [button addItemsWithTitles:[@"One", @"Two"]]; + [button selectItemAtIndex:1]; + + var decoded = [self archived:button]; + + [self assert:1 equals:[decoded indexOfSelectedItem]]; + [self assert:@"Two" equals:[decoded titleOfSelectedItem]]; + + [decoded addItemWithTitle:@"Three"]; + [decoded selectItemAtIndex:2]; + + [self assert:3 equals:[decoded numberOfItems]]; + [self assert:@"Three" equals:[decoded title]]; +} + +- (void)testADecodedSegmentedControlSelectsASegment +{ + var control = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0)]; + + [control setSegmentCount:2]; + [control setLabel:@"One" forSegment:0]; + [control setLabel:@"Two" forSegment:1]; + [control setSelectedSegment:0]; + + var decoded = [self archived:control]; + + [self assert:0 equals:[decoded selectedSegment]]; + [self assert:@"Two" equals:[decoded labelForSegment:1]]; + + [decoded setSelectedSegment:1]; + + [self assert:1 equals:[decoded selectedSegment]]; +} + +- (void)testADecodedTabViewSwitchesItsContent +{ + var tabView = [[CPTabView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)]; + + [@"one", @"two"].forEach(function(anIdentifier) + { + var item = [[CPTabViewItem alloc] initWithIdentifier:anIdentifier]; + + [item setLabel:anIdentifier]; + [item setView:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)]]; + [tabView addTabViewItem:item]; + }); + + [tabView selectTabViewItemAtIndex:1]; + + var decoded = [self archived:tabView]; + + [self assert:@"two" equals:[[decoded selectedTabViewItem] identifier]]; + [self assertNotNull:[[[decoded selectedTabViewItem] view] superview]]; + + [decoded selectTabViewItemAtIndex:0]; + + [self assert:@"one" equals:[[decoded selectedTabViewItem] identifier]]; + [self assertNotNull:[[[decoded selectedTabViewItem] view] superview]]; +} + +- (void)testADecodedSplitViewMovesItsDivider +{ + var splitView = [[CPSplitView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 100.0)]; + + [splitView setVertical:YES]; + [splitView addSubview:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 95.0, 100.0)]]; + [splitView addSubview:[[CPView alloc] initWithFrame:CGRectMake(100.0, 0.0, 95.0, 100.0)]]; + + var decoded = [self archived:splitView]; + + [decoded setPosition:60.0 ofDividerAtIndex:0]; + + [self assert:60.0 equals:CGRectGetWidth([[decoded arrangedSubviews][0] frame])]; +} + +- (void)testADecodedScrollViewScrollsItsDocument +{ + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + + [scrollView setDocumentView:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 300.0)]]; + + var decoded = [self archived:scrollView]; + + [[decoded documentView] scrollPoint:CGPointMake(0.0, 50.0)]; + + [self assert:50.0 equals:CGRectGetMinY([decoded documentVisibleRect])]; +} + +- (void)testADecodedBoxAcceptsANewContentView +{ + var box = [[CPBox alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 100.0)]; + + [box setContentView:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)]]; + + var decoded = [self archived:box], + newContentView = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 60.0)]; + + [decoded setContentView:newContentView]; + + [self assert:newContentView equals:[decoded contentView]]; + [self assertNotNull:[newContentView superview]]; +} + +- (void)testADecodedAccordionKeepsACollapsedItem +{ + var accordion = [[CPAccordionView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)], + item = [[CPAccordionViewItem alloc] initWithIdentifier:@"item"]; + + [item setLabel:@"Item"]; + [item setView:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 50.0)]]; + [accordion addItem:item]; + [accordion collapseItemAtIndex:0]; + + var decoded = [self archived:accordion]; + + [self assertFalse:[[decoded expandedItemIndexes] containsIndex:0]]; + + [decoded toggleItemAtIndex:0]; + + [self assertTrue:[[decoded expandedItemIndexes] containsIndex:0]]; +} + +- (void)testADecodedStackViewAcceptsAnArrangedSubview +{ + var stackView = [[CPStackView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)]; + + [stackView addArrangedSubview:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)]]; + + var decoded = [self archived:stackView]; + + [decoded addArrangedSubview:[[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)]]; + + [self assert:2 equals:[[decoded arrangedSubviews] count]]; +} + +- (void)testADecodedTokenFieldEndsWithItsTokens +{ + var field = [[CPTokenField alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 30.0)]; + + [field setObjectValue:[@"One", @"Two"]]; + + var decoded = [self archived:field]; + + [self assert:[@"One", @"Two"] equals:[decoded objectValue]]; + + [decoded setObjectValue:[@"Two"]]; + + [self assert:[@"Two"] equals:[decoded objectValue]]; +} + +- (void)testADecodedTableReadsItsDataSource +{ + var tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)]; + + [tableView addTableColumn:[[CPTableColumn alloc] initWithIdentifier:@"Column"]]; + [tableView setDataSource:[[_CPDecodedTableDataSource alloc] init]]; + + var decoded = [self archived:tableView]; + + [decoded reloadData]; + + [self assert:3 equals:[decoded numberOfRows]]; +} + +- (void)testADecodedOutlineReadsItsDataSource +{ + var outlineView = [[CPOutlineView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)], + column = [[CPTableColumn alloc] initWithIdentifier:@"Column"]; + + [outlineView addTableColumn:column]; + [outlineView setOutlineTableColumn:column]; + [outlineView setDataSource:[[_CPDecodedOutlineDataSource alloc] init]]; + + var decoded = [self archived:outlineView]; + + [decoded reloadData]; + + [self assert:1 equals:[decoded numberOfRows]]; + [self assert:@"Parent" equals:[decoded itemAtRow:0]]; + [self assert:@"Parent" equals:[decoded _objectValueForTableColumn:[decoded outlineTableColumn] row:0 useCache:NO]]; + + [decoded expandItem:@"Parent"]; + + [self assert:2 equals:[decoded numberOfRows]]; +} + +@end diff --git a/Tests/AppKit/CPViewThemeChangeTest.j b/Tests/AppKit/CPViewThemeChangeTest.j new file mode 100644 index 000000000..5b139a2f8 --- /dev/null +++ b/Tests/AppKit/CPViewThemeChangeTest.j @@ -0,0 +1,327 @@ +/* + * CPViewThemeChangeTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + A view resolves each theme attribute from its own values, then its theme, then its + class default. When any of these changes, the view must resolve the new value and + lay itself out again. These tests build small themes in code, so they depend on no + real theme. +*/ + +@implementation _CPThemeChangeView : CPView +{ + int layoutCount @accessors; + int themeChangeCount @accessors; + int displayRequestCount @accessors; +} + ++ (CPString)defaultThemeClass +{ + return @"theme-change-view"; +} + ++ (CPDictionary)themeAttributes +{ + return @{ + @"accent": @"class default", + @"margin": @"class default" + }; +} + +- (void)layoutSubviews +{ + layoutCount++; +} + +/* + needsDisplay is true only for a view with its own drawRect:, so the request is + recorded here. +*/ +- (void)setNeedsDisplay:(BOOL)aFlag +{ + if (aFlag) + displayRequestCount++; + + [super setNeedsDisplay:aFlag]; +} + +- (void)objectDidChangeTheme +{ + themeChangeCount++; + + [super objectDidChangeTheme]; +} + +@end + +@implementation CPViewThemeChangeTest : OJTestCase +{ + CPTheme firstTheme; + CPTheme secondTheme; + CPTheme defaultTheme; + _CPThemeChangeView view; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + defaultTheme = [CPTheme defaultTheme]; + firstTheme = [self themeNamed:@"theme-change-first" themeClass:nil accent:@"first"]; + secondTheme = [self themeNamed:@"theme-change-second" themeClass:nil accent:@"second"]; + view = [self newView]; + + [view setTheme:firstTheme]; + [_CPDisplayServer run]; + [view setLayoutCount:0]; + [view setThemeChangeCount:0]; +} + +- (void)tearDown +{ + [CPTheme setDefaultTheme:defaultTheme]; +} + +- (_CPThemeChangeView)newView +{ + return [[_CPThemeChangeView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; +} + +- (CPTheme)themeNamed:(CPString)aName themeClass:(CPString)aThemeClass accent:(CPString)anAccent +{ + var theme = [[CPTheme alloc] initWithName:aName], + template = [self newView]; + + if (aThemeClass) + [template setThemeClass:aThemeClass]; + + [template setValue:anAccent forThemeAttribute:@"accent"]; + [theme takeThemeFromObject:template]; + + return theme; +} + +- (id)archived:(CPView)aView +{ + return [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:aView]]; +} + +- (void)assertAccent:(CPString)aValue ofView:(CPView)aView +{ + [self assert:aValue equals:[aView currentValueForThemeAttribute:@"accent"]]; +} + +- (void)testAViewResolvesItsThemeValue +{ + [self assertAccent:@"first" ofView:view]; +} + +- (void)testAnAttributeTheThemeDoesNotDefineUsesTheClassDefault +{ + [self assert:@"class default" equals:[view currentValueForThemeAttribute:@"margin"]]; +} + +- (void)testAViewWithoutAThemeUsesTheClassDefault +{ + [view setTheme:nil]; + + [self assertAccent:@"class default" ofView:view]; +} + +- (void)testSettingAThemeChangesTheResolvedValue +{ + [view setTheme:secondTheme]; + + [self assertAccent:@"second" ofView:view]; +} + +- (void)testSettingAThemeNotifiesTheView +{ + [view setTheme:secondTheme]; + + [self assert:1 equals:[view themeChangeCount]]; +} + +- (void)testSettingTheSameThemeDoesNothing +{ + [view setTheme:firstTheme]; + + [self assert:0 equals:[view themeChangeCount]]; +} + +- (void)testSettingAThemeQueuesLayout +{ + [view setTheme:secondTheme]; + [_CPDisplayServer run]; + + [self assert:1 equals:[view layoutCount]]; +} + +- (void)testSettingAThemeRequestsDisplay +{ + [view setDisplayRequestCount:0]; + [view setTheme:secondTheme]; + + [self assertTrue:[view displayRequestCount] > 0]; +} + +- (void)testAThemeChangeReachesNestedViews +{ + var parent = [self newView], + child = [self newView], + grandchild = [self newView]; + + [parent addSubview:child]; + [child addSubview:grandchild]; + [parent _setThemeIncludingDescendants:secondTheme]; + + [self assertAccent:@"second" ofView:parent]; + [self assertAccent:@"second" ofView:child]; + [self assertAccent:@"second" ofView:grandchild]; +} + +- (void)testAPerViewValueTakesPriorityOverTheTheme +{ + [view setValue:@"own" forThemeAttribute:@"accent"]; + + [self assertAccent:@"own" ofView:view]; +} + +- (void)testAPerViewValueSurvivesAThemeChange +{ + [view setValue:@"own" forThemeAttribute:@"accent"]; + [view setTheme:secondTheme]; + + [self assertAccent:@"own" ofView:view]; +} + +- (void)testAPerViewValueQueuesLayout +{ + [view setValue:@"own" forThemeAttribute:@"accent"]; + [_CPDisplayServer run]; + + [self assert:1 equals:[view layoutCount]]; +} + +- (void)testSettingTheSamePerViewValueQueuesNoLayout +{ + [view setValue:@"first" forThemeAttribute:@"accent"]; + [_CPDisplayServer run]; + + [self assert:0 equals:[view layoutCount]]; +} + +- (void)testAStateSelectsItsValue +{ + [view setValue:@"disabled" forThemeAttribute:@"accent" inState:CPThemeStateDisabled]; + [self assertAccent:@"first" ofView:view]; + + [view setThemeState:CPThemeStateDisabled]; + [self assertAccent:@"disabled" ofView:view]; + + [view unsetThemeState:CPThemeStateDisabled]; + [self assertAccent:@"first" ofView:view]; +} + +- (void)testAStateChangeQueuesLayout +{ + [view setThemeState:CPThemeStateDisabled]; + [_CPDisplayServer run]; + + [self assert:1 equals:[view layoutCount]]; +} + +- (void)testSettingAThemeClassChangesTheResolvedValue +{ + var theme = [self themeNamed:@"theme-change-class" themeClass:@"other-class" accent:@"other class"]; + + [view setTheme:theme]; + [view setThemeClass:@"other-class"]; + + [self assertAccent:@"other class" ofView:view]; +} + +- (void)testSettingAThemeClassQueuesLayout +{ + [view setThemeClass:@"other-class"]; + [_CPDisplayServer run]; + + [self assert:1 equals:[view layoutCount]]; +} + +- (void)testANewViewUsesTheDefaultTheme +{ + [CPTheme setDefaultTheme:secondTheme]; + + [self assertAccent:@"second" ofView:[self newView]]; +} + +- (void)testChangingTheDefaultThemeLeavesAnExistingViewUnchanged +{ + [CPTheme setDefaultTheme:secondTheme]; + + [self assertAccent:@"first" ofView:view]; +} + +- (void)testADecodedViewUsesTheDefaultTheme +{ + [CPTheme setDefaultTheme:secondTheme]; + + [self assertAccent:@"second" ofView:[self archived:view]]; +} + +- (void)testADecodedViewKeepsAPerViewValue +{ + [view setValue:@"own" forThemeAttribute:@"accent"]; + + [self assertAccent:@"own" ofView:[self archived:view]]; +} + +- (void)testADecodedViewKeepsAPerViewStateValue +{ + [view setValue:@"disabled" forThemeAttribute:@"accent" inState:CPThemeStateDisabled]; + + var decoded = [self archived:view]; + + [decoded setThemeState:CPThemeStateDisabled]; + + [self assertAccent:@"disabled" ofView:decoded]; +} + +- (void)testADecodedViewKeepsItsThemeState +{ + [view setThemeState:CPThemeStateDisabled]; + + [self assertTrue:[[self archived:view] hasThemeState:CPThemeStateDisabled]]; +} + +- (void)testADecodedViewKeepsItsThemeClass +{ + [view setThemeClass:@"other-class"]; + + [self assert:@"other-class" equals:[[self archived:view] themeClass]]; +} + +@end diff --git a/Tests/AppKit/CPViewThemeStateTest.j b/Tests/AppKit/CPViewThemeStateTest.j new file mode 100644 index 000000000..38028859d --- /dev/null +++ b/Tests/AppKit/CPViewThemeStateTest.j @@ -0,0 +1,408 @@ +/* + * CPViewThemeStateTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + A theme value is chosen by the state of a view, so a view with the wrong state + draws wrongly with a correct theme. These tests check that the states that depend + on a view's surroundings stay correct as views enter and leave windows and as + windows change. The states are the key window state, the first responder state + and the appearance states. Only a window's own window view has the main window + state. + + These tests run with no theme loaded. They check the states, and not what a theme + does with them. +*/ + +@implementation _CPThemeStateRecordingView : CPView +{ + CPArray calls @accessors; + BOOL hadKeyStateOnArrival @accessors; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + + if (self) + calls = []; + + return self; +} + +- (BOOL)acceptsFirstResponder +{ + return YES; +} + +- (void)viewWillMoveToWindow:(CPWindow)aWindow +{ + calls.push({ @"call": @"willMove", @"from": [self window], @"to": aWindow }); +} + +- (void)viewDidMoveToWindow +{ + hadKeyStateOnArrival = [self hasThemeState:CPThemeStateKeyWindow]; + calls.push({ @"call": @"didMove", @"window": [self window] }); +} + +@end + +@implementation CPViewThemeStateTest : OJTestCase +{ + CPWindow firstWindow; + CPWindow secondWindow; + _CPThemeStateRecordingView parentView; + _CPThemeStateRecordingView childView; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + firstWindow = [self newWindow]; + secondWindow = [self newWindow]; + + parentView = [[_CPThemeStateRecordingView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; + childView = [[_CPThemeStateRecordingView alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)]; + + [parentView addSubview:childView]; +} + +- (CPWindow)newWindow +{ + return [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 200.0, 200.0) styleMask:CPTitledWindowMask]; +} + +- (void)assertKeyState:(BOOL)shouldHaveState +{ + [self assert:shouldHaveState equals:[parentView hasThemeState:CPThemeStateKeyWindow] message:@"parent view"]; + [self assert:shouldHaveState equals:[childView hasThemeState:CPThemeStateKeyWindow] message:@"child view"]; +} + +- (void)assertFirstResponderState:(BOOL)shouldHaveState +{ + [self assert:shouldHaveState equals:[parentView hasThemeState:CPThemeStateFirstResponder] message:@"parent view"]; + [self assert:shouldHaveState equals:[childView hasThemeState:CPThemeStateFirstResponder] message:@"child view"]; +} + +- (void)clearCalls +{ + [parentView setCalls:[]]; + [childView setCalls:[]]; +} + +// MARK: Key window state + +- (void)testAViewOutsideAWindowHasNoKeyState +{ + [self assertKeyState:NO]; +} + +- (void)testBecomingKeyReachesNestedViews +{ + [[firstWindow contentView] addSubview:parentView]; + [self assertKeyState:NO]; + + [firstWindow makeKeyWindow]; + [self assertKeyState:YES]; +} + +- (void)testResigningKeyReachesNestedViews +{ + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeKeyWindow]; + [firstWindow resignKeyWindow]; + + [self assertKeyState:NO]; +} + +- (void)testAnotherWindowBecomingKeyClearsTheState +{ + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeKeyWindow]; + [secondWindow makeKeyWindow]; + + [self assertKeyState:NO]; +} + +- (void)testAViewAddedToAKeyWindowGainsTheState +{ + [firstWindow makeKeyWindow]; + [[firstWindow contentView] addSubview:parentView]; + + [self assertKeyState:YES]; +} + +- (void)testAViewAddedBelowAViewInAKeyWindowGainsTheState +{ + var lateView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeKeyWindow]; + [childView addSubview:lateView]; + + [self assertTrue:[lateView hasThemeState:CPThemeStateKeyWindow]]; +} + +- (void)testAViewRemovedFromAKeyWindowLosesTheState +{ + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeKeyWindow]; + [parentView removeFromSuperview]; + + [self assertKeyState:NO]; +} + +- (void)testMovingToANonKeyWindowClearsTheState +{ + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeKeyWindow]; + [[secondWindow contentView] addSubview:parentView]; + + [self assertKeyState:NO]; +} + +- (void)testMovingToAKeyWindowSetsTheState +{ + [[firstWindow contentView] addSubview:parentView]; + [secondWindow makeKeyWindow]; + [[secondWindow contentView] addSubview:parentView]; + + [self assertKeyState:YES]; +} + +- (void)testANewContentViewGainsTheState +{ + [firstWindow makeKeyWindow]; + [firstWindow setContentView:parentView]; + + [self assertKeyState:YES]; +} + +- (void)testTheStateIsCorrectInViewDidMoveToWindow +{ + [firstWindow makeKeyWindow]; + [[firstWindow contentView] addSubview:parentView]; + + [self assertTrue:[parentView hadKeyStateOnArrival]]; + [self assertTrue:[childView hadKeyStateOnArrival]]; +} + +// MARK: Window view + +/* + A window must be visible to become main, and ordering a window front needs a DOM. + So this test sends becomeMainWindow directly, and it does not cover makeMainWindow. +*/ +- (void)testTheWindowViewFollowsKeyAndMainStatus +{ + var windowView = [firstWindow _windowView]; + + [firstWindow makeKeyWindow]; + [firstWindow becomeMainWindow]; + + [self assertTrue:[windowView hasThemeState:CPThemeStateKeyWindow]]; + [self assertTrue:[windowView hasThemeState:CPThemeStateMainWindow]]; + + [firstWindow resignKeyWindow]; + [firstWindow resignMainWindow]; + + [self assertFalse:[windowView hasThemeState:CPThemeStateKeyWindow]]; + [self assertFalse:[windowView hasThemeState:CPThemeStateMainWindow]]; +} + +// MARK: First responder state + +- (void)testBecomingFirstResponderReachesNestedViews +{ + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeFirstResponder:parentView]; + + [self assertFirstResponderState:YES]; +} + +- (void)testResigningFirstResponderReachesNestedViews +{ + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeFirstResponder:parentView]; + [firstWindow makeFirstResponder:nil]; + + [self assertFirstResponderState:NO]; +} + +- (void)testAViewAddedBelowTheFirstResponderGainsTheState +{ + var lateView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeFirstResponder:parentView]; + [childView addSubview:lateView]; + + [self assertTrue:[lateView hasThemeState:CPThemeStateFirstResponder]]; +} + +- (void)testRemovingTheFirstResponderClearsTheState +{ + [[firstWindow contentView] addSubview:parentView]; + [firstWindow makeFirstResponder:parentView]; + [parentView removeFromSuperview]; + + [self assertFirstResponderState:NO]; + [self assertFalse:[firstWindow firstResponder] === parentView]; +} + +// MARK: Window notifications + +- (void)testEnteringAWindowNotifiesEachViewInOrder +{ + [[firstWindow contentView] addSubview:parentView]; + + [parentView, childView].forEach(function(aView) + { + var calls = [aView calls]; + + [self assert:2 equals:calls.length]; + [self assert:@"willMove" equals:calls[0].call]; + [self assert:firstWindow equals:calls[0].to]; + [self assertNull:calls[0].from]; + [self assert:@"didMove" equals:calls[1].call]; + [self assert:firstWindow equals:calls[1].window]; + }); +} + +- (void)testLeavingAWindowNotifiesEachView +{ + [[firstWindow contentView] addSubview:parentView]; + [self clearCalls]; + [parentView removeFromSuperview]; + + [parentView, childView].forEach(function(aView) + { + var calls = [aView calls]; + + [self assert:2 equals:calls.length]; + [self assertNull:calls[0].to]; + [self assert:firstWindow equals:calls[0].from]; + [self assertNull:calls[1].window]; + }); +} + +- (void)testMovingBetweenWindowsNotifiesEachView +{ + [[firstWindow contentView] addSubview:parentView]; + [self clearCalls]; + [[secondWindow contentView] addSubview:parentView]; + + [parentView, childView].forEach(function(aView) + { + var calls = [aView calls]; + + [self assert:2 equals:calls.length]; + [self assert:firstWindow equals:calls[0].from]; + [self assert:secondWindow equals:calls[0].to]; + [self assert:secondWindow equals:calls[1].window]; + }); +} + +/* + Cocoa also sends these notifications when a view stays in its window and only its + position in the view hierarchy changes. +*/ +- (void)testMovingWithinAWindowNotifiesEachView +{ + var otherView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [[firstWindow contentView] addSubview:parentView]; + [[firstWindow contentView] addSubview:otherView]; + [self clearCalls]; + [otherView addSubview:parentView]; + + [parentView, childView].forEach(function(aView) + { + var calls = [aView calls]; + + [self assert:2 equals:calls.length]; + [self assert:@"willMove" equals:calls[0].call]; + [self assert:firstWindow equals:calls[0].to]; + [self assert:@"didMove" equals:calls[1].call]; + [self assert:firstWindow equals:calls[1].window]; + }); +} + +// MARK: Appearance states + +- (void)testEffectiveAppearanceComesFromTheNearestAncestor +{ + var appearance = [CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]; + + [parentView setAppearance:appearance]; + + [self assert:appearance equals:[childView effectiveAppearance]]; +} + +- (void)testOwnAppearanceOverridesAnAncestor +{ + var appearance = [CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]; + + [parentView setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + [childView setAppearance:appearance]; + + [self assert:appearance equals:[childView effectiveAppearance]]; +} + +- (void)testAppearanceStateReachesNestedViews +{ + [parentView setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + [_CPDisplayServer run]; + + [self assertTrue:[parentView hasThemeState:CPThemeStateAppearanceVibrantDark]]; + [self assertTrue:[childView hasThemeState:CPThemeStateAppearanceVibrantDark]]; +} + +- (void)testChangingAppearanceReplacesTheState +{ + [parentView setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + [_CPDisplayServer run]; + [parentView setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; + [_CPDisplayServer run]; + + [self assertFalse:[childView hasThemeState:CPThemeStateAppearanceVibrantDark]]; + [self assertTrue:[childView hasThemeState:CPThemeStateAppearanceVibrantLight]]; +} + +- (void)testAViewAddedBelowAnAppearanceGainsItsState +{ + var lateView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [parentView setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + [_CPDisplayServer run]; + [childView addSubview:lateView]; + [lateView setNeedsLayout]; + [_CPDisplayServer run]; + + [self assertTrue:[lateView hasThemeState:CPThemeStateAppearanceVibrantDark]]; +} + +@end diff --git a/Tests/AppKit/DropInArchiveFixtures.j b/Tests/AppKit/DropInArchiveFixtures.j new file mode 100644 index 000000000..58add4ede --- /dev/null +++ b/Tests/AppKit/DropInArchiveFixtures.j @@ -0,0 +1,287 @@ +/* + * DropInArchiveFixtures.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 "DropInSnapshot.j" + +/* + Creates the views that the archive tests write and read back. An empty view has + little to lose, so each view holds real content. The reference for a view is its + own description before it is archived, never what a build restores. +*/ + +/* + The only view classes without a fixture. Each entry states the reason. Any other + class that cannot be archived is a failure. +*/ +var DropInArchiveExclusions = { + @"CPText": @"it is abstract and its text methods raise an exception", + @"CPWebView": @"creating one needs a DOM" + }; + +function DropInArchiveExclusion(aClassName) +{ + return DropInArchiveExclusions[aClassName]; +} + +function DropInArchiveChild(aWidth, aHeight) +{ + return [[CPView alloc] initWithFrame:CGRectMake(3.0, 5.0, aWidth, aHeight)]; +} + +function DropInArchiveTableColumn(anIdentifier) +{ + var column = [[CPTableColumn alloc] initWithIdentifier:anIdentifier]; + + [column setWidth:60.0]; + + return column; +} + +/* + The content of each class. A class without an entry uses the entry of its + nearest superclass. +*/ +var DropInArchivePopulators = { + @"CPView": function(aView) + { + [aView addSubview:DropInArchiveChild(20.0, 10.0)]; + }, + @"CPControl": function(aControl) + { + [aControl setEnabled:NO]; + [aControl setTag:7]; + }, + @"CPAccordionView": function(anAccordionView) + { + var item = [[CPAccordionViewItem alloc] initWithIdentifier:@"item"]; + + [item setLabel:@"Item"]; + [item setView:DropInArchiveChild(40.0, 30.0)]; + [anAccordionView addItem:item]; + }, + @"CPBox": function(aBox) + { + var content = DropInArchiveChild(60.0, 40.0); + + [content addSubview:DropInArchiveChild(20.0, 10.0)]; + [aBox setTitle:@"Box"]; + [aBox setTitlePosition:CPAtTop]; + [aBox setContentView:content]; + }, + @"CPButton": function(aButton) + { + [aButton setTitle:@"Button"]; + [aButton setState:CPOnState]; + [aButton setTag:7]; + }, + @"CPButtonBar": function(aButtonBar) + { + [aButtonBar setButtons:[[CPButtonBar plusButton], [CPButtonBar minusButton]]]; + }, + @"CPColorWell": function(aColorWell) + { + [aColorWell setColor:[CPColor redColor]]; + }, + @"CPComboBox": function(aComboBox) + { + [aComboBox addItemsWithObjectValues:[@"One", @"Two"]]; + [aComboBox setStringValue:@"One"]; + }, + @"CPDatePicker": function(aDatePicker) + { + [aDatePicker setDateValue:[[CPDate alloc] initWithString:@"2026-10-31 12:00:00 +0000"]]; + }, + @"CPLevelIndicator": function(aLevelIndicator) + { + [aLevelIndicator setMinValue:1.0]; + [aLevelIndicator setMaxValue:9.0]; + [aLevelIndicator setDoubleValue:4.0]; + }, + @"CPOutlineView": function(anOutlineView) + { + var column = DropInArchiveTableColumn(@"one"); + + [anOutlineView addTableColumn:column]; + [anOutlineView setOutlineTableColumn:column]; + }, + @"CPPopUpButton": function(aPopUpButton) + { + [aPopUpButton addItemsWithTitles:[@"One", @"Two"]]; + [aPopUpButton selectItemAtIndex:1]; + }, + @"CPProgressIndicator": function(aProgressIndicator) + { + [aProgressIndicator setMinValue:1.0]; + [aProgressIndicator setMaxValue:9.0]; + [aProgressIndicator setDoubleValue:4.0]; + }, + @"CPScrollView": function(aScrollView) + { + [aScrollView setDocumentView:DropInArchiveChild(300.0, 400.0)]; + }, + @"CPSegmentedControl": function(aSegmentedControl) + { + [aSegmentedControl setSegmentCount:2]; + [aSegmentedControl setLabel:@"One" forSegment:0]; + [aSegmentedControl setLabel:@"Two" forSegment:1]; + [aSegmentedControl setWidth:40.0 forSegment:0]; + [aSegmentedControl setWidth:40.0 forSegment:1]; + }, + @"CPSlider": function(aSlider) + { + [aSlider setMinValue:1.0]; + [aSlider setMaxValue:9.0]; + [aSlider setDoubleValue:4.0]; + }, + @"CPSplitView": function(aSplitView) + { + [aSplitView addSubview:DropInArchiveChild(40.0, 90.0)]; + [aSplitView addSubview:DropInArchiveChild(40.0, 90.0)]; + }, + @"CPStackView": function(aStackView) + { + [aStackView addArrangedSubview:DropInArchiveChild(40.0, 30.0)]; + }, + @"CPStepper": function(aStepper) + { + [aStepper setMinValue:1.0]; + [aStepper setMaxValue:9.0]; + [aStepper setDoubleValue:4.0]; + }, + @"CPTableView": function(aTableView) + { + [aTableView addTableColumn:DropInArchiveTableColumn(@"one")]; + [aTableView addTableColumn:DropInArchiveTableColumn(@"two")]; + }, + @"CPTabView": function(aTabView) + { + ["one", "two"].forEach(function(anIdentifier) + { + var item = [[CPTabViewItem alloc] initWithIdentifier:anIdentifier]; + + [item setLabel:anIdentifier]; + [item setView:DropInArchiveChild(40.0, 30.0)]; + [aTabView addTabViewItem:item]; + }); + + [aTabView selectTabViewItemAtIndex:1]; + }, + @"CPTextView": function(aTextView) + { + [aTextView setString:@"Text"]; + }, + @"CPTextField": function(aTextField) + { + [aTextField setStringValue:@"Text"]; + [aTextField setEditable:YES]; + [aTextField setBezeled:YES]; + }, + @"CPTokenField": function(aTokenField) + { + [aTokenField setObjectValue:[@"One", @"Two"]]; + } + }; + +function DropInArchivePopulator(aClass) +{ + for (; aClass; aClass = class_getSuperclass(aClass)) + if (DropInArchivePopulators[aClass.name]) + return DropInArchivePopulators[aClass.name]; + + return nil; +} + +function DropInArchiveFixture(aClass) +{ + var view = [[aClass alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 100.0)]; + + DropInArchivePopulator(aClass)(view); + + return view; +} + +/* + Lists each place where two view descriptions differ. +*/ +function DropInTreeDifferences(expected, current, aPath, differences) +{ + if (expected && current && typeof expected === "object" && typeof current === "object") + { + Object.keys(expected).concat(Object.keys(current)).filter(function(aKey, anIndex, aList) + { + return aList.indexOf(aKey) === anIndex; + }).forEach(function(aKey) + { + DropInTreeDifferences(expected[aKey], current[aKey], aPath + "." + aKey, differences); + }); + } + else if (expected !== current) + differences.push(aPath + ": " + JSON.stringify(expected) + " is now " + JSON.stringify(current)); + + return differences; +} + +/* + Layout changes frames and adds subviews, and a new view has not asked for it. Every + view is laid out before it is described, so that two descriptions are comparable. +*/ +function DropInArchiveLayOut(aView) +{ + [aView setNeedsLayout]; + [_CPDisplayServer run]; +} + +/* + Archives a fixture and reads it back. +*/ +function DropInArchiveRoundTrip(aClass) +{ + return DropInWithFixedScrollerStyle(function() + { + var view = DropInArchiveFixture(aClass); + + DropInArchiveLayOut(view); + + var original = DropInViewTree(view), + data = [CPKeyedArchiver archivedDataWithRootObject:view], + decoded = [CPKeyedUnarchiver unarchiveObjectWithData:data]; + + DropInArchiveLayOut(decoded); + + return { @"archive": [data rawString], @"original": original, @"decoded": DropInViewTree(decoded) }; + }); +} + +/* + Reads a saved archive back and describes the view. +*/ +function DropInSavedArchiveTree(aRawString) +{ + return DropInWithFixedScrollerStyle(function() + { + var decoded = [CPKeyedUnarchiver unarchiveObjectWithData:[CPData dataWithRawString:aRawString]]; + + DropInArchiveLayOut(decoded); + + return DropInViewTree(decoded); + }); +} diff --git a/Tests/AppKit/DropInArchiveGenerator.j b/Tests/AppKit/DropInArchiveGenerator.j new file mode 100644 index 000000000..c1500a8d5 --- /dev/null +++ b/Tests/AppKit/DropInArchiveGenerator.j @@ -0,0 +1,92 @@ +/* + * DropInArchiveGenerator.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 "DropInArchiveFixtures.j" + +/* + Saves the archive test data. Run this only against a build of main: + + objj Tests/AppKit/DropInArchiveGenerator.j + + It saves a description of what each reference cib produces. It then saves an + archive of each view fixture, with the fixture's description before archiving. + An archive is saved only if it restores that description, so a failure stops + the generator and no archive data is written. +*/ +var fs = require("fs"), + path = require("path"); + +function main(args, namedArgs) +{ + [[CPApplication alloc] init]; + + var resources = path.join(process.cwd(), "Tests", "AppKit", "Resources"), + cibFolder = path.join(resources, "DropInCibs"), + archives = {}, + cibs = {}, + failures = []; + + fs.readdirSync(cibFolder).sort().forEach(function(aName) + { + cibs[aName] = DropInCibTree(aName, fs.readFileSync(path.join(cibFolder, aName), {encoding: 'utf-8'})); + print(aName + ": " + cibs[aName].length + " top level objects"); + }); + + fs.writeFileSync(path.join(resources, "DropInCibs.json"), JSON.stringify(cibs, null, 1) + "\n"); + + DropInSortedClasses().forEach(function(aClass) + { + var name = aClass.name; + + if (!DropInIsPublicName(name) || !DropInClassIsView(aClass)) + return; + + if (DropInArchiveExclusion(name)) + return print("excluded " + name + ": " + DropInArchiveExclusion(name)); + + try + { + var result = DropInArchiveRoundTrip(aClass), + differences = DropInTreeDifferences(result.original, result.decoded, name, []); + + if (differences.length) + failures = failures.concat(differences); + else + archives[name] = { @"archive": result.archive, @"state": result.original }; + } + catch (anException) + { + failures.push(name + ": " + String(anException)); + } + }); + + if (failures.length) + { + failures.forEach(function(aLine) { print("failed " + aLine); }); + print(failures.length + " failures, no archive data written"); + process.exit(1); + } + + fs.writeFileSync(path.join(resources, "DropInArchives.json"), JSON.stringify(archives, null, 1) + "\n"); + + print(Object.keys(archives).length + " archived view classes"); +} diff --git a/Tests/AppKit/DropInArchiveTest.j b/Tests/AppKit/DropInArchiveTest.j new file mode 100644 index 000000000..e1132369a --- /dev/null +++ b/Tests/AppKit/DropInArchiveTest.j @@ -0,0 +1,203 @@ +/* + * DropInArchiveTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 "DropInArchiveFixtures.j" + +/* + Every application with an interface built in Xcode depends on cibs, and those + cibs were written before the application's frameworks were last updated. An + application that updates its frameworks does not rebuild them first, so the + frameworks must keep reading what was already written. A new key may be added to + an archive. Its absence from an older archive must then mean the old behavior, + and not a new default. + + The reference for a view is the view before it was archived, so a build cannot + pass by restoring something else. A warning during decoding is a failure. The + classes under test are those in the drop-in baseline, so a class cannot leave + these tests unnoticed. + + DropInArchiveGenerator.j saves the data these tests read. Each test reports every + difference it finds. +*/ +var fs = require("fs"), + path = require("path"); + +@implementation DropInArchiveTest : OJTestCase +{ + CPString resources; + CPArray warnings; + Function logWarning; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + resources = path.join(path.dirname(__filename), "Resources"); + warnings = []; + logWarning = CPLog.warn; + + CPLog.warn = function(aMessage) + { + warnings.push(String(aMessage)); + }; +} + +- (void)tearDown +{ + CPLog.warn = logWarning; +} + +- (id)jsonNamed:(CPString)aName +{ + return JSON.parse(fs.readFileSync(path.join(resources, aName), {encoding: 'utf-8'})); +} + +- (CPArray)viewClassNames +{ + return Object.keys([self jsonNamed:@"DropInBaseline.json"].construction).filter(function(aClassName) + { + return !DropInArchiveExclusion(aClassName); + }); +} + +- (void)assertNoDifferences:(CPArray)differences +{ + [self assertTrue:differences.length === 0 message:"\n" + differences.join("\n")]; +} + +- (void)moveWarningsNamed:(CPString)aName into:(CPArray)differences +{ + warnings.forEach(function(aWarning) + { + differences.push(aName + " warned: " + aWarning); + }); + + warnings = []; +} + +/* + A view that is archived and read back must be the same view, with the same + content. +*/ +- (void)testNewArchivesRestoreTheOriginalView +{ + var differences = []; + + [self viewClassNames].forEach(function(aClassName) + { + try + { + var result = DropInArchiveRoundTrip(objj_getClass(aClassName)); + + DropInTreeDifferences(result.original, result.decoded, aClassName, differences); + } + catch (anException) + { + differences.push(aClassName + ": " + String(anException)); + } + + [self moveWarningsNamed:aClassName into:differences]; + }); + + [self assertNoDifferences:differences]; +} + +/* + An archive written by main must restore the view it was written from. + + The descriptions compared must be the same on every machine. A date, and the + string value of a control that holds one, are recorded by the date's instant in + UTC, because their text is in the local time zone (DropInSnapshot.j). GitHub's + continuous integration runs this test in UTC, so run it in UTC as well as in the + local time zone before committing a change: + + TZ=UTC npx jake test +*/ +- (void)testExistingArchivesRestoreTheOriginalView +{ + var archivePath = path.join(resources, @"DropInArchives.json"); + + [self assertTrue:fs.existsSync(archivePath) message:@"DropInArchives.json has not been generated"]; + + var archives = [self jsonNamed:@"DropInArchives.json"], + differences = []; + + [self viewClassNames].forEach(function(aClassName) + { + var saved = archives[aClassName]; + + if (!saved) + return differences.push(aClassName + ": no saved archive"); + + try + { + DropInTreeDifferences(saved.state, DropInSavedArchiveTree(saved.archive), aClassName, differences); + } + catch (anException) + { + differences.push(aClassName + ": " + String(anException)); + } + + [self moveWarningsNamed:aClassName into:differences]; + }); + + [self assertNoDifferences:differences]; +} + +/* + These are fixed copies of real cibs, and they do not follow their sources. They are + Tests/Manual/SmartFoldersTest/Resources/PredicateEditor.cib and + Tests/Manual/TextEditor/Resources/DocumentWindow.cib, as of commit 5db5adac0. + Loading one must produce the same windows, views and frames as main. The MainMenu + cibs of those applications are not here. TextEditor's shows a menu bar, which needs + a platform window, and SmartFoldersTest's connects a data source that is defined by + the application. +*/ +- (void)testExistingCibsProduceTheSameObjects +{ + var expected = [self jsonNamed:@"DropInCibs.json"], + differences = []; + + for (var cibName in expected) + { + var rawString = fs.readFileSync(path.join(resources, "DropInCibs", cibName), {encoding: 'utf-8'}), + current = DropInCibTree(cibName, rawString), + expectedTrees = expected[cibName]; + + if (current.length !== expectedTrees.length) + { + differences.push(cibName + ": " + expectedTrees.length + " top level objects are now " + current.length); + continue; + } + + for (var index = 0; index < current.length; index++) + DropInTreeDifferences(JSON.parse(expectedTrees[index]), JSON.parse(current[index]), cibName, differences); + + [self moveWarningsNamed:cibName into:differences]; + } + + [self assertNoDifferences:differences]; +} + +@end diff --git a/Tests/AppKit/DropInBaselineGenerator.j b/Tests/AppKit/DropInBaselineGenerator.j new file mode 100644 index 000000000..9238101e7 --- /dev/null +++ b/Tests/AppKit/DropInBaselineGenerator.j @@ -0,0 +1,50 @@ +/* + * DropInBaselineGenerator.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 "DropInSnapshot.j" + +/* + Saves the drop-in baseline. Run this only against a build of main, and only + when a change to the drop-in contract is deliberate: + + objj Tests/AppKit/DropInBaselineGenerator.j +*/ +var fs = require("fs"), + path = require("path"); + +function main(args, namedArgs) +{ + [[CPApplication alloc] init]; + + var skipped = [], + snapshot = DropInCreateSnapshot(YES, skipped), + baselinePath = path.join(process.cwd(), "Tests", "AppKit", "Resources", "DropInBaseline.json"); + + fs.writeFileSync(baselinePath, JSON.stringify(snapshot, null, 1) + "\n"); + + print("Wrote " + baselinePath); + print(snapshot.publicClasses.length + " public classes, " + + Object.keys(snapshot.themeAttributes).length + " themed classes, " + + Object.keys(snapshot.construction).length + " constructed views, " + + Object.keys(snapshot.windows).length + " window styles"); + skipped.forEach(function(aLine) { print("skipped " + aLine); }); +} diff --git a/Tests/AppKit/DropInBaselineTest.j b/Tests/AppKit/DropInBaselineTest.j new file mode 100644 index 000000000..f343a5432 --- /dev/null +++ b/Tests/AppKit/DropInBaselineTest.j @@ -0,0 +1,180 @@ +/* + * DropInBaselineTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 "DropInSnapshot.j" + +/* + Compares the running frameworks with the recorded drop-in baseline. See + DropInSnapshot.j for what the baseline holds and DropInBaselineGenerator.j for + how to update it. + + Each test reports every difference it finds. A list is more useful here than + a failure at the first difference, because one change often affects several + classes. +*/ +var fs = require("fs"), + path = require("path"), + DropInBaseline = nil, + DropInCurrent = nil; + +@implementation DropInBaselineTest : OJTestCase + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + if (DropInBaseline) + return; + + var baselinePath = path.join(path.dirname(__filename), "Resources", "DropInBaseline.json"); + + DropInBaseline = JSON.parse(fs.readFileSync(baselinePath, {encoding: 'utf-8'})); + DropInCurrent = DropInCreateSnapshot(); +} + +- (void)assertNoDifferences:(CPArray)differences +{ + [self assertTrue:differences.length === 0 message:"\n" + differences.join("\n")]; +} + +/* + A themed application reads these values whenever its theme supplies none, so a + changed default changes the application. +*/ +- (void)testThemeAttributeDefaultsAreUnchanged +{ + var differences = []; + + for (var className in DropInBaseline.themeAttributes) + { + var expected = DropInBaseline.themeAttributes[className], + current = DropInCurrent.themeAttributes[className]; + + if (!current) + { + differences.push(className + ": class no longer declares theme attributes"); + continue; + } + + for (var attribute in expected) + if (expected[attribute] !== current[attribute]) + differences.push(className + " " + attribute + ": " + expected[attribute] + " is now " + current[attribute]); + } + + [self assertNoDifferences:differences]; +} + +- (void)testPublicClassesExist +{ + var differences = DropInBaseline.publicClasses.filter(function(aName) + { + return !objj_getClass(aName); + }); + + [self assertNoDifferences:differences]; +} + +/* + A public method may move to a superclass, since the class still responds to it. + It may not disappear. This test cannot detect a method that remains but no + longer does its work. Behavior tests cover that. +*/ +- (void)testPublicMethodsExist +{ + var differences = []; + + DropInBaseline.publicClasses.forEach(function(aName) + { + var aClass = objj_getClass(aName); + + if (!aClass) + return; + + DropInBaseline.instanceMethods[aName].forEach(function(aSelector) + { + if (!class_getInstanceMethod(aClass, aSelector)) + differences.push("-[" + aName + " " + aSelector + "]"); + }); + + DropInBaseline.classMethods[aName].forEach(function(aSelector) + { + if (!class_getClassMethod(aClass, aSelector)) + differences.push("+[" + aName + " " + aSelector + "]"); + }); + }); + + [self assertNoDifferences:differences]; +} + +/* + A view created in code has these values until the application changes them. +*/ +- (void)testDefaultViewConstructionIsUnchanged +{ + var differences = []; + + for (var className in DropInBaseline.construction) + { + var expected = DropInBaseline.construction[className], + current = DropInCurrent.construction[className]; + + if (!current) + { + differences.push(className + ": cannot be created"); + continue; + } + + for (var key in expected) + { + var expectedValue = String(expected[key]), + currentValue = String(current[key]); + + if (expectedValue !== currentValue) + differences.push(className + " " + key + ": " + expectedValue + " is now " + currentValue); + } + } + + [self assertNoDifferences:differences]; +} + +/* + The public subviews of a window view are the controls a person sees in the + title bar, so they are part of how an existing application looks. +*/ +- (void)testWindowControlsAreUnchanged +{ + var differences = []; + + for (var style in DropInBaseline.windows) + { + var expected = String(DropInBaseline.windows[style]), + current = String(DropInCurrent.windows[style]); + + if (expected !== current) + differences.push(style + ": " + expected + " is now " + current); + } + + [self assertNoDifferences:differences]; +} + +@end diff --git a/Tests/AppKit/DropInCompatibilityTest.j b/Tests/AppKit/DropInCompatibilityTest.j new file mode 100644 index 000000000..77bf89a84 --- /dev/null +++ b/Tests/AppKit/DropInCompatibilityTest.j @@ -0,0 +1,77 @@ +/* + * DropInCompatibilityTest.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + Defaults that existing applications rely on. An application that updates its + frameworks must keep these without any change of its own. +*/ +@implementation DropInCompatibilityTest : OJTestCase + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + +- (void)testDefaultThemeNameIsAristo2WithoutInfoPlistKey +{ + [self assertNull:[[CPBundle mainBundle] objectForInfoDictionaryKey:@"CPDefaultTheme"]]; + [self assert:@"Aristo2" equals:[CPApplication defaultThemeName]]; +} + +- (void)testResizableWindowHasOnlyACloseButton +{ + var aWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 400.0, 400.0) + styleMask:CPClosableWindowMask | CPResizableWindowMask], + subviews = [[aWindow _windowView] subviews], + count = [subviews count], + buttonCount = 0; + + while (count--) + if ([subviews[count] isKindOfClass:[CPButton class]]) + buttonCount++; + + [self assert:1 equals:buttonCount]; +} + +- (void)testPopUpButtonKeepsTheDefaultButtonBezelStyle +{ + var frame = CGRectMake(0.0, 0.0, 100.0, 24.0), + popUpButton = [[CPPopUpButton alloc] initWithFrame:frame pullsDown:NO], + button = [[CPButton alloc] initWithFrame:frame]; + + [self assert:[button bezelStyle] equals:[popUpButton bezelStyle]]; +} + +- (void)testTableViewGridColorHasAClassDefault +{ + [self assertFalse:[[[CPTableView themeAttributes] objectForKey:@"grid-color"] isEqual:[CPNull null]]]; +} + +- (void)testTableViewAlternatingRowColorsHaveAClassDefault +{ + [self assertFalse:[[[CPTableView themeAttributes] objectForKey:@"alternating-row-colors"] isEqual:[CPNull null]]]; +} + +@end diff --git a/Tests/AppKit/DropInSnapshot.j b/Tests/AppKit/DropInSnapshot.j new file mode 100644 index 000000000..f097190a0 --- /dev/null +++ b/Tests/AppKit/DropInSnapshot.j @@ -0,0 +1,521 @@ +/* + * DropInSnapshot.j + * AppKit + * + * Created by David Richardson on 31/10/2026. + * Copyright David Richardson 2026. + * + * 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 + +/* + An application that updates its frameworks relies on more than documented + behavior. It relies on the defaults a class supplies when no theme overrides + them, on the public methods it calls and overrides, and on the state a control + has when it is created. Together these form the drop-in contract. + + This file records that contract as plain data. DropInBaselineGenerator.j saves + a snapshot as the baseline, and DropInBaselineTest.j compares the running + frameworks with it. Additions are allowed. Changes and removals are not. + */ + +var DropInConstructionGetters = [ + @"acceptsFirstResponder", + @"alignment", + @"autoresizingMask", + @"backgroundColor", + @"bezelStyle", + @"controlSize", + @"drawsBackground", + @"isBordered", + @"isEditable", + @"isEnabled", + @"isHidden", + @"isSelectable", + @"lineBreakMode", + @"verticalAlignment" +], + +DropInWindowStyles = { + @"borderless": CPBorderlessWindowMask, + @"titled": CPTitledWindowMask, + @"closable": CPClosableWindowMask, + @"resizable": CPClosableWindowMask | CPResizableWindowMask, + @"miniaturizable": CPClosableWindowMask | CPMiniaturizableWindowMask, + @"full": CPClosableWindowMask | CPMiniaturizableWindowMask | CPResizableWindowMask, + @"hud": CPHUDBackgroundWindowMask, + @"hudClosable": CPHUDBackgroundWindowMask | CPClosableWindowMask +}; + +/* + The getters that report a BOOL, and the getters that report a view's content. + */ +var DropInBooleanGetters = [ + @"acceptsFirstResponder", + @"drawsBackground", + @"isBordered", + @"isEditable", + @"isEnabled", + @"isHidden", + @"isSelectable" +], + +DropInContentGetters = [ + @"color", + @"doubleValue", + @"indexOfSelectedItem", + @"maxValue", + @"minValue", + @"numberOfColumns", + @"numberOfItems", + @"numberOfTabViewItems", + @"objectValue", + @"segmentCount", + @"state", + @"string", + @"stringValue", + @"tag", + @"title" +]; + +function DropInIsPublicName(aName) +{ + return aName.charAt(0) !== "_" && aName.charAt(0) !== "$"; +} + +function DropInSerializeObject(val, seen) +{ + if (val === null || val === undefined) + return nil; + + if (typeof val === "function") + return "[Function]"; + + if (typeof val !== "object") + return val; + + if (seen.indexOf(val) !== -1) + return "[Circular]"; + + seen.push(val); + + var result; + + if (Array.isArray(val)) + { + result = []; + for (var i = 0; i < val.length; i++) + { + result[i] = DropInSerializeObject(val[i], seen); + } + } + else + { + result = {}; + var keys = Object.keys(val).sort(); + for (var i = 0; i < keys.length; i++) + { + var k = keys[i]; + result[k] = DropInSerializeObject(val[k], seen); + } + } + + seen.pop(); + + return result; +} + +function DropInSafeJSONStringify(aValue) +{ + return JSON.stringify(DropInSerializeObject(aValue, [])); +} + +/* + Reduces a value to a string that does not depend on object identity, so that + two runs of the same framework produce the same snapshot. + */ +function DropInDescribeValue(aValue) +{ + if (aValue === nil || aValue === undefined) + return "nil"; + + /* + Booleans, numbers and strings answer to isa as well, so they must be handled + first, or they are recorded by class and their values are never compared. + */ + if (typeof aValue === "boolean" || typeof aValue === "number" || typeof aValue === "string") + return String(aValue); + + if (aValue === [CPNull null]) + return "CPNull"; + + if (aValue.isa) + { + /* + A date is recorded by its instant in UTC. Its description is in the time zone + of the machine that runs the test, so it differs between machines. + */ + if ([aValue isKindOfClass:[CPDate class]]) + return "CPDate:" + (isNaN(aValue.getTime()) ? "invalid" : aValue.toISOString()); + + if ([aValue isKindOfClass:[CPColor class]]) + return "CPColor:" + [aValue cssString]; + + /* + The system font is a global setting that applications and tests change, + so a default that uses it records only that fact. + */ + if ([aValue isKindOfClass:[CPFont class]]) + return [aValue isSystem] ? "CPFont:system" + ([aValue isBold] ? " bold" : "") : "CPFont:" + [aValue cssString]; + + if ([aValue isKindOfClass:[CPArray class]]) + return "[" + aValue.map(DropInDescribeValue).join(", ") + "]"; + + return aValue.isa.name; + } + + return DropInSafeJSONStringify(aValue); +} + +function DropInMethodNames(aClass) +{ + return class_copyMethodList(aClass).map(function(aMethod) + { + return method_getName(aMethod); + }).filter(DropInIsPublicName).sort(); +} + +function DropInThemeAttributes(aClass) +{ + if (class_copyMethodList(aClass.isa).map(method_getName).indexOf("themeAttributes") === -1) + return nil; + + var attributes = [aClass themeAttributes]; + + if (!attributes) + return nil; + + var result = {}, + keys = [[attributes allKeys] sortedArrayUsingSelector:@selector(compare:)]; + + keys.forEach(function(aKey) + { + result[aKey] = DropInDescribeValue([attributes objectForKey:aKey]); + }); + + return result; +} + +function DropInSubviewClasses(aView) +{ + return [aView subviews].map(function(aSubview) + { + return aSubview.isa.name; + }).filter(DropInIsPublicName).sort(); +} + +function DropInViewState(aView, throwIfError) +{ + var result = { + @"frameSize": DropInDescribeValue([aView frameSize]), + @"subviews": DropInSubviewClasses(aView) + }; + + DropInConstructionGetters.forEach(function(aGetter) + { + var selector = CPSelectorFromString(aGetter); + + if ([aView respondsToSelector:selector]) + { + try + { + result[aGetter] = DropInDescribeValue([aView performSelector:selector]); + } + catch (anException) + { + if (throwIfError) + throw anException; + + result[aGetter] = "[Exception: " + String(anException) + "]"; + } + } + }); + + return result; +} + +function DropInDefaultConstruction(aClass, throwIfError) +{ + return DropInViewState([[aClass alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)], throwIfError); +} + +/* + Lists the public views below a view, in order. A private view is the class's own + concern and is left out, but the public views inside it are the view's content. + An observed view has a generated isa, so its name comes from its class method. + */ +function DropInPublicSubviews(aView) +{ + return [aView subviews].reduce(function(aList, aSubview) + { + return aList.concat(DropInIsPublicName([aSubview className]) ? [aSubview] : DropInPublicSubviews(aSubview)); + }, []); +} + +/* + Describes the state of one view. An unset BOOL is nil and means NO, so a BOOL is + recorded by its truth value. + */ +function DropInViewTreeState(aView) +{ + var state = {}; + + DropInConstructionGetters.concat(DropInContentGetters).forEach(function(aGetter) + { + var selector = CPSelectorFromString(aGetter); + + if (![aView respondsToSelector:selector]) + return; + + var value = [aView performSelector:selector]; + + /* + A control that holds a date gives its string value in the time zone of the + machine that runs the test, because the browser formats it, not Cappuccino. It + is recorded by the date's instant instead, so that every machine records the + same snapshot. + */ + if (aGetter === @"stringValue" && [aView respondsToSelector:@selector(objectValue)] && [[aView objectValue] isKindOfClass:[CPDate class]]) + value = [aView objectValue]; + + state[aGetter] = DropInDescribeValue(DropInBooleanGetters.indexOf(aGetter) !== -1 ? !!value : value); + }); + + return state; +} + +/* + Describes a view and everything public below it. + */ +function DropInViewTree(aView) +{ + return { + @"class": [aView className], + @"frame": DropInDescribeValue([aView frame]), + @"state": DropInViewTreeState(aView), + @"subviews": DropInPublicSubviews(aView).map(function(aSubview) + { + return DropInViewTree(aSubview); + }) + }; +} + +function DropInMenuTree(aMenu) +{ + return [aMenu itemArray].map(function(anItem) + { + return { + @"title": [anItem title], + @"keyEquivalent": [anItem keyEquivalent], + @"submenu": [anItem hasSubmenu] ? DropInMenuTree([anItem submenu]) : nil + }; + }); +} + +/* + Describes what a cib produced. Objects other than windows, views and menus are + recorded by class alone. + */ +function DropInObjectTree(anObject) +{ + if ([anObject isKindOfClass:[CPWindow class]]) + return { @"class": anObject.isa.name, @"title": [anObject title], @"contentView": DropInViewTree([anObject contentView]) }; + + if ([anObject isKindOfClass:[CPView class]]) + return DropInViewTree(anObject); + + if ([anObject isKindOfClass:[CPMenu class]]) + return { @"class": anObject.isa.name, @"items": DropInMenuTree(anObject) }; + + return { @"class": anObject.isa.name }; +} + +/* + The owner of the reference cibs. It has the outlets and actions that those cibs + connect to it, so that loading them gives no warnings. + */ +@implementation _DropInCibOwner : CPObject +{ + id folderNameField; + id predicateEditor; + id predicateSheet; + id textView; + id window; +} + +- (void)closeSheet:(id)aSender +{ +} + +@end + +/* + A scroll view takes its scroller style from a global setting, and that style changes + the frames and views inside it. Applications and tests change the setting, so a + description that is saved or compared is always made with the same style. + */ +function DropInWithFixedScrollerStyle(aFunction) +{ + var scrollerStyle = [CPScrollView globalScrollerStyle]; + + [CPScrollView setGlobalScrollerStyle:CPScrollerStyleLegacy]; + + try + { + return aFunction(); + } + finally + { + [CPScrollView setGlobalScrollerStyle:scrollerStyle]; + } +} + +/* + Loads a cib and describes its top level objects, sorted so that the order in + which the cib lists them does not matter. Layout changes frames and adds subviews, + so it is complete before anything is described. + */ +function DropInCibTree(aCibName, aRawString) +{ + var topLevelObjects = [], + cib = [[CPCib alloc] _initWithData:[CPData dataWithRawString:aRawString] bundle:nil cibName:aCibName]; + + return DropInWithFixedScrollerStyle(function() + { + [cib instantiateCibWithExternalNameTable:@{ CPCibOwner: [[_DropInCibOwner alloc] init], CPCibTopLevelObjects: topLevelObjects }]; + [_CPDisplayServer run]; + + return topLevelObjects.map(DropInObjectTree).map(function(aTree) + { + return JSON.stringify(aTree); + }).sort(); + }); +} + +function DropInClassIsView(aClass) +{ + var viewClass = [CPView class]; + + for (; aClass; aClass = class_getSuperclass(aClass)) + if (aClass === viewClass) + return YES; + + return NO; +} + +function DropInSortedClasses() +{ + var classes = [], + count = objj_getClassList(classes, 1 << 16); + + return classes.slice(0, count).filter(function(aClass) + { + return aClass && aClass.name.indexOf("$") !== 0; + }).sort(function(lhs, rhs) + { + return lhs.name < rhs.name ? -1 : (lhs.name > rhs.name ? 1 : 0); + }); +} + +/* + Some classes cannot be created without a surrounding object, or without a DOM. + A class that cannot be created is left out of the construction section, and the + comparison does not report it. This reduces coverage, but it cannot report a + false difference. + + A generator passes throwIfError, so that a getter that throws is not saved as + expected state, and passes skipped, to list each class or window style that is + left out. + */ +function DropInCreateSnapshot(throwIfError, skipped) +{ + var snapshot = { + @"publicClasses": [], + @"themeAttributes": {}, + @"instanceMethods": {}, + @"classMethods": {}, + @"construction": {}, + @"windows": {} + }; + + DropInSortedClasses().forEach(function(aClass) + { + var name = aClass.name, + isPublic = DropInIsPublicName(name); + + try + { + var attributes = DropInThemeAttributes(aClass); + + if (attributes) + snapshot.themeAttributes[name] = attributes; + } + catch (anException) + { + if (skipped) + skipped.push(name + " theme attributes: " + String(anException).slice(0, 80)); + } + + if (!isPublic) + return; + + snapshot.publicClasses.push(name); + snapshot.instanceMethods[name] = DropInMethodNames(aClass); + snapshot.classMethods[name] = DropInMethodNames(aClass.isa); + + if (!DropInClassIsView(aClass)) + return; + + try + { + snapshot.construction[name] = DropInDefaultConstruction(aClass, throwIfError); + } + catch (anException) + { + if (skipped) + skipped.push(name + " construction: " + String(anException).slice(0, 80)); + } + }); + + for (var style in DropInWindowStyles) + { + try + { + var aWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 400.0, 400.0) + styleMask:DropInWindowStyles[style]]; + + snapshot.windows[style] = DropInSubviewClasses([aWindow _windowView]); + } + catch (anException) + { + if (skipped) + skipped.push(style + " window style: " + String(anException).slice(0, 80)); + } + } + + return snapshot; +} diff --git a/Tests/AppKit/Resources/DropInArchives.json b/Tests/AppKit/Resources/DropInArchives.json new file mode 100644 index 000000000..8c6fa8389 --- /dev/null +++ b/Tests/AppKit/Resources/DropInArchives.json @@ -0,0 +1,2774 @@ +{ + "CPAccordionView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;15;CPAccordionViewK;8;$classesA;S;15;CPAccordionViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;23;CPAccordionViewItemsKeyD;K;6;CP$UIDd;2;10E;K;37;CPAccordionViewItemHeaderPrototypeKeyD;K;6;CP$UIDd;2;12E;K;37;CPAccordionViewExpandedItemIndexesKeyD;K;6;CP$UIDd;2;14E;E;S;19;{{0, 0}, {200, 54}}S;4;viewS;6;normalS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;E;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;11E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;17E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;17E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;18E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;19E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;20E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;21E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;22E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;24E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;25E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;21E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;26E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;27E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;21E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;28E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;29E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;26E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;30E;E;D;K;10;$classnameS;10;CPIndexSetK;8;$classesA;S;10;CPIndexSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;18;CPIndexSetCountKeyD;K;6;CP$UIDd;2;31E;K;25;CPIndexSetRangeStringsKeyD;K;6;CP$UIDd;2;32E;E;D;K;10;$classnameS;19;CPAccordionViewItemK;8;$classesA;S;19;CPAccordionViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;32;CPAccordionViewItemIdentifierKeyD;K;6;CP$UIDd;2;33E;K;26;CPAccordionViewItemViewKeyD;K;6;CP$UIDd;2;35E;K;27;CPAccordionViewItemLabelKeyD;K;6;CP$UIDd;2;36E;E;S;19;{{0, 0}, {100, 24}}S;6;buttonS;37;bordered+controlSizeRegular+roundRectD;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;E;E;d;1;0d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;39E;E;d;2;14T;d;1;2f;3;0.5f;4;0.05d;2;12d;1;1D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;E;E;S;4;itemD;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;42E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;43E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;41E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;44E;E;S;4;ItemD;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;45E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;46E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;12E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;12E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;47E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}S;6;{0, 1}S;5;$nullS;20;{{0, 24}, {200, 30}}S;19;{{0, 0}, {200, 30}}D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;48E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;23E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;49E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;57;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":100,\"height\":24}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPAccordionView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":54,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":24,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "Item" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":24,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":24},\"size\":{\"height\":30,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPBox": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;5;CPBoxK;8;$classesA;S;5;CPBoxS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;2;10E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;2;11E;K;13;CPBoxTitleKeyD;K;6;CP$UIDd;2;12E;K;21;CPBoxTitlePositionKeyD;K;6;CP$UIDd;2;13E;K;19;CPBoxContentViewKeyD;K;6;CP$UIDd;2;15E;K;17;CPBoxTitleViewKeyD;K;6;CP$UIDd;2;17E;K;15;CPBoxBoxViewKeyD;K;6;CP$UIDd;2;18E;E;S;20;{{0, 0}, {200, 100}}S;3;boxS;6;normalS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;d;1;0d;1;3S;3;Boxd;1;2D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;18E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;19E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;20E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;21E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;18E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;22E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;24E;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;16E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;25E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;26E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;27E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;28E;K;12;$atext-colorD;K;6;CP$UIDd;2;30E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;31E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;12E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;32E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;34E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;13E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;10E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;35E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;36E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;20E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;37E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;22E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;38E;E;S;21;{{-1, -1}, {200, 98}}S;19;{{0, 0}, {200, 98}}D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;E;E;d;2;18S;4;viewD;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;S;16;{{5, 0}, {1, 2}}S;16;{{0, 0}, {1, 2}}S;9;textfieldS;18;controlSizeRegularD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;4;nameD;K;6;CP$UIDd;2;40E;K;12;defaultValueD;K;6;CP$UIDd;2;42E;K;5;stateD;K;6;CP$UIDd;2;43E;K;5;valueD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;45E;E;E;d;4;3072D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;46E;E;S;0;S;19;{{0, 2}, {200, 98}}D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;15E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;47E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;48E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;15E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;49E;E;S;10;text-colorD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;50E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;E;S;11;placeholderD;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;52E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;53E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;17E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;17E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;54E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;10E;D;K;6;CP$UIDd;2;10E;D;K;6;CP$UIDd;2;10E;D;K;6;CP$UIDd;2;55E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;2;33E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;56E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;33E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;56E;E;d;1;1S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPBox", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1", + "title": "Box" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":2},\"size\":{\"height\":98,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "18", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":-1,\"y\":-1},\"size\":{\"height\":98,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "18", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + }, + { + "class": "CPTextField", + "frame": "{\"origin\":{\"x\":5,\"y\":0},\"size\":{\"height\":2,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "false", + "isBordered": "false", + "isEditable": "false", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "Box", + "stringValue": "Box", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":2,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + }, + "CPBrowser": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;9;CPBrowserK;8;$classesA;S;9;CPBrowserS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;6E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;7E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;7E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;29;CPBrowserAutohidesScrollerKeyD;K;6;CP$UIDd;2;14E;K;32;CPBrowserAllowsEmptySelectionKeyD;K;6;CP$UIDd;2;14E;K;35;CPBrowserAllowsMultipleSelectionKeyD;K;6;CP$UIDd;2;14E;K;20;CPBrowserDelegateKeyD;K;6;CP$UIDd;1;0E;K;25;CPBrowserPrototypeViewKeyD;K;6;CP$UIDd;2;16E;K;21;CPBrowserRowHeightKeyD;K;6;CP$UIDd;2;17E;K;22;CPBrowserImageWidthKeyD;K;6;CP$UIDd;2;17E;K;26;CPBrowserMinColumnWidthKeyD;K;6;CP$UIDd;2;18E;K;24;CPBrowserColumnWidthsKeyD;K;6;CP$UIDd;2;19E;E;d;1;7S;20;{{0, 0}, {200, 100}}S;7;browserS;27;controlSizeRegular+disabledS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;22E;E;T;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;15E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;23E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;24E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;25E;K;12;$atext-colorD;K;6;CP$UIDd;2;27E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;28E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;7E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;7E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;30E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;31E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;32E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;33E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;11E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;34E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;31E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;d;2;23d;2;80D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;35E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;36E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;37E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}S;16;{{0, 0}, {0, 0}}S;9;textfieldS;30;controlSizeRegular+placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;4;nameD;K;6;CP$UIDd;2;38E;K;12;defaultValueD;K;6;CP$UIDd;2;40E;K;5;stateD;K;6;CP$UIDd;2;41E;K;5;valueD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;4;nameD;K;6;CP$UIDd;2;43E;K;12;defaultValueD;K;6;CP$UIDd;2;44E;K;6;valuesD;K;6;CP$UIDd;2;46E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;4;nameD;K;6;CP$UIDd;2;47E;K;12;defaultValueD;K;6;CP$UIDd;2;48E;K;6;valuesD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;50E;E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;22E;E;d;1;0D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;51E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;52E;E;S;10;text-colorD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;53E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;54E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;E;S;21;selectedTableDataViewD;K;6;$classD;K;6;CP$UIDd;2;39E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;56E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;54E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;E;S;15;line-break-moded;1;2D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;2;11E;K;6;normalD;K;6;CP$UIDd;2;11E;E;E;S;18;vertical-alignmentd;1;1D;K;6;$classD;K;6;CP$UIDd;2;45E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;2;44E;K;6;normalD;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;57E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;36E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;16E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;16E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;58E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;48E;E;E;S;5;colorS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;51E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPBrowser", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "false", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "nil", + "stringValue": "", + "tag": "7" + }, + "subviews": [ + { + "class": "CPScrollView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "18", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPClipView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "16", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPClipView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPScroller", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "false", + "isHidden": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPScroller", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "false", + "isHidden": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + ] + } + }, + "CPButton": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;6E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;7E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;7E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;11E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;15E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;16E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;17E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;18E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;19E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;17E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;20E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;21E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;18E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;22E;E;d;1;7S;20;{{0, 0}, {200, 100}}S;6;buttonS;37;bordered+controlSizeRegular+roundRectS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;d;1;1d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;25E;E;S;6;Buttond;2;14d;1;0T;d;1;2f;3;0.5f;4;0.05d;2;12D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;26E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;27E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;28E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;29E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;30E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "1", + "objectValue": "1", + "state": "1", + "stringValue": "1", + "tag": "7", + "title": "Button" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPButtonBar": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;11;CPButtonBarK;8;$classesA;S;11;CPButtonBarS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;30;CPButtonBarHasResizeControlKeyD;K;6;CP$UIDd;1;0E;K;40;CPButtonBarResizeControlIsLeftAlignedKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonBarButtonsKeyD;K;6;CP$UIDd;2;11E;K;26;CPButtonBarRightButtonsKeyD;K;6;CP$UIDd;2;12E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;14E;D;K;6;CP$UIDd;2;15E;E;E;S;10;button-barS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;14E;D;K;6;CP$UIDd;2;15E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;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;13E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;16E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;17E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;18E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;19E;K;16;$aimage-positionD;K;6;CP$UIDd;2;20E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;21E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;22E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;23E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;25E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;26E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;22E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;27E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;20E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;22E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;28E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;29E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;27E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;30E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;31E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;17E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;18E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;19E;K;16;$aimage-positionD;K;6;CP$UIDd;2;20E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;32E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;22E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;23E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;33E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;26E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;22E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;27E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;20E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;22E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;28E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;29E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;27E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;30E;E;S;19;{{-1, 1}, {35, 99}}S;18;{{0, 0}, {35, 99}}S;6;buttonS;37;bordered+controlSizeRegular+roundRectd;1;1D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;E;E;d;1;0d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;36E;E;d;2;14T;f;3;0.5f;4;0.05d;2;12S;19;{{33, 1}, {35, 99}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;36E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;38E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;39E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;14E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;14E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;40E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;34E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;41E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;39E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;15E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;15E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;43E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;24E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;44E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;56;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":35,\"height\":25}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPButtonBar", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":-1,\"y\":1},\"size\":{\"height\":99,\"width\":35}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":99,\"width\":35}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":33,\"y\":1},\"size\":{\"height\":99,\"width\":35}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":99,\"width\":35}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + }, + "CPCheckBox": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;6E;K;16;$aimage-positionD;K;6;CP$UIDd;1;8E;K;11;$aalignmentD;K;6;CP$UIDd;1;9E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;10E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;10E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;11E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;13E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;14E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;15E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;17E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;18E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;14E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;14E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;19E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;20E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;21E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;22E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;23E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;11E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;24E;E;d;1;7S;20;{{0, 0}, {200, 100}}S;9;check-boxS;28;controlSizeRegular+roundRectD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;7E;K;4;nameD;K;6;CP$UIDd;2;25E;K;12;defaultValueD;K;6;CP$UIDd;2;20E;K;6;valuesD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;1;7E;K;4;nameD;K;6;CP$UIDd;2;28E;K;12;defaultValueD;K;6;CP$UIDd;2;20E;K;6;valuesD;K;6;CP$UIDd;2;29E;E;S;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;E;E;d;1;1d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;32E;E;S;6;ButtonT;d;1;2d;1;0f;3;0.5f;4;0.05d;2;12S;14;image-positionD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;2;20E;K;6;normalD;K;6;CP$UIDd;2;20E;E;E;S;9;alignmentD;K;6;$classD;K;6;CP$UIDd;2;26E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;2;21E;K;6;normalD;K;6;CP$UIDd;2;21E;E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;33E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;34E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;35E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;36E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;37E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPCheckBox", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "false", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "1", + "objectValue": "1", + "state": "1", + "stringValue": "1", + "tag": "7", + "title": "Button" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPClipView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;12E;E;E;S;4;viewS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;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;11E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;13E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;14E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;15E;E;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPClipView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPCollectionView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;CPCollectionViewK;8;$classesA;S;16;CPCollectionViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;8E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;34;CPCollectionViewMaxNumberOfRowsKeyD;K;6;CP$UIDd;2;11E;K;37;CPCollectionViewMaxNumberOfColumnsKeyD;K;6;CP$UIDd;2;11E;K;29;CPCollectionViewSelectableKeyD;K;6;CP$UIDd;2;12E;K;42;CPCollectionViewAllowsMultipleSelectionKeyD;K;6;CP$UIDd;1;0E;K;33;CPCollectionViewVerticalMarginKeyD;K;6;CP$UIDd;2;13E;K;35;CPCollectionViewBackgroundColorsKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;E;E;F;S;4;viewS;6;normalS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;d;1;0T;d;1;5D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;16E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;17E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;8E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;18E;E;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPCollectionView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "true", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "isSelectable": "true", + "numberOfColumns": "-1", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPColorWell": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;11;CPColorWellK;8;$classesA;S;11;CPColorWellS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;10E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;12E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;2;14E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;2;15E;E;S;20;{{0, 0}, {200, 100}}S;9;colorwellS;27;bordered+controlSizeRegularS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;19E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;20E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;21E;E;T;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;22E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;23E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;24E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;25E;E;E;S;5;colorS;6;normalD;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;28E;E;d;1;1d;1;0S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPColorWell", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "color": "CPColor:rgba(255, 0, 0, 1)", + "doubleValue": "0", + "objectValue": "nil", + "stringValue": "", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":3},\"size\":{\"height\":94,\"width\":194}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 0, 0, 1)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPComboBox": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;14E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;14E;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;15E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;16E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;17E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;2;18E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;1;7E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;1;7E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;2;19E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;2;14E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;2;14E;E;S;20;{{0, 0}, {200, 100}}S;8;comboboxS;60;bezeled+bordered+button-bordered+controlSizeRegular+editableS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;E;E;S;3;Oned;4;3072D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;23E;E;T;d;1;2d;1;0S;0;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;10E;D;K;6;CP$UIDd;2;24E;E;E;d;1;5D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;25E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;26E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;28E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;29E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;30E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}S;3;TwoD;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;31E;E;d;2;40D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;32E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;33E;E;S;57;{\"origin\":{\"x\":0,\"y\":1},\"size\":{\"width\":200,\"height\":99}}S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPComboBox", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "false", + "isBordered": "true", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "indexOfSelectedItem": "nil", + "numberOfItems": "2", + "objectValue": "One", + "stringValue": "One", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPControl": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;9;CPControlK;8;$classesA;S;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;6E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;7E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;7E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;E;d;1;7S;20;{{0, 0}, {200, 100}}S;4;viewS;27;controlSizeRegular+disabledS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;16E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;17E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;18E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;19E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;20E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;21E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPControl", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "false", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "nil", + "stringValue": "", + "tag": "7" + }, + "subviews": [] + } + }, + "CPDatePicker": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;11E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;2;15E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;2;15E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;2;15E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;2;16E;K;12;CPMinDateKeyD;K;6;CP$UIDd;2;17E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;2;18E;K;14;CPDateValueKeyD;K;6;CP$UIDd;2;11E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;2;20E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;2;21E;K;13;CPBorderedKeyD;K;6;CP$UIDd;2;21E;E;S;20;{{0, 0}, {200, 100}}S;10;datePickerS;35;bezeled+bordered+controlSizeRegularS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;D;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;2;24E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;25E;E;d;1;0d;3;238D;K;6;$classD;K;6;CP$UIDd;2;10E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;8;CPLocaleK;8;$classesA;S;8;CPLocaleS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPLocaleIdentifierLocaleKeyD;K;6;CP$UIDd;2;29E;E;T;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;30E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;31E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;32E;E;d;13;1793448000000S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}d;15;-62135510400000d;14;64092297600000D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;10;CP.objectsD;K;18;CPLocaleIdentifierD;K;6;CP$UIDd;2;33E;K;20;CPLocaleLanguageCodeD;K;6;CP$UIDd;2;34E;K;19;CPLocaleCountryCodeD;K;6;CP$UIDd;2;35E;K;16;CPLocaleCalendarD;K;6;CP$UIDd;2;36E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;37E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;38E;E;S;5;en_USS;2;enS;2;USS;19;CPGregorianCalendarS;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPDatePicker", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "true", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "CPDate:2026-10-31T12:00:00.000Z", + "stringValue": "CPDate:2026-10-31T12:00:00.000Z", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(0, 0, 0, 0)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(0, 0, 0, 0)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(0, 0, 0, 0)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(0, 0, 0, 0)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(0, 0, 0, 0)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(0, 0, 0, 0)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(0, 0, 0, 0)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":1,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPStepper", + "frame": "{\"origin\":{\"x\":200,\"y\":50},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "maxValue": "59", + "minValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + ] + } + }, + "CPDisclosureButton": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;18;CPDisclosureButtonK;8;$classesA;S;18;CPDisclosureButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;6E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;7E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;7E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;11E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;15E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;16E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;17E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;18E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;19E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;17E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;20E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;21E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;1;8E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;22E;E;d;1;7S;20;{{0, 0}, {200, 100}}S;6;buttonS;28;controlSizeRegular+roundRectS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;d;1;1d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;25E;E;S;6;Buttond;2;14d;1;0T;d;1;2f;3;0.5f;4;0.05d;2;12D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;26E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;27E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;28E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;29E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;30E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPDisclosureButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "false", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "1", + "objectValue": "1", + "state": "1", + "stringValue": "1", + "tag": "7", + "title": "Button" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPImageView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;6E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;7E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;7E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;1;0E;E;d;1;7S;20;{{0, 0}, {200, 100}}S;4;viewS;27;controlSizeRegular+disabledS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;9E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;16E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;17E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;18E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;19E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;20E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;21E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPImageView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "false", + "isEnabled": "false", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "nil", + "stringValue": "", + "tag": "7" + }, + "subviews": [] + } + }, + "CPLevelIndicator": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;CPLevelIndicatorK;8;$classesA;S;16;CPLevelIndicatorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;10E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;12E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;2;13E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;2;14E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;2;15E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;2;13E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;2;13E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;1;0E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;1;0E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}S;15;level-indicatorS;18;controlSizeRegularS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;18E;E;d;1;2d;1;1d;1;9D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;19E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;20E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;21E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;22E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;23E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPLevelIndicator", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "false", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "4", + "maxValue": "9", + "minValue": "1", + "objectValue": "4", + "stringValue": "4", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":41},\"size\":{\"height\":18,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":41},\"size\":{\"height\":17,\"width\":24}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":25,\"y\":41},\"size\":{\"height\":17,\"width\":24}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":50,\"y\":41},\"size\":{\"height\":17,\"width\":24}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":75,\"y\":41},\"size\":{\"height\":17,\"width\":24}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":100,\"y\":41},\"size\":{\"height\":17,\"width\":24}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":125,\"y\":41},\"size\":{\"height\":17,\"width\":24}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":150,\"y\":41},\"size\":{\"height\":17,\"width\":24}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":175,\"y\":41},\"size\":{\"height\":17,\"width\":25}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPOutlineView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;13;CPOutlineViewK;8;$classesA;S;13;CPOutlineViewS;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;9E;K;12;$agrid-colorD;K;6;CP$UIDd;2;10E;K;24;$aalternating-row-colorsD;K;6;CP$UIDd;2;11E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;14E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;15E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;17E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;2;18E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;19E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;20E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;1;0E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;13E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;21E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;21E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;21E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;13E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;22E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;10E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;23E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;13E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;2;11E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;25E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;27E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;K;34;CPOutlineViewOutlineTableColumnKeyD;K;6;CP$UIDd;2;29E;K;35;CPOutlineViewIndentationPerLevelKeyD;K;6;CP$UIDd;2;30E;K;26;CPOutlineViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;24;CPOutlineViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;S;17;{{0, 0}, {63, 0}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;6E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;31E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;32E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;33E;E;S;9;tableviewS;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;1;6E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;34E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;32E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;33E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;1;7E;D;K;6;CP$UIDd;2;35E;E;E;S;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;38E;E;d;2;25S;6;{3, 2}d;1;1T;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;d;1;0D;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;2;24E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;39E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;39E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;40E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;41E;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;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;42E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;42E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;43E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;44E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;45E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;1;2E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;46E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;47E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;48E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;49E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;51E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;53E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;2;54E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;1;0E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;d;2;16D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;20E;E;E;S;5;colorS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;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;20E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;6E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;32E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;33E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;59E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;60E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;61E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}S;17;{{0, 0}, {7, 25}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;18;{{0, 0}, {63, 25}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;51E;E;E;S;14;tableHeaderRowD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;3;oned;2;60d;2;10d;7;1000000D;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;2;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;42E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;42E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;62E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;64E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;1;0E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;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;52E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;65E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;65E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;66E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;67E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;68E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;69E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;70E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;71E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;72E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;23E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;69E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;d;1;3f;18;0.8627450980392157f;18;0.8784313725490196f;18;0.8862745098039215D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;20E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;76E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;16;{{0, 0}, {0, 0}}S;9;textfieldS;44;controlSizeRegular+placeholder+tableDataViewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;80E;E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;38E;E;d;1;2f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}D;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;2;78E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;42E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;42E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;81E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;84E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;60E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;53E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;53E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;85E;E;d;2;18S;4;viewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;76E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;76E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPOutlineView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":63}}", + "state": { + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "numberOfColumns": "1", + "objectValue": "nil", + "stringValue": "", + "tag": "-1" + }, + "subviews": [] + } + }, + "CPPopUpButton": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;4E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;5E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;16;$aimage-positionD;K;6;CP$UIDd;1;8E;K;17;$aline-break-modeD;K;6;CP$UIDd;1;9E;K;11;$aalignmentD;K;6;CP$UIDd;2;10E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;11E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;11E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;12E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;14E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;15E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;1;9E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;17E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;18E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;19E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;10E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;20E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;1;8E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;10E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;21E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;22E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;20E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;23E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;2;24E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;2;25E;E;S;20;{{0, 0}, {200, 100}}S;12;popup-buttonS;37;bordered+controlSizeRegular+roundRectd;1;2d;1;4d;1;0S;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;E;E;d;1;1D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;28E;E;S;3;Twod;2;14T;f;3;0.5f;4;0.05d;2;12S;0;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;32E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;33E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;34E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;35E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;2E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;2;36E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;1;4E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;2;37E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;18E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;2E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;2;36E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;2;15E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;1;4E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;2;37E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;38E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;39E;E;S;3;OneS;17;_popUpItemAction:d;6;262144S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPPopUpButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "4", + "verticalAlignment": "2", + "doubleValue": "0", + "indexOfSelectedItem": "1", + "numberOfItems": "2", + "objectValue": "1", + "state": "0", + "stringValue": "", + "tag": "-1", + "title": "Two" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPPredicateEditor": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;17;CPPredicateEditorK;8;$classesA;S;17;CPPredicateEditorS;12;CPRuleEditorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;8E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;11E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;2;15E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;2;10E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;2;10E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;1;0E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;2;16E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;2;17E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;1;0E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;2;18E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;2;19E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;2;20E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;2;21E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;2;22E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;2;23E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;2;24E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;2;26E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;2;27E;E;d;1;7S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;S;11;rule-editorS;27;controlSizeRegular+disabledS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;31E;E;T;d;2;26d;1;3S;7;rowTypeS;8;criteriaS;13;displayValuesS;10;boundArrayS;7;subrowsD;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;35E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;36E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;37E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;33;_CPRuleEditorViewUnboundRowHolderK;8;$classesA;S;33;_CPRuleEditorViewUnboundRowHolderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;12;CPBoundArrayD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;D;K;10;$classnameS;28;_CPRuleEditorViewSliceHolderK;8;$classesA;S;28;_CPRuleEditorViewSliceHolderS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;40E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;41E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;42E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;2;43E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;1;0E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;1;0E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;1;0E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;2;44E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;2;10E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;2;10E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;d;2;18S;4;viewS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;48E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;49E;E;d;1;2d;1;0D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;E;E;D;K;10;$classnameS;35;_CPRuleEditorViewSliceDropSeparatorK;8;$classesA;S;35;_CPRuleEditorViewSliceDropSeparatorS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;54E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;43E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;37E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;55E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;57E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;58E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;60E;K;16;$aimage-positionD;K;6;CP$UIDd;2;43E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;12E;K;11;$aalignmentD;K;6;CP$UIDd;2;44E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;61E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;44E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;62E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;63E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;64E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;44E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;15E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;43E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;44E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;65E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;66E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;15E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;69E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;60E;K;16;$aimage-positionD;K;6;CP$UIDd;2;43E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;12E;K;11;$aalignmentD;K;6;CP$UIDd;2;44E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;70E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;44E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;71E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;72E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;64E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;44E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;15E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;43E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;44E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;65E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;66E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;15E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;67E;E;S;20;{{0, -10}, {200, 2}}S;18;{{0, 0}, {200, 2}}D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;2;73E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;2;74E;E;S;16;{{0, 0}, {1, 1}}S;12;popup-buttonS;37;bordered+controlSizeRegular+roundRectD;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;75E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;31E;E;S;3;Alld;2;14f;3;0.5f;4;0.05d;2;12D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;2;73E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;2;76E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;77E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;31E;E;S;25;of the following are trueS;0;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;81E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;41E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;51E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;51E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;83E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;84E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;41E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;52E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;52E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;85E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;78E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;51E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;2;87E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;78E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;89E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;51E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;2;87E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;78E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;72E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;68E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;48E;E;S;17;_popUpItemAction:d;6;262144d;1;1S;3;AnyS;57;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":100,\"height\":18}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPPredicateEditor", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "true", + "isEnabled": "false", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "nil", + "doubleValue": "0", + "objectValue": "nil", + "stringValue": "", + "tag": "7" + }, + "subviews": [] + } + }, + "CPProgressIndicator": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;19;CPProgressIndicatorK;8;$classesA;S;19;CPProgressIndicatorS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;9;_minValueD;K;6;CP$UIDd;2;10E;K;9;_maxValueD;K;6;CP$UIDd;2;11E;K;12;_doubleValueD;K;6;CP$UIDd;2;12E;K;12;_controlSizeD;K;6;CP$UIDd;2;13E;K;14;_indeterminateD;K;6;CP$UIDd;1;0E;K;6;_styleD;K;6;CP$UIDd;2;13E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;7E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}S;18;progress-indicatorS;6;normalS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;d;1;1d;1;9d;1;4d;1;0E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPProgressIndicator", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "0", + "isHidden": "false", + "doubleValue": "4", + "maxValue": "9", + "minValue": "1", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":20,\"width\":75}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPRadio": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;6E;K;16;$aimage-positionD;K;6;CP$UIDd;1;7E;K;11;$aalignmentD;K;6;CP$UIDd;1;8E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;12E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;13E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;14E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;16E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;17E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;13E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;13E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;18E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;1;7E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;8E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;19E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;20E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;18E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;21E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;2;23E;E;d;1;7S;20;{{0, 0}, {200, 100}}S;5;radioS;37;bordered+controlSizeRegular+roundRectd;1;2d;1;0S;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;11E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;E;E;d;1;1d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;26E;E;S;6;ButtonT;f;3;0.5f;4;0.05d;2;12D;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;2;27E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;2E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;28E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;29E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;30E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;11E;K;10;CP.objectsA;D;K;6;CP$UIDd;1;2E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;31E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;15E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;32E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPRadio", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "1", + "objectValue": "1", + "state": "1", + "stringValue": "1", + "tag": "7", + "title": "Button" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPRuleEditor": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;12;CPRuleEditorK;8;$classesA;S;12;CPRuleEditorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;8E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;11E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;2;15E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;2;10E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;2;10E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;1;0E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;2;16E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;2;17E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;1;0E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;2;18E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;2;19E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;2;20E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;2;21E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;2;22E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;2;23E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;2;24E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;2;26E;E;d;1;7S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;S;11;rule-editorS;27;controlSizeRegular+disabledS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;30E;E;T;d;2;26d;1;3S;7;rowTypeS;8;criteriaS;13;displayValuesS;10;boundArrayS;7;subrowsD;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;32E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;33E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;34E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;33;_CPRuleEditorViewUnboundRowHolderK;8;$classesA;S;33;_CPRuleEditorViewUnboundRowHolderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;12;CPBoundArrayD;K;6;CP$UIDd;2;31E;E;D;K;10;$classnameS;28;_CPRuleEditorViewSliceHolderK;8;$classesA;S;28;_CPRuleEditorViewSliceHolderS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;37E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;38E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;39E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;41E;E;E;d;2;18S;4;viewS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;43E;E;D;K;10;$classnameS;35;_CPRuleEditorViewSliceDropSeparatorK;8;$classesA;S;35;_CPRuleEditorViewSliceDropSeparatorS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;44E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;45E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;46E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;34E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;10E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;47E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}S;20;{{0, -10}, {200, 2}}S;18;{{0, 0}, {200, 2}}d;1;2D;K;6;$classD;K;6;CP$UIDd;1;5E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPRuleEditor", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "true", + "isEnabled": "false", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "nil", + "doubleValue": "0", + "objectValue": "nil", + "stringValue": "", + "tag": "7" + }, + "subviews": [] + } + }, + "CPRulerView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;11;CPRulerViewK;8;$classesA;S;11;CPRulerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;25;CPRulerViewOrientationKeyD;K;6;CP$UIDd;1;0E;K;24;CPRulerViewClientViewKeyD;K;6;CP$UIDd;1;0E;K;27;CPRulerViewAccessoryViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPRulerViewMarkersKeyD;K;6;CP$UIDd;1;0E;K;27;CPRulerViewRuleThicknessKeyD;K;6;CP$UIDd;1;0E;K;41;CPRulerViewReservedThicknessForMarkersKeyD;K;6;CP$UIDd;1;0E;K;47;CPRulerViewReservedThicknessForAccessoryViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPRulerViewOriginOffsetKeyD;K;6;CP$UIDd;1;0E;K;30;CPRulerViewMeasurementUnitsKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;12E;E;E;S;4;viewS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;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;11E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;13E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;14E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;15E;E;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPRulerView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPScrollView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;12E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;13E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;15E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;16E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;17E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;17E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;17E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;17E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;18E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;18E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;1;0E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;20E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;21E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;2;21E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;21E;K;31;CPScrollViewAllowsMagnificationD;K;6;CP$UIDd;1;9E;K;28;CPScrollViewMinMagnificationD;K;6;CP$UIDd;2;22E;K;28;CPScrollViewMaxMagnificationD;K;6;CP$UIDd;2;23E;K;21;CPScrollViewHasVRulerD;K;6;CP$UIDd;1;9E;K;21;CPScrollViewHasHRulerD;K;6;CP$UIDd;1;9E;K;25;CPScrollViewRulersVisibleD;K;6;CP$UIDd;1;9E;K;18;CPScrollViewVRulerD;K;6;CP$UIDd;1;0E;K;18;CPScrollViewHRulerD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;12E;D;K;6;CP$UIDd;2;13E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;E;E;S;10;scrollviewS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;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;2;11E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;24E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;24E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;25E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;26E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;27E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;28E;E;D;K;6;$classD;K;6;CP$UIDd;2;11E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;29E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;29E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;26E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;30E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;1;0E;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;14E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;31E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;32E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;33E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;35E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;21E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;1;2E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;36E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;23E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;38E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;18E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;39E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;2;21E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;40E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;41E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;33E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;42E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;43E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;21E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;1;2E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;44E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;23E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;45E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;1;9E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;46E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;2;21E;E;d;2;10T;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;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;47E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;48E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;50E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;26E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;51E;E;d;1;0f;4;0.25d;1;4S;19;{{0, 0}, {193, 93}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;4;viewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;12E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;52E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;12E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;26E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;54E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;19;{{193, 0}, {7, 93}}S;17;{{0, 0}, {7, 93}}S;8;scrollerS;49;controlSizeRegular+scroller-style-legacy+verticalD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;E;E;S;27;_verticalScrollerDidScroll:D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;57E;E;f;6;0.2325S;19;{{0, 93}, {193, 7}}S;18;{{0, 0}, {193, 7}}S;40;controlSizeRegular+scroller-style-legacyD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;E;E;S;29;_horizontalScrollerDidScroll:D;K;6;$classD;K;6;CP$UIDd;2;37E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;57E;E;f;18;0.6433333333333333S;19;{{193, 93}, {7, 7}}S;16;{{0, 0}, {7, 7}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;49E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;20;{{3, 5}, {300, 400}}S;20;{{0, 0}, {300, 400}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;61E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;62E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;15E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;15E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;63E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;55E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;64E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;62E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;16E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;16E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;65E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;2;37E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;67E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;37E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;69E;E;d;1;1S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;56;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":100}}S;56;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":0}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPScrollView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPClipView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":93,\"width\":193}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":400,\"width\":300}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPClipView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":193,\"y\":93},\"size\":{\"height\":7,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPScroller", + "frame": "{\"origin\":{\"x\":193,\"y\":0},\"size\":{\"height\":93,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":93,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":93},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":21.622500000000002,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPScroller", + "frame": "{\"origin\":{\"x\":0,\"y\":93},\"size\":{\"height\":7,\"width\":193}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":193}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":193,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":124.16333333333333}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + }, + "CPScroller": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;1;3E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;4E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;4E;K;16;CPViewOpacityKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;11E;K;17;CPControlValueKeyD;K;6;CP$UIDd;1;5E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;1;9E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;15E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;2;15E;E;d;1;7S;18;{{0, 0}, {200, 7}}d;1;0S;8;scrollerS;27;controlSizeRegular+disabledS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;18E;E;d;1;1D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;19E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;20E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;21E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;22E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;23E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPScroller", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "false", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "7" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPSearchField": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;13;CPSearchFieldK;8;$classesA;S;13;CPSearchFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;14E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;14E;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;15E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;16E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;17E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;1;7E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;1;7E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;2;18E;E;S;20;{{0, 0}, {200, 100}}S;11;searchfieldS;52;bezeled+bordered+controlSizeRegular+editable+roundedS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;E;E;S;4;Textd;5;68608D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;24E;E;T;d;1;2d;1;0S;0;d;2;10D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;25E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;26E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;2;28E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;30E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;26E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;2;31E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;33E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;26E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;35E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;36E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;37E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;38E;E;d;2;40D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;10;CP.objectsD;K;8;isButtonD;K;6;CP$UIDd;2;14E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;10;CP.objectsD;K;8;isButtonD;K;6;CP$UIDd;2;14E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;40E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;40E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;41E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;S;55;{\"origin\":{\"x\":5,\"y\":50},\"size\":{\"width\":0,\"height\":0}}S;57;{\"origin\":{\"x\":195,\"y\":50},\"size\":{\"width\":0,\"height\":0}}S;57;{\"origin\":{\"x\":0,\"y\":1},\"size\":{\"width\":200,\"height\":99}}S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPSearchField", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "1", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "false", + "isBordered": "true", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "Text", + "stringValue": "Text", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":195,\"y\":50},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "1", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "false", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":5,\"y\":50},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "4", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "false", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + }, + "CPSecureTextField": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;17;CPSecureTextFieldK;8;$classesA;S;17;CPSecureTextFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;14E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;14E;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;15E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;16E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;17E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;E;E;S;4;Textd;4;3072D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;21E;E;T;d;1;2d;1;0S;0;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;22E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;23E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;24E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;25E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;26E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;27E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;28E;E;d;2;40D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;28E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;29E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;30E;E;S;57;{\"origin\":{\"x\":0,\"y\":1},\"size\":{\"width\":200,\"height\":99}}S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPSecureTextField", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "false", + "isBordered": "false", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "Text", + "stringValue": "Text", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPSegmentedControl": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;10E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;12E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;2;13E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;2;14E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;1;0E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;2;15E;E;S;19;{{0, 0}, {81, 100}}S;17;segmented-controlS;18;controlSizeRegularS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;18E;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;E;E;d;2;-1d;1;0D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;22E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;23E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;24E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;2;25E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;1;7E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;2;26E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;2;14E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;2;28E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;1;7E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;2;26E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;2;14E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;29E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;11E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;30E;E;S;3;OneT;d;2;40S;3;TwoS;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPSegmentedControl", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":81}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "nil", + "segmentCount": "2", + "stringValue": "", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":41,\"y\":0},\"size\":{\"height\":0,\"width\":40}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":40,\"y\":0},\"size\":{\"height\":0,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":40}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":81,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPShadowView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;12;CPShadowViewK;8;$classesA;S;12;CPShadowViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;8E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;12E;E;E;F;S;11;shadow-viewS;22;shadowview-style-lightS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;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;11E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;13E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;14E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;15E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;16E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;9E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;9E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;17E;E;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}S;4;viewS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPShadowView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPSlider": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;2;14E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;2;15E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;1;0E;K;15;CPSliderTypeKeyD;K;6;CP$UIDd;2;16E;K;35;CPSliderAllowsTickMarkValuesOnlyKeyD;K;6;CP$UIDd;1;0E;K;27;CPSliderTickMarkPositionKeyD;K;6;CP$UIDd;1;0E;K;28;CPSliderNumberOfTickMarksKeyD;K;6;CP$UIDd;2;16E;E;S;20;{{0, 0}, {200, 100}}S;6;sliderS;18;controlSizeRegularS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;18E;E;E;d;1;4d;2;68D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;19E;E;d;1;1d;1;9d;1;0D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;20E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;21E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;22E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;23E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;24E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPSlider", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "4", + "maxValue": "9", + "minValue": "1", + "objectValue": "4", + "stringValue": "4", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPSplitView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;11;CPSplitViewK;8;$classesA;S;11;CPSplitViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;2;11E;K;26;CPSplitViewDividerStyleKeyD;K;6;CP$UIDd;2;12E;K;29;CPSplitViewDividerSubviewsKeyD;K;6;CP$UIDd;2;13E;K;30;CPSplitViewArrangedSubviewsKeyD;K;6;CP$UIDd;2;14E;K;26;CPSplitViewRealSubviewsKeyD;K;6;CP$UIDd;2;15E;K;33;CPSplitViewArrangesAllSubviewsKeyD;K;6;CP$UIDd;2;11E;K;26;CPSplitViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;E;E;S;9;splitviewS;32;splitview-divider-thick+verticalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;E;E;T;d;1;1D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;E;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;16E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;22E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;22E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;25E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;26E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;22E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;28E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;29E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;30E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;32E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;33E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;34E;E;S;19;{{0, 0}, {40, 100}}S;4;viewS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;20;{{50, 0}, {40, 100}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;20;{{40, 0}, {10, 100}}S;19;{{0, 0}, {10, 100}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;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;2;31E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;35E;E;d;2;40D;K;6;$classD;K;6;CP$UIDd;2;31E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;35E;E;S;58;{\"origin\":{\"x\":38,\"y\":0},\"size\":{\"width\":14,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPSplitView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":40}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":50,\"y\":0},\"size\":{\"height\":100,\"width\":40}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":40,\"y\":0},\"size\":{\"height\":100,\"width\":10}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPStackView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;11;CPStackViewK;8;$classesA;S;11;CPStackViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;22;CPStackViewOrientationD;K;6;CP$UIDd;2;11E;K;20;CPStackViewAlignmentD;K;6;CP$UIDd;2;12E;K;23;CPStackViewDistributionD;K;6;CP$UIDd;2;11E;K;18;CPStackViewSpacingD;K;6;CP$UIDd;2;13E;K;21;CPStackViewEdgeInsetsD;K;6;CP$UIDd;2;15E;K;30;CPStackViewDetachesHiddenViewsD;K;6;CP$UIDd;2;16E;K;23;CPStackViewViewsLeadingD;K;6;CP$UIDd;2;17E;K;22;CPStackViewViewsCenterD;K;6;CP$UIDd;2;18E;K;24;CPStackViewViewsTrailingD;K;6;CP$UIDd;2;19E;K;25;CPStackViewCustomSpacingsD;K;6;CP$UIDd;2;21E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;S;4;viewS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;d;1;0d;2;10d;1;8D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;24E;E;T;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;10;CPMapTableK;8;$classesA;S;10;CPMapTableS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;17;CPMapTableKeysKeyD;K;6;CP$UIDd;2;25E;K;20;CPMapTableObjectsKeyD;K;6;CP$UIDd;2;26E;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;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;27E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;28E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;29E;E;S;39;{\"top\":0,\"right\":0,\"bottom\":0,\"left\":0}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;19;{{0, 35}, {40, 30}}S;18;{{0, 0}, {40, 30}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPStackView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "10", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":35},\"size\":{\"height\":30,\"width\":40}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPStepper": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;11E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;18;CPStepperIncrementD;K;6;CP$UIDd;2;15E;K;17;CPStepperMinValueD;K;6;CP$UIDd;2;15E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;2;16E;K;19;CPStepperValueWrapsD;K;6;CP$UIDd;2;17E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;2;17E;E;S;16;{{0, 0}, {0, 0}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;E;E;S;7;stepperS;18;controlSizeRegularS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;E;E;d;1;4d;5;65540D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;23E;E;d;1;1d;1;9T;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;18E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;24E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;26E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;27E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;1;2E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;28E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;29E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;30E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;27E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;17E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;31E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;27E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;32E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;33E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;17E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;24E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;35E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;27E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;1;2E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;28E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;36E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;30E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;27E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;17E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;31E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;27E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;32E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;2;33E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;17E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;2;34E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;37E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;38E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;39E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}S;6;buttonS;37;bordered+controlSizeRegular+roundRectD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;E;E;d;1;0S;16;_buttonDidClick:D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;23E;E;d;2;14d;1;2f;3;0.5f;4;0.05d;2;12D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;41E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;23E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;43E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;38E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;19E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;19E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;45E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;38E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;20E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;20E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;46E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;42E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPStepper", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "4", + "maxValue": "9", + "minValue": "1", + "objectValue": "4", + "stringValue": "4", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPButton", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2", + "doubleValue": "0", + "objectValue": "0", + "state": "0", + "stringValue": "0", + "tag": "-1", + "title": "nil" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + }, + "CPTabView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;9;CPTabViewK;8;$classesA;S;9;CPTabViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;2;10E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;11E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;12E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}S;8;tab-viewS;6;normalS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;14E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;2;18E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;2;18E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;19E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;d;1;0D;K;10;$classnameS;13;CPTabViewItemK;8;$classesA;S;13;CPTabViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;2;15E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;2;15E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;17E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;S;3;oneD;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;21E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;22E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;23E;E;S;3;twoD;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;20E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;21E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;22E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;24E;E;S;5;$nulld;2;18S;4;viewD;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPTabView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "numberOfTabViewItems": "2", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "18", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "18", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":2,\"y\":0},\"size\":{\"height\":0,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":1,\"y\":0},\"size\":{\"height\":0,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":1}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPTableCellView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;15;CPTableCellViewK;8;$classesA;S;15;CPTableCellViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;12E;E;E;S;4;viewS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;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;11E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;13E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;14E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;15E;E;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPTableCellView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "objectValue": "nil", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPTableHeaderView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;12E;E;E;S;14;tableHeaderRowS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;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;11E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;13E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;14E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;15E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;16E;E;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}S;4;viewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPTableHeaderView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPTableView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;9E;K;12;$agrid-colorD;K;6;CP$UIDd;2;10E;K;24;$aalternating-row-colorsD;K;6;CP$UIDd;2;11E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;14E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;15E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;17E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;2;18E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;19E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;20E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;1;0E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;13E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;21E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;21E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;21E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;13E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;22E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;10E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;20E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;13E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;2;11E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;24E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;26E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;S;18;{{0, 0}, {126, 0}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;6E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;27E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;28E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;E;S;9;tableviewS;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;1;6E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;30E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;28E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;1;7E;D;K;6;CP$UIDd;2;31E;E;E;S;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;E;E;d;1;4D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;34E;E;d;2;25S;6;{3, 2}d;1;0T;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;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;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;38E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;38E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;39E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;40E;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;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;41E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;41E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;42E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;43E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;44E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;1;2E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;45E;E;E;S;5;colorS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;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;45E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;6E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;49E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;28E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;50E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;51E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;52E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}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;2;53E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;54E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;55E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;56E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;58E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;60E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;2;61E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;1;0E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;62E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;54E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;55E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;56E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;63E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;64E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;2;61E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;1;0E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;S;17;{{0, 0}, {7, 25}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;19;{{0, 0}, {126, 25}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;63E;E;E;S;14;tableHeaderRowD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;d;1;1f;18;0.8627450980392157f;18;0.8784313725490196f;18;0.8862745098039215D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;45E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;68E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;69E;E;S;3;oned;2;60d;2;10d;7;1000000D;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;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;70E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;71E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;73E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;1;0E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;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;59E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;74E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;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;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;80E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;81E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;20E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;78E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;d;1;3S;3;twoD;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;83E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;84E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;1;0E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;74E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;85E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;78E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;86E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;81E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;20E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;78E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}S;18;{{0, 0}, {63, 25}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;16;{{0, 0}, {0, 0}}S;9;textfieldS;44;controlSizeRegular+placeholder+tableDataViewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;89E;E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;34E;E;d;1;2S;19;{{63, 0}, {63, 25}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;90E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;34E;E;D;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;2;87E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;70E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;94E;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;95E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;51E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;60E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;60E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;87E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;63E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;70E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;63E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;12E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;12E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;13E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;98E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;51E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;64E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;64E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;99E;E;d;2;18S;4;viewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;68E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPTableView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":126}}", + "state": { + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "numberOfColumns": "2", + "objectValue": "nil", + "stringValue": "", + "tag": "-1" + }, + "subviews": [] + } + }, + "CPTextField": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;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;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;4E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;5E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;6E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;6E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;7E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;1;9E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;10E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;11E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;13E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;14E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;14E;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;15E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;16E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;17E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;S;20;{{0, 0}, {200, 100}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;8E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;E;E;S;4;Textd;4;3072D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;21E;E;T;d;1;2d;1;0S;0;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;22E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;23E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;24E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;25E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;26E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;27E;E;S;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;28E;E;d;2;40D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;28E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;29E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;30E;E;S;57;{\"origin\":{\"x\":0,\"y\":1},\"size\":{\"width\":200,\"height\":99}}S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPTextField", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "false", + "isBordered": "false", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "Text", + "stringValue": "Text", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPTextView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;10;CPTextViewK;8;$classesA;S;10;CPTextViewS;6;CPTextS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;11E;K;23;CPTextViewIsEditableKeyD;K;6;CP$UIDd;2;12E;K;25;CPTextViewIsSelectableKeyD;K;6;CP$UIDd;2;12E;K;23;CPTextViewIsRichTextKeyD;K;6;CP$UIDd;1;9E;K;21;CPTextViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;22;CPTextViewContainerKeyD;K;6;CP$UIDd;2;14E;K;32;CPTextViewInsertionPointColorKeyD;K;6;CP$UIDd;2;15E;K;35;CPTextViewSelectedTextAttributesKeyD;K;6;CP$UIDd;2;17E;K;23;CPTextViewAllowsUndoKeyD;K;6;CP$UIDd;2;12E;K;26;CPTextViewUsesFontPanelKeyD;K;6;CP$UIDd;2;12E;K;22;CPTextViewUsesRulerKeyD;K;6;CP$UIDd;2;12E;K;34;CPTextViewHorizontallyResizableKeyD;K;6;CP$UIDd;1;9E;K;32;CPTextViewVerticallyResizableKeyD;K;6;CP$UIDd;2;12E;K;9;CPMaxSizeD;K;6;CP$UIDd;2;18E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;19E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;20E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;E;S;4;viewS;6;normalS;6;{1, 1}F;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;10;CP.objectsA;E;E;T;D;K;10;$classnameS;15;CPTextContainerK;8;$classesA;S;15;CPTextContainerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;22;CPTextContainerSizeKeyD;K;6;CP$UIDd;2;18E;K;31;CPTextContainerLayoutManagerKeyD;K;6;CP$UIDd;2;22E;K;37;CPTextContainerWidthTracksTextViewKeyD;K;6;CP$UIDd;1;0E;K;38;CPTextContainerHeightTracksTextViewKeyD;K;6;CP$UIDd;1;0E;K;37;CPTextContainerLineFragmentPaddingKeyD;K;6;CP$UIDd;2;23E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;24E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;20E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;10;CP.objectsD;K;30;CPBackgroundColorAttributeNameD;K;6;CP$UIDd;2;25E;E;E;S;15;{200, 10000000}D;K;6;$classD;K;6;CP$UIDd;2;10E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;E;E;S;5;colorD;K;10;$classnameS;15;CPLayoutManagerK;8;$classesA;S;15;CPLayoutManagerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;29;CPLayoutManagerTextStorageKeyD;K;6;CP$UIDd;2;28E;E;d;1;5D;K;6;$classD;K;6;CP$UIDd;2;10E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;30E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;20E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;E;d;1;1D;K;10;$classnameS;13;CPTextStorageK;8;$classesA;S;13;CPTextStorageS;25;CPMutableAttributedStringS;18;CPAttributedStringS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;CPAttributedStringStringD;K;6;CP$UIDd;2;31E;K;24;CPAttributedStringRangesD;K;6;CP$UIDd;2;32E;K;28;CPAttributedStringAttributesD;K;6;CP$UIDd;2;33E;E;d;1;0D;K;6;$classD;K;6;CP$UIDd;2;10E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;E;E;S;4;TextD;K;6;$classD;K;6;CP$UIDd;2;10E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;E;E;f;3;0.6f;3;0.8D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;10;CP.objectsD;E;E;S;25;{\"location\":0,\"length\":4}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPTextView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "true", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "isEditable": "true", + "isHidden": "false", + "isSelectable": "true", + "objectValue": "Text", + "string": "Text", + "stringValue": "Text", + "tag": "-1" + }, + "subviews": [] + } + }, + "CPTokenField": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;12;CPTokenFieldK;8;$classesA;S;12;CPTokenFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;11E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;14E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;15E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;16E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;17E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;2;19E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;2;20E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;2;16E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;E;E;S;10;tokenfieldS;26;bezeled+controlSizeRegularS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;E;E;d;4;3072D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;d;1;2d;1;0S;0;D;K;10;$classnameS;28;_CPStringContentCharacterSetK;8;$classesA;S;28;_CPStringContentCharacterSetS;14;CPCharacterSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;25;CPCharacterSetInvertedKeyD;K;6;CP$UIDd;1;9E;K;37;_CPStringContentCharacterSetStringKeyD;K;6;CP$UIDd;2;28E;E;f;3;0.5D;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;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;29E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;30E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;31E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;32E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;33E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;35E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;37E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;38E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;40E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;41E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;42E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;42E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;42E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;42E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;1;9E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;1;9E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;1;0E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;44E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;16E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;2;16E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;16E;K;31;CPScrollViewAllowsMagnificationD;K;6;CP$UIDd;1;9E;K;28;CPScrollViewMinMagnificationD;K;6;CP$UIDd;2;45E;K;28;CPScrollViewMaxMagnificationD;K;6;CP$UIDd;2;46E;K;21;CPScrollViewHasVRulerD;K;6;CP$UIDd;1;9E;K;21;CPScrollViewHasHRulerD;K;6;CP$UIDd;1;9E;K;25;CPScrollViewRulersVisibleD;K;6;CP$UIDd;1;9E;K;18;CPScrollViewVRulerD;K;6;CP$UIDd;1;0E;K;18;CPScrollViewHRulerD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;47E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;48E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;1;2E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;1;2E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;49E;E;S;3;OneS;3;TwoS;103;{\"_stateNames\":{\"controlSizeRegular\":true},\"_stateNameString\":\"controlSizeRegular\",\"_stateNameCount\":1}S;1;,S;19;{{0, 1}, {200, 99}}S;19;{{0, 0}, {200, 99}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;E;E;d;2;18S;10;scrollviewS;6;normalD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;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;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;30E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;30E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;22E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;52E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;54E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;54E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;22E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;55E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;1;0E;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;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;56E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;22E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;59E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;60E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;16E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;22E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;46E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;62E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;57E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;63E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;2;16E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;64E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;64E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;22E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;65E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;16E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;22E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;67E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;46E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;68E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;1;9E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;63E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;2;16E;E;d;2;10D;K;10;$classnameS;6;CPViewK;8;$classesA;S;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;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;54E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;54E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;22E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;71E;E;f;4;0.25d;1;4D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;53E;E;E;S;4;viewD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;74E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;74E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;75E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;15E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;76E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;16;{{0, 0}, {7, 0}}T;S;8;scrollerS;58;controlSizeRegular+disabled+scroller-style-legacy+verticalD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;77E;E;E;S;27;_verticalScrollerDidScroll:D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;d;1;1S;16;{{0, 0}, {0, 7}}S;49;controlSizeRegular+disabled+scroller-style-legacyD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;78E;E;E;S;29;_horizontalScrollerDidScroll:D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;80E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":0}}S;58;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":200,\"height\":100}}S;19;{{0, 0}, {200, 30}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;84E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;48E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;40E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;40E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;2;86E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;48E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;41E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;41E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;E;E;S;5;colorD;K;10;$classnameS;18;_CPTokenFieldTokenK;8;$classesA;S;18;_CPTokenFieldTokenS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;90E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;91E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;25E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;93E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;15E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;16E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;17E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;91E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;96E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;26E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;12E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;97E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;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;15E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;16E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;17E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;1;0E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;1;0E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;99E;E;S;17;{{0, 1}, {0, 29}}S;17;{{0, 0}, {0, 29}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;E;E;S;16;tokenfield-tokenD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;S;17;{{2, 1}, {0, 29}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;104E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":0,\"height\":1}}S;54;{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"width\":1,\"height\":0}}D;K;10;$classnameS;34;_CPTokenFieldTokenDisclosureButtonK;8;$classesA;S;34;_CPTokenFieldTokenDisclosureButtonS;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;100E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;82E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;106E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;54E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;16;$aimage-positionD;K;6;CP$UIDd;2;15E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;46E;K;11;$aalignmentD;K;6;CP$UIDd;2;16E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;16E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;46E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;111E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;112E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;16E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;57E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;15E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;16E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;20E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;113E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;57E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;115E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;48E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;82E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;82E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;116E;E;D;K;6;$classD;K;6;CP$UIDd;3;100E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;83E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;117E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;54E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;83E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;16;$aimage-positionD;K;6;CP$UIDd;2;15E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;46E;K;11;$aalignmentD;K;6;CP$UIDd;2;16E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;118E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;16E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;46E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;119E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;1;0E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;112E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;16E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;57E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;15E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;16E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;2;20E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;113E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;2;57E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;120E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;48E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;83E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;83E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;121E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;105E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;2;17E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;122E;E;S;18;{{-15, 5}, {0, 0}}S;34;tokenfield-token-disclosure-buttonS;48;bordered+controlSizeRegular+pulls-down+roundRectD;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;d;2;14f;4;0.05d;2;12D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;3;105E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;2;17E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;128E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;48E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;3;101E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;3;101E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;129E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;130E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;131E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;2;48E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;3;103E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;3;103E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;132E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;17E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;101E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;133E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;2;57E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;17E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;133E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;2;57E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;13E;K;15;CPValueValueKeyD;K;6;CP$UIDd;2;72E;E;S;17;_popUpItemAction:d;6;262144E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPTokenField", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "false", + "isBordered": "false", + "isEditable": "false", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "false", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "[One, Two]", + "stringValue": "One,Two", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPScrollView", + "frame": "{\"origin\":{\"x\":0,\"y\":1},\"size\":{\"height\":99,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "18", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPClipView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":99,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":30,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "2", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":29,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":29,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + }, + { + "class": "CPClipView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPScroller", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "false", + "isHidden": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":7}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + }, + { + "class": "CPScroller", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "false", + "isHidden": "true", + "lineBreakMode": "2", + "verticalAlignment": "1", + "doubleValue": "0", + "objectValue": "0", + "stringValue": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":7,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + }, + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + ] + } + ] + } + }, + "CPView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;10E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;E;E;S;4;viewS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;12E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;13E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;6E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;7E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;1;8E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;1;8E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;1;9E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;14E;E;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + }, + "CPVisualEffectView": { + "archive": "280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;18;CPVisualEffectViewK;8;$classesA;S;18;CPVisualEffectViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;1;3E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;1;3E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;1;5E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;1;7E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;9E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;10E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;10E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;11E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;13E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;14E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;2;15E;K;9;_materialD;K;6;CP$UIDd;2;16E;K;6;_stateD;K;6;CP$UIDd;2;16E;E;S;20;{{0, 0}, {200, 100}}D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;18E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;6E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;19E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;20E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;21E;E;S;4;viewS;23;appearance-vibrant-darkS;6;{1, 1}F;D;K;10;$classnameS;12;CPAppearanceK;8;$classesA;S;12;CPAppearanceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;5;_nameD;K;6;CP$UIDd;2;22E;K;15;_allowsVibrancyD;K;6;CP$UIDd;2;23E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;d;1;1d;1;0D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;1;2E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;24E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;25E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;1;2E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;8E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;1;9E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;10E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;10E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;11E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;15E;E;E;S;5;colorS;6;normalS;27;CPAppearanceNameVibrantDarkT;S;18;{{3, 5}, {20, 10}}S;18;{{0, 0}, {20, 10}}D;K;6;$classD;K;6;CP$UIDd;1;4E;K;10;CP.objectsA;E;E;f;19;0.11764705882352941E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;", + "state": { + "class": "CPVisualEffectView", + "frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":100,\"width\":200}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(30, 30, 30, 1)", + "isHidden": "false", + "state": "0", + "tag": "-1" + }, + "subviews": [ + { + "class": "CPView", + "frame": "{\"origin\":{\"x\":3,\"y\":5},\"size\":{\"height\":10,\"width\":20}}", + "state": { + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "tag": "-1" + }, + "subviews": [] + } + ] + } + } +} diff --git a/Tests/AppKit/Resources/DropInBaseline.json b/Tests/AppKit/Resources/DropInBaseline.json new file mode 100644 index 000000000..050fcea53 --- /dev/null +++ b/Tests/AppKit/Resources/DropInBaseline.json @@ -0,0 +1,8108 @@ +{ + "publicClasses": [ + "CAAnimation", + "CABasicAnimation", + "CAKeyframeAnimation", + "CALayer", + "CAMediaTimingFunction", + "CAPropertyAnimation", + "CPAccordionView", + "CPAccordionViewItem", + "CPActionBinding", + "CPAlert", + "CPAnimation", + "CPAnimationContext", + "CPAppearance", + "CPApplication", + "CPArray", + "CPArrayController", + "CPAttributedString", + "CPBasePlatform", + "CPBasePlatformString", + "CPBezierPath", + "CPBinder", + "CPBox", + "CPBrowser", + "CPBundle", + "CPButton", + "CPButtonBar", + "CPByteCountFormatter", + "CPCache", + "CPCharacterSet", + "CPCheckBox", + "CPCib", + "CPCibBindingConnector", + "CPCibConnector", + "CPCibControlConnector", + "CPCibHelpConnector", + "CPCibOutletConnector", + "CPCibRuntimeAttributesConnector", + "CPClipView", + "CPCoder", + "CPCollectionView", + "CPCollectionViewItem", + "CPColor", + "CPColorPanel", + "CPColorPicker", + "CPColorSpace", + "CPColorWell", + "CPColorWellValueBinder", + "CPColorWheelColorPicker", + "CPComboBox", + "CPComparisonPredicate", + "CPCompoundPredicate", + "CPControl", + "CPController", + "CPControllerSelectionProxy", + "CPCookie", + "CPCountedSet", + "CPCursor", + "CPDOMWindowLayer", + "CPData", + "CPDate", + "CPDateFormatter", + "CPDatePicker", + "CPDecimalNumber", + "CPDecimalNumberHandler", + "CPDelayedPerform", + "CPDictionary", + "CPDisclosureButton", + "CPDocument", + "CPDocumentController", + "CPDoubleClickActionBinding", + "CPDragServer", + "CPDraggingInfo", + "CPEnumerator", + "CPError", + "CPEvent", + "CPException", + "CPExpression", + "CPFont", + "CPFontDescriptor", + "CPFontManager", + "CPFontPanel", + "CPFormatter", + "CPFunctionOperation", + "CPGradient", + "CPGraphicsContext", + "CPHTTPURLResponse", + "CPImage", + "CPImageView", + "CPImageViewValueBinder", + "CPIndexPath", + "CPIndexSet", + "CPInvocation", + "CPInvocationOperation", + "CPIsNilTransformer", + "CPIsNotNilTransformer", + "CPJSONPConnection", + "CPKeyBinding", + "CPKeyedArchiver", + "CPKeyedUnarchiver", + "CPLayoutManager", + "CPLevelIndicator", + "CPLocale", + "CPMapTable", + "CPMarkdownParser", + "CPMenu", + "CPMenuItem", + "CPMultipleValueAndBinding", + "CPMultipleValueOrBinding", + "CPMutableArray", + "CPMutableAttributedString", + "CPMutableDictionary", + "CPMutableIndexSet", + "CPMutableParagraphStyle", + "CPMutableSet", + "CPNegateBooleanTransformer", + "CPNinePartImage", + "CPNotification", + "CPNotificationCenter", + "CPNotificationQueue", + "CPNull", + "CPNumber", + "CPNumberFormatter", + "CPObject", + "CPObjectController", + "CPOpenPanel", + "CPOperation", + "CPOperationQueue", + "CPOutlineView", + "CPPanel", + "CPParagraphStyle", + "CPPasteboard", + "CPPlatform", + "CPPlatformPasteboard", + "CPPlatformString", + "CPPlatformWindow", + "CPPopUpButton", + "CPPopover", + "CPPredicate", + "CPPredicateEditor", + "CPPredicateEditorRowTemplate", + "CPPredicateEditorValueBinder", + "CPPredicateScanner", + "CPPredicateUtilities", + "CPPredicate_BOOL", + "CPProgressIndicator", + "CPPropertyListSerialization", + "CPProxy", + "CPRadio", + "CPRadioGroup", + "CPResponder", + "CPRuleEditor", + "CPRulerMarker", + "CPRulerView", + "CPRunLoop", + "CPSavePanel", + "CPScanner", + "CPScreen", + "CPScrollView", + "CPScroller", + "CPSearchField", + "CPSecureTextField", + "CPSegmentedControl", + "CPSet", + "CPShadow", + "CPShadowView", + "CPSimpleTypesetter", + "CPSlider", + "CPSliderColorPicker", + "CPSortDescriptor", + "CPSound", + "CPSplitView", + "CPStackView", + "CPStepper", + "CPString", + "CPTabView", + "CPTabViewItem", + "CPTableCellView", + "CPTableColumn", + "CPTableColumnValueBinder", + "CPTableContentBinder", + "CPTableHeaderView", + "CPTableView", + "CPText", + "CPTextAttachment", + "CPTextContainer", + "CPTextField", + "CPTextList", + "CPTextStorage", + "CPTextTab", + "CPTextView", + "CPTheme", + "CPThemeBlend", + "CPThreePartImage", + "CPTimeZone", + "CPTimer", + "CPTitleWithPatternBinding", + "CPTokenField", + "CPToolbar", + "CPToolbarItem", + "CPTrackingArea", + "CPTreeController", + "CPTreeNode", + "CPTypesetter", + "CPURL", + "CPURLConnection", + "CPURLRequest", + "CPURLResponse", + "CPUnarchiveFromDataTransformer", + "CPUndoManager", + "CPUserDefaults", + "CPUserDefaultsController", + "CPUserDefaultsCookieStore", + "CPUserDefaultsLocalStore", + "CPUserDefaultsStore", + "CPUserNotification", + "CPUserNotificationCenter", + "CPUserSessionManager", + "CPValue", + "CPValueTransformer", + "CPValueWithPatternBinding", + "CPView", + "CPViewAnimation", + "CPViewAnimator", + "CPViewController", + "CPVisualEffectView", + "CPWebScriptObject", + "CPWebView", + "CPWindow", + "CPWindowController", + "CPWorkspace", + "HandImageLayer", + "HandLayer", + "HoursLayer" + ], + "themeAttributes": { + "CPBox": { + "background-color": "CPNull", + "border-color": "CPNull", + "border-width": "1", + "content-adjustment": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "content-margin": "{\"height\":0,\"width\":0}", + "corner-radius": "3", + "inner-shadow-color": "CPNull", + "inner-shadow-offset": "{\"height\":0,\"width\":0}", + "inner-shadow-size": "6", + "min-y-correction-no-title": "0", + "min-y-correction-title": "0", + "nib2cib-adjustment-primary-frame": "{\"origin\":{\"x\":4,\"y\":-4},\"size\":{\"height\":-6,\"width\":-8}}", + "title-color": "CPNull", + "title-font": "CPNull", + "title-left-offset": "5", + "title-top-offset": "0" + }, + "CPBrowser": { + "image-control-leaf": "CPNull", + "image-control-leaf-pressed": "CPNull", + "image-control-resize": "CPNull" + }, + "CPButton": { + "alignment": "2", + "bezel-color": "CPNull", + "bezel-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "image": "CPNull", + "image-color": "CPNull", + "image-offset": "0", + "image-position": "2", + "image-scaling": "2", + "image-vertical-offset": "0", + "invert-image": "false", + "invert-image-on-push": "false", + "vertical-alignment": "2" + }, + "CPButtonBar": { + "bezel-color": "CPNull", + "button-bezel-color": "CPNull", + "button-image-action": "CPNull", + "button-image-minus": "CPNull", + "button-image-plus": "CPNull", + "button-text-color": "CPNull", + "resize-control-color": "CPNull", + "resize-control-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "resize-control-size": "{\"height\":0,\"width\":0}" + }, + "CPColor": { + "alternate-selected-control-color": "CPNull", + "css-based": "false", + "secondary-selected-control-color": "CPNull", + "selected-text-background-color": "CPNull", + "selected-text-inactive-background-color": "CPNull" + }, + "CPColorWell": { + "bezel-color": "CPNull", + "bezel-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-border-color": "CPNull", + "content-border-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-inset": "{\"bottom\":3,\"left\":3,\"right\":3,\"top\":3}" + }, + "CPComboBox": { + "border-inset": "{\"bottom\":3,\"left\":3,\"right\":3,\"top\":3}", + "popup-button-size": "{\"height\":29,\"width\":21}" + }, + "CPControl": { + "alignment": "0", + "font": "CPNull", + "image-position": "2", + "image-scaling": "1", + "line-break-mode": "2", + "max-size": "{\"height\":-1,\"width\":-1}", + "min-size": "{\"height\":0,\"width\":0}", + "text-color": "CPColor:rgba(0, 0, 0, 1)", + "text-shadow-color": "CPNull", + "text-shadow-offset": "{\"height\":0,\"width\":0}", + "vertical-alignment": "1" + }, + "CPDatePicker": { + "arrow-image-left": "CPNull", + "arrow-image-left-highlighted": "CPNull", + "arrow-image-right": "CPNull", + "arrow-image-right-highlighted": "CPNull", + "arrow-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "bezel-color": "CPColor:rgba(0, 0, 0, 0)", + "bezel-color-calendar": "CPColor:rgba(0, 0, 0, 0)", + "bezel-color-calendar-left": "CPNull", + "bezel-color-calendar-middle": "CPNull", + "bezel-color-calendar-right": "CPNull", + "bezel-color-clock": "CPColor:rgba(0, 0, 0, 0)", + "bezel-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "border-color": "CPColor:rgba(0, 0, 0, 0)", + "border-width": "1", + "calendar-clock-margin": "10", + "circle-image": "CPNull", + "circle-image-highlighted": "CPNull", + "clock-draws-hours": "false", + "clock-font": "CPNull", + "clock-hours-font": "CPNull", + "clock-hours-radius": "0", + "clock-hours-text-color": "CPColor:rgba(0, 0, 0, 0)", + "clock-only-nib2cib-adjustment-frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}", + "clock-second-hand-over": "false", + "clock-text-color": "CPColor:rgba(0, 0, 0, 1)", + "clock-text-shadow-color": "CPColor:rgba(0, 0, 0, 0)", + "clock-text-shadow-offset": "{\"height\":0,\"width\":0}", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-inset-datepicker-textfield": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-inset-datepicker-textfield-separator": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "current-button-size": "{\"height\":0,\"width\":0}", + "date-hour-margin": "5", + "datepicker-textfield-bezel-color": "CPColor:rgba(0, 0, 0, 0)", + "day-label-inset": "CPNull", + "hour-ampm-margin": "2", + "hour-hand-image": "CPNull", + "hour-hand-size": "{\"height\":0,\"width\":0}", + "max-size-calendar": "{\"height\":0,\"width\":0}", + "middle-hand-image": "CPNull", + "middle-hand-size": "{\"height\":0,\"width\":0}", + "min-size-calendar": "{\"height\":0,\"width\":0}", + "min-size-datepicker-textfield": "{\"height\":0,\"width\":0}", + "minute-hand-image": "CPNull", + "minute-hand-size": "{\"height\":0,\"width\":0}", + "next-button-size": "{\"height\":0,\"width\":0}", + "previous-button-size": "{\"height\":0,\"width\":0}", + "second-hand-image": "CPNull", + "second-hand-size": "{\"height\":0,\"width\":0}", + "separator-color": "CPNull", + "separator-content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "separator-height": "0", + "separator-margin-width": "0", + "size-calendar": "{\"height\":0,\"width\":0}", + "size-clock": "{\"height\":0,\"width\":0}", + "size-header": "{\"height\":0,\"width\":0}", + "size-tile": "{\"height\":0,\"width\":0}", + "stepper-margin": "5", + "tile-content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "tile-font": "CPNull", + "tile-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "tile-margin": "CPNull", + "tile-text-alignment": "2", + "tile-text-color": "CPColor:rgba(0, 0, 0, 1)", + "tile-text-shadow-color": "CPColor:rgba(0, 0, 0, 0)", + "tile-text-shadow-offset": "{\"height\":0,\"width\":0}", + "tile-vertical-alignment": "2", + "time-separator-content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "title-font": "CPNull", + "title-inset": "CPNull", + "title-text-color": "CPColor:rgba(0, 0, 0, 1)", + "title-text-shadow-color": "CPColor:rgba(0, 0, 0, 0)", + "title-text-shadow-offset": "{\"height\":0,\"width\":0}", + "uses-focus-ring": "false", + "weekday-font": "CPNull", + "weekday-text-color": "CPColor:rgba(0, 0, 0, 1)", + "weekday-text-shadow-color": "CPColor:rgba(0, 0, 0, 0)", + "weekday-text-shadow-offset": "{\"height\":0,\"width\":0}" + }, + "CPFont": { + "system-font-face": "CPNull", + "system-font-size-mini": "CPNull", + "system-font-size-regular": "CPNull", + "system-font-size-small": "CPNull", + "system-font-style": "CPNull" + }, + "CPLevelIndicator": { + "bezel-color": "CPNull", + "color-critical": "CPNull", + "color-empty": "CPNull", + "color-normal": "CPNull", + "color-warning": "CPNull", + "spacing": "1" + }, + "CPPopUpButton": { + "menu-offset": "{\"height\":0,\"width\":0}" + }, + "CPProgressIndicator": { + "bar-color": "CPNull", + "bezel-color": "CPNull", + "circular-border-color": "CPNull", + "circular-border-size": "1", + "circular-color": "CPNull", + "default-height": "20", + "indeterminate-bar-color": "CPNull", + "spinning-mini-gif": "CPNull", + "spinning-regular-gif": "CPNull", + "spinning-small-gif": "CPNull" + }, + "CPRuleEditor": { + "add-image": "CPNull", + "alternating-row-colors": "CPNull", + "font": "CPFont:system", + "font-color": "CPNull", + "remove-image": "CPNull", + "selected-color": "CPNull", + "slice-bottom-border-color": "CPNull", + "slice-last-bottom-border-color": "CPNull", + "slice-top-border-color": "CPNull", + "vertical-alignment": "CPNull" + }, + "CPScrollView": { + "border-color": "CPColor:rgba(0, 0, 0, 1)", + "bottom-corner-color": "CPColor:rgba(255, 255, 255, 1)" + }, + "CPScroller": { + "decrement-line-color": "CPNull", + "decrement-line-size": "{\"height\":0,\"width\":0}", + "increment-line-color": "CPNull", + "increment-line-size": "{\"height\":0,\"width\":0}", + "knob-color": "CPNull", + "knob-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "knob-slot-color": "CPNull", + "minimum-knob-length": "21", + "scroller-width": "7", + "track-border-overlay": "9", + "track-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}" + }, + "CPSearchField": { + "image-cancel": "CPNull", + "image-cancel-inset": "{\"bottom\":0,\"left\":0,\"right\":5,\"top\":0}", + "image-cancel-pressed": "CPNull", + "image-find": "CPNull", + "image-search": "CPNull", + "image-search-inset": "{\"bottom\":0,\"left\":5,\"right\":0,\"top\":0}", + "layout-function": "CPNull", + "search-button-rect-function": "CPNull", + "search-menu-offset": "{\"x\":10,\"y\":-4}", + "search-right-margin": "2" + }, + "CPSegmentedControl": { + "alignment": "2", + "bezel-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "center-segment-bezel-color": "CPNull", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "divider-bezel-color": "CPNull", + "divider-thickness": "1", + "image-position": "2", + "image-scaling": "2", + "left-segment-bezel-color": "CPNull", + "right-segment-bezel-color": "CPNull", + "vertical-alignment": "2" + }, + "CPShadowView": { + "bezel-color": "CPNull", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}" + }, + "CPSlider": { + "bottom-margin": "0", + "direct-nib2cib-adjustment": "false", + "ib-size": "-1", + "knob-color": "CPNull", + "knob-offset": "0", + "knob-size": "{\"height\":0,\"width\":0}", + "left-track-color": "CPNull", + "tick-mark-color": "CPNull", + "tick-mark-margin": "0", + "tick-mark-size": "{\"height\":0,\"width\":0}", + "top-margin": "0", + "track-color": "CPNull", + "track-width": "0" + }, + "CPSplitView": { + "divider-color": "CPColor:rgba(255, 0, 0, 1)", + "divider-thickness": "1", + "horizontal-divider-color": "CPNull", + "pane-divider-color": "CPColor:rgba(127, 127, 127, 1)", + "pane-divider-thickness": "10", + "vertical-divider-color": "CPNull" + }, + "CPStepper": { + "bezel-color-down-button": "CPNull", + "bezel-color-up-button": "CPNull", + "down-button-size": "{\"height\":0,\"width\":0}", + "up-button-size": "{\"height\":0,\"width\":0}" + }, + "CPTabView": { + "box-content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "nib2cib-adjustment-frame": "CPNull", + "should-center-on-border": "false" + }, + "CPTableHeaderView": { + "background-color": "CPNull", + "divider-color": "CPColor:rgba(127, 127, 127, 1)", + "divider-thickness": "1" + }, + "CPTableView": { + "alternating-row-colors": "[CPColor:rgba(255, 255, 255, 1), CPColor:rgba(245, 249, 252, 1)]", + "default-row-height": "25", + "dropview-above-border-color": "CPNull", + "dropview-above-border-width": "CPNull", + "dropview-above-selected-border-color": "CPNull", + "dropview-above-selected-border-width": "CPNull", + "dropview-on-background-color": "CPNull", + "dropview-on-border-color": "CPNull", + "dropview-on-border-radius": "CPNull", + "dropview-on-border-width": "CPNull", + "dropview-on-selected-background-color": "CPNull", + "dropview-on-selected-border-color": "CPNull", + "dropview-on-selected-border-radius": "CPNull", + "dropview-on-selected-border-width": "CPNull", + "grid-color": "CPColor:rgba(220, 224, 226, 1)", + "grid-line-thickness": "1", + "header-view-height": "25", + "highlighted-grid-color": "CPNull", + "image-generic-file": "CPNull", + "selection-color": "CPNull", + "selection-radius": "CPNull", + "sort-image": "CPNull", + "sort-image-reversed": "CPNull", + "sourcelist-selection-color": "CPNull" + }, + "CPTextField": { + "background-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "bezel-color": "CPNull", + "bezel-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":1}", + "min-size": "{\"height\":29,\"width\":0}" + }, + "CPTokenField": { + "editor-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}" + }, + "CPView": { + "css-based": "false", + "dynamic-set": "CPNull", + "nib2cib-adjustment-frame": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":0,\"width\":0}}" + }, + "_CPAlertThemeView": { + "button-offset": "10", + "content-inset": "{\"bottom\":15,\"left\":50,\"right\":15,\"top\":15}", + "default-elements-margin": "3", + "error-image": "CPNull", + "help-image": "CPNull", + "help-image-left-offset": "15", + "help-image-pressed": "CPNull", + "image-offset": "{\"x\":15,\"y\":12}", + "information-image": "CPNull", + "informative-offset": "6", + "informative-text-alignment": "3", + "informative-text-color": "CPColor:rgba(0, 0, 0, 1)", + "informative-text-font": "CPFont:system", + "informative-text-shadow-color": "CPNull", + "informative-text-shadow-offset": "{\"height\":0,\"width\":0}", + "message-text-alignment": "3", + "message-text-color": "CPColor:rgba(0, 0, 0, 1)", + "message-text-font": "CPFont:system bold", + "message-text-shadow-color": "CPNull", + "message-text-shadow-offset": "{\"height\":0,\"width\":0}", + "modal-window-button-margin-x": "0", + "modal-window-button-margin-y": "0", + "size": "{\"height\":110,\"width\":400}", + "standard-window-button-margin-x": "0", + "standard-window-button-margin-y": "0", + "suppression-button-text-color": "CPColor:rgba(0, 0, 0, 1)", + "suppression-button-text-font": "CPFont:system", + "suppression-button-text-shadow-color": "CPNull", + "suppression-button-text-shadow-offset": "0", + "suppression-button-x-offset": "0", + "suppression-button-y-offset": "0", + "warning-image": "CPNull" + }, + "_CPBorderlessBridgeWindowView": { + "toolbar-background-color": "CPColor:rgba(127, 127, 127, 1)" + }, + "_CPCornerView": { + "background-color": "CPNull", + "divider-color": "CPNull" + }, + "_CPDatePickerDayViewTextField": { + "alignment": "2", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "font": "CPNull", + "min-size": "{\"height\":0,\"width\":0}", + "text-color": "CPColor:rgba(0, 0, 0, 1)", + "text-shadow-color": "CPColor:rgba(0, 0, 0, 0)", + "text-shadow-offset": "{\"height\":0,\"width\":0}", + "vertical-alignment": "2" + }, + "_CPDatePickerElementSeparator": { + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":1}", + "min-size": "{\"height\":0,\"width\":0}" + }, + "_CPDatePickerElementTextField": { + "bezel-color": "CPNull", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":1}", + "min-size": "{\"height\":0,\"width\":0}" + }, + "_CPDocModalWindowView": { + "body-color": "CPColor:rgba(255, 255, 255, 1)", + "shadow-height": "8" + }, + "_CPMenuItemMenuBarView": { + "horizontal-margin": "9", + "submenu-indicator-margin": "3", + "vertical-margin": "4" + }, + "_CPMenuItemStandardView": { + "indentation-width": "17", + "left-margin": "3", + "menu-item-default-mixed-state-highlighted-image": "CPNull", + "menu-item-default-mixed-state-image": "CPNull", + "menu-item-default-off-state-highlighted-image": "CPNull", + "menu-item-default-off-state-image": "CPNull", + "menu-item-default-on-state-highlighted-image": "CPNull", + "menu-item-default-on-state-image": "CPNull", + "menu-item-disabled-text-color": "CPColor:rgba(170, 170, 170, 1)", + "menu-item-selection-color": "CPNull", + "menu-item-separator-color": "CPNull", + "menu-item-separator-height": "1", + "menu-item-separator-view-height": "10", + "menu-item-text-color": "CPNull", + "menu-item-text-shadow-color": "CPNull", + "right-columns-margin": "30", + "right-margin": "17", + "state-column-width": "14", + "submenu-indicator-color": "CPNull", + "submenu-indicator-highlighted-image": "CPNull", + "submenu-indicator-image": "CPNull", + "vertical-margin": "4", + "vertical-offset": "0" + }, + "_CPMenuItemView": {}, + "_CPMenuView": { + "menu-bar-height": "28", + "menu-bar-highlight-color": "CPNull", + "menu-bar-highlight-text-color": "CPNull", + "menu-bar-highlight-text-shadow-color": "CPNull", + "menu-bar-icon-image": "CPNull", + "menu-bar-icon-image-alpha-value": "1", + "menu-bar-text-color": "CPNull", + "menu-bar-text-shadow-color": "CPNull", + "menu-bar-title-color": "CPNull", + "menu-bar-title-shadow-color": "CPNull", + "menu-bar-window-background-color": "CPNull", + "menu-bar-window-background-selected-color": "CPNull", + "menu-bar-window-first-item-font": "CPNull", + "menu-bar-window-font": "CPNull", + "menu-bar-window-height": "30", + "menu-bar-window-left-margin": "10", + "menu-bar-window-margin": "10", + "menu-bar-window-right-margin": "10", + "menu-general-icon-new": "CPNull", + "menu-general-icon-open": "CPNull", + "menu-general-icon-save": "CPNull", + "menu-window-margin-inset": "{\"bottom\":1,\"left\":5,\"right\":1,\"top\":5}", + "menu-window-menu-bar-background-style-color": "CPNull", + "menu-window-more-above-image": "CPNull", + "menu-window-more-below-image": "CPNull", + "menu-window-pop-up-background-style-color": "CPNull", + "menu-window-scroll-indicator-height": "16", + "menu-window-submenu-delta-x": "0", + "menu-window-submenu-delta-y": "0", + "menu-window-submenu-first-level-delta-y": "0" + }, + "_CPPopoverWindowView": { + "background-gradient": "CPNull", + "background-gradient-hud": "CPNull", + "border-radius": "5", + "shadow-blur": "15", + "shadow-size": "{\"height\":6,\"width\":0}", + "stroke-color": "CPNull", + "stroke-color-hud": "CPNull", + "stroke-width": "1" + }, + "_CPShadowWindowView": {}, + "_CPStandardWindowView": { + "bezel-head-color": "CPNull", + "bezel-head-sheet-color": "CPNull", + "body-color": "CPColor:rgba(255, 255, 255, 1)", + "close-image-button": "CPNull", + "close-image-highlighted-button": "CPNull", + "divider-color": "CPColor:rgba(0, 0, 0, 1)", + "gradient-height": "CPNull", + "minimize-image-button": "CPNull", + "minimize-image-highlighted-button": "CPNull", + "solid-color": "CPNull", + "title-bar-height": "32", + "unsaved-image-button": "CPNull", + "unsaved-image-highlighted-button": "CPNull" + }, + "_CPTableColumnHeaderView": { + "background-color": "CPNull", + "font": "CPNull", + "line-break-mode": "4", + "text-alignment": "0", + "text-color": "CPNull", + "text-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "text-shadow-color": "CPNull", + "text-shadow-offset": "{\"height\":0,\"width\":0}" + }, + "_CPTexturedWindowHeadView": {}, + "_CPTokenFieldTokenCloseButton": { + "alignment": "2", + "bezel-color": "CPNull", + "bezel-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "image": "CPNull", + "image-color": "CPNull", + "image-offset": "0", + "image-position": "2", + "image-scaling": "2", + "image-vertical-offset": "0", + "invert-image": "false", + "invert-image-on-push": "false", + "offset": "{\"x\":15,\"y\":5}", + "vertical-alignment": "2" + }, + "_CPTokenFieldTokenDisclosureButton": { + "alignment": "2", + "bezel-color": "CPNull", + "bezel-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "content-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "image": "CPNull", + "image-color": "CPNull", + "image-offset": "0", + "image-position": "2", + "image-scaling": "2", + "image-vertical-offset": "0", + "invert-image": "false", + "invert-image-on-push": "false", + "offset": "{\"x\":15,\"y\":5}", + "vertical-alignment": "2" + }, + "_CPToolTipWindowView": { + "background-color": "CPColor:rgba(255, 255, 202, 1)", + "border-radius": "2", + "color": "CPColor:rgba(0, 0, 0, 1)", + "stroke-color": "CPColor:rgba(227, 227, 227, 1)", + "stroke-width": "1" + }, + "_CPToolbarView": { + "content-inset": "{\"bottom\":4,\"left\":10,\"right\":4,\"top\":4}", + "extra-item-extra-alternate-image": "CPNull", + "extra-item-extra-image": "CPNull", + "extra-item-width": "20", + "image-item-separator-color": "CPNull", + "image-item-separator-size": "{\"origin\":{\"x\":0,\"y\":0},\"size\":{\"height\":32,\"width\":2}}", + "item-margin": "10", + "regular-size-height": "59", + "small-size-height": "46" + }, + "_CPWindowView": { + "attached-sheet-shadow-color": "CPColor:rgba(0, 0, 0, 1)", + "bezel-color": "CPNull", + "border-bottom-left-radius": "0px", + "border-bottom-right-radius": "0px", + "border-top-left-radius": "0px", + "border-top-right-radius": "0px", + "close-active-image": "CPNull", + "close-image": "CPNull", + "close-image-origin": "CPNull", + "close-image-size": "CPNull", + "frame-outset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "minimize-image-origin": "CPNull", + "minimize-image-size": "CPNull", + "resize-indicator": "CPNull", + "shadow-distance": "5", + "shadow-height": "8", + "shadow-inset": "{\"bottom\":0,\"left\":0,\"right\":0,\"top\":0}", + "shadown-horizontal-offset": "0", + "sheet-vertical-offset": "-1", + "size-indicator": "{\"height\":0,\"width\":0}", + "title-alignment": "2", + "title-bar-height": "25", + "title-font": "CPFont:system", + "title-line-break-mode": "4", + "title-margin": "20", + "title-text-color": "CPColor:rgba(0, 0, 0, 1)", + "title-text-shadow-color": "CPNull", + "title-text-shadow-offset": "{\"height\":0,\"width\":0}", + "title-vertical-alignment": "1", + "window-shadow-color": "CPColor:rgba(0, 0, 0, 0)", + "zoom-image-origin": "CPNull", + "zoom-image-size": "CPNull" + } + }, + "instanceMethods": { + "CAAnimation": [ + "delegate", + "duration", + "init", + "isRemovedOnCompletion", + "removedOnCompletion", + "runActionForKey:object:arguments:", + "setDelegate:", + "setDuration:", + "setRemovedOnCompletion:", + "setTimingFunction:", + "shouldArchiveValueForKey:", + "timingFunction", + "timingFunction", + "timingFunctionControlPoints" + ], + "CABasicAnimation": [ + "byValue", + "fromValue", + "init", + "setByValue:", + "setFromValue:", + "setToValue:", + "toValue" + ], + "CAKeyframeAnimation": [ + "biasValues", + "calculationMode", + "continuityValues", + "init", + "keyTimes", + "path", + "rotationMode", + "setBiasValues:", + "setCalculationMode:", + "setContinuityValues:", + "setKeyTimes:", + "setPath:", + "setRotationMode:", + "setTensionValues:", + "setTimingFunctions:", + "setValues:", + "tensionValues", + "timingFunctions", + "timingFunctionsControlPoints", + "values" + ], + "CALayer": [ + "addAnimation:forKey:", + "addSublayer:", + "affineTransform", + "anchorPoint", + "backgroundColor", + "backingStoreFrame", + "bounds", + "composite", + "containsPoint:", + "contents", + "convertPoint:fromLayer:", + "convertPoint:toLayer:", + "convertRect:fromLayer:", + "convertRect:toLayer:", + "delegate", + "display", + "drawInContext:", + "frame", + "hidden", + "hitTest:", + "init", + "insertSublayer:above:", + "insertSublayer:atIndex:", + "insertSublayer:below:", + "isHidden", + "needsDisplayOnBoundsChange", + "opacity", + "position", + "registerRunLoopUpdateWithMask:", + "removeAllAnimations", + "removeAnimationForKey:", + "removeFromSuperlayer", + "replaceSublayer:with:", + "setAffineTransform:", + "setAnchorPoint:", + "setBackgroundColor:", + "setBackingStoreFrame:", + "setBounds:", + "setContents:", + "setDelegate:", + "setFrame:", + "setHidden:", + "setMasksToBounds:", + "setNeedsComposite", + "setNeedsDisplay", + "setNeedsDisplayInRect:", + "setNeedsDisplayOnBoundsChange:", + "setOpacity:", + "setPosition:", + "setSublayerTransform:", + "setZPosition:", + "sublayerTransform", + "sublayers", + "superlayer", + "transformToLayer" + ], + "CAMediaTimingFunction": [ + "controlPoints", + "getControlPointAtIndex:values:", + "initWithControlPoints::::" + ], + "CAPropertyAnimation": [ + "additive", + "cumulative", + "init", + "isAdditive", + "isCumulative", + "keyPath", + "setAdditive:", + "setCumulative:", + "setKeyPath:" + ], + "CPAccordionView": [ + "addItem:", + "collapseItemAtIndex:", + "collapsedItemIndexes", + "expandItemAtIndex:", + "expandedItemIndexes", + "initWithFrame:", + "insertItem:atIndex:", + "itemHeaderPrototype", + "items", + "layoutSubviews", + "removeAllItems", + "removeItem:", + "removeItemAtIndex:", + "setEnabled:forItemAtIndex:", + "setFrameSize:", + "setItemHeaderPrototype:", + "toggleItemAtIndex:" + ], + "CPAccordionViewItem": [ + "identifier", + "init", + "initWithIdentifier:", + "label", + "setIdentifier:", + "setLabel:", + "setView:", + "view" + ], + "CPActionBinding": [ + "init" + ], + "CPAlert": [ + "accessoryView", + "addButtonWithTitle:", + "alertStyle", + "beginSheetModalForWindow:", + "beginSheetModalForWindow:didEndBlock:", + "beginSheetModalForWindow:modalDelegate:didEndSelector:contextInfo:", + "buttons", + "delegate", + "didEndSelector", + "icon", + "informativeText", + "init", + "layout", + "messageText", + "runModal", + "runModalWithDidEndBlock:", + "setAccessoryView:", + "setAccessoryView:", + "setAlertStyle:", + "setDelegate:", + "setDelegate:", + "setDidEndSelector:", + "setIcon:", + "setInformativeText:", + "setMessageText:", + "setShowsHelp:", + "setShowsSuppressionButton:", + "setShowsSuppressionButton:", + "setTheme:", + "setTitle:", + "setTitle:", + "setValue:forThemeAttribute:", + "setValue:forThemeAttribute:inState:", + "setWindowStyle:", + "showsHelp", + "showsSuppressionButton", + "suppressionButton", + "theme", + "themeView", + "title", + "window", + "windowStyle" + ], + "CPAnimation": [ + "animationCurve", + "animationTimerDidFire:", + "currentProgress", + "currentValue", + "delegate", + "duration", + "frameRate", + "initWithDuration:animationCurve:", + "isAnimating", + "setAnimationCurve:", + "setCurrentProgress:", + "setDelegate:", + "setDuration:", + "setFrameRate:", + "startAnimation", + "stopAnimation" + ], + "CPAnimationContext": [ + "actionFromAction:forAnimatedSubview:", + "completionHandler", + "duration", + "getAnimations:getTimers:usingAction:cssAnimate:", + "init", + "setCompletionHandler:", + "setDuration:", + "setTimingFunction:", + "timingFunction" + ], + "CPAppearance": [ + "allowsVibrancy", + "description", + "encodeWithCoder:", + "initWithAppearanceNamed:bundle:", + "initWithCoder:", + "isEqual:", + "setAllowsVibrancy:" + ], + "CPApplication": [ + "abortModal", + "activateIgnoringOtherApps:", + "addWindowsItem:title:filename:", + "applicationIconImage", + "arguments", + "arrangeInFront:", + "beginModalSessionForWindow:", + "beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:", + "changeWindowsItem:title:filename:", + "currentEvent", + "deactivate", + "delegate", + "doCommandBySelector:", + "endSheet:", + "endSheet:returnCode:", + "finishLaunching", + "hide:", + "hideOtherApplications:", + "init", + "isActive", + "keyWindow", + "mainMenu", + "mainWindow", + "modalWindow", + "namedArguments", + "orderFrontColorPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardAboutPanelWithOptions:", + "orderedWindows", + "removeWindowsItem:", + "replyToApplicationShouldTerminate:", + "run", + "runModalForWindow:", + "runModalSession:", + "sendAction:to:from:", + "sendEvent:", + "setApplicationIconImage:", + "setArguments:", + "setCallback:forNextEventMatchingMask:untilDate:inMode:dequeue:", + "setDelegate:", + "setMainMenu:", + "setMenu:", + "setTarget:selector:forNextEventMatchingMask:untilDate:inMode:dequeue:", + "setThemeBlend:", + "setWindowsMenu:", + "stopModal", + "stopModalWithCode:", + "targetForAction:", + "targetForAction:to:from:", + "terminate:", + "themeBlend", + "tryToPerform:with:", + "updateWindowsItem:", + "windowWithWindowNumber:", + "windows", + "windowsMenu" + ], + "CPArray": [ + "addObserver:forKeyPath:options:context:", + "addObserver:toObjectsAtIndexes:forKeyPath:options:context:", + "arrayByAddingObject:", + "arrayByAddingObjectsFromArray:", + "arrayByApplyingBlock:", + "componentsJoinedByString:", + "containsObject:", + "containsObjectIdenticalTo:", + "copy", + "count", + "description", + "encodeWithCoder:", + "enumerateObjectsUsingBlock:", + "enumerateObjectsWithOptions:usingBlock:", + "filterUsingPredicate:", + "filteredArrayUsingPredicate:", + "firstObject", + "firstObjectCommonWithArray:", + "hash", + "indexOfObject:", + "indexOfObject:inRange:", + "indexOfObject:inSortedRange:options:usingComparator:", + "indexOfObjectIdenticalTo:", + "indexOfObjectIdenticalTo:inRange:", + "indexOfObjectPassingTest:", + "indexOfObjectPassingTest:context:", + "indexOfObjectWithOptions:passingTest:", + "indexOfObjectWithOptions:passingTest:context:", + "indexesOfObjectsPassingTest:", + "indexesOfObjectsPassingTest:context:", + "indexesOfObjectsWithOptions:passingTest:", + "indexesOfObjectsWithOptions:passingTest:context:", + "init", + "initWithArray:", + "initWithArray:copyItems:", + "initWithCapacity:", + "initWithCoder:", + "initWithObjects:", + "initWithObjects:count:", + "isEqual:", + "isEqualToArray:", + "lastObject", + "makeObjectsPerformSelector:", + "makeObjectsPerformSelector:withObject:", + "makeObjectsPerformSelector:withObjects:", + "mutableCopy", + "objectAtIndex:", + "objectEnumerator", + "objectPassingTest:", + "objectsAtIndexes:", + "pathsMatchingExtensions:", + "removeObserver:forKeyPath:", + "removeObserver:fromObjectsAtIndexes:forKeyPath:", + "reverseObjectEnumerator", + "setValue:forKey:", + "setValue:forKeyPath:", + "sortedArrayUsingDescriptors:", + "sortedArrayUsingFunction:", + "sortedArrayUsingFunction:context:", + "sortedArrayUsingSelector:", + "subarrayWithRange:", + "valueForKey:", + "valueForKeyPath:" + ], + "CPArrayController": [ + "add:", + "addObject:", + "addObjects:", + "alwaysUsesMultipleValuesMarker", + "arrangeObjects:", + "arrangedObjects", + "automaticallyRearrangesObjects", + "avoidsEmptySelection", + "awakeFromCib", + "canInsert", + "canSelectNext", + "canSelectPrevious", + "clearsFilterPredicateOnInsertion", + "contentArray", + "contentSet", + "encodeWithCoder:", + "filterPredicate", + "init", + "initWithCoder:", + "insert:", + "insertObject:atArrangedObjectIndex:", + "prepareContent", + "preservesSelection", + "rearrangeObjects", + "remove:", + "removeObject:", + "removeObjectAtArrangedObjectIndex:", + "removeObjects:", + "removeObjectsAtArrangedObjectIndexes:", + "selectNext:", + "selectPrevious:", + "selectedObjects", + "selectionIndex", + "selectionIndexes", + "selectsInsertedObjects", + "setAlwaysUsesMultipleValuesMarker:", + "setAutomaticallyRearrangesObjects:", + "setAvoidsEmptySelection:", + "setClearsFilterPredicateOnInsertion:", + "setContent:", + "setFilterPredicate:", + "setPreservesSelection:", + "setSelectedObjects:", + "setSelectionIndex:", + "setSelectionIndexes:", + "setSelectsInsertedObjects:", + "setSortDescriptors:", + "sortDescriptors" + ], + "CPAttributedString": [ + "addAttribute:value:range:", + "addAttributes:range:", + "appendAttributedString:", + "attribute:atIndex:effectiveRange:", + "attribute:atIndex:longestEffectiveRange:inRange:", + "attributedSubstringFromRange:", + "attributesAtIndex:effectiveRange:", + "attributesAtIndex:longestEffectiveRange:inRange:", + "beginEditing", + "deleteCharactersInRange:", + "encodeWithCoder:", + "endEditing", + "init", + "initWithAttributedString:", + "initWithCoder:", + "initWithString:", + "initWithString:attributes:", + "insertAttributedString:atIndex:", + "isEqual:", + "isEqualToAttributedString:", + "itemNumberInTextList:atIndex:", + "length", + "mutableString", + "rangeOfTextList:atIndex:", + "removeAttribute:range:", + "replaceCharactersInRange:withAttributedString:", + "replaceCharactersInRange:withString:", + "setAttributedString:", + "setAttributes:range:", + "string" + ], + "CPBasePlatform": [], + "CPBasePlatformString": [], + "CPBezierPath": [ + "SVGString", + "addClip", + "appendBezierPath:", + "appendBezierPathWithArcFromPoint:toPoint:radius:", + "appendBezierPathWithOvalInRect:", + "appendBezierPathWithPoints:count:", + "appendBezierPathWithRect:", + "appendBezierPathWithRoundedRect:xRadius:yRadius:", + "bounds", + "closePath", + "controlPointBounds", + "currentPoint", + "curveToPoint:controlPoint1:controlPoint2:", + "elementCount", + "fill", + "getLineDash:count:phase:", + "getLineDash:phase:", + "init", + "isEmpty", + "lineToPoint:", + "lineWidth", + "moveToPoint:", + "removeAllPoints", + "setClip", + "setLineDash:count:phase:", + "setLineDash:phase:", + "setLineWidth:", + "stroke" + ], + "CPBinder": [ + "continuouslyUpdatesValue", + "handlesContentAsCompoundValue", + "initWithBinding:name:to:keyPath:options:from:", + "observeValueForKeyPath:ofObject:change:context:", + "raiseIfNotApplicable:forKeyPath:options:", + "reverseSetValueFor:", + "reverseTransformValue:withOptions:", + "setPlaceholderValue:withMarker:forBinding:", + "setValue:forBinding:", + "setValueFor:", + "source", + "suppressSpecificNotificationFromObject:keyPath:", + "transformValue:withOptions:", + "unsuppressSpecificNotificationFromObject:keyPath:", + "valueForBinding:" + ], + "CPBox": [ + "autoresizesSubview", + "borderColor", + "borderRect", + "borderType", + "borderWidth", + "boxType", + "contentView", + "contentViewMargins", + "cornerRadius", + "drawRect:", + "encodeWithCoder:", + "fillColor", + "initWithCoder:", + "initWithFrame:", + "isCSSBased", + "isTransparent", + "layoutSubviews", + "refreshDisplay", + "setAutoresizesSubviews:", + "setBorderColor:", + "setBorderType:", + "setBorderWidth:", + "setBoxType:", + "setContentView:", + "setContentViewMargins:", + "setCornerRadius:", + "setFillColor:", + "setFrameFromContentFrame:", + "setTitle:", + "setTitleColor:", + "setTitleFont:", + "setTitlePosition:", + "setTransparent:", + "setValue:forKey:", + "sizeToFit", + "title", + "titleColor", + "titleFont", + "titlePosition", + "titleRect", + "titleView" + ], + "CPBrowser": [ + "acceptsFirstResponder", + "addColumn", + "allowsEmptySelection", + "allowsMultipleSelection", + "autohidesScroller", + "canDragRowsWithIndexes:inColumn:withEvent:", + "columnAtPoint:", + "columnContentWidthForColumnWidth:", + "columnOfTableView:", + "columnWidthForColumnContentWidth:", + "defaultColumnWidth", + "delegate", + "doClick:", + "doDoubleClick:", + "doubleAction", + "draggingImageForRowsWithIndexes:inColumn:withEvent:offset:", + "draggingViewForRowsWithIndexes:inColumn:withEvent:offset:", + "encodeWithCoder:", + "imageWidth", + "initWithCoder:", + "initWithFrame:", + "isLeafItem:", + "itemAtRow:inColumn:", + "keyDown:", + "lastColumn", + "loadColumnZero", + "minColumnWidth", + "parentForItemsInColumn:", + "prototypeView", + "rectOfRow:inColumn:", + "registerForDraggedTypes:", + "reloadColumn:", + "rowAtPoint:", + "rowHeight", + "scrollColumnToVisible:", + "scrollRowToVisible:inColumn:", + "selectRow:inColumn:", + "selectRowIndexes:inColumn:", + "selectedColumn", + "selectedItem", + "selectedItems", + "selectedRowInColumn:", + "selectedRowIndexesInColumn:", + "sendAction", + "setAllowsEmptySelection:", + "setAllowsMultipleSelection:", + "setAutohidesScroller:", + "setBackgroundColor:", + "setDefaultColumnWidth:", + "setDelegate:", + "setDoubleAction:", + "setImageWidth:", + "setLastColumn:", + "setMinColumnWidth:", + "setPrototypeView:", + "setRowHeight:", + "setTableViewClass:", + "setWidth:ofColumn:", + "tableViewClass", + "tableViewInColumn:", + "tile", + "trackMouse:", + "widthOfColumn:" + ], + "CPBundle": [ + "bundleIdentifier", + "bundlePath", + "bundleURL", + "classNamed:", + "description", + "environments", + "infoDictionary", + "initWithPath:", + "initWithURL:", + "isLoaded", + "loadCibFile:externalNameTable:", + "loadCibFile:externalNameTable:loadDelegate:", + "loadWithDelegate:", + "localizations", + "localizedStringForKey:value:table:", + "mostEligibleEnvironment", + "objectForInfoDictionaryKey:", + "pathForResource:", + "pathForResource:ofType:", + "pathForResource:ofType:inDirectory:", + "pathForResource:ofType:inDirectory:forLocalization:", + "principalClass", + "resourcePath", + "resourceURL", + "staticResourceURLs" + ], + "CPButton": [ + "allowsMixedState", + "alternateImage", + "alternateTitle", + "bezelRectForBounds:", + "bezelStyle", + "contentRectForBounds:", + "createEphemeralSubviewNamed:", + "encodeWithCoder:", + "highlight:", + "highlightsBy", + "hoveredImage", + "image", + "imageDimsWhenDisabled", + "imageOffset", + "initWithCoder:", + "initWithFrame:", + "invalidateTimers", + "isBordered", + "keyEquivalent", + "keyEquivalentModifierMask", + "layoutSubviews", + "mouseDown:", + "nextState", + "onContinousEvent:", + "performClick:", + "performKeyEquivalent:", + "rectForEphemeralSubviewNamed:", + "setAllowsMixedState:", + "setAlternateImage:", + "setAlternateTitle:", + "setBezelStyle:", + "setBordered:", + "setButtonType:", + "setControlSize:", + "setHighlightsBy:", + "setHoveredImage:", + "setImage:", + "setImageDimsWhenDisabled:", + "setImageOffset:", + "setKeyEquivalent:", + "setKeyEquivalentModifierMask:", + "setNextState", + "setObjectValue:", + "setPeriodicDelay:interval:", + "setShowsStateBy:", + "setState:", + "setTitle:", + "showsStateBy", + "sizeToFit", + "state", + "stopTracking:at:mouseIsUp:", + "title", + "viewWillMoveToWindow:" + ], + "CPButtonBar": [ + "awakeFromCib", + "buttons", + "createEphemeralSubviewNamed:", + "encodeWithCoder:", + "hasResizeControl", + "initWithCoder:", + "initWithFrame:", + "layoutSubviews", + "observeValueForKeyPath:ofObject:change:context:", + "rectForEphemeralSubviewNamed:", + "resizeControlFrame", + "resizeControlIsLeftAligned", + "rightButtons", + "setButtons:", + "setFrameSize:", + "setHasResizeControl:", + "setResizeControlIsLeftAligned:", + "setRightButtons:" + ], + "CPByteCountFormatter": [ + "allowedUnits", + "allowsNonnumericFormatting", + "countStyle", + "encodeWithCoder:", + "getObjectValue:forString:errorDescription:", + "includesActualByteCount", + "includesCount", + "includesUnit", + "init", + "initWithCoder:", + "isAdaptive", + "setAdaptive:", + "setAllowedUnits:", + "setAllowsNonnumericFormatting:", + "setCountStyle:", + "setIncludesActualByteCount:", + "setIncludesCount:", + "setIncludesUnit:", + "setZeroPadsFractionDigits:", + "stringForObjectValue:", + "stringFromByteCount:", + "zeroPadsFractionDigits" + ], + "CPCache": [ + "countLimit", + "delegate", + "init", + "name", + "objectForKey:", + "removeAllObjects", + "removeObjectForKey:", + "setCountLimit:", + "setCountLimit:", + "setDelegate:", + "setDelegate:", + "setName:", + "setObject:forKey:", + "setObject:forKey:cost:", + "setTotalCostLimit:", + "setTotalCostLimit:", + "totalCostLimit" + ], + "CPCharacterSet": [ + "characterIsMember:", + "encodeWithCoder:", + "hasMemberInPlane:", + "init", + "initWithCoder:", + "invert" + ], + "CPCheckBox": [ + "initWithFrame:", + "setValue:forThemeAttribute:", + "takeStateFromKeyPath:ofObjects:", + "takeValueFromKeyPath:ofObjects:" + ], + "CPCib": [ + "connection:didFailWithError:", + "connection:didReceiveData:", + "connectionDidFinishLoading:", + "encodeWithCoder:", + "initWithCibNamed:bundle:", + "initWithCibNamed:bundle:loadDelegate:", + "initWithCoder:", + "initWithContentsOfURL:", + "initWithContentsOfURL:loadDelegate:", + "instantiateCibWithExternalNameTable:", + "instantiateCibWithOwner:topLevelObjects:" + ], + "CPCibBindingConnector": [ + "encodeWithCoder:", + "establishConnection", + "initWithCoder:" + ], + "CPCibConnector": [ + "destination", + "encodeWithCoder:", + "initWithCoder:", + "label", + "replaceObject:withObject:", + "replaceObjects:", + "setDestination:", + "setLabel:", + "setSource:", + "source" + ], + "CPCibControlConnector": [ + "establishConnection" + ], + "CPCibHelpConnector": [ + "encodeWithCoder:", + "establishConnection", + "initWithCoder:" + ], + "CPCibOutletConnector": [ + "establishConnection" + ], + "CPCibRuntimeAttributesConnector": [ + "encodeWithCoder:", + "establishConnection", + "initWithCoder:" + ], + "CPClipView": [ + "autoscroll:", + "constrainScrollPoint:", + "documentView", + "documentVisibleRect", + "encodeWithCoder:", + "initWithCoder:", + "resizeSubviewsWithOldSize:", + "scrollToPoint:", + "setBoundsOrigin:", + "setDocumentView:", + "viewBoundsChanged:", + "viewFrameChanged:" + ], + "CPCoder": [ + "allowsKeyedCoding", + "encodeBycopyObject:", + "encodeConditionalObject:", + "encodeDataObject:", + "encodeObject:", + "encodePoint:", + "encodePropertyList:", + "encodeRect:", + "encodeRootObject:", + "encodeSize:", + "encodeValueOfObjJType:at:" + ], + "CPCollectionView": [ + "acceptsFirstResponder", + "allowsEmptySelection", + "allowsMultipleSelection", + "backgroundColors", + "content", + "delegate", + "deleteBackward:", + "displayItems:frameSize:itemSize:columns:rows:count:", + "draggingEnded:", + "draggingEntered:", + "draggingExited:", + "draggingUpdated:", + "draggingViewForItemsAtIndexes:withEvent:offset:", + "encodeWithCoder:", + "frameForItemAtIndex:", + "frameForItemsAtIndexes:", + "initWithCoder:", + "initWithFrame:", + "isFirstResponder", + "isSelectable", + "itemAtIndex:", + "itemPrototype", + "items", + "keyDown:", + "maxItemSize", + "maxNumberOfColumns", + "maxNumberOfRows", + "menuForEvent:", + "minItemSize", + "mouseDown:", + "mouseDragged:", + "mouseUp:", + "moveDown:", + "moveDownAndModifySelection:", + "moveLeft:", + "moveLeftAndModifySelection:", + "moveRight:", + "moveRightAndModifySelection:", + "moveUp:", + "moveUpAndModifySelection:", + "newItemForRepresentedObject:", + "numberOfColumns", + "numberOfRows", + "pasteboard:provideDataForType:", + "performDragOperation:", + "rectForItemAtIndex:", + "rectForItemsAtIndexes:", + "reloadContent", + "resizeSubviewsWithOldSize:", + "resizeWithOldSuperviewSize:", + "selectionIndexes", + "setAllowsEmptySelection:", + "setAllowsMultipleSelection:", + "setAutoresizingMask:", + "setBackgroundColors:", + "setContent:", + "setDelegate:", + "setItemPrototype:", + "setMaxItemSize:", + "setMaxNumberOfColumns:", + "setMaxNumberOfRows:", + "setMinItemSize:", + "setSelectable:", + "setSelectionIndexes:", + "setUniformSubviewsResizing:", + "setUniformSubviewsResizing:", + "setVerticalMargin:", + "tile", + "tileIfNeeded:", + "uniformSubviewsResizing", + "verticalMargin" + ], + "CPCollectionViewItem": [ + "collectionView", + "copy", + "isSelected", + "setRepresentedObject:", + "setSelected:" + ], + "CPColor": [ + "alphaComponent", + "applyCSSColorForView:onDOMElement:styleNode:previousState:", + "blueComponent", + "brightnessComponent", + "colorUsingColorSpaceName:", + "colorWithAlphaComponent:", + "components", + "cssAfterDictionary", + "cssBeforeDictionary", + "cssDictionary", + "cssString", + "description", + "encodeWithCoder:", + "greenComponent", + "hasCSSAfterDictionary", + "hasCSSBeforeDictionary", + "hasCSSDictionary", + "hexString", + "hsbComponents", + "hueComponent", + "initWithCoder:", + "isCSSBased", + "isEqual:", + "patternImage", + "redComponent", + "saturationComponent", + "set", + "setCssAfterDictionary:", + "setCssBeforeDictionary:", + "setCssDictionary:", + "setFill", + "setStroke" + ], + "CPColorPanel": [ + "action", + "color", + "init", + "mode", + "opacity", + "orderFront:", + "setAction:", + "setColor:", + "setColor:updatePicker:", + "setMode:", + "setOpacity:", + "setTarget:", + "target" + ], + "CPColorPicker": [ + "colorPanel", + "initWithPickerMask:colorPanel:", + "provideNewButtonImage", + "setColor:", + "setMode:" + ], + "CPColorSpace": [ + "CGColorSpace", + "initWithCGColorSpace:" + ], + "CPColorWell": [ + "acceptsFirstResponder", + "activate:", + "becomeFirstResponder", + "bezelRectForBounds:", + "changeColor:", + "color", + "contentBorderRectForBounds:", + "contentRectForBounds:", + "createEphemeralSubviewNamed:", + "deactivate", + "draggingEntered:", + "draggingExited:", + "draggingSourceOperationMaskForLocal:", + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "isActive", + "isBordered", + "isFirstResponder", + "layoutSubviews", + "mouseDown:", + "mouseDragged:", + "pasteboard:provideDataForType:", + "performDragOperation:", + "rectForEphemeralSubviewNamed:", + "resignFirstResponder", + "setBordered:", + "setColor:", + "takeColorFrom:" + ], + "CPColorWellValueBinder": [ + "setPlaceholderValue:withMarker:forBinding:", + "setValue:forBinding:", + "valueForBinding:" + ], + "CPColorWheelColorPicker": [ + "brightnessSliderDidChange:", + "colorWheelDidChange:", + "currentMode", + "initView", + "initWithPickerMask:colorPanel:", + "provideNewAlternateButtonImage", + "provideNewButtonImage", + "provideNewView:", + "setColor:", + "supportsMode:", + "updateColor" + ], + "CPComboBox": [ + "addItemWithObjectValue:", + "addItemsWithObjectValues:", + "comboBoxCompletedString:", + "comboBoxSelectionDidChange:", + "comboBoxSelectionIsChanging:", + "comboBoxWillDismiss:", + "comboBoxWillPopUp:", + "completedString:", + "completes", + "createEphemeralSubviewNamed:", + "dataSource", + "delegate", + "deselectItemAtIndex:", + "encodeWithCoder:", + "forceSelection", + "hasVerticalScroller", + "indexOfItemWithObjectValue:", + "indexOfSelectedItem", + "initWithCoder:", + "initWithFrame:", + "insertItemWithObjectValue:atIndex:", + "intercellSpacing", + "interpretKeyEvents:", + "isButtonBordered", + "itemHeight", + "itemObjectValueAtIndex:", + "itemWasClicked:", + "layoutSubviews", + "list:displayValueForObjectValue:", + "list:objectValueForItemAtIndex:", + "list:stringValueForObjectValue:", + "listDelegate", + "listDidDismiss:", + "listIsVisible", + "noteNumberOfItemsChanged", + "numberOfItems", + "numberOfItemsInList:", + "numberOfVisibleItems", + "numberOfVisibleItemsInList:", + "objectValueOfSelectedItem", + "objectValues", + "paste:", + "performKeyEquivalent:", + "popUpList", + "popupButtonRectForBounds:", + "rectForEphemeralSubviewNamed:", + "reloadData", + "reloadDataSourceForSelector:", + "removeAllItems", + "removeItemAtIndex:", + "removeItemWithObjectValue:", + "resignFirstResponder", + "scrollItemAtIndexToTop:", + "scrollItemAtIndexToVisible:", + "selectItemAtIndex:", + "selectItemWithObjectValue:", + "sendAction:to:", + "setAlignment:", + "setButtonBordered:", + "setCompletes:", + "setContent:", + "setContentValues:", + "setDataSource:", + "setDelegate:", + "setFont:", + "setForceSelection:", + "setHasVerticalScroller:", + "setIntercellSpacing:", + "setItemHeight:", + "setListDelegate:", + "setNumberOfVisibleItems:", + "setObjectValue:", + "setUsesDataSource:", + "takeStringValueFromList", + "textDidChange:", + "usesDataSource" + ], + "CPComparisonPredicate": [ + "comparisonPredicateModifier", + "customSelector", + "encodeWithCoder:", + "evaluateWithObject:", + "evaluateWithObject:substitutionVariables:", + "initWithCoder:", + "initWithLeftExpression:rightExpression:customSelector:", + "initWithLeftExpression:rightExpression:modifier:type:options:", + "isEqual:", + "leftExpression", + "options", + "predicateFormat", + "predicateOperatorType", + "predicateWithSubstitutionVariables:", + "rightExpression" + ], + "CPCompoundPredicate": [ + "compoundPredicateType", + "encodeWithCoder:", + "evaluateWithObject:", + "evaluateWithObject:substitutionVariables:", + "initWithCoder:", + "initWithType:subpredicates:", + "isEqual:", + "predicateFormat", + "predicateWithSubstitutionVariables:", + "subpredicates" + ], + "CPControl": [ + "acceptsFirstMouse:", + "action", + "alignment", + "baseWritingDirection", + "continueTracking:at:", + "controlSize", + "doubleValue", + "encodeWithCoder:", + "floatValue", + "font", + "formatter", + "highlight:", + "imagePosition", + "imageScaling", + "initWithCoder:", + "initWithFrame:", + "intValue", + "integerValue", + "isContinuous", + "isEnabled", + "isHighlighted", + "lineBreakMode", + "mouseDown:", + "mouseDownFlags", + "mouseEntered:", + "mouseExited:", + "nextState", + "objectValue", + "performClick:", + "sendAction:to:", + "sendActionOn:", + "sendsActionOnEndEditing", + "setAction:", + "setAlignment:", + "setBaseWritingDirection:", + "setBaseWritingDirection:", + "setContinuous:", + "setControlSize:", + "setDoubleValue:", + "setEnabled:", + "setFloatValue:", + "setFont:", + "setFormatter:", + "setHighlighted:", + "setImagePosition:", + "setImageScaling:", + "setIntValue:", + "setIntegerValue:", + "setLineBreakMode:", + "setObjectValue:", + "setSendsActionOnEndEditing:", + "setState:", + "setStringValue:", + "setTarget:", + "setTextColor:", + "setTextColor:inThemeStates:", + "setTextShadowColor:", + "setTextShadowOffset:", + "setVerticalAlignment:", + "startTrackingAt:", + "stopTracking:at:mouseIsUp:", + "stringValue", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeIntegerValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "target", + "textColor", + "textDidBeginEditing:", + "textDidChange:", + "textDidEndEditing:", + "textShadowColor", + "textShadowOffset", + "trackMouse:", + "tracksMouseOutsideOfFrame", + "unhighlightButtonTimerDidFinish:", + "updateTrackingAreas", + "verticalAlignment" + ], + "CPController": [ + "commitEditing", + "discardEditing", + "encodeWithCoder:", + "init", + "initWithCoder:", + "isEditing", + "objectDidBeginEditing:", + "objectDidEndEditing:" + ], + "CPControllerSelectionProxy": [ + "addObserver:forKeyPath:options:context:", + "controllerDidChange", + "controllerWillChange", + "count", + "initWithController:", + "keyEnumerator", + "observeValueForKeyPath:ofObject:change:context:", + "removeObserver:forKeyPath:", + "setValue:forKey:", + "setValue:forKeyPath:", + "valueForKey:", + "valueForKeyPath:" + ], + "CPCookie": [ + "expires", + "initWithName:", + "name", + "setValue:expires:domain:", + "value" + ], + "CPCountedSet": [ + "addObject:", + "countForObject:", + "removeAllObjects", + "removeObject:" + ], + "CPCursor": [ + "encodeWithCoder:", + "hotSpot", + "image", + "initWithCSSString:", + "initWithCoder:", + "initWithImage:foregroundColorHint:backgroundColorHint:hotSpot:", + "initWithImage:hotSpot:", + "isSetOnMouseEntered", + "isSetOnMouseExited", + "mouseEntered:", + "mouseExited:", + "pop", + "push", + "set", + "setOnMouseEntered:", + "setOnMouseExited:" + ], + "CPDOMWindowLayer": [ + "clipWindow:toRect:", + "initWithLevel:", + "insertWindow:atIndex:", + "level", + "orderedWindows", + "removeClipForWindow:", + "removeWindow:" + ], + "CPData": [ + "JSONObject", + "base64", + "bytes", + "description", + "initWithJSONObject:", + "initWithPlistObject:", + "initWithPlistObject:format:", + "initWithRawString:", + "initWithString:", + "length", + "plistObject", + "rawString", + "setJSONObject:", + "setPlistObject:", + "setPlistObject:format:", + "setRawString:", + "setString:", + "string" + ], + "CPDate": [ + "compare:", + "copy", + "dateByAddingTimeInterval:", + "description", + "earlierDate:", + "encodeWithCoder:", + "initWithCoder:", + "initWithString:", + "initWithTimeInterval:sinceDate:", + "initWithTimeIntervalSince1970:", + "initWithTimeIntervalSinceNow:", + "initWithTimeIntervalSinceReferenceDate:", + "isEqual:", + "isEqualToDate:", + "laterDate:", + "timeIntervalSince1970", + "timeIntervalSinceDate:", + "timeIntervalSinceNow", + "timeIntervalSinceReferenceDate" + ], + "CPDateFormatter": [ + "AMSymbol", + "AMSymbol", + "PMSymbol", + "PMSymbol", + "allowNaturalLanguage", + "dateFormat", + "dateFromString:", + "dateStyle", + "defaultDate", + "doesRelativeDateFormatting", + "editingStringForObjectValue:", + "encodeWithCoder:", + "formatterBehavior", + "getObjectValue:forString:errorDescription:", + "init", + "initWithCoder:", + "initWithDateFormat:allowNaturalLanguage:", + "locale", + "monthSymbols", + "quarterSymbols", + "setAMSymbol:", + "setAMSymbol:", + "setDateFormat:", + "setDateStyle:", + "setDefaultDate:", + "setDoesRelativeDateFormatting:", + "setFormatterBehavior:", + "setLocale:", + "setMonthSymbols:", + "setPMSymbol:", + "setPMSymbol:", + "setQuarterSymbols:", + "setShortMonthSymbols:", + "setShortQuarterSymbols:", + "setShortStandaloneMonthSymbols:", + "setShortStandaloneQuarterSymbols:", + "setShortStandaloneWeekdaySymbols:", + "setShortWeekdaySymbols:", + "setStandaloneMonthSymbols:", + "setStandaloneQuarterSymbols:", + "setStandaloneWeekdaySymbols:", + "setSymbol:forKey:languageCode:", + "setSymbols:forLanguageCode:", + "setTimeStyle:", + "setTimeZone:", + "setTwoDigitStartDate:", + "setVeryShortMonthSymbols:", + "setVeryShortStandaloneMonthSymbols:", + "setVeryShortStandaloneWeekdaySymbols:", + "setVeryShortWeekdaySymbols:", + "setWeekdaySymbols:", + "shortMonthSymbols", + "shortQuarterSymbols", + "shortStandaloneMonthSymbols", + "shortStandaloneQuarterSymbols", + "shortStandaloneWeekdaySymbols", + "shortWeekdaySymbols", + "standaloneMonthSymbols", + "standaloneQuarterSymbols", + "standaloneWeekdaySymbols", + "stringForObjectValue:", + "stringFromDate:", + "symbolForKey:languageCode:", + "symbolsForLanguageCode:", + "timeStyle", + "timeZone", + "twoDigitStartDate", + "veryShortMonthSymbols", + "veryShortStandaloneMonthSymbols", + "veryShortStandaloneWeekdaySymbols", + "veryShortWeekdaySymbols", + "weekdaySymbols" + ], + "CPDatePicker": [ + "acceptsFirstResponder", + "becomeFirstResponder", + "copy", + "datePickerElements", + "datePickerMode", + "datePickerStyle", + "dateValue", + "delegate", + "drawsBackground", + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "isBezeled", + "isBezeled", + "isBordered", + "isBordered", + "keyDown:", + "layoutSubviews", + "locale", + "maxDate", + "minDate", + "objectValue", + "resignFirstResponder", + "setBackgroundColor:", + "setBezeled:", + "setBezeled:", + "setBordered:", + "setBordered:", + "setControlSize:", + "setDatePickerElements:", + "setDatePickerElements:", + "setDatePickerMode:", + "setDatePickerMode:", + "setDatePickerStyle:", + "setDatePickerStyle:", + "setDateValue:", + "setDateValue:", + "setDelegate:", + "setDelegate:", + "setDrawsBackground:", + "setDrawsBackground:", + "setEnabled:", + "setLocale:", + "setLocale:", + "setMaxDate:", + "setMaxDate:", + "setMinDate:", + "setMinDate:", + "setObjectValue:", + "setTextColor:", + "setTextFont:", + "setTextFont:", + "setTimeInterval:", + "setTimeInterval:", + "setTimeZone:", + "setTimeZone:", + "textFont", + "textFont", + "timeInterval", + "timeZone" + ], + "CPDecimalNumber": [ + "UID", + "boolValue", + "charValue", + "compare:", + "decimalNumberByAdding:", + "decimalNumberByAdding:withBehavior:", + "decimalNumberByDividingBy:", + "decimalNumberByDividingBy:withBehavior:", + "decimalNumberByMultiplyingBy:", + "decimalNumberByMultiplyingBy:withBehavior:", + "decimalNumberByMultiplyingByPowerOf10:", + "decimalNumberByMultiplyingByPowerOf10:withBehavior:", + "decimalNumberByRaisingToPower:", + "decimalNumberByRaisingToPower:withBehavior:", + "decimalNumberByRoundingAccordingToBehavior:", + "decimalNumberBySubtracting:", + "decimalNumberBySubtracting:withBehavior:", + "decimalValue", + "description", + "descriptionWithLocale:", + "doubleValue", + "encodeWithCoder:", + "floatValue", + "init", + "initWithBool:", + "initWithChar:", + "initWithCoder:", + "initWithDecimal:", + "initWithDouble:", + "initWithFloat:", + "initWithInt:", + "initWithLong:", + "initWithLongLong:", + "initWithMantissa:exponent:isNegative:", + "initWithShort:", + "initWithString:", + "initWithString:locale:", + "initWithUnsignedChar:", + "initWithUnsignedInt:", + "initWithUnsignedLong:", + "initWithUnsignedLongLong:", + "initWithUnsignedShort:", + "intValue", + "isEqualToNumber:", + "longLongValue", + "longValue", + "objCType", + "shortValue", + "stringValue", + "unsignedCharValue", + "unsignedIntValue", + "unsignedLongValue", + "unsignedShortValue" + ], + "CPDecimalNumberHandler": [ + "encodeWithCoder:", + "exceptionDuringOperation:error:leftOperand:rightOperand:", + "init", + "initWithCoder:", + "initWithRoundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:", + "roundingMode", + "scale" + ], + "CPDelayedPerform": [ + "initWithObject:selector:argument:", + "isEqualToPerform:", + "perform" + ], + "CPDictionary": [ + "addEntriesFromDictionary:", + "allKeys", + "allKeysForObject:", + "allValues", + "containsKey:", + "copy", + "count", + "description", + "encodeWithCoder:", + "enumerateKeysAndObjectsUsingBlock:", + "enumerateKeysAndObjectsWithOptions:usingBlock:", + "initWithCoder:", + "initWithDictionary:", + "initWithObjects:forKeys:", + "initWithObjectsAndKeys:", + "inverseChangeDictionary", + "isEqual:", + "isEqualToDictionary:", + "keyEnumerator", + "keysOfEntriesPassingTest:", + "keysOfEntriesWithOptions:passingTest:", + "keysSortedByValueUsingComparator:", + "keysSortedByValueUsingSelector:", + "objectEnumerator", + "objectForKey:", + "removeAllObjects", + "removeObjectForKey:", + "removeObjectsForKeys:", + "setObject:forKey:", + "setValue:forKey:", + "valueForKey:" + ], + "CPDisclosureButton": [ + "drawRect:", + "initWithFrame:", + "setState:" + ], + "CPDocument": [ + "addViewController:forWindowController:", + "addWindowController:", + "alertDidEnd:returnCode:", + "canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:", + "close", + "connection:didFailWithError:", + "connection:didReceiveData:", + "connection:didReceiveResponse:", + "connectionDidFinishLoading:", + "dataOfType:error:", + "displayName", + "fileType", + "fileURL", + "hasUndoManager", + "init", + "initForURL:withContentsOfURL:ofType:delegate:didReadSelector:contextInfo:", + "initWithContentsOfURL:ofType:delegate:didReadSelector:contextInfo:", + "initWithType:error:", + "isDocumentEdited", + "makeViewAndWindowControllers", + "makeWindowControllers", + "readFromData:ofType:error:", + "readFromURL:ofType:delegate:didReadSelector:contextInfo:", + "removeViewController:", + "removeWindowController:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentWithDelegate:didSaveSelector:contextInfo:", + "saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:", + "setFileType:", + "setFileURL:", + "setHasUndoManager:", + "setUndoManager:", + "shouldCloseWindowController:delegate:shouldCloseSelector:contextInfo:", + "showWindows", + "undoManager", + "updateChangeCount:", + "view", + "viewCibName", + "viewControllerDidLoadCib:", + "viewControllerForWindowController:", + "viewControllerWillLoadCib:", + "viewControllers", + "windowCibName", + "windowControllerDidLoadCib:", + "windowControllerWillLoadCib:", + "windowControllers", + "windowWillReturnUndoManager:" + ], + "CPDocumentController": [ + "addDocument:", + "clearRecentDocuments:", + "closeAllDocumentsWithDelegate:didCloseAllSelector:contextInfo:", + "currentDocument", + "defaultType", + "document:didRead:contextInfo:", + "documentClassForType:", + "documentForURL:", + "documentForWindow:", + "documents", + "hasEditedDocuments", + "init", + "makeDocumentForURL:withContentsOfURL:ofType:delegate:didReadSelector:contextInfo:", + "makeDocumentWithContentsOfURL:ofType:delegate:didReadSelector:contextInfo:", + "makeUntitledDocumentOfType:error:", + "newDocument:", + "noteNewRecentDocument:", + "noteNewRecentDocumentURL:", + "openDocument:", + "openDocumentWithContentsOfURL:display:error:", + "openUntitledDocumentOfType:display:", + "recentDocumentURLs", + "removeDocument:", + "reopenDocumentForURL:withContentsOfURL:error:", + "typeForContentsOfURL:error:" + ], + "CPDoubleClickActionBinding": [ + "init" + ], + "CPDragServer": [ + "animationDidEnd:", + "animationDidStop:", + "dragImage:fromWindow:at:offset:event:pasteboard:source:slideBack:", + "dragView:fromWindow:at:offset:event:pasteboard:source:slideBack:", + "draggedView", + "draggedWindow", + "draggingDestination", + "draggingEndedInPlatformWindow:globalLocation:operation:", + "draggingLocation", + "draggingOffset", + "draggingPasteboard", + "draggingSource", + "draggingSourceUpdatedWithGlobalLocation:", + "draggingStartedInPlatformWindow:globalLocation:", + "draggingUpdatedInPlatformWindow:location:", + "init", + "isDragging", + "performDragOperationInPlatformWindow:", + "trackDragging:" + ], + "CPDraggingInfo": [ + "draggedImage", + "draggedImageLocation", + "draggedView", + "draggedViewLocation", + "draggingDestinationWindow", + "draggingLocation", + "draggingPasteboard", + "draggingSource" + ], + "CPEnumerator": [ + "allObjects", + "nextObject" + ], + "CPError": [ + "code", + "description", + "domain", + "encodeWithCoder:", + "initWithCoder:", + "initWithDomain:code:userInfo:", + "localizedDescription", + "localizedFailureReason", + "localizedRecoveryOptions", + "localizedRecoverySuggestion", + "recoveryAttempter", + "userInfo" + ], + "CPEvent": [ + "buttonNumber", + "characters", + "charactersIgnoringModifiers", + "clickCount", + "data1", + "data2", + "deltaX", + "deltaY", + "deltaZ", + "description", + "globalLocation", + "hasPreciseScrollingDeltas", + "isARepeat", + "keyCode", + "locationInWindow", + "modifierFlags", + "pressure", + "scrollingDeltaX", + "scrollingDeltaY", + "subtype", + "timestamp", + "trackingArea", + "type", + "window", + "windowNumber" + ], + "CPException": [ + "copy", + "description", + "encodeWithCoder:", + "initWithCoder:", + "initWithName:reason:userInfo:", + "isEqual:", + "name", + "raise", + "reason", + "userInfo" + ], + "CPExpression": [ + "arguments", + "collection", + "constantValue", + "expressionBlock", + "expressionType", + "falseExpression", + "function", + "initWithExpressionType:", + "keyPath", + "leftExpression", + "operand", + "predicate", + "rightExpression", + "trueExpression", + "variable" + ], + "CPFont": [ + "ascender", + "controlSizeCorrespondingToFontSize", + "copy", + "cssString", + "defaultLineHeightForFont", + "descender", + "description", + "encodeWithCoder:", + "familyName", + "fontDescriptor", + "fontName", + "initWithCoder:", + "isBold", + "isEqual:", + "isItalic", + "isSystem", + "isSystemSize", + "pointSize", + "size" + ], + "CPFontDescriptor": [ + "cssString", + "encodeWithCoder:", + "fontAttributes", + "fontDescriptorByAddingAttributes:", + "fontDescriptorWithSize:", + "fontDescriptorWithSymbolicTraits:", + "fontFamilyCSSString", + "fontSizeCSSString", + "fontStyleCSSString", + "fontVariantCSSString", + "fontWeightCSSString", + "initWithCoder:", + "initWithFontAttributes:", + "objectForKey:", + "pointSize", + "symbolicTraits" + ], + "CPFontManager": [ + "action", + "addFontTrait:", + "availableFonts", + "convertFont:", + "convertFont:toFace:", + "convertFont:toHaveTrait:", + "convertFont:toNotHaveTrait:", + "convertFont:toSize:", + "delegate", + "fontPanel:", + "fontWithNameIsAvailable:", + "init", + "isMultiple", + "modifyFont:", + "modifyFontViaPanel:", + "orderFrontFontPanel:", + "selectedFont", + "sendAction", + "setAction:", + "setDelegate:", + "setMultiple:", + "setSelectedFont:isMultiple:", + "setTarget:", + "target", + "traitsOfFont:", + "weightOfFont:" + ], + "CPFontPanel": [ + "acceptsFirstResponder", + "browser:child:ofItem:", + "browser:isLeafItem:", + "browser:numberOfChildrenOfItem:", + "browser:objectValueForItem:", + "browserClicked:", + "changeColor:", + "currentFont", + "currentSize", + "currentTrait", + "dblClicked:", + "init", + "orderFront:", + "panelConvertFont:", + "reloadDefaultFontFamilies", + "setCurrentFont:", + "setCurrentSize:", + "setCurrentTrait:", + "setPanelFont:isMultiple:", + "textViewDidChangeSelection:", + "windowDidResize:", + "worksWhenModal" + ], + "CPFormatter": [ + "editingStringForObjectValue:", + "encodeWithCoder:", + "getObjectValue:forString:errorDescription:", + "initWithCoder:", + "isPartialStringValid:newEditingString:errorDescription:", + "isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:", + "stringForObjectValue:" + ], + "CPFunctionOperation": [ + "addExecutionFunction:", + "executionFunctions", + "init", + "main" + ], + "CPGradient": [ + "drawFromPoint:toPoint:options:", + "drawInBezierPath:angle:", + "drawInRect:angle:", + "initWithColors:", + "initWithColors:atLocations:colorSpace:", + "initWithStartingColor:endingColor:" + ], + "CPGraphicsContext": [ + "graphicsPort", + "initWithGraphicsPort:", + "isFlipped", + "restoreGraphicsState", + "saveGraphicsState" + ], + "CPHTTPURLResponse": [ + "allHeaderFields", + "statusCode" + ], + "CPImage": [ + "applyCSSImageForView:onDOMElement:styleNode:previousState:", + "cssAfterDictionary", + "cssBeforeDictionary", + "cssDictionary", + "data", + "delegate", + "description", + "drawAtPoint:fromRect:operation:fraction:", + "duplicate", + "encodeWithCoder:", + "filename", + "hasCSSAfterDictionary", + "hasCSSBeforeDictionary", + "hasCSSDictionary", + "image", + "init", + "initByReferencingFile:size:", + "initWithCSSDictionary:beforeDictionary:afterDictionary:size:", + "initWithCoder:", + "initWithContentsOfFile:", + "initWithContentsOfFile:size:", + "initWithData:", + "isCSSBased", + "isMaterialIconImage", + "isNinePartImage", + "isSingleImage", + "isThreePartImage", + "load", + "loadStatus", + "name", + "setCssAfterDictionary:", + "setCssBeforeDictionary:", + "setCssDictionary:", + "setDelegate:", + "setName:", + "setSize:", + "size" + ], + "CPImageView": [ + "encodeWithCoder:", + "hasShadow", + "hideOrDisplayContents", + "image", + "imageAlignment", + "imageDidLoad:", + "imageRect", + "imageScaling", + "initWithCoder:", + "initWithFrame:", + "isEditable", + "layoutSubviews", + "mouseDown:", + "performDragOperation:", + "setEditable:", + "setHasShadow:", + "setImage:", + "setImageAlignment:", + "setImageScaling:", + "setObjectValue:" + ], + "CPImageViewValueBinder": [ + "setPlaceholderValue:withMarker:forBinding:", + "setValue:forBinding:", + "valueForBinding:" + ], + "CPIndexPath": [ + "compare:", + "description", + "encodeWithCoder:", + "indexAtPosition:", + "indexPathByAddingIndex:", + "indexPathByRemovingLastIndex", + "indexes", + "indexes", + "initWithCoder:", + "initWithIndexes:", + "initWithIndexes:length:", + "isEqual:", + "length", + "setIndexes:", + "setIndexes:" + ], + "CPIndexSet": [ + "addIndex:", + "addIndexes:", + "addIndexesInRange:", + "containsIndex:", + "containsIndexes:", + "containsIndexesInRange:", + "copy", + "count", + "description", + "encodeWithCoder:", + "enumerateIndexesInRange:options:usingBlock:", + "enumerateIndexesUsingBlock:", + "enumerateIndexesWithOptions:usingBlock:", + "firstIndex", + "getIndexes:maxCount:inIndexRange:", + "indexGreaterThanIndex:", + "indexGreaterThanOrEqualToIndex:", + "indexInRange:options:passingTest:", + "indexLessThanIndex:", + "indexLessThanOrEqualToIndex:", + "indexPassingTest:", + "indexWithOptions:passingTest:", + "indexesInRange:options:passingTest:", + "indexesPassingTest:", + "indexesWithOptions:passingTest:", + "init", + "initWithCoder:", + "initWithIndex:", + "initWithIndexSet:", + "initWithIndexesInRange:", + "intersectsIndexesInRange:", + "isEqual:", + "isEqualToIndexSet:", + "lastIndex", + "mutableCopy", + "removeAllIndexes", + "removeIndex:", + "removeIndexes:", + "removeIndexesInRange:", + "shiftIndexesStartingAtIndex:by:" + ], + "CPInvocation": [ + "argumentAtIndex:", + "encodeWithCoder:", + "initWithCoder:", + "initWithMethodSignature:", + "invoke", + "invokeWithTarget:", + "returnValue", + "selector", + "setArgument:atIndex:", + "setReturnValue:", + "setSelector:", + "setTarget:", + "target" + ], + "CPInvocationOperation": [ + "init", + "initWithInvocation:", + "initWithTarget:selector:object:", + "invocation", + "main", + "result" + ], + "CPIsNilTransformer": [ + "transformedValue:" + ], + "CPIsNotNilTransformer": [ + "transformedValue:" + ], + "CPJSONPConnection": [ + "cancel", + "initWithRequest:callback:delegate:", + "initWithRequest:callback:delegate:startImmediately:", + "removeScriptTag", + "start" + ], + "CPKeyBinding": [ + "description", + "initWithKey:modifierFlags:selectors:", + "initWithPhysicalKeyString:selectors:", + "isEqual:", + "key", + "modifierFlags", + "selectors" + ], + "CPKeyedArchiver": [ + "classNameForClass:", + "delegate", + "encodeBool:forKey:", + "encodeConditionalObject:forKey:", + "encodeDouble:forKey:", + "encodeFloat:forKey:", + "encodeInt:forKey:", + "encodeNumber:forKey:", + "encodeObject:forKey:", + "encodePoint:forKey:", + "encodeRect:forKey:", + "encodeSize:forKey:", + "finishEncoding", + "initForWritingWithMutableData:", + "outputFormat", + "setClassName:forClass:", + "setDelegate:", + "setOutputFormat:" + ], + "CPKeyedUnarchiver": [ + "allowsKeyedCoding", + "classForClassName:", + "containsValueForKey:", + "decodeBoolForKey:", + "decodeBytesForKey:", + "decodeDoubleForKey:", + "decodeFloatForKey:", + "decodeIntForKey:", + "decodeObjectForKey:", + "decodePointForKey:", + "decodeRectForKey:", + "decodeSizeForKey:", + "delegate", + "finishDecoding", + "initForReadingWithData:", + "setClass:forClassName:", + "setDelegate:" + ], + "CPLayoutManager": [ + "addTemporaryAttributes:forCharacterRange:", + "addTextContainer:", + "boundingRectForGlyphRange:inTextContainer:", + "characterIndexForGlyphAtIndex:", + "characterRangeForGlyphRange:actualGlyphRange:", + "drawBackgroundForGlyphRange:atPoint:", + "drawGlyphsForGlyphRange:atPoint:", + "encodeWithCoder:", + "extraLineFragmentRect", + "extraLineFragmentTextContainer", + "extraLineFragmentUsedRect", + "firstTextView", + "glyphIndexForPoint:inTextContainer:", + "glyphIndexForPoint:inTextContainer:fractionOfDistanceThroughGlyph:", + "glyphRangeForBoundingRect:inTextContainer:", + "glyphRangeForTextContainer:", + "init", + "initWithCoder:", + "insertTextContainer:atIndex:", + "invalidateDisplayForGlyphRange:", + "invalidateLayoutForCharacterRange:isSoft:actualCharacterRange:", + "layoutManagerOwnsFirstResponderInWindow:", + "lineFragmentRectForGlyphAtIndex:effectiveRange:", + "lineFragmentUsedRectForGlyphAtIndex:effectiveRange:", + "locationForGlyphAtIndex:", + "numberOfCharacters", + "numberOfGlyphs", + "rectArrayForCharacterRange:withinSelectedCharacterRange:inTextContainer:rectCount:", + "removeTemporaryAttribute:forCharacterRange:", + "removeTextContainerAtIndex:", + "setExtraLineFragmentRect:usedRect:textContainer:", + "setLineFragmentFactory:", + "setLineFragmentRect:forGlyphRange:usedRect:", + "setLocation:forStartOfGlyphRange:", + "setTemporaryAttributes:forCharacterRange:", + "setTextContainer:forGlyphRange:", + "setTextStorage:", + "setTypesetter:", + "temporaryAttributesAtCharacterIndex:effectiveRange:", + "textContainerChangedTextView:", + "textContainerForGlyphAtIndex:effectiveRange:", + "textContainerForGlyphAtIndex:effectiveRange:withoutAdditionalLayout:", + "textContainers", + "textStorage", + "textStorage:edited:range:changeInLength:invalidatedRange:", + "textViewForBeginningOfSelection", + "typesetter", + "usedRectForTextContainer:" + ], + "CPLevelIndicator": [ + "createEphemeralSubviewNamed:", + "criticalValue", + "encodeWithCoder:", + "hitTest:", + "initWithCoder:", + "initWithFrame:", + "isEditable", + "layoutSubviews", + "levelIndicatorStyle", + "maxValue", + "minValue", + "mouseDown:", + "numberOfMajorTickMarks", + "numberOfTickMarks", + "rectForEphemeralSubviewNamed:", + "setCriticalValue:", + "setCriticalValue:", + "setEditable:", + "setLevelIndicatorStyle:", + "setMaxValue:", + "setMaxValue:", + "setMinValue:", + "setMinValue:", + "setNumberOfMajorTickMarks:", + "setNumberOfTickMarks:", + "setTickMarkPosition:", + "setWarningValue:", + "setWarningValue:", + "tickMarkPosition", + "warningValue" + ], + "CPLocale": [ + "encodeWithCoder:", + "initWithCoder:", + "initWithLocaleIdentifier:", + "localeIdentifier", + "objectForKey:" + ], + "CPMapTable": [ + "count", + "dictionaryRepresentation", + "init", + "keyEnumerator", + "objectEnumerator", + "objectForKey:", + "removeAllObjects", + "removeObjectForKey:", + "setObject:forKey:" + ], + "CPMarkdownParser": [], + "CPMenu": [ + "addItem:", + "addItemWithTitle:action:keyEquivalent:", + "autoenablesItems", + "awakeFromCib", + "cancelTracking", + "countOfItems", + "delegate", + "encodeWithCoder:", + "font", + "highlightedItem", + "indexOfItem:", + "indexOfItemWithRepresentedObject:", + "indexOfItemWithSubmenu:", + "indexOfItemWithTag:", + "indexOfItemWithTarget:andAction:", + "indexOfItemWithTitle:", + "init", + "initWithCoder:", + "initWithTitle:", + "insertItem:atIndex:", + "insertItemWithTitle:action:keyEquivalent:atIndex:", + "insertObject:inItemsAtIndex:", + "isTornOff", + "itemArray", + "itemAtIndex:", + "itemChanged:", + "itemWithTag:", + "itemWithTitle:", + "itemsAtIndexes:", + "menuBarHeight", + "minimumWidth", + "numberOfItems", + "objectInItemsAtIndex:", + "performActionForItemAtIndex:", + "performKeyEquivalent:", + "popUpMenuPositioningItem:atLocation:inView:callback:", + "removeAllItems", + "removeItem:", + "removeItemAtIndex:", + "removeObjectFromItemsAtIndex:", + "setAutoenablesItems:", + "setDelegate:", + "setFont:", + "setMinimumWidth:", + "setShowsStateColumn:", + "setSubmenu:forItem:", + "setSupermenu:", + "setTitle:", + "showsStateColumn", + "submenuAction:", + "supermenu", + "title", + "update" + ], + "CPMenuItem": [ + "action", + "alternateImage", + "copy", + "description", + "encodeWithCoder:", + "font", + "hasSubmenu", + "image", + "indentationLevel", + "init", + "initWithCoder:", + "initWithTitle:action:keyEquivalent:", + "isAlternate", + "isEnabled", + "isHidden", + "isHiddenOrHasHiddenAncestor", + "isHighlighted", + "isSeparatorItem", + "keyEquivalent", + "keyEquivalentModifierMask", + "keyEquivalentStringRepresentation", + "menu", + "mixedStateImage", + "mnemonic", + "mnemonicLocation", + "mutableCopy", + "offStateImage", + "onStateImage", + "representedObject", + "setAction:", + "setAlternate:", + "setAlternateImage:", + "setEnabled:", + "setFont:", + "setHidden:", + "setImage:", + "setIndentationLevel:", + "setKeyEquivalent:", + "setKeyEquivalentModifierMask:", + "setMenu:", + "setMixedStateImage:", + "setMnemonicLocation:", + "setOffStateImage:", + "setOnStateImage:", + "setRepresentedObject:", + "setState:", + "setSubmenu:", + "setTag:", + "setTarget:", + "setTextColor:", + "setTitle:", + "setTitleWithMnemonicLocation:", + "setToolTip:", + "setView:", + "state", + "submenu", + "tag", + "target", + "title", + "toolTip", + "view" + ], + "CPMultipleValueAndBinding": [ + "init" + ], + "CPMultipleValueOrBinding": [ + "init" + ], + "CPMutableArray": [ + "addObject:", + "addObjectsFromArray:", + "exchangeObjectAtIndex:withObjectAtIndex:", + "insertObject:atIndex:", + "insertObject:inArraySortedByDescriptors:", + "insertObjects:atIndexes:", + "removeAllObjects", + "removeLastObject", + "removeObject:", + "removeObject:inRange:", + "removeObjectAtIndex:", + "removeObjectIdenticalTo:", + "removeObjectIdenticalTo:inRange:", + "removeObjectsAtIndexes:", + "removeObjectsInArray:", + "removeObjectsInRange:", + "replaceObjectAtIndex:withObject:", + "replaceObjectsAtIndexes:withObjects:", + "replaceObjectsInRange:withObjectsFromArray:", + "replaceObjectsInRange:withObjectsFromArray:range:", + "setArray:", + "sortUsingDescriptors:", + "sortUsingFunction:context:", + "sortUsingSelector:" + ], + "CPMutableAttributedString": [ + "replaceOccurrencesOfString:withString:options:range:" + ], + "CPMutableDictionary": [], + "CPMutableIndexSet": [], + "CPMutableParagraphStyle": [ + "addTabStop:", + "copyWithZone:", + "initWithCoder:", + "initWithParagraphStyle:", + "removeTabStop:", + "setAlignment:", + "setBaseWritingDirection:", + "setDefaultTabInterval:", + "setFirstLineHeadIndent:", + "setHeadIndent:", + "setLineBreakMode:", + "setLineHeightMultiple:", + "setLineSpacing:", + "setMaximumLineHeight:", + "setMinimumLineHeight:", + "setParagraphSpacing:", + "setParagraphSpacingBefore:", + "setTabStops:", + "setTailIndent:", + "setTextLists:" + ], + "CPMutableSet": [ + "addObjectsFromArray:", + "filterUsingPredicate:", + "initWithCapacity:", + "intersectSet:", + "minusSet:", + "removeAllObjects", + "removeObject:", + "removeObjectsInArray:", + "setSet:", + "unionSet:" + ], + "CPNegateBooleanTransformer": [ + "reverseTransformedValue:", + "transformedValue:" + ], + "CPNinePartImage": [ + "encodeWithCoder:", + "filename", + "imageSlices", + "initWithCoder:", + "initWithImageSlices:", + "isNinePartImage", + "isSingleImage", + "isThreePartImage" + ], + "CPNotification": [ + "init", + "initWithName:object:userInfo:", + "name", + "object", + "userInfo" + ], + "CPNotificationCenter": [ + "addObserver:selector:name:object:", + "addObserverForName:object:queue:usingBlock:", + "init", + "postNotification:", + "postNotificationName:object:", + "postNotificationName:object:userInfo:", + "removeObserver:", + "removeObserver:name:object:" + ], + "CPNotificationQueue": [ + "dequeueNotificationsMatching:coalesceMask:", + "enqueueNotification:postingStyle:", + "enqueueNotification:postingStyle:coalesceMask:forModes:", + "initWithNotificationCenter:" + ], + "CPNull": [ + "encodeWithCoder:", + "initWithCoder:", + "isEqual:", + "valueForKey:" + ], + "CPNumber": [ + "UID", + "boolValue", + "compare:", + "decimalValue", + "description", + "descriptionWithLocale:", + "doubleValue", + "encodeWithCoder:", + "floatValue", + "initWithBool:", + "initWithChar:", + "initWithCoder:", + "initWithDouble:", + "initWithFloat:", + "initWithInt:", + "initWithLong:", + "initWithLongLong:", + "initWithShort:", + "initWithUnsignedChar:", + "initWithUnsignedInt:", + "initWithUnsignedLong:", + "initWithUnsignedShort:", + "intValue", + "integerValue", + "isEqualToNumber:", + "longLongValue", + "longValue", + "shortValue", + "stringValue", + "unsignedCharValue", + "unsignedIntValue", + "unsignedLongValue", + "unsignedShortValue" + ], + "CPNumberFormatter": [ + "currencyCode", + "currencySymbol", + "editingStringForObjectValue:", + "encodeWithCoder:", + "generatesDecimalNumbers", + "getObjectValue:forString:errorDescription:", + "groupingSeparator", + "init", + "initWithCoder:", + "maximum", + "maximumFractionDigits", + "minimum", + "minimumFractionDigits", + "numberFromString:", + "numberStyle", + "perMillSymbol", + "roundingMode", + "setCurrencyCode:", + "setCurrencySymbol:", + "setGeneratesDecimalNumbers:", + "setGroupingSeparator:", + "setMaximum:", + "setMaximum:", + "setMaximumFractionDigits:", + "setMaximumFractionDigits:", + "setMinimum:", + "setMinimum:", + "setMinimumFractionDigits:", + "setMinimumFractionDigits:", + "setNumberStyle:", + "setNumberStyle:", + "setPerMillSymbol:", + "setRoundingMode:", + "setRoundingMode:", + "stringForObjectValue:", + "stringFromNumber:" + ], + "CPObject": [ + "UID", + "actualTheme", + "actualValueForThemeAttribute:", + "actualValueForThemeAttribute:inState:", + "addObserver:forKeyPath:options:context:", + "applyChange:toKeyPath:", + "autorelease", + "awakeAfterUsingCoder:", + "awakeAfterUsingCoder:", + "awakeFromCib", + "bind:toObject:withKeyPath:options:", + "class", + "classForCoder", + "classForKeyedArchiver", + "className", + "conformsToProtocol:", + "copy", + "currentValueForThemeAttribute:", + "dealloc", + "description", + "dictionaryWithValuesForKeys:", + "didChange:valuesAtIndexes:forKey:", + "didChangeValueForKey:", + "didChangeValueForKey:withSetMutation:usingObjects:", + "doesNotRecognizeSelector:", + "exposedBindings", + "forwardInvocation:", + "forwardingTargetForSelector:", + "hasThemeAttribute:", + "hasThemeState:", + "hasThemeStates:", + "hash", + "implementsSelector:", + "infoForBinding:", + "init", + "isEqual:", + "isKindOfClass:", + "isMemberOfClass:", + "isProxy", + "kvoValueForKey:", + "methodForSelector:", + "methodSignatureForSelector:", + "mutableArrayValueForKey:", + "mutableArrayValueForKeyPath:", + "mutableCopy", + "mutableSetValueForKey:", + "mutableSetValueForKeyPath:", + "objectDidChangeTheme", + "performSelector:", + "performSelector:withObject:", + "performSelector:withObject:afterDelay:", + "performSelector:withObject:afterDelay:inModes:", + "performSelector:withObject:withObject:", + "performSelector:withObjects:", + "registerThemeValues:", + "registerThemeValues:inherit:", + "release", + "removeObserver:forKeyPath:", + "replacementObjectForArchiver:", + "replacementObjectForCoder:", + "replacementObjectForKeyedArchiver:", + "respondsToSelector:", + "retain", + "self", + "setTheme:", + "setThemeClass:", + "setThemeState:", + "setThemeStates:", + "setValue:forKey:", + "setValue:forKeyPath:", + "setValue:forThemeAttribute:", + "setValue:forThemeAttribute:inState:", + "setValue:forThemeAttribute:inStates:", + "setValue:forUndefinedKey:", + "setValuesForKeysWithDictionary:", + "superclass", + "theme", + "themeClass", + "themeState", + "unbind:", + "unsetThemeState:", + "unsetThemeStates:", + "valueClassForBinding:", + "valueForKey:", + "valueForKeyPath:", + "valueForThemeAttribute:", + "valueForThemeAttribute:inState:", + "valueForThemeAttribute:inStates:", + "valueForUndefinedKey:", + "valueType", + "willChange:valuesAtIndexes:forKey:", + "willChangeValueForKey:", + "willChangeValueForKey:withSetMutation:usingObjects:" + ], + "CPObjectController": [ + "add:", + "addObject:", + "addObserver:forKeyPath:options:context:", + "automaticallyPreparesContent", + "awakeFromCib", + "canAdd", + "canRemove", + "content", + "encodeWithCoder:", + "entityName", + "fetchPredicate", + "init", + "initWithCoder:", + "initWithContent:", + "isEditable", + "newObject", + "objectClass", + "observedKeys", + "prepareContent", + "remove:", + "removeObject:", + "removeObserver:forKeyPath:", + "selectedObjects", + "selection", + "setAutomaticallyPreparesContent:", + "setContent:", + "setEditable:", + "setEntityName:", + "setFetchPredicate:", + "setObjectClass:", + "setUsesLazyFetching:", + "usesLazyFetching" + ], + "CPOpenPanel": [ + "URLs", + "allowsMultipleSelection", + "canChooseDirectories", + "canChooseFiles", + "directoryURL", + "runModal", + "setAllowsMultipleSelection:", + "setCanChooseDirectories:", + "setCanChooseFiles:", + "setDirectoryURL:" + ], + "CPOperation": [ + "addDependency:", + "cancel", + "completionFunction", + "dependencies", + "init", + "isCancelled", + "isConcurrent", + "isExecuting", + "isFinished", + "isReady", + "main", + "observeValueForKeyPath:ofObject:change:context:", + "queuePriority", + "removeDependency:", + "setCompletionFunction:", + "setQueuePriority:", + "start", + "waitUntilFinished" + ], + "CPOperationQueue": [ + "addOperation:", + "addOperationWithFunction:", + "addOperations:waitUntilFinished:", + "cancelAllOperations", + "init", + "isSuspended", + "maxConcurrentOperationCount", + "name", + "operationCount", + "operations", + "setName:", + "setSuspended:", + "waitUntilAllOperationsAreFinished" + ], + "CPOutlineView": [ + "addTableColumn:", + "collapseItem:", + "content", + "dataSource", + "delegate", + "encodeWithCoder:", + "expandItem:", + "expandItem:expandChildren:", + "frameOfDataViewAtColumn:row:", + "frameOfOutlineDisclosureControlAtRow:", + "indentationMarkerFollowsDataView", + "indentationPerLevel", + "initWithCoder:", + "initWithFrame:", + "isExpandable:", + "isItemExpanded:", + "itemAtRow:", + "keyDown:", + "levelForItem:", + "levelForRow:", + "numberOfRowsInTableView:", + "outlineTableColumn", + "parentForItem:", + "reloadItem:", + "reloadItem:reloadChildren:", + "removeTableColumn:", + "rowForItem:", + "selectionIndexPaths", + "selectionShouldChangeInTableView:", + "setContent:", + "setDataSource:", + "setDelegate:", + "setDisclosureControlPrototype:", + "setDropItem:dropChildIndex:", + "setIndentationMarkerFollowsDataView:", + "setIndentationPerLevel:", + "setOutlineTableColumn:", + "setSelectionIndexPaths:", + "tableView:acceptDrop:row:dropOperation:", + "tableView:heightOfRow:", + "tableView:isGroupRow:", + "tableView:menuForTableColumn:row:", + "tableView:objectValueForTableColumn:row:", + "tableView:selectionIndexesForProposedSelection:", + "tableView:setObjectValue:forTableColumn:row:", + "tableView:shouldEditTableColumn:row:", + "tableView:shouldSelectRow:", + "tableView:shouldSelectTableColumn:", + "tableView:sortDescriptorsDidChange:", + "tableView:validateDrop:proposedRow:proposedDropOperation:", + "tableView:willDisplayView:forTableColumn:row:", + "tableView:willRemoveView:forTableColumn:row:", + "tableView:writeRowsWithIndexes:toPasteboard:" + ], + "CPPanel": [ + "becomesKeyOnlyIfNeeded", + "canBecomeKeyWindow", + "canBecomeMainWindow", + "cancel:", + "cancelOperation:", + "isFloatingPanel", + "setBecomesKeyOnlyIfNeeded:", + "setFloatingPanel:", + "setWorksWhenModal:", + "worksWhenModal" + ], + "CPParagraphStyle": [ + "alignment", + "baseWritingDirection", + "copy", + "defaultTabInterval", + "encodeWithCoder:", + "firstLineHeadIndent", + "headIndent", + "init", + "initWithCoder:", + "initWithParagraphStyle:", + "isEqual:", + "lineBreakMode", + "lineHeightMultiple", + "lineSpacing", + "maximumLineHeight", + "minimumLineHeight", + "mutableCopy", + "paragraphSpacing", + "paragraphSpacingBefore", + "tabStops", + "tailIndent", + "textLists" + ], + "CPPasteboard": [ + "addTypes:owner:", + "availableTypeFromArray:", + "changeCount", + "dataForType:", + "declareTypes:owner:", + "propertyListForType:", + "setData:forType:", + "setPropertyList:forType:", + "setString:forType:", + "stringForType:", + "types" + ], + "CPPlatform": [], + "CPPlatformPasteboard": [ + "beforeCopyEvent:", + "beforePasteEvent:", + "createDOMElements", + "destroyDOMElements", + "init", + "nativeBeforeClipboardEvent:", + "nativeCopyOrCutEvent:", + "nativePasteEvent:", + "setDOMWindow:", + "windowDidSendKeyEvent:", + "windowMaySendKeyEvent:", + "windowShouldNotStopPropagation", + "windowShouldStopPropagation", + "windowShouldSuppressKeyEvent" + ], + "CPPlatformString": [], + "CPPlatformWindow": [ + "blurEvent:", + "contentBounds", + "contentRect", + "contextMenuEvent:", + "convertBaseToScreen:", + "convertScreenToBase:", + "createDOMElements", + "deminiaturize:", + "dragEvent:", + "focusEvent:", + "hitTest:", + "init", + "initWithContentRect:", + "initWithWindow:", + "isVisible", + "keyEvent:", + "layerAtLevel:create:", + "miniaturize:", + "mouseEvent:", + "moveWindow:fromLevel:toLevel:", + "nativeContentRect", + "order:window:relativeTo:", + "orderBack:", + "orderFront:", + "orderOut:", + "orderedWindowsAtLevel:", + "registerDOMWindow", + "resizeEvent:", + "scrollEvent:", + "setContentRect:", + "setHasShadow:", + "setLevel:", + "setSelectedRange:inElement:", + "setShadowStyle:", + "supportsFullPlatformWindows", + "title", + "touchEvent:", + "updateFromNativeContentRect", + "updateNativeContentRect", + "usableContentFrame", + "visibleFrame" + ], + "CPPopUpButton": [ + "addItem:", + "addItemWithTitle:", + "addItemsWithTitles:", + "indexOfItem:", + "indexOfItemWithRepresentedObject:", + "indexOfItemWithTag:", + "indexOfItemWithTarget:action:", + "indexOfItemWithTitle:", + "indexOfSelectedItem", + "initWithCoder:", + "initWithFrame:", + "initWithFrame:pullsDown:", + "insertItemWithTitle:atIndex:", + "itemArray", + "itemAtIndex:", + "itemTitleAtIndex:", + "itemTitles", + "itemWithTitle:", + "lastItem", + "mouseDown:", + "numberOfItems", + "objectValue", + "observeValueForKeyPath:ofObject:change:context:", + "preferredEdge", + "pullsDown", + "removeAllItems", + "removeItemAtIndex:", + "removeItemWithTitle:", + "rightMouseDown:", + "selectItem:", + "selectItemAtIndex:", + "selectItemWithTag:", + "selectItemWithTitle:", + "selectedIndex", + "selectedItem", + "setImage:", + "setObjectValue:", + "setPreferredEdge:", + "setPullsDown:", + "setSelectedIndex:", + "setTitle:", + "synchronizeTitleAndSelectedItem", + "takeValueFromKeyPath:ofObjects:", + "titleOfSelectedItem" + ], + "CPPopover": [ + "animates", + "appearance", + "behavior", + "close", + "contentSize", + "contentViewController", + "delegate", + "encodeWithCoder:", + "init", + "initWithCoder:", + "isShown", + "performClose:", + "positioningRect", + "setAnimates:", + "setAppearance:", + "setBehavior:", + "setBehaviour:", + "setContentSize:", + "setContentViewController:", + "setDelegate:", + "setPositioningRect:", + "showRelativeToRect:ofView:preferredEdge:" + ], + "CPPredicate": [ + "description", + "evaluateWithObject:", + "evaluateWithObject:substitutionVariables:", + "predicateFormat", + "predicateWithSubstitutionVariables:" + ], + "CPPredicateEditor": [ + "action", + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "objectValue", + "rowTemplates", + "setAction:", + "setObjectValue:", + "setRowTemplates:", + "setTarget:", + "target" + ], + "CPPredicateEditorRowTemplate": [ + "compoundTypes", + "copy", + "description", + "displayableSubpredicatesOfPredicate:", + "encodeWithCoder:", + "initWithCoder:", + "initWithCompoundTypes:", + "initWithLeftExpressions:rightExpressionAttributeType:modifier:operators:options:", + "initWithLeftExpressions:rightExpressions:modifier:operators:options:", + "leftAttributeType", + "leftExpressionAttributeType", + "leftExpressions", + "leftIsWildcard", + "matchForPredicate:", + "modifier", + "operators", + "options", + "predicateWithSubpredicates:", + "rightAttributeType", + "rightExpressionAttributeType", + "rightExpressions", + "rightIsWildcard", + "setLeftIsWildcard:", + "setPredicate:", + "setRightIsWildcard:", + "setTemplateViews:", + "templateViews" + ], + "CPPredicateEditorValueBinder": [ + "setPlaceholderValue:withMarker:forBinding:", + "setValue:forBinding:" + ], + "CPPredicateScanner": [ + "initWithString:args:", + "nextArg", + "parse", + "parseAdditionExpression", + "parseAnd", + "parseBinaryExpression", + "parseComparison", + "parseExpression", + "parseFunctionalExpression", + "parseMultiplicationExpression", + "parseNot", + "parseOr", + "parsePowerExpression", + "parsePredicate", + "parseSimpleExpression", + "scanPredicateKeyword:" + ], + "CPPredicateUtilities": [], + "CPPredicate_BOOL": [ + "evaluateWithObject:", + "evaluateWithObject:substitutionVariables:", + "initWithBool:", + "isEqual:", + "predicateFormat" + ], + "CPProgressIndicator": [ + "controlSize", + "controlTint", + "createEphemeralSubviewNamed:", + "doubleValue", + "drawBar", + "drawRect:", + "encodeWithCoder:", + "incrementBy:", + "initWithCoder:", + "initWithFrame:", + "isBezeled", + "isDisplayedWhenStopped", + "isIndeterminate", + "layoutSubviews", + "maxValue", + "minValue", + "rectForEphemeralSubviewNamed:", + "setBezeled:", + "setControlSize:", + "setControlTint:", + "setDisplayedWhenStopped:", + "setDoubleValue:", + "setFrameSize:", + "setIndeterminate:", + "setMaxValue:", + "setMinValue:", + "setStyle:", + "setUsesThreadedAnimation:", + "sizeToFit", + "startAnimation:", + "stopAnimation:", + "updateBackgroundColor", + "usesThreadedAnimation" + ], + "CPPropertyListSerialization": [], + "CPProxy": [ + "UID", + "class", + "description", + "forward::", + "forwardInvocation:", + "hash", + "isEqual:", + "isKindOfClass:", + "isMemberOfClass:", + "isProxy", + "methodSignatureForSelector:", + "performSelector:", + "performSelector:withObject:", + "performSelector:withObject:withObject:", + "respondsToSelector:", + "self", + "superclass" + ], + "CPRadio": [ + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "initWithFrame:radioGroup:", + "nextState", + "radioGroup", + "sendAction:to:", + "setAction:", + "setObjectValue:", + "setRadioGroup:", + "viewDidMoveToSuperview" + ], + "CPRadioGroup": [ + "action", + "enabled", + "encodeWithCoder:", + "hidden", + "init", + "initWithCoder:", + "radios", + "selectRadioAtIndex:", + "selectRadioWithTag:", + "selectedRadio", + "selectedRadioIndex", + "setAction:", + "setEnabled:", + "setHidden:", + "setTarget:", + "size", + "target" + ], + "CPResponder": [ + "acceptsFirstResponder", + "becomeFirstResponder", + "cursorUpdate:", + "doCommandBySelector:", + "encodeWithCoder:", + "flagsChanged:", + "initWithCoder:", + "insertBackTab:", + "insertLineBreak:", + "insertNewline:", + "insertTab:", + "insertText:", + "interpretKeyEvents:", + "keyDown:", + "keyUp:", + "menu", + "mouseDown:", + "mouseDragged:", + "mouseEntered:", + "mouseExited:", + "mouseMoved:", + "mouseUp:", + "nextResponder", + "noResponderFor:", + "performKeyEquivalent:", + "resignFirstResponder", + "rightMouseDown:", + "rightMouseUp:", + "scrollWheel:", + "setMenu:", + "setNextResponder:", + "tryToPerform:with:", + "undoManager" + ], + "CPRuleEditor": [ + "acceptsFirstResponder", + "addRow:", + "allowsEmptyCompoundRows", + "animation", + "animationDidEnd:", + "bind:toObject:withKeyPath:options:", + "boundArrayKeyPath", + "canRemoveAllRows", + "criteriaForRow:", + "criteriaKeyPath", + "delegate", + "displayValuesForRow:", + "displayValuesKeyPath", + "draggedView:endedAt:operation:", + "draggingEntered:", + "draggingExited:", + "draggingUpdated:", + "encodeWithCoder:", + "font", + "formattingDictionary", + "formattingStringsFilename", + "initWithCoder:", + "initWithFrame:", + "insertRowAtIndex:withType:asSubrowOfRow:animate:", + "isEditable", + "keyDown:", + "keyUp:", + "mouseDragged:", + "nestingMode", + "numberOfRows", + "observeValueForKeyPath:ofObject:change:context:", + "parentRowForRow:", + "pasteboard:provideDataForType:", + "performDragOperation:", + "predicate", + "predicateForRow:", + "prepareForDragOperation:", + "reloadCriteria", + "reloadPredicate", + "removeRowAtIndex:", + "removeRowsAtIndexes:includeSubrows:", + "rowClass", + "rowHeight", + "rowTypeForRow:", + "rowTypeKeyPath", + "selectAll:", + "selectRowIndexes:byExtendingSelection:", + "selectedRowIndexes", + "setAllowsEmptyCompoundRows:", + "setAnimation:", + "setBoundArrayKeyPath:", + "setCanRemoveAllRows:", + "setCriteria:andDisplayValues:forRowAtIndex:", + "setCriteriaKeyPath:", + "setDelegate:", + "setDisplayValuesKeyPath:", + "setEditable:", + "setFormattingDictionary:", + "setFormattingStringsFilename:", + "setFrameSize:", + "setNeedsDisplay:", + "setNestingMode:", + "setRowClass:", + "setRowHeight:", + "setRowTypeKeyPath:", + "setStandardLocalizer:", + "setSubrowsKeyPath:", + "standardLocalizer", + "subrowIndexesForRow:", + "subrowsKeyPath", + "unbind:", + "wantsPeriodicDraggingUpdates" + ], + "CPRulerMarker": [ + "drawRect:", + "encodeWithCoder:", + "image", + "imageOrigin", + "imageRectInRuler", + "initWithCoder:", + "initWithRulerView:markerLocation:image:imageOrigin:", + "isDragging", + "isMovable", + "isRemovable", + "markerLocation", + "representedObject", + "ruler", + "setImage:", + "setImageOrigin:", + "setMarkerLocation:", + "setMovable:", + "setRemovable:", + "setRepresentedObject:", + "thicknessRequiredInRuler", + "trackMouse:adding:" + ], + "CPRulerView": [ + "accessoryView", + "addMarker:", + "baselineLocation", + "clientView", + "drawHashMarksAndLabelsInRect:", + "drawMarkersInRect:", + "drawRect:", + "encodeWithCoder:", + "initWithCoder:", + "initWithScrollView:orientation:", + "invalidateHashMarks", + "isFlipped", + "markers", + "measurementUnits", + "menuForEvent:", + "mouseDown:", + "moveRulerlineFromLocation:toLocation:", + "orientation", + "originOffset", + "removeMarker:", + "requiredThickness", + "reservedThicknessForAccessoryView", + "reservedThicknessForMarkers", + "ruleThickness", + "scrollView", + "setAccessoryView:", + "setClientView:", + "setMarkers:", + "setMeasurementUnits:", + "setOrientation:", + "setOriginOffset:", + "setReservedThicknessForAccessoryView:", + "setReservedThicknessForMarkers:", + "setRuleThickness:", + "setScrollView:", + "trackMarker:withMouseEvent:" + ], + "CPRunLoop": [ + "addTimer:forMode:", + "cancelPerformSelector:target:argument:", + "init", + "invalidateTimerWithDelayedPerform:", + "limitDateForMode:", + "performBlock:argument:order:modes:", + "performSelector:target:argument:order:modes:", + "performSelectors" + ], + "CPSavePanel": [ + "URL", + "allowedFileTypes", + "allowsOtherFileTypes", + "canCreateDirectories", + "canSelectHiddenExtension", + "init", + "isExtensionHidden", + "runModal", + "setAllowedFileTypes:", + "setAllowsOtherFileTypes:", + "setCanCreateDirectories:", + "setCanSelectHiddenExtension:", + "setExtensionHidden:" + ], + "CPScanner": [ + "caseSensitive", + "charactersToBeSkipped", + "copy", + "description", + "initWithString:", + "isAtEnd", + "locale", + "scanCharactersFromSet:", + "scanCharactersFromSet:intoString:", + "scanDouble:", + "scanFloat", + "scanFloat:", + "scanInt", + "scanInt:", + "scanLocation", + "scanString:", + "scanString:intoString:", + "scanUpToCharactersFromSet:", + "scanUpToCharactersFromSet:intoString:", + "scanUpToString:", + "scanUpToString:intoString:", + "scanWithParseFunction:", + "setCaseSensitive:", + "setCharactersToBeSkipped:", + "setLocale:", + "setScanLocation:", + "string" + ], + "CPScreen": [ + "visibleFrame" + ], + "CPScrollView": [ + "allowsMagnification", + "autohidesScrollers", + "awakeFromCib", + "borderType", + "bottomCornerView", + "contentSize", + "contentView", + "delegate", + "documentView", + "documentVisibleRect", + "drawRect:", + "encodeWithCoder:", + "flashScrollers", + "hasHorizontalRuler", + "hasHorizontalScroller", + "hasVerticalRuler", + "hasVerticalScroller", + "horizontalLineScroll", + "horizontalPageScroll", + "horizontalRulerView", + "horizontalScroller", + "initWithCoder:", + "initWithFrame:", + "lineScroll", + "magnification", + "maxMagnification", + "minMagnification", + "moveByOffset:", + "moveDown:", + "moveLeft:", + "moveRight:", + "moveUp:", + "pageScroll", + "reflectScrolledClipView:", + "resizeSubviewsWithOldSize:", + "rulersVisible", + "scrollPageDown:", + "scrollPageUp:", + "scrollToBeginningOfDocument:", + "scrollToEndOfDocument:", + "scrollWheel:", + "scrollerKnobStyle", + "scrollerStyle", + "setAllowsMagnification:", + "setAutohidesScrollers:", + "setBorderType:", + "setBottomCornerView:", + "setContentView:", + "setDelegate:", + "setDocumentView:", + "setHasHorizontalRuler:", + "setHasHorizontalScroller:", + "setHasVerticalRuler:", + "setHasVerticalScroller:", + "setHorizontalLineScroll:", + "setHorizontalPageScroll:", + "setHorizontalRulerView:", + "setHorizontalScroller:", + "setLineScroll:", + "setMagnification:", + "setMagnification:centeredAtPoint:", + "setMaxMagnification:", + "setMinMagnification:", + "setPageScroll:", + "setRulersVisible:", + "setScrollerKnobStyle:", + "setScrollerStyle:", + "setVerticalLineScroll:", + "setVerticalPageScroll:", + "setVerticalRulerView:", + "setVerticalScroller:", + "tile", + "verticalLineScroll", + "verticalPageScroll", + "verticalRulerView", + "verticalScroller", + "viewWillMoveToWindow:" + ], + "CPScroller": [ + "allowFadingOut", + "animationDidEnd:", + "checkSpaceForParts", + "createEphemeralSubviewNamed:", + "createViewForPart:", + "currentValueForThemeAttribute:", + "drawArrow:highlight:", + "drawKnob", + "drawKnobSlot", + "drawParts", + "encodeWithCoder:", + "fadeIn", + "fadeOut", + "hitPart", + "initWithCoder:", + "initWithFrame:", + "isVertical", + "knobProportion", + "layoutSubviews", + "mouseDown:", + "mouseEntered:", + "mouseExited:", + "rectForEphemeralSubviewNamed:", + "rectForPart:", + "scrollerWidth", + "setFloatValue:knobProportion:", + "setFrameSize:", + "setKnobProportion:", + "setObjectValue:", + "setStyle:", + "style", + "testPart:", + "trackKnob:", + "trackScrollButtons:", + "usableParts" + ], + "CPSearchField": [ + "cancelButton", + "cancelButtonRectForBounds:", + "cancelOperation:", + "contentRectForBounds:", + "cursorUpdate:", + "defaultSearchMenuTemplate", + "encodeWithCoder:", + "hitTest:", + "initWithCoder:", + "initWithFrame:", + "isOpaque", + "layoutSubviews", + "maximumRecents", + "menu", + "menuDidClose:", + "menuWillOpen:", + "mouseDown:", + "recentSearches", + "recentsAutosaveName", + "resetCancelButton", + "resetSearchButton", + "resignFirstResponder", + "searchButton", + "searchButtonRectForBounds:", + "searchMenuTemplate", + "searchTextRectForBounds:", + "sendAction:to:", + "sendsSearchStringImmediately", + "sendsWholeSearchString", + "setCancelButton:", + "setFrameSize:", + "setMaximumRecents:", + "setPlaceholderString:", + "setRecentSearches:", + "setRecentsAutosaveName:", + "setSearchButton:", + "setSearchMenuTemplate:", + "setSendsSearchStringImmediately:", + "setSendsWholeSearchString:", + "textDidEndEditing:", + "themedLayoutFunctionCompletionHandler", + "unbind:", + "updateSearchButton", + "updateTrackingAreas" + ], + "CPSecureTextField": [ + "isSecure" + ], + "CPSegmentedControl": [ + "bezelFrameForSegment:", + "bind:toObject:withKeyPath:options:", + "contentFrameForSegment:", + "createEphemeralSubviewNamed:", + "drawSegment:highlight:", + "drawSegmentBezel:highlight:", + "encodeWithCoder:", + "frameForSegment:", + "imageForSegment:", + "initWithCoder:", + "initWithFrame:", + "insertSegments:atIndexes:", + "isEnabledForSegment:", + "isSelectedForSegment:", + "isTracking", + "labelForSegment:", + "layoutSubviews", + "menuForSegment:", + "mouseDown:", + "mouseUp:", + "rectForEphemeralSubviewNamed:", + "removeSegmentsAtIndexes:", + "segmentCount", + "segments", + "selectSegmentWithTag:", + "selectedSegment", + "selectedTag", + "setControlSize:", + "setEnabled:forSegment:", + "setFont:", + "setImage:forSegment:", + "setLabel:forSegment:", + "setMenu:forSegment:", + "setSegmentCount:", + "setSegments:", + "setSelected:forSegment:", + "setSelectedSegment:", + "setTag:forSegment:", + "setTrackingMode:", + "setWidth:forSegment:", + "tagForSegment:", + "testSegment:", + "tile", + "tileWithChangedSegment:", + "trackSegment:", + "trackingMode", + "widthForSegment:" + ], + "CPSet": [ + "allObjects", + "anyObject", + "containsObject:", + "copy", + "count", + "description", + "encodeWithCoder:", + "enumerateObjectsUsingBlock:", + "filterUsingPredicate:", + "filteredSetUsingPredicate:", + "filteredSetUsingPredicate:", + "init", + "initWithArray:", + "initWithCoder:", + "initWithObjects:", + "initWithObjects:count:", + "initWithSet:", + "initWithSet:copyItems:", + "intersectsSet:", + "isEqual:", + "isEqualToSet:", + "isSubsetOfSet:", + "makeObjectsPerformSelector:", + "makeObjectsPerformSelector:withObject:", + "makeObjectsPerformSelector:withObjects:", + "member:", + "mutableCopy", + "objectEnumerator", + "objectsPassingTest:", + "setByAddingObject:", + "setByAddingObjectsFromArray:", + "setByAddingObjectsFromSet:", + "setValue:forKey:", + "sortedArrayUsingDescriptors:", + "valueForKey:", + "valueForKeyPath:" + ], + "CPShadow": [ + "cssString", + "set", + "setShadowBlurRadius:", + "setShadowColor:", + "setShadowOffset:", + "shadowBlurRadius", + "shadowColor", + "shadowOffset" + ], + "CPShadowView": [ + "bottomInset", + "frameForContentFrame:", + "horizontalInset", + "initWithFrame:", + "layoutSubviews", + "leftInset", + "rightInset", + "setFrameForContentFrame:", + "setWeight:", + "topInset", + "verticalInset" + ], + "CPSimpleTypesetter": [ + "currentTextContainer", + "layoutGlyphsInLayoutManager:startingAtGlyphIndex:maxNumberOfLineFragments:nextGlyphIndex:", + "layoutManager", + "setCurrentTextContainer:", + "setLayoutManager:", + "textContainers", + "textTabForWidth:writingDirection:" + ], + "CPSlider": [ + "allowsTickMarkValuesOnly", + "altIncrementValue", + "closestTickMarkValueToValue:", + "continueTracking:at:", + "createEphemeralSubviewNamed:", + "drawRect:", + "encodeWithCoder:", + "indexOfTickMarkAtPoint:", + "initWithCoder:", + "initWithFrame:", + "isContinuous", + "isVertical", + "knobRectForBounds:", + "knobThickness", + "layoutSubviews", + "leftTrackRectForBounds:", + "maxValue", + "minValue", + "numberOfTickMarks", + "rectForEphemeralSubviewNamed:", + "rectOfTickMarkAtIndex:", + "rightTrackRectForBounds:", + "setAllowsTickMarkValuesOnly:", + "setAllowsTickMarkValuesOnly:", + "setAltIncrementValue:", + "setContinuous:", + "setFrameSize:", + "setMaxValue:", + "setMinValue:", + "setNumberOfTickMarks:", + "setNumberOfTickMarks:", + "setObjectValue:", + "setSliderType:", + "setSliderType:", + "setTickMarkPosition:", + "setTickMarkPosition:", + "setTrackFillColor:", + "setValue:", + "sliderType", + "sliderType", + "startTrackingAt:", + "stopTracking:at:mouseIsUp:", + "takeValueFromKeyPath:ofObjects:", + "tickMarkPosition", + "tickMarkValueAtIndex:", + "trackFillColor", + "trackRectForBounds:", + "tracksMouseOutsideOfFrame", + "value" + ], + "CPSliderColorPicker": [ + "controlTextDidEndEditing:", + "currentMode", + "initView", + "initWithPickerMask:colorPanel:", + "provideNewAlternateButtonImage", + "provideNewButtonImage", + "provideNewView:", + "setColor:", + "sliderChanged:", + "supportsMode:", + "updateHSBSliders:", + "updateHex:", + "updateLabels", + "updateRGBSliders:" + ], + "CPSortDescriptor": [ + "ascending", + "compareObject:withObject:", + "description", + "encodeWithCoder:", + "initWithCoder:", + "initWithKey:ascending:", + "initWithKey:ascending:selector:", + "key", + "reversedSortDescriptor", + "selector" + ], + "CPSound": [ + "delegate", + "duration", + "init", + "initWithContentsOfFile:byReference:", + "initWithContentsOfURL:byReference:", + "initWithData:", + "isPlaying", + "loops", + "name", + "pause", + "play", + "resume", + "setDelegate:", + "setDelegate:", + "setLoops:", + "setName:", + "setVolume:", + "stop", + "volume" + ], + "CPSplitView": [ + "addArrangedSubview:", + "addSubview:", + "adjustSubviews", + "arrangedSubviews", + "arrangesAllSubviews", + "attachButtonBar:", + "autosaveName", + "cursorAtPoint:hitDividerAtIndex:", + "cursorUpdate:", + "delegate", + "dividerColor", + "dividerStyle", + "dividerThickness", + "drawDividerInRect:", + "effectiveRectOfDividerAtIndex:", + "encodeWithCoder:", + "hitTest:", + "initWithCoder:", + "initWithFrame:", + "insertArrangedSubview:atIndex:", + "isPaneSplitter", + "isSubviewCollapsed:", + "isVertical", + "layoutSubviews", + "maxPossiblePositionOfDividerAtIndex:", + "minPossiblePositionOfDividerAtIndex:", + "mouseDown:", + "rectOfDividerAtIndex:", + "removeArrangedSubview:", + "replaceSubview:with:", + "resizeSubviewsWithOldSize:", + "setArrangesAllSubviews:", + "setAutosaveName:", + "setButtonBar:forDividerAtIndex:", + "setDelegate:", + "setDividerStyle:", + "setFrameSize:", + "setIsPaneSplitter:", + "setPosition:ofDividerAtIndex:", + "setVertical:", + "trackDivider:", + "updateTrackingAreas", + "viewDidMoveToWindow", + "willRemoveSubview:" + ], + "CPStackView": [ + "addArrangedSubview:", + "addView:inGravity:", + "alignment", + "arrangedSubviews", + "customSpacingAfterView:", + "detachesHiddenViews", + "distribution", + "edgeInsets", + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "insertView:atIndex:inGravity:", + "layoutSubviews", + "orientation", + "removeArrangedSubview:", + "removeView:", + "resizeSubviewsWithOldSize:", + "setAlignment:", + "setCustomSpacing:afterView:", + "setDetachesHiddenViews:", + "setDistribution:", + "setEdgeInsets:", + "setOrientation:", + "setSpacing:", + "setViews:inGravity:", + "setVisibilityPriority:forView:", + "spacing", + "viewsInGravity:", + "visibilityPriorityForView:" + ], + "CPStepper": [ + "autorepeat", + "encodeWithCoder:", + "increment", + "initWithCoder:", + "initWithFrame:", + "layoutSubviews", + "maxValue", + "minValue", + "performClickDown:", + "performClickUp:", + "setAutorepeat:", + "setControlSize:", + "setDoubleValue:", + "setEnabled:", + "setFrame:", + "setIncrement:", + "setMaxValue:", + "setMinValue:", + "setValueWraps:", + "valueWraps" + ], + "CPString": [ + "UID", + "boolValue", + "capitalizedString", + "caseInsensitiveCompare:", + "characterAtIndex:", + "commonPrefixWithString:", + "commonPrefixWithString:options:", + "compare:", + "compare:options:", + "compare:options:range:", + "componentsSeparatedByCharactersInSet:", + "componentsSeparatedByString:", + "containsString:", + "cssString", + "description", + "doubleValue", + "floatValue", + "hasPrefix:", + "hasSuffix:", + "initWithFormat:", + "initWithString:", + "intValue", + "integerValue", + "isEqual:", + "isEqualToString:", + "lastPathComponent", + "length", + "lowercaseString", + "objectFromJSON", + "pathComponents", + "pathExtension", + "rangeOfString:", + "rangeOfString:options:", + "rangeOfString:options:range:", + "sizeWithFont:", + "sizeWithFont:inWidth:", + "string", + "stringByAppendingFormat:", + "stringByAppendingPathComponent:", + "stringByAppendingPathExtension:", + "stringByAppendingString:", + "stringByDeletingLastPathComponent", + "stringByDeletingPathExtension", + "stringByEscapingRegexControlCharacters", + "stringByPaddingToLength:withString:startingAtIndex:", + "stringByReplacingCharactersInRange:withString:", + "stringByReplacingOccurrencesOfString:withString:", + "stringByReplacingOccurrencesOfString:withString:options:range:", + "stringByStandardizingPath", + "stringByTrimmingCharactersInSet:", + "stringByTrimmingWhitespace", + "stripDiacritics", + "substringFromIndex:", + "substringToIndex:", + "substringWithRange:", + "uppercaseString" + ], + "CPTabView": [ + "acceptsFirstMouse:", + "addTabViewItem:", + "awakeFromCib", + "backgroundColor", + "binderForBinding:", + "delegate", + "encodeWithCoder:", + "font", + "indexOfTabViewItem:", + "indexOfTabViewItemWithIdentifier:", + "initWithCoder:", + "initWithFrame:", + "insertTabViewItem:atIndex:", + "items", + "layoutSubviews", + "mouseDown:", + "numberOfTabViewItems", + "removeTabViewItem:", + "selectFirstTabViewItem:", + "selectLastTabViewItem:", + "selectNextTabViewItem:", + "selectPreviousTabViewItem:", + "selectTabViewItem:", + "selectTabViewItemAtIndex:", + "selectedTabViewItem", + "setBackgroundColor:", + "setDelegate:", + "setFont:", + "setItems:", + "setTabViewType:", + "tabViewItemAtIndex:", + "tabViewItems", + "tabViewType", + "tileWithChangedItem:" + ], + "CPTabViewItem": [ + "auxiliaryView", + "enabled", + "encodeWithCoder:", + "frame", + "identifier", + "image", + "image", + "init", + "initWithCoder:", + "initWithIdentifier:", + "label", + "selected", + "setAuxiliaryView:", + "setEnabled:", + "setFrame:", + "setIdentifier:", + "setImage:", + "setImage:", + "setLabel:", + "setSelected:", + "setTag:", + "setView:", + "setViewController:", + "setWidth:", + "tabState", + "tabView", + "tag", + "view", + "viewController", + "width" + ], + "CPTableCellView": [ + "awakeFromCib", + "description", + "imageView", + "objectValue", + "recursivelyPerformSelector:withObject:startingFrom:", + "setImageView:", + "setObjectValue:", + "setTextField:", + "setThemeState:", + "textField", + "unsetThemeState:" + ], + "CPTableColumn": [ + "bind:toObject:withKeyPath:options:", + "dataCell", + "dataCellForRow:", + "dataView", + "dataViewForRow:", + "description", + "disableResizingPosting", + "encodeWithCoder:", + "headerCell", + "headerToolTip", + "headerView", + "identifier", + "init", + "initWithCoder:", + "initWithIdentifier:", + "isEditable", + "isHidden", + "maxWidth", + "minWidth", + "resizingMask", + "setDataCell:", + "setDataView:", + "setDisableResizingPosting:", + "setEditable:", + "setHeaderCell:", + "setHeaderToolTip:", + "setHeaderView:", + "setHidden:", + "setIdentifier:", + "setMaxWidth:", + "setMinWidth:", + "setResizingMask:", + "setSortDescriptorPrototype:", + "setTableView:", + "setWidth:", + "sizeToFit", + "sortDescriptorPrototype", + "tableView", + "width" + ], + "CPTableColumnValueBinder": [ + "createsSortDescriptor", + "setValueFor:" + ], + "CPTableContentBinder": [ + "content", + "setContent:", + "setValueFor:" + ], + "CPTableHeaderView": [ + "columnAtPoint:", + "cursorUpdate:", + "draggedColumn", + "draggedDistance", + "encodeWithCoder:", + "headerRectOfColumn:", + "initWithCoder:", + "initWithFrame:", + "isDragging", + "layoutSubviews", + "mouseDown:", + "mouseDragged:", + "mouseUp:", + "resizedColumn", + "setTableView:", + "tableView", + "updateTrackingAreas", + "viewDidMoveToWindow" + ], + "CPTableView": [ + "acceptsFirstResponder", + "addTableColumn:", + "allowsColumnReordering", + "allowsColumnResizing", + "allowsColumnSelection", + "allowsEmptySelection", + "allowsMultipleSelection", + "alternatingRowBackgroundColors", + "autosaveName", + "autosaveTableColumns", + "becomeKeyWindow", + "bind:toObject:withKeyPath:options:", + "canDragRowsWithIndexes:atPoint:", + "clickedColumn", + "clickedRow", + "columnAtPoint:", + "columnAutoresizingStyle", + "columnForView:", + "columnIndexesInRect:", + "columnWithIdentifier:", + "concludeDragOperation:", + "continueTracking:at:", + "cornerView", + "dataSource", + "delegate", + "deselectAll", + "deselectAll:", + "deselectColumn:", + "deselectRow:", + "disableAutomaticResizing", + "doubleAction", + "doubleClickArgument", + "doubleClickTarget", + "dragImageForRowsWithIndexes:tableColumns:event:offset:", + "dragViewForRowsWithIndexes:tableColumns:event:offset:", + "draggedImage:endedAt:operation:", + "draggedView:endedAt:operation:", + "draggingDestinationFeedbackStyle", + "draggingEnded:", + "draggingEntered:", + "draggingExited:", + "draggingUpdated:", + "drawBackgroundInClipRect:", + "drawGridInClipRect:", + "drawRow:clipRect:", + "editColumn:row:withEvent:select:", + "editedColumn", + "editedRow", + "encodeWithCoder:", + "enumerateAvailableViewsUsingBlock:", + "exposedRect", + "frameOfDataViewAtColumn:row:", + "getColumn:row:forView:", + "gridColor", + "gridStyleMask", + "headerView", + "highlightSelectionInClipRect:", + "highlightedTableColumn", + "hitTest:", + "initWithCoder:", + "initWithFrame:", + "intercellSpacing", + "isColumnSelected:", + "isRowSelected:", + "keyDown:", + "layoutSubviews", + "load", + "makeViewWithIdentifier:owner:", + "menuForEvent:", + "moveColumn:toColumn:", + "needsPanelToBecomeKey", + "noteHeightOfRowsWithIndexesChanged:", + "noteNumberOfRowsChanged", + "numberOfColumns", + "numberOfRows", + "numberOfSelectedColumns", + "numberOfSelectedRows", + "observeValueForKeyPath:ofObject:change:context:", + "performDragOperation:", + "prepareForDragOperation:", + "preparedViewAtColumn:row:", + "rectOfColumn:", + "rectOfRow:", + "reloadData", + "reloadDataForRowIndexes:columnIndexes:", + "removeTableColumn:", + "resignKeyWindow", + "resizeWithOldSuperviewSize:", + "rowAtPoint:", + "rowForView:", + "rowHeight", + "rowsInRect:", + "scrollColumnToVisible:", + "scrollRowToVisible:", + "selectAll:", + "selectColumnIndexes:byExtendingSelection:", + "selectRowIndexes:byExtendingSelection:", + "selectedColumn", + "selectedColumnIndexes", + "selectedRow", + "selectedRowIndexes", + "selectionGradientColors", + "selectionHighlightColor", + "selectionHighlightStyle", + "setAllowsColumnReordering:", + "setAllowsColumnResizing:", + "setAllowsColumnSelection:", + "setAllowsEmptySelection:", + "setAllowsMultipleSelection:", + "setAlternatingRowBackgroundColors:", + "setAutosaveName:", + "setAutosaveTableColumns:", + "setBoundsOrigin:", + "setBoundsSize:", + "setColumnAutoresizingStyle:", + "setCornerView:", + "setDataSource:", + "setDelegate:", + "setDisableAutomaticResizing:", + "setDoubleAction:", + "setDoubleClickArgument:", + "setDoubleClickTarget:", + "setDraggingDestinationFeedbackStyle:", + "setDraggingSourceOperationMask:forLocal:", + "setDropRow:dropOperation:", + "setFrameOrigin:", + "setFrameSize:", + "setGridColor:", + "setGridStyleMask:", + "setHeaderView:", + "setHighlightedTableColumn:", + "setIndicatorImage:inTableColumn:", + "setIntercellSpacing:", + "setNeedsDisplay:", + "setNeedsLayout", + "setRowHeight:", + "setSelectionGradientColors:", + "setSelectionHighlightColor:", + "setSelectionHighlightStyle:", + "setSortDescriptors:", + "setUsesAlternatingRowBackgroundColors:", + "setVerticalMotionCanBeginDrag:", + "sizeLastColumnToFit", + "sortDescriptors", + "startTrackingAt:", + "stopTracking:at:mouseIsUp:", + "superviewBoundsChanged:", + "superviewFrameChanged:", + "tableColumnWithIdentifier:", + "tableColumns", + "tile", + "trackMouse:", + "tracksMouseOutsideOfFrame", + "unfocusedSelectionGradientColors", + "unfocusedSelectionHighlightColor", + "usesAlternatingRowBackgroundColors", + "verticalMotionCanBeginDrag", + "viewAtColumn:row:makeIfNecessary:", + "viewWillMoveToSuperview:", + "viewWillMoveToWindow:", + "wantsPeriodicDraggingUpdates" + ], + "CPText": [ + "changeFont:", + "copy:", + "copyFont:", + "delete:", + "encodeWithCoder:", + "font:", + "initWithCoder:", + "isEditable", + "isHorizontallyResizable", + "isRichText", + "isRulerVisible", + "isSelectable", + "isVerticallyResizable", + "maxSize", + "minSize", + "paste:", + "pasteFont:", + "replaceCharactersInRange:withString:", + "scrollRangeToVisible:", + "selectedAll:", + "selectedRange", + "setEditable:", + "setEditable:", + "setFont:", + "setFont:range:", + "setHorizontallyResizable:", + "setMaxSize:", + "setMinSize:", + "setRichText:", + "setSelectable:", + "setSelectable:", + "setString:", + "setUsesFontPanel:", + "setVerticallyResizable:", + "string", + "underline:", + "usesFontPanel" + ], + "CPTextAttachment": [ + "bounds", + "contents", + "encodeWithCoder:", + "fileType", + "image", + "init", + "initWithCoder:", + "initWithData:ofType:", + "setBounds:", + "setContents:", + "setFileType:", + "setImage:" + ], + "CPTextContainer": [ + "containerSize", + "containsPoint:", + "encodeWithCoder:", + "heightTracksTextView", + "init", + "initWithCoder:", + "initWithContainerSize:", + "isSimpleRectangularTextContainer", + "layoutManager", + "lineFragmentPadding", + "lineFragmentRectForProposedRect:sweepDirection:movementDirection:remainingRect:", + "setContainerSize:", + "setContainerSize:", + "setHeightTracksTextView:", + "setLayoutManager:", + "setLineFragmentPadding:", + "setTextView:", + "setTextView:", + "setWidthTracksTextView:", + "textView", + "textViewFrameChanged:", + "widthTracksTextView" + ], + "CPTextField": [ + "acceptsFirstMouse:", + "acceptsFirstResponder", + "backgroundColor", + "becomeFirstResponder", + "bezelRectForBounds:", + "bezelStyle", + "contentRectForBounds:", + "copy:", + "createEphemeralSubviewNamed:", + "cursorUpdate:", + "cut:", + "delegate", + "delete:", + "deleteBackward:", + "deleteForward:", + "doCommandBySelector:", + "drawsBackground", + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "insertNewline:", + "insertNewlineIgnoringFieldEditor:", + "insertTabIgnoringFieldEditor:", + "isBezeled", + "isBordered", + "isEditable", + "isSecure", + "isSelectable", + "keyDown:", + "keyUp:", + "layoutSubviews", + "mouseDown:", + "mouseDragged:", + "mouseUp:", + "needsPanelToBecomeKey", + "objectValue", + "paste:", + "placeholderString", + "rectForEphemeralSubviewNamed:", + "resignFirstResponder", + "rightMouseDown:", + "selectAll:", + "selectText:", + "selectedRange", + "setBackgroundColor:", + "setBezelStyle:", + "setBezeled:", + "setBordered:", + "setControlSize:", + "setDelegate:", + "setDrawsBackground:", + "setEditable:", + "setEnabled:", + "setFont:", + "setObjectValue:", + "setPlaceholderString:", + "setSecure:", + "setSelectable:", + "setSelectedRange:", + "setTextColor:", + "setTextFieldBackgroundColor:", + "setValue:forThemeAttribute:", + "sizeToFit", + "takeValueFromKeyPath:ofObjects:", + "textDidBeginEditing:", + "textDidBlur:", + "textDidChange:", + "textDidEndEditing:", + "textDidFocus:", + "textFieldBackgroundColor", + "updateTrackingAreas", + "validateUserInterfaceItem:", + "viewDidHide", + "viewDidUnhide" + ], + "CPTextList": [ + "description", + "encodeWithCoder:", + "initWithCoder:", + "initWithMarkerFormat:options:", + "initWithMarkerFormat:options:startingItemNumber:", + "isOrdered", + "listOptions", + "markerForItemNumber:", + "markerFormat", + "setStartingItemNumber:", + "startingItemNumber" + ], + "CPTextStorage": [ + "addAttributes:range:", + "addLayoutManager:", + "attributedSubstringFromRange:", + "beginEditing", + "changeInLength", + "delegate", + "deleteCharactersInRange:", + "edited:range:changeInLength:", + "editedMask", + "editedRange", + "endEditing", + "font", + "foregroundColor", + "init", + "initWithString:", + "initWithString:attributes:", + "invalidateAttributesInRange:", + "layoutManagers", + "processEditing", + "removeAttribute:range:", + "removeLayoutManager:", + "replaceCharactersInRange:withAttributedString:", + "replaceCharactersInRange:withString:", + "setChangeInLength:", + "setDelegate:", + "setDelegate:", + "setEditedMask:", + "setFont:", + "setForegroundColor:" + ], + "CPTextTab": [ + "alignment", + "copy", + "encodeWithCoder:", + "initWithCoder:", + "initWithTextAlignment:location:options:", + "initWithType:location:", + "isEqual:", + "location", + "options", + "tabStopType" + ], + "CPTextView": [ + "acceptsFirstMouse:", + "acceptsFirstResponder", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "allowsUndo", + "becomeFirstResponder", + "becomeKeyWindow", + "bold:", + "cancelOperation:", + "changeColor:", + "changeFont:", + "changeTextList:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delegate", + "delete:", + "deleteBackward:", + "deleteBackward:handleSmart:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteWordBackward:", + "deleteWordForward:", + "didChangeText", + "displayRectIgnoringOpacity:inContext:", + "doCommandBySelector:", + "draggingUpdated:", + "drawInsertionPointInRect:color:turnedOn:", + "drawRect:", + "encodeWithCoder:", + "exposedRect", + "font", + "initWithCoder:", + "initWithFrame:", + "initWithFrame:textContainer:", + "insertBacktab:", + "insertImage:", + "insertLineBreak:", + "insertNewline:", + "insertNewlineIgnoringFieldEditor:", + "insertTab:", + "insertTabIgnoringFieldEditor:", + "insertText:", + "insertionPointColor", + "invalidateTextContainerOrigin", + "isEditable", + "isHorizontallyResizable", + "isRulerVisible", + "isSelectable", + "isVerticallyResizable", + "italic:", + "keyDown:", + "keyUp:", + "layoutManager", + "lowerBaseline:", + "maxSize", + "menuForEvent:", + "minSize", + "mouseDown:", + "mouseDragged:", + "mouseUp:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveLeft:", + "moveLeftAndModifySelection:", + "moveParagraphBackward:", + "moveParagraphBackwardAndModifySelection:", + "moveParagraphForward:", + "moveParagraphForwardAndModifySelection:", + "moveRight:", + "moveRightAndModifySelection:", + "moveToBeginningOfDocument:", + "moveToBeginningOfDocumentAndModifySelection:", + "moveToBeginningOfParagraph:", + "moveToBeginningOfParagraphAndModifySelection:", + "moveToEndOfDocument:", + "moveToEndOfDocumentAndModifySelection:", + "moveToEndOfParagraph:", + "moveToEndOfParagraphAndModifySelection:", + "moveToLeftEndOfLine:", + "moveToLeftEndOfLine:byExtending:", + "moveToLeftEndOfLineAndModifySelection:", + "moveToRightEndOfLine:", + "moveToRightEndOfLine:byExtending:", + "moveToRightEndOfLineAndModifySelection:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "moveWordLeft:", + "moveWordLeftAndModifySelection:", + "moveWordRight:", + "moveWordRightAndModifySelection:", + "needsPanelToBecomeKey", + "objectValue", + "paste:", + "pasteAsPlainText:", + "pasteFont:", + "pasteRuler:", + "performDragOperation:", + "raiseBaseline:", + "redo:", + "replaceCharactersInRange:withString:", + "resignFirstResponder", + "resignKeyWindow", + "respondsToSelector:", + "rulerView:didAddMarker:", + "rulerView:didMoveMarker:", + "rulerView:didRemoveMarker:", + "rulerView:handleMouseDown:", + "rulerView:shouldAddMarker:", + "rulerView:shouldMoveMarker:", + "rulerView:shouldRemoveMarker:", + "rulerView:willAddMarker:atLocation:", + "rulerView:willMoveMarker:toLocation:", + "scrollRangeToVisible:", + "selectAll:", + "selectedRange", + "selectedRanges", + "selectedTextAttributes", + "selectionAffinity", + "selectionGranularity", + "selectionRangeForProposedRange:granularity:", + "setAllowsUndo:", + "setBoundsSize:", + "setConstrainedFrameSize:", + "setDelegate:", + "setDelegate:", + "setFont:", + "setFont:range:", + "setFrameSize:", + "setHorizontallyResizable:", + "setInsertionPointColor:", + "setMaxSize:", + "setMinSize:", + "setObjectValue:", + "setRulerVisible:", + "setSelectedRange:", + "setSelectedRange:affinity:stillSelecting:", + "setSelectedTextAttributes:", + "setSelectionGranularity:", + "setString:", + "setTextColor:", + "setTextColor:", + "setTextColor:range:", + "setTextContainer:", + "setTextContainer:", + "setTextContainerInset:", + "setTextContainerInset:", + "setTextList:", + "setTypingAttributes:", + "setTypingAttributes:", + "setUsesFontPanel:", + "setUsesRuler:", + "setVerticallyResizable:", + "shouldChangeTextInRange:replacementString:", + "shouldDrawInsertionPoint", + "sizeToFit", + "string", + "stringValue", + "subscript:", + "superscript:", + "superviewBoundsChanged:", + "superviewFrameChanged:", + "textColor", + "textContainer", + "textContainerInset", + "textContainerOrigin", + "textStorage", + "toggleRuler:", + "typingAttributes", + "underline:", + "undo:", + "unscript:", + "updateInsertionPointStateAndRestartTimer:", + "updateRuler", + "usesFontPanel", + "usesRuler", + "validateUserInterfaceItem:", + "viewWillMoveToSuperview:" + ], + "CPTheme": [ + "applyDynamicSet:", + "attributeNamesForClass:", + "attributeWithName:forClass:", + "attributesForClass:", + "classNames", + "encodeWithCoder:", + "initWithCoder:", + "initWithName:", + "isCSSBased", + "name", + "setCSSResourcesPath:", + "takeThemeFromObject:", + "valueForAttributeWithName:forClass:", + "valueForAttributeWithName:inState:forClass:" + ], + "CPThemeBlend": [ + "bundle", + "bundleDidFinishLoading:", + "initWithContentsOfURL:", + "loadWithDelegate:", + "themeNames", + "themes" + ], + "CPThreePartImage": [ + "encodeWithCoder:", + "filename", + "imageSlices", + "initWithCoder:", + "initWithImageSlices:isVertical:", + "isNinePartImage", + "isSingleImage", + "isThreePartImage", + "isVertical" + ], + "CPTimeZone": [ + "abbreviation", + "abbreviationForDate:", + "data", + "daylightSavingTimeOffset", + "daylightSavingTimeOffsetForDate:", + "description", + "initWithName:", + "initWithName:data:", + "isDaylightSavingTime", + "isDaylightSavingTimeForDate:", + "isEqualToTimeZone:", + "localizedName:locale:", + "name", + "secondFromGMT", + "secondsFromGMT", + "secondsFromGMTForDate:" + ], + "CPTimer": [ + "fire", + "fireDate", + "initWithFireDate:interval:callback:repeats:", + "initWithFireDate:interval:invocation:repeats:", + "initWithFireDate:interval:target:selector:userInfo:repeats:", + "invalidate", + "isValid", + "setFireDate:", + "timeInterval", + "userInfo" + ], + "CPTitleWithPatternBinding": [ + "init" + ], + "CPTokenField": [ + "becomeFirstResponder", + "buttonType", + "cancelOperation:", + "completionDelay", + "deleteBackward:", + "deleteForward:", + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "insertNewline:", + "insertTab:", + "insertText:", + "keyDown:", + "keyUp:", + "layoutSubviews", + "mouseDown:", + "mouseUp:", + "moveDown:", + "moveLeft:", + "moveLeftAndModifySelection:", + "moveRight:", + "moveRightAndModifySelection:", + "moveUp:", + "objectValue", + "performKeyEquivalent:", + "resignFirstResponder", + "sendAction:to:", + "setButtonType:", + "setButtonType:", + "setCompletionDelay:", + "setDelegate:", + "setEditable:", + "setEnabled:", + "setObjectValue:", + "setTokenizingCharacterSet:", + "stringValue", + "textDidChange:", + "tokenizingCharacterSet" + ], + "CPToolbar": [ + "delegate", + "displayMode", + "encodeWithCoder:", + "identifier", + "init", + "initWithCoder:", + "initWithIdentifier:", + "isVisible", + "items", + "itemsSortedByVisibilityPriority", + "setDelegate:", + "setDisplayMode:", + "setDisplayMode:", + "setSizeMode:", + "setSizeMode:", + "setVisible:", + "sizeMode", + "toolbarItemDidChange:", + "validateVisibleItems", + "visibleItems" + ], + "CPToolbarItem": [ + "action", + "alternateImage", + "autovalidates", + "copy", + "encodeWithCoder:", + "image", + "init", + "initWithCoder:", + "initWithItemIdentifier:", + "isEnabled", + "itemIdentifier", + "label", + "maxSize", + "minSize", + "paletteLabel", + "setAction:", + "setAlternateImage:", + "setAutovalidates:", + "setEnabled:", + "setImage:", + "setLabel:", + "setMaxSize:", + "setMinSize:", + "setPaletteLabel:", + "setTag:", + "setTarget:", + "setToolTip:", + "setView:", + "setVisibilityPriority:", + "tag", + "target", + "toolTip", + "toolbar", + "validate", + "view", + "visibilityPriority" + ], + "CPTrackingArea": [ + "encodeWithCoder:", + "implementedOwnerMethods", + "initWithCoder:", + "initWithRect:options:owner:userInfo:", + "options", + "owner", + "rect", + "setView:", + "userInfo", + "view", + "windowRect" + ], + "CPTreeController": [ + "add:", + "addChild:", + "addSelectionIndexPaths:", + "alwaysUsesMultipleValuesMarker", + "arrangedObjects", + "avoidsEmptySelection", + "awakeFromCib", + "canAddChild", + "canInsert", + "canInsertChild", + "childrenKeyPath", + "childrenKeyPathForNode:", + "contentArray", + "countKeyPath", + "countKeyPathForNode:", + "encodeWithCoder:", + "init", + "initWithCoder:", + "insert:", + "insertChild:", + "insertObject:atArrangedObjectIndexPath:", + "insertObjects:atArrangedObjectIndexPaths:", + "leafKeyPath", + "leafKeyPathForNode:", + "moveNode:toIndexPath:", + "moveNodes:toIndexPath:", + "prepareContent", + "preservesSelection", + "rearrangeObjects", + "remove:", + "removeObjectAtArrangedObjectIndexPath:", + "removeObjectsAtArrangedObjectIndexPaths:", + "removeSelectionIndexPaths:", + "selectedNodes", + "selectedObjects", + "selectionIndexPath", + "selectionIndexPaths", + "selectsInsertedObjects", + "setAlwaysUsesMultipleValuesMarker:", + "setAvoidsEmptySelection:", + "setChildrenKeyPath:", + "setContent:", + "setCountKeyPath:", + "setLeafKeyPath:", + "setPreservesSelection:", + "setSelectionIndexPath:", + "setSelectionIndexPaths:", + "setSelectsInsertedObjects:", + "setSortDescriptors:", + "sortDescriptors" + ], + "CPTreeNode": [ + "childNodes", + "countOfChildNodes", + "descendantNodeAtIndexPath:", + "encodeWithCoder:", + "indexPath", + "init", + "initWithCoder:", + "initWithRepresentedObject:", + "insertObject:inChildNodesAtIndex:", + "isLeaf", + "mutableChildNodes", + "objectInChildNodesAtIndex:", + "parentNode", + "removeObjectFromChildNodesAtIndex:", + "replaceObjectInChildNodesAtIndex:withObject:", + "representedObject", + "sortWithSortDescriptors:recursively:" + ], + "CPTypesetter": [ + "actionForControlCharacterAtIndex:", + "currentTextContainer", + "layoutGlyphsInLayoutManager:startingAtGlyphIndex:maxNumberOfLineFragments:nextGlyphIndex:", + "layoutManager", + "textContainers" + ], + "CPURL": [ + "URLByDeletingLastPathComponent", + "absoluteString", + "absoluteURL", + "baseURL", + "description", + "encodeWithCoder:", + "fragment", + "host", + "init", + "initWithCoder:", + "initWithScheme:host:path:", + "initWithString:", + "initWithString:relativeToURL:", + "isEqual:", + "isEqualToURL:", + "isFileURL", + "lastPathComponent", + "parameterString", + "password", + "path", + "pathComponents", + "pathExtension", + "port", + "relativePath", + "relativeString", + "resourceValueForKey:", + "scheme", + "setResourceValue:forKey:", + "standardizedURL", + "staticResourceData", + "user" + ], + "CPURLConnection": [ + "cancel", + "currentRequest", + "delegate", + "initWithRequest:delegate:", + "initWithRequest:delegate:startImmediately:", + "isLocalFileConnection", + "operation", + "originalRequest", + "start" + ], + "CPURLRequest": [ + "HTTPBody", + "HTTPMethod", + "URL", + "allHTTPHeaderFields", + "cachePolicy", + "copy", + "init", + "initWithURL:", + "initWithURL:cachePolicy:timeoutInterval:", + "setHTTPBody:", + "setHTTPMethod:", + "setURL:", + "setURL:", + "setValue:forHTTPHeaderField:", + "setWithCredentials:", + "timeoutInterval", + "valueForHTTPHeaderField:", + "withCredentials" + ], + "CPURLResponse": [ + "URL", + "initWithURL:" + ], + "CPUnarchiveFromDataTransformer": [ + "reverseTransformedValue:", + "transformedValue:" + ], + "CPUndoManager": [ + "beginUndoGrouping", + "canRedo", + "canUndo", + "disableUndoRegistration", + "enableUndoRegistration", + "encodeWithCoder:", + "endUndoGrouping", + "groupingLevel", + "groupsByEvent", + "init", + "initWithCoder:", + "isRedoing", + "isUndoRegistrationEnabled", + "isUndoing", + "observeChangesForKeyPath:ofObject:", + "observeValueForKeyPath:ofObject:change:context:", + "prepareWithInvocationTarget:", + "redo", + "redoActionName", + "redoMenuItemTitle", + "redoMenuTitleForUndoActionName:", + "registerUndoWithTarget:selector:object:", + "removeAllActions", + "removeAllActionsWithTarget:", + "runLoopModes", + "setActionName:", + "setGroupsByEvent:", + "setRunLoopModes:", + "stopObservingChangesForKeyPath:ofObject:", + "undo", + "undoActionName", + "undoMenuItemTitle", + "undoMenuTitleForUndoActionName:", + "undoNestedGroup" + ], + "CPUserDefaults": [ + "URLForKey:", + "arrayForKey:", + "boolForKey:", + "dataForKey:", + "dictionaryForKey:", + "domainDidChange:", + "doubleForKey:", + "floatForKey:", + "init", + "integerForKey:", + "objectForKey:", + "objectForKey:inDomain:", + "persistentDomainNames", + "persistentStoreForDomain:", + "registerDefaults:", + "registerDefaultsFromContentsOfFile:", + "reloadDataFromStoreForDomain:", + "removeObjectForKey:", + "removeObjectForKey:inDomain:", + "setBool:forKey:", + "setDouble:forKey:", + "setFloat:forKey:", + "setInteger:forKey:", + "setObject:forKey:", + "setObject:forKey:inDomain:", + "setPersistentStoreClass:forDomain:reloadData:", + "setURL:forKey:", + "stringArrayForKey:", + "stringForKey:", + "synchronize", + "volatileDomainNames" + ], + "CPUserDefaultsController": [ + "appliesImmediately", + "defaults", + "encodeWithCoder:", + "hasUnappliedChanges", + "initWithCoder:", + "initWithDefaults:initialValues:", + "initialValues", + "revert:", + "revertToInitialValues:", + "save:", + "setAppliesImmediately:", + "setInitialValues:", + "values" + ], + "CPUserDefaultsCookieStore": [ + "data", + "setData:", + "setDomain:" + ], + "CPUserDefaultsLocalStore": [ + "data", + "init", + "setData:" + ], + "CPUserDefaultsStore": [ + "data", + "domain", + "setData:", + "setDomain:" + ], + "CPUserNotification": [ + "activationType", + "actualDeliveryDate", + "contentImage", + "deliveryDate", + "deliveryRepeatInterval", + "deliveryTimeZone", + "identifier", + "informativeText", + "init", + "isPresented", + "isRemote", + "setContentImage:", + "setDeliveryDate:", + "setDeliveryRepeatInterval:", + "setDeliveryTimeZone:", + "setIdentifier:", + "setInformativeText:", + "setTitle:", + "setUserInfo:", + "title", + "userInfo" + ], + "CPUserNotificationCenter": [ + "deliverNotification:", + "deliveredNotifications", + "init", + "removeAllDeliveredNotifications", + "removeDeliveredNotification:", + "removeScheduledNotification:", + "scheduleNotification:", + "scheduledNotifications", + "setDelegate:", + "setDeliveredNotifications:", + "setScheduledNotifications:" + ], + "CPUserSessionManager": [ + "init", + "setStatus:", + "setUserIdentifier:", + "status", + "userIdentifier" + ], + "CPValue": [ + "JSObject", + "encodeWithCoder:", + "initWithCoder:", + "initWithJSObject:" + ], + "CPValueTransformer": [ + "reverseTransformedValue:", + "transformedValue:" + ], + "CPValueWithPatternBinding": [ + "init" + ], + "CPView": [ + "acceptsFirstMouse:", + "addSubview:", + "addSubview:positioned:relativeTo:", + "addTrackingArea:", + "adjustScroll:", + "allowsVibrancy", + "alphaValue", + "animationForKey:", + "animations", + "animator", + "appearance", + "autoresizesSubviews", + "autoresizingMask", + "autoscroll:", + "backgroundColor", + "becomeFirstResponder", + "bounds", + "boundsOrigin", + "boundsSize", + "canBecomeKeyView", + "center", + "clipsToBounds", + "convertPoint:fromView:", + "convertPoint:toView:", + "convertPointFromBase:", + "convertPointToBase:", + "convertRect:fromView:", + "convertRect:toView:", + "convertRectFromBase:", + "convertRectToBase:", + "convertSize:fromView:", + "convertSize:toView:", + "createEphemeralSubviewNamed:", + "debug_description", + "didAddSubview:", + "display", + "displayIfNeeded", + "displayIfNeededInRect:", + "displayRect:", + "displayRectIgnoringOpacity:inContext:", + "dragImage:at:offset:event:pasteboard:source:slideBack:", + "dragView:at:offset:event:pasteboard:source:slideBack:", + "drawRect:", + "effectiveAppearance", + "enclosingMenuItem", + "enclosingScrollView", + "encodeWithCoder:", + "enterFullScreenMode", + "enterFullScreenMode:withOptions:", + "ephemeralSubviewNamed:", + "exitFullScreenMode", + "exitFullScreenModeWithOptions:", + "frame", + "frameOrigin", + "frameRectOfView:inSuperviewSize:", + "frameSize", + "frameWithNewSuperviewSize:", + "hasCustomDrawRect", + "hasCustomLayoutSubviews", + "hitTest:", + "hitTests", + "identifier", + "inLiveResize", + "init", + "initWithCoder:", + "initWithFrame:", + "isCSSBased", + "isDescendantOf:", + "isFlipped", + "isHidden", + "isHiddenOrHasHiddenAncestor", + "isInFullScreenMode", + "isOpaque", + "layer", + "layout", + "layoutEphemeralSubviewNamed:positioned:relativeToEphemeralSubviewNamed:", + "layoutIfNeeded", + "layoutSubviews", + "lockFocus", + "menuForEvent:", + "mouseDown:", + "mouseDownCanMoveWindow", + "needsDisplay", + "needsLayout", + "needsPanelToBecomeKey", + "nextKeyView", + "nextValidKeyView", + "objectDidChangeTheme", + "performKeyEquivalent:", + "postsBoundsChangedNotifications", + "postsFrameChangedNotifications", + "previousKeyView", + "previousValidKeyView", + "rectForEphemeralSubviewNamed:", + "reflectScrolledClipView:", + "registerForDraggedTypes:", + "registeredDraggedTypes", + "removeFromSuperview", + "removeTrackingArea:", + "replaceSubview:with:", + "resignFirstResponder", + "resizeSubviewsWithOldSize:", + "resizeWithOldSuperviewSize:", + "rightMouseDown:", + "rotateByAngle:", + "scaleSize", + "scaleUnitSquareToSize:", + "scrollClipView:toPoint:", + "scrollPoint:", + "scrollRect:by:", + "scrollRectToVisible:", + "setAllowsVibrancy:", + "setAlphaValue:", + "setAnimations:", + "setAppearance:", + "setAutoresizesSubviews:", + "setAutoresizingMask:", + "setBackgroundColor:", + "setBounds:", + "setBoundsOrigin:", + "setBoundsSize:", + "setCenter:", + "setClipsToBounds:", + "setDOMClassName:", + "setFrame:", + "setFrameOrigin:", + "setFrameSize:", + "setHidden:", + "setHitTests:", + "setIdentifier:", + "setLayer:", + "setNeedsDisplay:", + "setNeedsDisplayInRect:", + "setNeedsLayout", + "setNeedsLayout:", + "setNextKeyView:", + "setPostsBoundsChangedNotifications:", + "setPostsFrameChangedNotifications:", + "setScaleSize:", + "setSubviews:", + "setTag:", + "setThemeClass:", + "setThemeState:", + "setToolTip:", + "setValue:forThemeAttribute:", + "setValue:forThemeAttribute:inState:", + "setWantsLayer:", + "subviews", + "superview", + "tag", + "toolTip", + "trackingAreas", + "unlockFocus", + "unregisterDraggedTypes", + "unsetThemeState:", + "updateTrackingAreas", + "viewDidEndLiveResize", + "viewDidHide", + "viewDidLayout", + "viewDidMoveToSuperview", + "viewDidMoveToWindow", + "viewDidUnhide", + "viewWillDraw", + "viewWillLayout", + "viewWillMoveToSuperview:", + "viewWillMoveToWindow:", + "viewWillStartLiveResize", + "viewWithTag:", + "visibleRect", + "wantsLayer", + "willRemoveSubview:", + "window" + ], + "CPViewAnimation": [ + "initWithViewAnimations:", + "setCurrentProgress:", + "setViewAnimations:", + "startAnimation", + "stopAnimation", + "viewAnimations" + ], + "CPViewAnimator": [ + "initWithTarget:", + "needsPeriodicFrameUpdatesForKeyPath:", + "removeFromSuperview", + "setAlphaValue:", + "setBackgroundColor:", + "setFrame:", + "setFrameOrigin:", + "setFrameSize:", + "setHidden:", + "setWantsPeriodicFrameUpdates:", + "wantsPeriodicFrameUpdates" + ], + "CPViewController": [ + "automaticallyNotifiesObserversOfIsViewLoaded", + "cibBundle", + "cibExternalNameTable", + "cibName", + "encodeWithCoder:", + "init", + "initWithCibName:bundle:", + "initWithCibName:bundle:externalNameTable:", + "initWithCibName:bundle:owner:", + "initWithCoder:", + "isViewLoaded", + "loadView", + "loadViewWithCompletionHandler:", + "nextResponder", + "representedObject", + "setRepresentedObject:", + "setTitle:", + "setView:", + "setView:", + "title", + "view", + "view", + "viewDidAppear", + "viewDidDisappear", + "viewDidLoad", + "viewWillAppear", + "viewWillDisappear" + ], + "CPVisualEffectView": [ + "blendingMode", + "encodeWithCoder:", + "initWithCoder:", + "initWithFrame:", + "layoutSubviews", + "maskImage", + "material", + "setAppearance:", + "setBlendingMode:", + "setMaskImage:", + "setMaterial:", + "setState:", + "setState:", + "state" + ], + "CPWebScriptObject": [ + "callWebScriptMethod:withArguments:", + "evaluateWebScript:", + "initWithWindow:", + "window" + ], + "CPWebView": [ + "DOMWindow", + "UIDelegate", + "backForwardList", + "canGoBack", + "canGoForward", + "close", + "computedStyleForElement:pseudoElement:", + "downloadDelegate", + "drawsBackground", + "effectiveScrollMode", + "encodeWithCoder:", + "frameLoadDelegate", + "goBack", + "goBack:", + "goForward", + "goForward:", + "initWithCoder:", + "initWithFrame:", + "initWithFrame:frameName:groupName:", + "isLoading", + "loadHTMLString:", + "loadHTMLString:baseURL:", + "mainFrameURL", + "objectByEvaluatingJavaScriptFromString:", + "policyDelegate", + "print:", + "reload:", + "resourceLoadDelegate", + "setBackgroundColor:", + "setDownloadDelegate:", + "setDrawsBackground:", + "setFrameLoadDelegate:", + "setFrameSize:", + "setMainFrameURL:", + "setPolicyDelegate:", + "setResourceLoadDelegate:", + "setScrollMode:", + "setUIDelegate:", + "stopLoading:", + "stringByEvaluatingJavaScriptFromString:", + "takeStringURLFrom:", + "viewDidUnhide", + "windowScriptObject" + ], + "CPWindow": [ + "acceptsFirstResponder", + "acceptsMouseMovedEvents", + "addChildWindow:ordered:", + "alphaValue", + "animationDidEnd:", + "animationResizeTime:", + "attachedSheet", + "autorecalculatesKeyViewLoop", + "autoresizingMask", + "awakeFromCib", + "backgroundColor", + "becomeKeyWindow", + "becomeMainWindow", + "becomesKeyOnlyIfNeeded", + "canBecomeKeyWindow", + "canBecomeMainWindow", + "center", + "childWindows", + "close", + "containsPoint:", + "contentRectForFrameRect:", + "contentView", + "convertBaseToBridge:", + "convertBaseToGlobal:", + "convertBaseToPlatformWindow:", + "convertBaseToScreen:", + "convertBridgeToBase:", + "convertGlobalToBase:", + "convertPlatformWindowToBase:", + "convertScreenToBase:", + "defaultButton", + "defaultButtonCell", + "delegate", + "deminiaturize:", + "disableKeyEquivalentForDefaultButton", + "disableKeyEquivalentForDefaultButtonCell", + "doCommandBySelector:", + "dragImage:at:offset:event:pasteboard:source:slideBack:", + "dragView:at:offset:event:pasteboard:source:slideBack:", + "enableKeyEquivalentForDefaultButton", + "enableKeyEquivalentForDefaultButtonCell", + "firstResponder", + "frame", + "frameRectForContentRect:", + "hasShadow", + "ignoresMouseEvents", + "init", + "initWithContentRect:styleMask:", + "initialFirstResponder", + "isDocumentEdited", + "isDocumentSaving", + "isExcludedFromWindowsMenu", + "isFullBridge", + "isFullPlatformWindow", + "isKeyWindow", + "isMainWindow", + "isMiniaturized", + "isMovable", + "isMovableByWindowBackground", + "isSheet", + "isVisible", + "keyDown:", + "level", + "makeFirstResponder:", + "makeKeyAndOrderFront:", + "makeKeyWindow", + "makeMainWindow", + "maxSize", + "minSize", + "miniaturize:", + "orderBack:", + "orderFront:", + "orderOut:", + "orderWindow:relativeTo:", + "parentWindow", + "performClose:", + "performKeyEquivalent:", + "performMiniaturize:", + "platformWindow", + "recalculateKeyViewLoop", + "redo:", + "registerForDraggedTypes:", + "registeredDraggedTypes", + "releasedWhenClosed", + "removeChildWindow:", + "representedFilename", + "representedURL", + "resignKeyWindow", + "resignMainWindow", + "resizeIndicatorOffset", + "resizeWithOldPlatformWindowSize:", + "screen", + "selectKeyViewFollowingView:", + "selectKeyViewPrecedingView:", + "selectNextKeyView:", + "selectPreviousKeyView:", + "sendEvent:", + "setAcceptsMouseMovedEvents:", + "setAlphaValue:", + "setAutorecalculatesKeyViewLoop:", + "setAutoresizingMask:", + "setBackgroundColor:", + "setContentView:", + "setDefaultButton:", + "setDefaultButtonCell:", + "setDelegate:", + "setDocumentEdited:", + "setDocumentSaving:", + "setExcludedFromWindowsMenu:", + "setFrame:", + "setFrame:display:", + "setFrame:display:animate:", + "setFrameOrigin:", + "setFrameSize:", + "setFullBridge:", + "setFullPlatformWindow:", + "setHasShadow:", + "setIgnoresMouseEvents:", + "setInitialFirstResponder:", + "setLevel:", + "setMaxSize:", + "setMinSize:", + "setMovable:", + "setMovableByWindowBackground:", + "setParentWindow:", + "setPlatformWindow:", + "setReleasedWhenClosed:", + "setRepresentedFilename:", + "setRepresentedURL:", + "setResizeIndicatorOffset:", + "setShadowStyle:", + "setShowsResizeIndicator:", + "setTitle:", + "setTitleWithRepresentedFilename:", + "setToolbar:", + "setValue:forKey:", + "setWindowController:", + "showsResizeIndicator", + "styleMask", + "title", + "toggleToolbarShown:", + "toolbar", + "undo:", + "undoManager", + "unregisterDraggedTypes", + "validateUserInterfaceItem:", + "windowController", + "windowNumber", + "worksWhenModal" + ], + "CPWindowController": [ + "addDocument:", + "close", + "document", + "documents", + "init", + "initWithWindow:", + "initWithWindowCibName:", + "initWithWindowCibName:owner:", + "initWithWindowCibPath:owner:", + "isWindowLoaded", + "loadWindow", + "owner", + "removeDocument:", + "removeDocumentAndCloseIfNecessary:", + "setDocument:", + "setDocumentEdited:", + "setShouldCloseDocument:", + "setSupportsMultipleDocuments:", + "setViewController:", + "setViewControllerContainerView:", + "setWindow:", + "shouldCloseDocument", + "showWindow:", + "supportsMultipleDocuments", + "synchronizeWindowTitleWithDocumentName", + "viewController", + "viewControllerContainerView", + "window", + "windowCibName", + "windowCibPath", + "windowDidLoad", + "windowTitleForDocumentDisplayName:", + "windowWillLoad" + ], + "CPWorkspace": [ + "openFile:", + "openURL:" + ], + "HandImageLayer": [ + "hitTest:", + "setBounds:" + ], + "HandLayer": [ + "drawLayer:inContext:", + "handIsHitAtPoint:", + "imageDidLoad:", + "initWithSize:", + "setBounds:", + "setImage:", + "setNeedsDisplay", + "setRotationRadians:" + ], + "HoursLayer": [ + "drawInContext:", + "font", + "init", + "radius", + "setDrawsHours:", + "setFont:", + "setRadius:", + "setTextColor:", + "textColor" + ] + }, + "classMethods": { + "CAAnimation": [ + "animation", + "defaultValueForKey:" + ], + "CABasicAnimation": [], + "CAKeyframeAnimation": [], + "CALayer": [ + "layer", + "runLoopUpdateLayers" + ], + "CAMediaTimingFunction": [ + "functionWithControlPoints::::", + "functionWithName:" + ], + "CAPropertyAnimation": [ + "animationWithKeyPath:" + ], + "CPAccordionView": [], + "CPAccordionViewItem": [], + "CPActionBinding": [], + "CPAlert": [ + "alertWithError:", + "alertWithMessageText:defaultButton:alternateButton:otherButton:informativeTextWithFormat:" + ], + "CPAnimation": [], + "CPAnimationContext": [ + "beginGrouping", + "contextStack", + "currentContext", + "endGrouping", + "runAnimationGroup:completionHandler:" + ], + "CPAppearance": [ + "appearanceNamed:", + "currentAppearance", + "setCurrentAppearance:" + ], + "CPApplication": [ + "defaultThemeName", + "sharedApplication" + ], + "CPArray": [ + "alloc", + "array", + "arrayWithArray:", + "arrayWithObject:", + "arrayWithObjects:", + "arrayWithObjects:count:" + ], + "CPArrayController": [ + "initialize", + "keyPathsForValuesAffectingArrangedObjects", + "keyPathsForValuesAffectingCanRemove", + "keyPathsForValuesAffectingCanSelectNext", + "keyPathsForValuesAffectingCanSelectPrevious", + "keyPathsForValuesAffectingContentArray", + "keyPathsForValuesAffectingSelectedObjects", + "keyPathsForValuesAffectingSelection", + "keyPathsForValuesAffectingSelectionIndex", + "keyPathsForValuesAffectingSelectionIndexes" + ], + "CPAttributedString": [], + "CPBasePlatform": [ + "activateIgnoringOtherApps:", + "bootstrap", + "deactivate", + "hide:", + "hideOtherApplications:", + "isBrowser", + "supportsDragAndDrop", + "supportsNativeMainMenu", + "terminateApplication" + ], + "CPBasePlatformString": [ + "bootstrap", + "sizeOfString:withFont:forWidth:" + ], + "CPBezierPath": [ + "bezierPath", + "bezierPathWithOvalInRect:", + "bezierPathWithRect:", + "bezierPathWithRoundedRect:xRadius:yRadius:", + "defaultLineWidth", + "fillRect:", + "setDefaultLineWidth:", + "strokeLineFromPoint:toPoint:", + "strokeRect:" + ], + "CPBinder": [ + "allBindingsForObject:", + "exposeBinding:forClass:", + "exposedBindingsForClass:", + "getBinding:forObject:", + "infoForBinding:forObject:", + "isBindingAllowed:forObject:", + "unbind:forObject:", + "unbindAllForObject:" + ], + "CPBox": [ + "boxEnclosingView:", + "defaultThemeClass", + "themeAttributes" + ], + "CPBrowser": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPBundle": [ + "bundleForClass:", + "bundleWithIdentifier:", + "bundleWithPath:", + "bundleWithURL:", + "loadCibFile:externalNameTable:", + "loadCibFile:externalNameTable:loadDelegate:", + "loadCibNamed:owner:", + "loadCibNamed:owner:loadDelegate:", + "mainBundle" + ], + "CPButton": [ + "buttonWithTitle:", + "buttonWithTitle:theme:", + "defaultThemeClass", + "themeAttributes" + ], + "CPButtonBar": [ + "actionPopupButton", + "defaultThemeClass", + "minusButton", + "plusButton", + "themeAttributes" + ], + "CPByteCountFormatter": [ + "stringFromByteCount:countStyle:" + ], + "CPCache": [], + "CPCharacterSet": [ + "alphanumericCharacterSet", + "characterSetWithCharactersInString:", + "characterSetWithRange:", + "controlCharacterSet", + "decimalDigitCharacterSet", + "decomposableCharacterSet", + "illegalCharacterSet", + "letterCharacterSet", + "lowercaseLetterCharacterSet", + "nonBaseCharacterSet", + "punctuationCharacterSet", + "uppercaseLetterCharacterSet", + "whitespaceAndNewlineCharacterSet", + "whitespaceCharacterSet" + ], + "CPCheckBox": [ + "checkBoxWithTitle:", + "checkBoxWithTitle:theme:", + "defaultThemeClass" + ], + "CPCib": [], + "CPCibBindingConnector": [], + "CPCibConnector": [], + "CPCibControlConnector": [], + "CPCibHelpConnector": [], + "CPCibOutletConnector": [], + "CPCibRuntimeAttributesConnector": [], + "CPClipView": [], + "CPCoder": [], + "CPCollectionView": [], + "CPCollectionViewItem": [], + "CPColor": [ + "alternateSelectedControlColor", + "blackColor", + "blueColor", + "brownColor", + "checkerBoardColor", + "clearColor", + "colorWithCSSDictionary:", + "colorWithCSSDictionary:beforeDictionary:afterDictionary:", + "colorWithCSSString:", + "colorWithCalibratedHue:saturation:brightness:alpha:", + "colorWithCalibratedRed:green:blue:alpha:", + "colorWithCalibratedWhite:alpha:", + "colorWithHexString:", + "colorWithHue:saturation:brightness:", + "colorWithHue:saturation:brightness:alpha:", + "colorWithPatternImage:", + "colorWithRed:green:blue:alpha:", + "colorWithSRGBRed:green:blue:alpha:", + "colorWithWhite:alpha:", + "cyanColor", + "darkGrayColor", + "defaultThemeClass", + "grayColor", + "greenColor", + "lightGrayColor", + "magentaColor", + "orangeColor", + "purpleColor", + "randomColor", + "redColor", + "restorePreviousCSSState:forDOMElement:", + "secondarySelectedControlColor", + "selectedTextBackgroundColor", + "shadowColor", + "themeAttributes", + "whiteColor", + "yellowColor" + ], + "CPColorPanel": [ + "provideColorPickerClass:", + "setPickerMode:", + "sharedColorPanel" + ], + "CPColorPicker": [], + "CPColorSpace": [ + "sRGBColorSpace" + ], + "CPColorWell": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPColorWellValueBinder": [], + "CPColorWheelColorPicker": [], + "CPComboBox": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPComparisonPredicate": [ + "predicateWithLeftExpression:rightExpression:customSelector:", + "predicateWithLeftExpression:rightExpression:modifier:type:options:" + ], + "CPCompoundPredicate": [ + "andPredicateWithSubpredicates:", + "notPredicateWithSubpredicate:", + "orPredicateWithSubpredicates:" + ], + "CPControl": [ + "initialize", + "themeAttributes" + ], + "CPController": [], + "CPControllerSelectionProxy": [], + "CPCookie": [], + "CPCountedSet": [], + "CPCursor": [ + "IBeamCursor", + "IBeamCursorForVerticalLayout", + "arrowCursor", + "closedHandCursor", + "contextualMenuCursor", + "crosshairCursor", + "currentCursor", + "disappearingItemCursor", + "dragCopyCursor", + "dragLinkCursor", + "hide", + "initialize", + "openHandCursor", + "operationNotAllowedCursor", + "pointingHandCursor", + "pop", + "resizeDownCursor", + "resizeEastWestCursor", + "resizeLeftCursor", + "resizeLeftRightCursor", + "resizeNorthSouthCursor", + "resizeNortheastCursor", + "resizeNortheastSouthwestCursor", + "resizeNorthwestCursor", + "resizeNorthwestSoutheastCursor", + "resizeRightCursor", + "resizeSoutheastCursor", + "resizeSouthwestCursor", + "resizeUpCursor", + "resizeUpDownCursor", + "setHiddenUntilMouseMoves:", + "unhide" + ], + "CPDOMWindowLayer": [], + "CPData": [ + "alloc", + "data", + "dataWithBase64:", + "dataWithBytes:", + "dataWithJSONObject:", + "dataWithPlistObject:", + "dataWithPlistObject:format:", + "dataWithRawString:", + "dataWithString:" + ], + "CPDate": [ + "alloc", + "date", + "dateWithTimeIntervalSince1970:", + "dateWithTimeIntervalSinceNow:", + "dateWithTimeIntervalSinceReferenceDate:", + "distantFuture", + "distantPast", + "timeIntervalSinceReferenceDate", + "timezoneOffsetString:" + ], + "CPDateFormatter": [ + "dateFormatFromTemplate:options:locale:", + "defaultFormatterBehavior", + "initialize", + "localizedStringFromDate:dateStyle:timeStyle:", + "setDefaultFormatterBehavior:" + ], + "CPDatePicker": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPDecimalNumber": [ + "alloc", + "decimalNumberWithDecimal:", + "decimalNumberWithMantissa:exponent:isNegative:", + "decimalNumberWithString:", + "decimalNumberWithString:locale:", + "defaultBehavior", + "maximumDecimalNumber", + "minimumDecimalNumber", + "notANumber", + "numberWithBool:", + "numberWithChar:", + "numberWithDouble:", + "numberWithFloat:", + "numberWithInt:", + "numberWithLong:", + "numberWithLongLong:", + "numberWithShort:", + "numberWithUnsignedChar:", + "numberWithUnsignedInt:", + "numberWithUnsignedLong:", + "numberWithUnsignedLongLong:", + "numberWithUnsignedShort:", + "one", + "setDefaultBehavior:", + "zero" + ], + "CPDecimalNumberHandler": [ + "decimalNumberHandlerWithRoundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:", + "defaultDecimalNumberHandler" + ], + "CPDelayedPerform": [ + "delayedPerformWithObject:selector:argument:" + ], + "CPDictionary": [ + "alloc", + "dictionary", + "dictionaryWithDictionary:", + "dictionaryWithJSObject:", + "dictionaryWithJSObject:recursively:", + "dictionaryWithObject:forKey:", + "dictionaryWithObjects:forKeys:", + "dictionaryWithObjectsAndKeys:" + ], + "CPDisclosureButton": [], + "CPDocument": [], + "CPDocumentController": [ + "sharedDocumentController" + ], + "CPDoubleClickActionBinding": [], + "CPDragServer": [ + "initialize", + "sharedDragServer" + ], + "CPDraggingInfo": [], + "CPEnumerator": [], + "CPError": [ + "alloc", + "errorWithDomain:code:userInfo:" + ], + "CPEvent": [ + "currentTimestamp", + "enterExitEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:trackingArea:", + "keyEventWithType:location:modifierFlags:timestamp:windowNumber:context:characters:charactersIgnoringModifiers:isARepeat:keyCode:", + "keyEventWithType:location:modifierFlags:timestamp:windowNumber:context:characters:charactersIgnoringModifiers:isARepeat:keyCode:isActionKey:", + "modifierFlags", + "mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:", + "mouseLocation", + "otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:", + "startPeriodicEventsAfterDelay:withPeriod:", + "stopPeriodicEvents" + ], + "CPException": [ + "alloc", + "exceptionWithName:reason:userInfo:", + "raise:format:", + "raise:reason:" + ], + "CPExpression": [ + "expressionForAggregate:", + "expressionForBlock:arguments:", + "expressionForConditional:trueExpression:falseExpression:", + "expressionForConstantValue:", + "expressionForEvaluatedObject", + "expressionForFunction:arguments:", + "expressionForFunction:selectorName:arguments:", + "expressionForIntersectSet:with:", + "expressionForKeyPath:", + "expressionForMinusSet:with:", + "expressionForSubquery:usingIteratorVariable:predicate:", + "expressionForUnionSet:with:", + "expressionForVariable:" + ], + "CPFont": [ + "boldFontWithName:size:", + "boldFontWithName:size:italic:", + "boldSystemFontOfSize:", + "defaultThemeClass", + "fontWithDescriptor:size:", + "fontWithName:size:", + "fontWithName:size:italic:", + "initialize", + "initializeSystemFontFromTheme:", + "setSystemFontFace:", + "setSystemFontSize:", + "systemFontFace", + "systemFontForControlSize:", + "systemFontOfSize:", + "systemFontSize", + "themeAttributes" + ], + "CPFontDescriptor": [ + "fontDescriptorWithFontAttributes:", + "fontDescriptorWithName:size:" + ], + "CPFontManager": [ + "setFontManagerFactory:", + "setFontPanelFactory:", + "sharedFontManager" + ], + "CPFontPanel": [ + "sharedFontPanel", + "sharedFontPanelExists" + ], + "CPFormatter": [], + "CPFunctionOperation": [ + "functionOperationWithFunction:" + ], + "CPGradient": [], + "CPGraphicsContext": [ + "currentContext", + "graphicsContextWithGraphicsPort:flipped:", + "restoreGraphicsState", + "saveGraphicsState", + "setCurrentContext:" + ], + "CPHTTPURLResponse": [ + "parseHTTPHeaders:" + ], + "CPImage": [ + "cachedImageWithContentsOfFile:", + "dummyCSSImageOfSize:", + "imageNamed:", + "imageWithCSSDictionary:beforeDictionary:afterDictionary:size:", + "imageWithCSSDictionary:size:", + "imageWithMaterialIconNamed:size:", + "imageWithMaterialIconNamed:size:color:" + ], + "CPImageView": [ + "initialize" + ], + "CPImageViewValueBinder": [], + "CPIndexPath": [ + "indexPathWithIndex:", + "indexPathWithIndexes:", + "indexPathWithIndexes:length:" + ], + "CPIndexSet": [ + "indexSet", + "indexSetWithIndex:", + "indexSetWithIndexesInRange:" + ], + "CPInvocation": [ + "invocationWithMethodSignature:" + ], + "CPInvocationOperation": [], + "CPIsNilTransformer": [ + "allowsReverseTransformation", + "transformedValueClass" + ], + "CPIsNotNilTransformer": [ + "allowsReverseTransformation", + "transformedValueClass" + ], + "CPJSONPConnection": [ + "connectionWithRequest:callback:delegate:", + "sendRequest:callback:delegate:" + ], + "CPKeyBinding": [ + "cacheKeyBinding:", + "createKeyBindingsFromJSObject:", + "initialize", + "keyBindingForKey:modifierFlags:", + "selectorsForKey:modifierFlags:" + ], + "CPKeyedArchiver": [ + "allowsKeyedCoding", + "archivedDataWithRootObject:", + "classNameForClass:", + "initialize", + "setClassName:forClass:" + ], + "CPKeyedUnarchiver": [ + "initialize", + "unarchiveObjectWithData:", + "unarchiveObjectWithFile:", + "unarchiveObjectWithFile:asynchronously:" + ], + "CPLayoutManager": [], + "CPLevelIndicator": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPLocale": [ + "ISOCountryCodes", + "ISOLanguageCodes", + "availableLocaleIdentifiers", + "currentLocale", + "systemLocale" + ], + "CPMapTable": [], + "CPMarkdownParser": [ + "attributedStringFromMarkdown:", + "attributedStringWithText:font:bold:italic:code:", + "isTableHeaderLine:", + "isTableRowLine:", + "isTableSeparatorLine:", + "parseInlineMarkdown:isHeader:headerLevel:", + "parseTableCellMarkdown:isHeader:", + "parseTableCells:" + ], + "CPMenu": [ + "initialize", + "menuBarAttributes", + "menuBarHeight", + "menuBarIconImage", + "menuBarTitle", + "menuBarVisible", + "popUpContextMenu:withEvent:forView:", + "popUpContextMenu:withEvent:forView:withFont:", + "setMenuBarAttributes:", + "setMenuBarIconImage:", + "setMenuBarTitle:", + "setMenuBarVisible:", + "setNamedValue:forKey:inAttributes:forTheme:", + "trackingCallbackWithCallback:", + "updateMenuBarAttributesWithTheme:" + ], + "CPMenuItem": [ + "separatorItem" + ], + "CPMultipleValueAndBinding": [], + "CPMultipleValueOrBinding": [], + "CPMutableArray": [ + "arrayWithCapacity:" + ], + "CPMutableAttributedString": [], + "CPMutableDictionary": [], + "CPMutableIndexSet": [], + "CPMutableParagraphStyle": [], + "CPMutableSet": [ + "setWithCapacity:" + ], + "CPNegateBooleanTransformer": [ + "allowsReverseTransformation", + "transformedValueClass" + ], + "CPNinePartImage": [], + "CPNotification": [ + "notificationWithName:object:", + "notificationWithName:object:userInfo:" + ], + "CPNotificationCenter": [ + "defaultCenter" + ], + "CPNotificationQueue": [ + "defaultQueue" + ], + "CPNull": [ + "null" + ], + "CPNumber": [ + "alloc", + "numberWithBool:", + "numberWithChar:", + "numberWithDouble:", + "numberWithFloat:", + "numberWithInt:", + "numberWithLong:", + "numberWithLongLong:", + "numberWithShort:", + "numberWithUnsignedChar:", + "numberWithUnsignedInt:", + "numberWithUnsignedLong:", + "numberWithUnsignedShort:" + ], + "CPNumberFormatter": [ + "localizedStringFromNumber:numberStyle:" + ], + "CPObject": [ + "UID", + "accessInstanceVariablesDirectly", + "actualTheme", + "actualValueForThemeAttribute:", + "actualValueForThemeAttribute:inState:", + "addObserver:forKeyPath:options:context:", + "alloc", + "allocWithCoder:", + "applyChange:toKeyPath:", + "automaticallyNotifiesObserversForKey:", + "autorelease", + "awakeAfterUsingCoder:", + "awakeAfterUsingCoder:", + "awakeFromCib", + "bind:toObject:withKeyPath:options:", + "cancelPreviousPerformRequestsWithTarget:", + "cancelPreviousPerformRequestsWithTarget:selector:object:", + "class", + "class", + "classForCoder", + "classForKeyedArchiver", + "className", + "conformsToProtocol:", + "conformsToProtocol:", + "copy", + "currentValueForThemeAttribute:", + "dealloc", + "defaultThemeClass", + "description", + "description", + "dictionaryWithValuesForKeys:", + "didChange:valuesAtIndexes:forKey:", + "didChangeValueForKey:", + "didChangeValueForKey:withSetMutation:usingObjects:", + "doesNotRecognizeSelector:", + "exposeBinding:", + "exposedBindings", + "forwardInvocation:", + "forwardingTargetForSelector:", + "hasThemeAttribute:", + "hasThemeState:", + "hasThemeStates:", + "hash", + "implementsSelector:", + "infoForBinding:", + "init", + "initialize", + "instanceMethodForSelector:", + "instancesImplementSelector:", + "instancesRespondToSelector:", + "isBindingExclusive:", + "isEqual:", + "isKindOfClass:", + "isKindOfClass:", + "isMemberOfClass:", + "isMemberOfClass:", + "isProxy", + "isSubclassOfClass:", + "keyPathsForValuesAffectingValueForKey:", + "kvoValueForKey:", + "load", + "methodForSelector:", + "methodSignatureForSelector:", + "mutableArrayValueForKey:", + "mutableArrayValueForKeyPath:", + "mutableCopy", + "mutableSetValueForKey:", + "mutableSetValueForKeyPath:", + "new", + "object:performSelector:withObject:afterDelay:inModes:", + "objectDidChangeTheme", + "performSelector:", + "performSelector:withObject:", + "performSelector:withObject:afterDelay:", + "performSelector:withObject:afterDelay:inModes:", + "performSelector:withObject:withObject:", + "performSelector:withObjects:", + "registerThemeValues:", + "registerThemeValues:inherit:", + "release", + "removeObserver:forKeyPath:", + "replacementObjectForArchiver:", + "replacementObjectForCoder:", + "replacementObjectForKeyedArchiver:", + "respondsToSelector:", + "retain", + "self", + "setTheme:", + "setThemeClass:", + "setThemeState:", + "setThemeStates:", + "setValue:forKey:", + "setValue:forKeyPath:", + "setValue:forThemeAttribute:", + "setValue:forThemeAttribute:inState:", + "setValue:forThemeAttribute:inStates:", + "setValue:forUndefinedKey:", + "setValuesForKeysWithDictionary:", + "setVersion:", + "superclass", + "superclass", + "theme", + "themeAttributes", + "themeClass", + "themeState", + "unbind:", + "unsetThemeState:", + "unsetThemeStates:", + "valueClassForBinding:", + "valueForKey:", + "valueForKeyPath:", + "valueForThemeAttribute:", + "valueForThemeAttribute:inState:", + "valueForThemeAttribute:inStates:", + "valueForUndefinedKey:", + "valueType", + "version", + "willChange:valuesAtIndexes:forKey:", + "willChangeValueForKey:", + "willChangeValueForKey:withSetMutation:usingObjects:" + ], + "CPObjectController": [ + "automaticallyNotifiesObserversForKey:", + "initialize", + "keyPathsForValuesAffectingCanAdd", + "keyPathsForValuesAffectingCanInsert", + "keyPathsForValuesAffectingCanRemove", + "keyPathsForValuesAffectingContentObject" + ], + "CPOpenPanel": [ + "openPanel" + ], + "CPOperation": [], + "CPOperationQueue": [ + "currentQueue", + "mainQueue" + ], + "CPOutlineView": [ + "initialize" + ], + "CPPanel": [], + "CPParagraphStyle": [ + "defaultParagraphStyle", + "defaultWritingDirectionForLanguage:" + ], + "CPPasteboard": [ + "generalPasteboard", + "initialize", + "pasteboardWithName:" + ], + "CPPlatform": [ + "activateIgnoringOtherApps:", + "closeAllPlatformWindows", + "deactivate", + "hide:", + "hideOtherApplications:", + "initialize", + "initializeScreenIfNecessary", + "isBrowser", + "mainBodyElement", + "supportsDragAndDrop", + "supportsNativeMainMenu", + "terminateApplication" + ], + "CPPlatformPasteboard": [], + "CPPlatformString": [ + "bootstrap", + "charPositionOfString:withFont:forPoint:", + "createDOMElements", + "createDOMMetricsElements", + "initialize", + "metricsOfFont:", + "sizeOfString:withFont:forWidth:" + ], + "CPPlatformWindow": [ + "clearCharacterKeysToPreventFromPropagating", + "clearKeyCodesToPreventFromPropagating", + "preventCharacterKeyFromPropagating:", + "preventCharacterKeysFromPropagating:", + "preventKeyCodeFromPropagating:", + "preventKeyCodesFromPropagating:", + "primaryPlatformWindow", + "setPrimaryPlatformWindow:", + "supportsMultipleInstances", + "visiblePlatformWindows", + "visiblePlatformWindows" + ], + "CPPopUpButton": [ + "defaultThemeClass", + "isBindingExclusive:", + "keyPathsForValuesAffectingSelectedIndex", + "keyPathsForValuesAffectingSelectedItem", + "keyPathsForValuesAffectingSelectedTag", + "themeAttributes" + ], + "CPPopover": [], + "CPPredicate": [ + "predicateWithFormat:", + "predicateWithFormat:argumentArray:", + "predicateWithFormat:arguments:", + "predicateWithValue:" + ], + "CPPredicateEditor": [], + "CPPredicateEditorRowTemplate": [], + "CPPredicateEditorValueBinder": [], + "CPPredicateScanner": [], + "CPPredicateUtilities": [ + "abs:", + "add:to:", + "average:", + "ceiling:", + "chs:", + "count:", + "divide:by:", + "exp:", + "first:", + "from:substract:", + "fromObject:index:", + "last:", + "ln:", + "max:", + "min:", + "modulus:by:", + "multiply:by:", + "now:", + "raise:to:", + "random:", + "sqrt:", + "sum:" + ], + "CPPredicate_BOOL": [], + "CPProgressIndicator": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPPropertyListSerialization": [ + "dataFromPropertyList:format:", + "dataFromPropertyList:format:errorDescription:", + "propertyListFromData:format:", + "propertyListFromData:format:errorDescription:" + ], + "CPProxy": [ + "UID", + "alloc", + "class", + "class", + "description", + "forward::", + "forwardInvocation:", + "hash", + "initialize", + "isEqual:", + "isKindOfClass:", + "isMemberOfClass:", + "isProxy", + "load", + "methodSignatureForSelector:", + "performSelector:", + "performSelector:withObject:", + "performSelector:withObject:withObject:", + "respondsToSelector:", + "respondsToSelector:", + "self", + "superclass" + ], + "CPRadio": [ + "defaultThemeClass", + "radioWithTitle:", + "radioWithTitle:theme:", + "standardButtonWithTitle:" + ], + "CPRadioGroup": [ + "initialize", + "isBindingExclusive:" + ], + "CPResponder": [], + "CPRuleEditor": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPRulerMarker": [], + "CPRulerView": [ + "initialize", + "registerUnitWithName:abbreviation:unitToPointsConversionFactor:stepUpCycle:stepDownCycle:" + ], + "CPRunLoop": [ + "currentRunLoop", + "initialize", + "mainRunLoop" + ], + "CPSavePanel": [ + "proposedFileURLWithDocumentName:", + "savePanel" + ], + "CPScanner": [ + "scannerWithString:" + ], + "CPScreen": [], + "CPScrollView": [ + "contentSizeForFrameSize:hasHorizontalScroller:hasVerticalScroller:borderType:", + "contentSizeForFrameSize:horizontalScrollerClass:verticalScrollerClass:borderType:controlSize:scrollerStyle:", + "defaultThemeClass", + "frameSizeForContentSize:hasHorizontalScroller:hasVerticalScroller:borderType:", + "frameSizeForContentSize:horizontalScrollerClass:verticalScrollerClass:borderType:controlSize:scrollerStyle:", + "globalScrollerStyle", + "initialize", + "setGlobalScrollerStyle:", + "themeAttributes" + ], + "CPScroller": [ + "defaultThemeClass", + "scrollerOverlay", + "scrollerWidth", + "scrollerWidthForControlSize:", + "scrollerWidthInStyle:", + "themeAttributes" + ], + "CPSearchField": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPSecureTextField": [], + "CPSegmentedControl": [ + "defaultThemeClass", + "isBindingExclusive:", + "themeAttributes" + ], + "CPSet": [ + "alloc", + "set", + "setWithArray:", + "setWithObject:", + "setWithObjects:", + "setWithObjects:count:", + "setWithSet:" + ], + "CPShadow": [ + "shadowWithOffset:blurRadius:color:" + ], + "CPShadowView": [ + "defaultThemeClass", + "frameForContentFrame:withWeight:", + "shadowViewEnclosingView:", + "shadowViewEnclosingView:withWeight:", + "themeAttributes" + ], + "CPSimpleTypesetter": [ + "sharedInstance" + ], + "CPSlider": [ + "defaultThemeClass", + "sliderWithTarget:action:", + "sliderWithValue:minValue:maxValue:target:action:", + "themeAttributes" + ], + "CPSliderColorPicker": [], + "CPSortDescriptor": [ + "sortDescriptorWithKey:ascending:", + "sortDescriptorWithKey:ascending:selector:" + ], + "CPSound": [], + "CPSplitView": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPStackView": [ + "stackViewWithViews:" + ], + "CPStepper": [ + "defaultThemeClass", + "stepper", + "stepperWithInitialValue:minValue:maxValue:", + "themeAttributes" + ], + "CPString": [ + "JSONFromObject:", + "UUID", + "alloc", + "initialize", + "metricsOfFont:", + "pathWithComponents:", + "string", + "stringWithFormat:", + "stringWithHash:", + "stringWithString:" + ], + "CPTabView": [ + "defaultThemeClass", + "isBindingExclusive:", + "themeAttributes" + ], + "CPTabViewItem": [ + "tabViewItemWithViewController:" + ], + "CPTableCellView": [], + "CPTableColumn": [], + "CPTableColumnValueBinder": [], + "CPTableContentBinder": [], + "CPTableHeaderView": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPTableView": [ + "defaultThemeClass", + "themeAttributes" + ], + "CPText": [], + "CPTextAttachment": [], + "CPTextContainer": [], + "CPTextField": [ + "defaultThemeClass", + "labelWithTitle:", + "labelWithTitle:theme:", + "roundedTextFieldWithStringValue:placeholder:width:", + "roundedTextFieldWithStringValue:placeholder:width:theme:", + "textFieldWithStringValue:placeholder:width:", + "textFieldWithStringValue:placeholder:width:theme:", + "themeAttributes" + ], + "CPTextList": [], + "CPTextStorage": [ + "attributedStringWithAttachment:" + ], + "CPTextTab": [], + "CPTextView": [ + "defaultMenu" + ], + "CPTheme": [ + "defaultHudTheme", + "defaultTheme", + "setDefaultHudTheme:", + "setDefaultTheme:", + "themeNamed:", + "updateDefaultThemeDynamicAttributesSetWithSet:" + ], + "CPThemeBlend": [], + "CPThreePartImage": [], + "CPTimeZone": [ + "abbreviationDictionary", + "defaultTimeZone", + "initialize", + "knownTimeZoneNames", + "localTimeZone", + "resetSystemTimeZone", + "setAbbreviationDictionary:", + "setDefaultTimeZone:", + "systemTimeZone", + "timeZoneDataVersion", + "timeZoneForSecondsFromGMT:", + "timeZoneWithAbbreviation:", + "timeZoneWithName:", + "timeZoneWithName:data:" + ], + "CPTimer": [ + "scheduledTimerWithTimeInterval:callback:repeats:", + "scheduledTimerWithTimeInterval:invocation:repeats:", + "scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:", + "timerWithTimeInterval:callback:repeats:", + "timerWithTimeInterval:invocation:repeats:", + "timerWithTimeInterval:target:selector:userInfo:repeats:" + ], + "CPTitleWithPatternBinding": [], + "CPTokenField": [ + "defaultCompletionDelay", + "defaultThemeClass", + "defaultTokenizingCharacterSet", + "themeAttributes" + ], + "CPToolbar": [ + "initialize" + ], + "CPToolbarItem": [], + "CPTrackingArea": [], + "CPTreeController": [ + "initialize", + "keyPathsForValuesAffectingArrangedObjects", + "keyPathsForValuesAffectingCanAddChild", + "keyPathsForValuesAffectingCanInsert", + "keyPathsForValuesAffectingCanInsertChild", + "keyPathsForValuesAffectingContentArray", + "keyPathsForValuesAffectingSelectedNodes", + "keyPathsForValuesAffectingSelectedObjects", + "keyPathsForValuesAffectingSelectionIndexPath" + ], + "CPTreeNode": [ + "treeNodeWithRepresentedObject:" + ], + "CPTypesetter": [ + "initialize", + "sharedSystemTypesetter" + ], + "CPURL": [ + "URLWithString:", + "URLWithString:relativeToURL:", + "alloc" + ], + "CPURLConnection": [ + "connectionWithRequest:delegate:", + "sendAsynchronousRequest:", + "sendAsynchronousRequest:queue:completionHandler:", + "sendSynchronousRequest:returningResponse:", + "sendSynchronousRequest:returningResponse:error:", + "setClassDelegate:" + ], + "CPURLRequest": [ + "requestWithURL:", + "requestWithURL:cachePolicy:timeoutInterval:" + ], + "CPURLResponse": [], + "CPUnarchiveFromDataTransformer": [ + "allowsReverseTransformation", + "transformedValueClass" + ], + "CPUndoManager": [], + "CPUserDefaults": [ + "resetStandardUserDefaults", + "standardUserDefaults" + ], + "CPUserDefaultsController": [ + "sharedUserDefaultsController" + ], + "CPUserDefaultsCookieStore": [], + "CPUserDefaultsLocalStore": [ + "supportsLocalStorage" + ], + "CPUserDefaultsStore": [], + "CPUserNotification": [], + "CPUserNotificationCenter": [ + "defaultUserNotificationCenter" + ], + "CPUserSessionManager": [ + "defaultManager" + ], + "CPValue": [ + "valueWithJSObject:" + ], + "CPValueTransformer": [ + "allowsReverseTransformation", + "initialize", + "setValueTransformer:forName:", + "transformedValueClass", + "valueTransformerForName:", + "valueTransformerNames" + ], + "CPValueWithPatternBinding": [], + "CPView": [ + "animatorClass", + "defaultAnimationForKey:", + "defaultMenu", + "defaultThemeClass", + "initialize", + "isHighDPIDrawingEnabled", + "keyPathsForValuesAffectingBounds", + "keyPathsForValuesAffectingFrame", + "setHighDPIDrawingEnabled:", + "themeAttributes" + ], + "CPViewAnimation": [], + "CPViewAnimator": [ + "addAnimations:forAction:", + "addFrameUpdaters:forAction:", + "stopUpdaterWithIdentifier:" + ], + "CPViewController": [ + "initialize" + ], + "CPVisualEffectView": [], + "CPWebScriptObject": [], + "CPWebView": [], + "CPWindow": [ + "constrainWindowsToUsableScreen", + "frameRectForContentRect:styleMask:", + "globalResizeStyle", + "setConstrainWindowsToUsableScreen:", + "setGlobalResizeStyle:" + ], + "CPWindowController": [], + "CPWorkspace": [ + "sharedWorkspace" + ], + "HandImageLayer": [], + "HandLayer": [], + "HoursLayer": [] + }, + "construction": { + "CPAccordionView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPBox": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [ + "CPView" + ], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPBrowser": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [ + "CPScrollView" + ], + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPButton": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2" + }, + "CPButtonBar": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPCheckBox": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "false", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2" + }, + "CPClipView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPCollectionView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "true", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false", + "isSelectable": "true" + }, + "CPColorWell": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPComboBox": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "nil", + "isBordered": "true", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "true", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPControl": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPDatePicker": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "true", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPDisclosureButton": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "false", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2" + }, + "CPImageView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "nil", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPLevelIndicator": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "nil", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPOutlineView": { + "frameSize": "{\"height\":0,\"width\":0}", + "subviews": [], + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPPopUpButton": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "4", + "verticalAlignment": "2" + }, + "CPPredicateEditor": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "nil" + }, + "CPProgressIndicator": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "0", + "isHidden": "false" + }, + "CPRadio": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "12", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isBordered": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2" + }, + "CPRuleEditor": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "nil" + }, + "CPRulerView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPScrollView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [ + "CPClipView", + "CPClipView", + "CPScroller", + "CPScroller", + "CPView" + ], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPScroller": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPSearchField": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [ + "CPButton", + "CPButton" + ], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "1", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "nil", + "isBordered": "true", + "isEditable": "true", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "true", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPSecureTextField": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "nil", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "nil", + "isBordered": "false", + "isEditable": "nil", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "nil", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPSegmentedControl": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "2", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "2" + }, + "CPShadowView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPSlider": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPSplitView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPStackView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "alignment": "10", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPStepper": { + "frameSize": "{\"height\":0,\"width\":0}", + "subviews": [ + "CPButton", + "CPButton" + ], + "acceptsFirstResponder": "false", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPTabView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPTableCellView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPTableHeaderView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPTableView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "true", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "isEnabled": "true", + "isHidden": "false", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPText": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isEditable": "nil", + "isHidden": "false", + "isSelectable": "nil" + }, + "CPTextField": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "nil", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "nil", + "isBordered": "false", + "isEditable": "nil", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "nil", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPTextView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "true", + "autoresizingMask": "0", + "backgroundColor": "CPColor:rgba(255, 255, 255, 1)", + "isEditable": "true", + "isHidden": "false", + "isSelectable": "true" + }, + "CPTokenField": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [ + "CPScrollView" + ], + "acceptsFirstResponder": "nil", + "alignment": "0", + "autoresizingMask": "0", + "backgroundColor": "nil", + "bezelStyle": "0", + "controlSize": "{\"_stateNameCount\":1,\"_stateNameString\":\"controlSizeRegular\",\"_stateNames\":{\"controlSizeRegular\":true}}", + "drawsBackground": "nil", + "isBordered": "false", + "isEditable": "nil", + "isEnabled": "true", + "isHidden": "false", + "isSelectable": "nil", + "lineBreakMode": "2", + "verticalAlignment": "1" + }, + "CPView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + }, + "CPVisualEffectView": { + "frameSize": "{\"height\":100,\"width\":100}", + "subviews": [], + "acceptsFirstResponder": "false", + "autoresizingMask": "0", + "backgroundColor": "nil", + "isHidden": "false" + } + }, + "windows": { + "borderless": [ + "CPView" + ], + "titled": [ + "CPTextField", + "CPView", + "CPView", + "CPView" + ], + "closable": [ + "CPButton", + "CPTextField", + "CPView", + "CPView", + "CPView" + ], + "resizable": [ + "CPButton", + "CPTextField", + "CPView", + "CPView", + "CPView" + ], + "miniaturizable": [ + "CPButton", + "CPButton", + "CPTextField", + "CPView", + "CPView", + "CPView" + ], + "full": [ + "CPButton", + "CPButton", + "CPTextField", + "CPView", + "CPView", + "CPView" + ], + "hud": [ + "CPTextField", + "CPView" + ], + "hudClosable": [ + "CPButton", + "CPTextField", + "CPView" + ] + } +} diff --git a/Tests/AppKit/Resources/DropInCibs.json b/Tests/AppKit/Resources/DropInCibs.json new file mode 100644 index 000000000..9c325825a --- /dev/null +++ b/Tests/AppKit/Resources/DropInCibs.json @@ -0,0 +1,10 @@ +{ + "SmartFoldersPredicateEditor.cib": [ + "{\"class\":\"CPApplication\"}", + "{\"class\":\"CPWindow\",\"title\":\"Predicate Editor\",\"contentView\":{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":1,\\\"y\\\":1},\\\"size\\\":{\\\"height\\\":290,\\\"width\\\":551}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"18\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPTextField\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":63,\\\"y\\\":12},\\\"size\\\":{\\\"height\\\":29,\\\"width\\\":474}}\",\"state\":{\"acceptsFirstResponder\":\"true\",\"alignment\":\"4\",\"autoresizingMask\":\"34\",\"backgroundColor\":\"CPColor:rgba(255, 255, 255, 1)\",\"bezelStyle\":\"0\",\"controlSize\":\"0\",\"drawsBackground\":\"true\",\"isBordered\":\"false\",\"isEditable\":\"true\",\"isEnabled\":\"true\",\"isHidden\":\"false\",\"isSelectable\":\"true\",\"lineBreakMode\":\"2\",\"verticalAlignment\":\"1\",\"doubleValue\":\"0\",\"objectValue\":\"\",\"stringValue\":\"\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":29,\\\"width\\\":474}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPTextField\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":19,\\\"y\\\":18},\\\"size\\\":{\\\"height\\\":17,\\\"width\\\":41}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"alignment\":\"4\",\"autoresizingMask\":\"36\",\"backgroundColor\":\"CPColor:rgba(175, 175, 175, 1)\",\"bezelStyle\":\"0\",\"controlSize\":\"0\",\"drawsBackground\":\"false\",\"isBordered\":\"false\",\"isEditable\":\"false\",\"isEnabled\":\"true\",\"isHidden\":\"false\",\"isSelectable\":\"false\",\"lineBreakMode\":\"2\",\"verticalAlignment\":\"1\",\"doubleValue\":\"0\",\"objectValue\":\"Name:\",\"stringValue\":\"Name:\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":17,\\\"width\\\":41}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPScrollView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":20,\\\"y\\\":55},\\\"size\\\":{\\\"height\\\":184,\\\"width\\\":512}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"18\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPClipView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":1,\\\"y\\\":1},\\\"size\\\":{\\\"height\\\":182,\\\"width\\\":510}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"8\",\"backgroundColor\":\"CPColor:rgba(232, 232, 232, 1)\",\"isHidden\":\"false\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPPredicateEditor\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":182,\\\"width\\\":510}}\",\"state\":{\"acceptsFirstResponder\":\"true\",\"alignment\":\"0\",\"autoresizingMask\":\"18\",\"backgroundColor\":\"nil\",\"controlSize\":\"0\",\"isEditable\":\"true\",\"isEnabled\":\"true\",\"isHidden\":\"false\",\"lineBreakMode\":\"2\",\"verticalAlignment\":\"nil\",\"doubleValue\":\"0\",\"objectValue\":\"nil\",\"stringValue\":\"\",\"tag\":\"0\"},\"subviews\":[]}]},{\"class\":\"CPScroller\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":-100,\\\"y\\\":269},\\\"size\\\":{\\\"height\\\":7,\\\"width\\\":360}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"alignment\":\"0\",\"autoresizingMask\":\"8\",\"backgroundColor\":\"nil\",\"controlSize\":\"0\",\"isEnabled\":\"false\",\"isHidden\":\"true\",\"lineBreakMode\":\"2\",\"verticalAlignment\":\"1\",\"doubleValue\":\"0\",\"objectValue\":\"0\",\"stringValue\":\"0\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":7,\\\"width\\\":360}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPScroller\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":491,\\\"y\\\":110},\\\"size\\\":{\\\"height\\\":73,\\\"width\\\":7}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"alignment\":\"0\",\"autoresizingMask\":\"8\",\"backgroundColor\":\"nil\",\"controlSize\":\"0\",\"isEnabled\":\"false\",\"isHidden\":\"true\",\"lineBreakMode\":\"2\",\"verticalAlignment\":\"1\",\"doubleValue\":\"0\",\"objectValue\":\"0\",\"stringValue\":\"0\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":73,\\\"width\\\":7}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"CPColor:rgba(255, 255, 255, 1)\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPClipView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPButton\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":481,\\\"y\\\":245},\\\"size\\\":{\\\"height\\\":25,\\\"width\\\":51}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"alignment\":\"2\",\"autoresizingMask\":\"9\",\"backgroundColor\":\"nil\",\"bezelStyle\":\"11\",\"controlSize\":\"0\",\"isBordered\":\"true\",\"isEnabled\":\"true\",\"isHidden\":\"false\",\"lineBreakMode\":\"0\",\"verticalAlignment\":\"2\",\"doubleValue\":\"0\",\"objectValue\":\"0\",\"state\":\"0\",\"stringValue\":\"0\",\"tag\":\"1\",\"title\":\"OK\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":25,\\\"width\\\":51}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPButton\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":395,\\\"y\\\":245},\\\"size\\\":{\\\"height\\\":25,\\\"width\\\":76}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"alignment\":\"2\",\"autoresizingMask\":\"9\",\"backgroundColor\":\"nil\",\"bezelStyle\":\"11\",\"controlSize\":\"0\",\"isBordered\":\"true\",\"isEnabled\":\"true\",\"isHidden\":\"false\",\"lineBreakMode\":\"0\",\"verticalAlignment\":\"2\",\"doubleValue\":\"0\",\"objectValue\":\"0\",\"state\":\"0\",\"stringValue\":\"0\",\"tag\":\"0\",\"title\":\"Cancel\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":25,\\\"width\\\":76}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]}]}}" + ], + "TextEditorDocumentWindow.cib": [ + "{\"class\":\"CPApplication\"}", + "{\"class\":\"CPWindow\",\"title\":\"Window\",\"contentView\":{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":1,\\\"y\\\":92},\\\"size\\\":{\\\"height\\\":168,\\\"width\\\":474}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"18\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPScrollView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":202,\\\"width\\\":476}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"18\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPClipView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":202,\\\"width\\\":469}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"8\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPTextView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":270,\\\"width\\\":469}}\",\"state\":{\"acceptsFirstResponder\":\"true\",\"autoresizingMask\":\"18\",\"backgroundColor\":\"CPColor:rgba(255, 255, 255, 1)\",\"isEditable\":\"true\",\"isHidden\":\"false\",\"isSelectable\":\"true\",\"objectValue\":\"CPTextStorage\",\"string\":\"\",\"stringValue\":\"\",\"tag\":\"0\"},\"subviews\":[]}]},{\"class\":\"CPScroller\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":-100,\\\"y\\\":355},\\\"size\\\":{\\\"height\\\":7,\\\"width\\\":240}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"alignment\":\"0\",\"autoresizingMask\":\"8\",\"backgroundColor\":\"nil\",\"controlSize\":\"0\",\"isEnabled\":\"false\",\"isHidden\":\"true\",\"lineBreakMode\":\"2\",\"verticalAlignment\":\"1\",\"doubleValue\":\"0\",\"objectValue\":\"0\",\"stringValue\":\"0\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":7,\\\"width\\\":240}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPScroller\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":469,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":202,\\\"width\\\":7}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"alignment\":\"0\",\"autoresizingMask\":\"8\",\"backgroundColor\":\"nil\",\"controlSize\":\"0\",\"isEnabled\":\"true\",\"isHidden\":\"false\",\"lineBreakMode\":\"2\",\"verticalAlignment\":\"1\",\"doubleValue\":\"0\",\"objectValue\":\"0\",\"stringValue\":\"0\",\"tag\":\"0\"},\"subviews\":[{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":202,\\\"width\\\":7}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":202},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":151.1259259259259,\\\"width\\\":7}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]},{\"class\":\"CPView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"CPColor:rgba(255, 255, 255, 1)\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]},{\"class\":\"CPClipView\",\"frame\":\"{\\\"origin\\\":{\\\"x\\\":0,\\\"y\\\":0},\\\"size\\\":{\\\"height\\\":0,\\\"width\\\":0}}\",\"state\":{\"acceptsFirstResponder\":\"false\",\"autoresizingMask\":\"0\",\"backgroundColor\":\"nil\",\"isHidden\":\"false\",\"tag\":\"-1\"},\"subviews\":[]}]}]}}" + ] +} diff --git a/Tests/AppKit/Resources/DropInCibs/SmartFoldersPredicateEditor.cib b/Tests/AppKit/Resources/DropInCibs/SmartFoldersPredicateEditor.cib new file mode 100644 index 000000000..89ff3b8fc --- /dev/null +++ b/Tests/AppKit/Resources/DropInCibs/SmartFoldersPredicateEditor.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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;20E;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;D;K;6;CP$UIDd;2;22E;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;29E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;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;D;K;6;CP$UIDd;2;59E;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;1;0E;D;K;6;CP$UIDd;2;65E;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;11E;D;K;6;CP$UIDd;2;11E;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;2;26E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;65E;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;10E;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;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;67E;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;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;22E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;69E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;71E;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;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;73E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMinSizeKeyD;K;6;CP$UIDd;2;74E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;75E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;76E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;77E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;78E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;79E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;80E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;81E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;26E;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;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;83E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;89E;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;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;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;94E;K;6;$afontD;K;6;CP$UIDd;2;96E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;97E;K;11;$aalignmentD;K;6;CP$UIDd;2;98E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;99E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;101E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;100E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;105E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;102E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;88E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;88E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;100E;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;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;108E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;6;$afontD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;11;$aalignmentD;K;6;CP$UIDd;3;113E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;114E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;115E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;88E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;88E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;88E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;116E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;102E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;88E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;88E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;100E;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;30E;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;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;117E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;118E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;119E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;120E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;122E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;33E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;62E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;61E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;123E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;123E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;123E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;123E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;100E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;88E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;100E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;124E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;106E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;82E;K;21;CPScrollViewHasVRulerD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewHasHRulerD;K;6;CP$UIDd;1;0E;K;25;CPScrollViewRulersVisibleD;K;6;CP$UIDd;1;0E;K;18;CPScrollViewVRulerD;K;6;CP$UIDd;1;0E;K;18;CPScrollViewHRulerD;K;6;CP$UIDd;1;0E;E;D;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;2;32E;K;27;CPResponderNextResponderKeyD;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;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;127E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;130E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;35E;E;D;K;10;$classnameS;17;CPPredicateEditorK;8;$classesA;S;17;CPPredicateEditorS;12;CPRuleEditorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;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;126E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;131E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;120E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;132E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;133E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;100E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;2;88E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;100E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;134E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;135E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;136E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;1;0E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;137E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;138E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;139E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;140E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;141E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;142E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;144E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;3;145E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;106E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;2;82E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;2;82E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;2;82E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;2;82E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;2;88E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;2;88E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;146E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;101E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;147E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;148E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;150E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;155E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;101E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;157E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;150E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;150E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;136E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;2;82E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;2;82E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;158E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;2;88E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;100E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;101E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;150E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;46E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;164E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;46E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;101E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;150E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;49E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;168E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;49E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;170E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;49E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;150E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;2;82E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;2;82E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;2;82E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;172E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;2;88E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;100E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;101E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;175E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;150E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;101E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;178E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;150E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;179E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;149E;K;25;CPMenuItemOnStateImageKeyD;K;6;CP$UIDd;3;152E;K;28;CPMenuItemMixedStateImageKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;154E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;106E;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;60E;K;27;CPResponderNextResponderKeyD;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;181E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;182E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;183E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;184E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;185E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;186E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;31E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;187E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;88E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;150E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;60E;K;27;CPResponderNextResponderKeyD;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;188E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;189E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;183E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;184E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;185E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;190E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;31E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;191E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;100E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;150E;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;63E;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;3;150E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;192E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;193E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;195E;K;15;$aimage-scalingD;K;6;CP$UIDd;2;82E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;197E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;198E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;199E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;101E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;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;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;202E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;203E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;195E;K;15;$aimage-scalingD;K;6;CP$UIDd;2;82E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;197E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;205E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;101E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;201E;E;S;13;AppControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;8;delegateS;15;folderNameFieldS;15;predicateEditorS;14;predicateSheetS;11;closeSheet:S;13;CPApplicationS;10;{200, 182}S;10;{700, 532}S;8;CPWindowd;9;544735232S;24;{{571, 305}, {553, 292}}S;22;{{0, 0}, {1680, 1028}}d;2;79S;16;Predicate Editord;1;0S;20;{{0, 0}, {553, 292}}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;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;E;E;S;4;viewS;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{63, 12}, {474, 22}}S;19;{{0, 0}, {474, 22}}d;2;34S;9;textfieldS;47;bezeled+controlSizeRegular+editable+placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;206E;K;12;defaultValueD;K;6;CP$UIDd;3;208E;K;6;valuesD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;211E;K;12;defaultValueD;K;6;CP$UIDd;3;106E;K;6;valuesD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;213E;K;12;defaultValueD;K;6;CP$UIDd;2;82E;K;6;valuesD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;E;E;T;S;0;d;1;4d;2;-1D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;d;1;2S;20;{{19, 18}, {41, 17}}S;18;{{0, 0}, {41, 17}}d;2;36S;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;206E;K;12;defaultValueD;K;6;CP$UIDd;3;208E;K;6;valuesD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;211E;K;12;defaultValueD;K;6;CP$UIDd;3;106E;K;6;valuesD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;213E;K;12;defaultValueD;K;6;CP$UIDd;2;82E;K;6;valuesD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;223E;E;E;S;5;Name:D;K;6;$classD;K;6;CP$UIDd;3;104E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;224E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;S;22;{{20, 55}, {512, 184}}S;20;{{0, 0}, {512, 184}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;124E;E;E;d;2;18S;10;scrollviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;2;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;225E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;225E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;226E;E;S;20;{{1, 1}, {510, 182}}S;20;{{0, 0}, {510, 182}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;E;E;d;1;8D;K;6;$classD;K;6;CP$UIDd;3;104E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;227E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;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;3;229E;E;E;S;11;rule-editorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;75d;2;32d;1;3S;7;rowTypeS;8;criteriaS;13;displayValuesS;10;boundArrayS;7;subrowsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;33;_CPRuleEditorViewUnboundRowHolderK;8;$classesA;S;33;_CPRuleEditorViewUnboundRowHolderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;143E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;E;E;S;3;AnyS;17;_popUpItemAction:d;1;1D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;151E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;234E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;235E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;151E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;234E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;237E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;238E;E;d;7;1048576S;3;AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;S;25;of the following are trued;3;700D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;S;9;firstNameD;K;10;$classnameS;20;_CPKeyPathExpressionK;8;$classesA;S;20;_CPKeyPathExpressionS;21;_CPFunctionExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;242E;K;11;CPArgumentsD;K;6;CP$UIDd;3;243E;K;9;CPOperandD;K;6;CP$UIDd;3;245E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;136E;E;S;8;lastNameD;K;6;$classD;K;6;CP$UIDd;3;162E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;242E;K;11;CPArgumentsD;K;6;CP$UIDd;3;246E;K;9;CPOperandD;K;6;CP$UIDd;3;245E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;E;E;S;11;begins withS;9;ends withd;1;9S;8;containsd;2;99d;3;300D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;E;E;S;3;ageD;K;6;$classD;K;6;CP$UIDd;3;162E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;242E;K;11;CPArgumentsD;K;6;CP$UIDd;3;250E;K;9;CPOperandD;K;6;CP$UIDd;3;245E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;E;E;S;2;isS;12;is less thanS;15;is greater thanS;24;{{-100, 269}, {360, 15}}S;19;{{0, 0}, {360, 15}}d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;_horizontalScrollerDidScroll:S;22;{{491, 110}, {15, 73}}S;18;{{0, 0}, {15, 73}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;_verticalScrollerDidScroll:S;22;{{481, 245}, {51, 25}}S;18;{{0, 0}, {51, 25}}S;6;buttonS;34;bordered+controlSizeRegular+squareD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;103E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;100E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;2;OKd;2;14d;2;11S;22;{{395, 245}, {76, 25}}S;18;{{0, 0}, {76, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;CancelS;4;fontD;K;10;$classnameS;6;CPNullK;8;$classesA;S;6;CPNullS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;207E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;60;firstResponder+keyWindow+selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;252E;K;35;selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;252E;K;15;controlSizeMiniD;K;6;CP$UIDd;3;252E;K;16;controlSizeSmallD;K;6;CP$UIDd;3;252E;K;18;controlSizeRegularD;K;6;CP$UIDd;3;252E;K;15;editing+roundedD;K;6;CP$UIDd;3;252E;K;7;roundedD;K;6;CP$UIDd;3;252E;K;8;borderedD;K;6;CP$UIDd;3;252E;K;7;bezeledD;K;6;CP$UIDd;3;252E;K;7;editingD;K;6;CP$UIDd;3;252E;K;13;tableDataViewD;K;6;CP$UIDd;3;252E;K;6;normalD;K;6;CP$UIDd;3;252E;E;E;S;15;line-break-modeD;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;3;106E;K;6;normalD;K;6;CP$UIDd;3;106E;E;E;S;9;alignmentD;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;3;102E;K;6;normalD;K;6;CP$UIDd;3;102E;E;E;D;K;10;$classnameS;14;CPTrackingAreaK;8;$classesA;S;14;CPTrackingAreaS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;254E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;3;255E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;28E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;28E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;257E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;3;258E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;28E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;28E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;150E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;60;firstResponder+keyWindow+selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;252E;K;35;selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;252E;K;15;controlSizeMiniD;K;6;CP$UIDd;3;252E;K;16;controlSizeSmallD;K;6;CP$UIDd;3;252E;K;18;controlSizeRegularD;K;6;CP$UIDd;3;252E;K;15;editing+roundedD;K;6;CP$UIDd;3;252E;K;7;roundedD;K;6;CP$UIDd;3;252E;K;8;borderedD;K;6;CP$UIDd;3;252E;K;7;bezeledD;K;6;CP$UIDd;3;252E;K;7;editingD;K;6;CP$UIDd;3;252E;K;13;tableDataViewD;K;6;CP$UIDd;3;252E;K;6;normalD;K;6;CP$UIDd;3;252E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;3;106E;K;6;normalD;K;6;CP$UIDd;3;106E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;3;102E;K;6;normalD;K;6;CP$UIDd;3;102E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;260E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;3;258E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;2;29E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;2;29E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;261E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;150E;E;E;S;16;{{0, 0}, {0, 0}}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;3;263E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;150E;E;E;D;K;10;$classnameS;28;_CPRuleEditorViewSliceHolderK;8;$classesA;S;28;_CPRuleEditorViewSliceHolderS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;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;126E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;120E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;39E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;265E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;266E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;267E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;268E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;106E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;269E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;102E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;270E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;43E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;272E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;273E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;267E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;268E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;106E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;274E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;102E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;271E;E;S;7;CPImageS;15;CPMenuCheckmarkD;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;101E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;101E;K;4;sizeD;K;6;CP$UIDd;3;276E;E;E;S;16;CPMenuMixedStateD;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;101E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;101E;K;4;sizeD;K;6;CP$UIDd;3;277E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;278E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;279E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;267E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;268E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;106E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;280E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;102E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;281E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;282E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;283E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;267E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;268E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;106E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;284E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;102E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;285E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;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;286E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;287E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;288E;K;6;$afontD;K;6;CP$UIDd;3;289E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;290E;K;11;$aalignmentD;K;6;CP$UIDd;3;291E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;292E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;101E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;150E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;100E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;105E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;82E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;100E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;88E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;100E;E;S;12;valueForKey:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;294E;E;E;D;K;10;$classnameS;17;_CPSelfExpressionK;8;$classesA;S;17;_CPSelfExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;295E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;54E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;296E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;266E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;267E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;268E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;106E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;297E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;102E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;298E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;56E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;299E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;283E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;267E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;268E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;106E;K;16;$aimage-positionD;K;6;CP$UIDd;2;82E;K;6;$afontD;K;6;CP$UIDd;3;300E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;102E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;301E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;82E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;88E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;200E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;82E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;100E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;82E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;21;CPButtonIsBorderedKeyD;K;6;CP$UIDd;3;100E;K;21;CPButtonBezelStyleKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;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;302E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;303E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;288E;K;6;$afontD;K;6;CP$UIDd;3;304E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;305E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;307E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;101E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;102E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;150E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;103E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;100E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;105E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;106E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;82E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;100E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;88E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;308E;E;E;S;28;_CPFontSystemFacePlaceholderD;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;103E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;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;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;309E;E;d;2;40D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;311E;E;d;3;546D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;313E;E;f;18;0.6862745098039216f;12;0.9100000262D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;18;{{9, 3}, {63, 25}}S;18;{{0, 0}, {63, 25}}S;12;popup-buttonS;37;bordered+controlSizeRegular+roundRectD;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;12S;20;{{83, 3}, {168, 25}}S;19;{{0, 0}, {168, 25}}D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;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;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;314E;E;S;19;{{39, 3}, {95, 25}}S;18;{{0, 0}, {95, 25}}D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{145, 3}, {104, 25}}S;19;{{0, 0}, {104, 25}}D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{255, 3}, {167, 25}}S;19;{{0, 0}, {167, 25}}S;45;bezeled+controlSizeSmall+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;206E;K;12;defaultValueD;K;6;CP$UIDd;3;208E;K;6;valuesD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;211E;K;12;defaultValueD;K;6;CP$UIDd;3;106E;K;6;valuesD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;213E;K;12;defaultValueD;K;6;CP$UIDd;2;82E;K;6;valuesD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;318E;D;K;6;CP$UIDd;3;319E;E;E;D;K;10;$classnameS;26;_CPConstantValueExpressionK;8;$classesA;S;26;_CPConstantValueExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;15;CPConstantValueD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;15;CPConstantValueD;K;6;CP$UIDd;3;164E;E;S;19;{{39, 3}, {63, 25}}D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{113, 3}, {104, 25}}D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;20;{{223, 3}, {32, 25}}S;18;{{0, 0}, {32, 25}}D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;206E;K;12;defaultValueD;K;6;CP$UIDd;3;208E;K;6;valuesD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;211E;K;12;defaultValueD;K;6;CP$UIDd;3;106E;K;6;valuesD;K;6;CP$UIDd;3;321E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;4;nameD;K;6;CP$UIDd;3;213E;K;12;defaultValueD;K;6;CP$UIDd;2;82E;K;6;valuesD;K;6;CP$UIDd;3;322E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;15;CPConstantValueD;K;6;CP$UIDd;3;175E;E;S;57;{"origin":{"x":0,"y":1},"size":{"width":466,"height":21}}S;60;{"origin":{"x":67,"y":256},"size":{"width":466,"height":21}}S;54;{"origin":{"x":0,"y":0},"size":{"width":0,"height":0}}S;60;{"origin":{"x":67,"y":255},"size":{"width":466,"height":22}}S;59;{"origin":{"x":17,"y":257},"size":{"width":45,"height":17}}S;22;{"width":0,"height":0}D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;60;firstResponder+keyWindow+selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;325E;K;35;selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;325E;K;15;controlSizeMiniD;K;6;CP$UIDd;3;325E;K;16;controlSizeSmallD;K;6;CP$UIDd;3;325E;K;18;controlSizeRegularD;K;6;CP$UIDd;3;325E;K;15;editing+roundedD;K;6;CP$UIDd;3;325E;K;7;roundedD;K;6;CP$UIDd;3;325E;K;8;borderedD;K;6;CP$UIDd;3;325E;K;7;bezeledD;K;6;CP$UIDd;3;325E;K;7;editingD;K;6;CP$UIDd;3;325E;K;13;tableDataViewD;K;6;CP$UIDd;3;325E;K;6;normalD;K;6;CP$UIDd;3;325E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;3;106E;K;6;normalD;K;6;CP$UIDd;3;106E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;2;82E;K;6;normalD;K;6;CP$UIDd;2;82E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;326E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;3;255E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;3;241E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;3;241E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;328E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;3;258E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;3;241E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;3;241E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;329E;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;60;firstResponder+keyWindow+selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;330E;K;35;selectedTableDataView+tableDataViewD;K;6;CP$UIDd;3;330E;K;15;controlSizeMiniD;K;6;CP$UIDd;3;330E;K;16;controlSizeSmallD;K;6;CP$UIDd;3;330E;K;18;controlSizeRegularD;K;6;CP$UIDd;3;330E;K;15;editing+roundedD;K;6;CP$UIDd;3;330E;K;7;roundedD;K;6;CP$UIDd;3;330E;K;8;borderedD;K;6;CP$UIDd;3;330E;K;7;bezeledD;K;6;CP$UIDd;3;330E;K;7;editingD;K;6;CP$UIDd;3;330E;K;13;tableDataViewD;K;6;CP$UIDd;3;330E;K;6;normalD;K;6;CP$UIDd;3;330E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;3;106E;K;6;normalD;K;6;CP$UIDd;3;106E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;209E;K;10;CP.objectsD;K;13;tableDataViewD;K;6;CP$UIDd;2;82E;K;6;normalD;K;6;CP$UIDd;2;82E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;331E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;3;255E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;3;249E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;3;249E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;25;CPTrackinkAreaViewRectKeyD;K;6;CP$UIDd;3;333E;K;24;CPTrackingAreaOptionsKeyD;K;6;CP$UIDd;3;258E;K;22;CPTrackingAreaOwnerKeyD;K;6;CP$UIDd;3;249E;K;25;CPTrackingAreaUserInfoKeyD;K;6;CP$UIDd;1;0E;K;32;CPTrackingAreaReferencingViewKeyD;K;6;CP$UIDd;3;249E;K;24;CPTrackingAreaWindowRectD;K;6;CP$UIDd;3;334E;E;D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;336E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;196E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;251E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;201E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;88E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;206E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;339E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;253E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;340E;E;S;57;{"origin":{"x":0,"y":1},"size":{"width":160,"height":17}}S;59;{"origin":{"x":258,"y":8},"size":{"width":160,"height":17}}S;59;{"origin":{"x":258,"y":7},"size":{"width":160,"height":18}}S;56;{"origin":{"x":0,"y":1},"size":{"width":25,"height":17}}S;58;{"origin":{"x":226,"y":8},"size":{"width":25,"height":17}}S;58;{"origin":{"x":226,"y":7},"size":{"width":25,"height":18}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/AppKit/Resources/DropInCibs/TextEditorDocumentWindow.cib b/Tests/AppKit/Resources/DropInCibs/TextEditorDocumentWindow.cib new file mode 100644 index 000000000..a2eff4e03 --- /dev/null +++ b/Tests/AppKit/Resources/DropInCibs/TextEditorDocumentWindow.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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;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;15E;D;K;6;CP$UIDd;2;16E;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;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;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;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;19E;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;32E;D;K;6;CP$UIDd;2;32E;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;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;42E;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;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;27E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;45E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;2;32E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;46E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;47E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;48E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;49E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;50E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;21E;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;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;54E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;55E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;56E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;58E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;60E;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;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;21E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;21E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;55E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;58E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;64E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;65E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;25E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;30E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;29E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;66E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;66E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;66E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;66E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;67E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;59E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;59E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;68E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;52E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;52E;K;21;CPScrollViewHasVRulerD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewHasHRulerD;K;6;CP$UIDd;1;0E;K;25;CPScrollViewRulersVisibleD;K;6;CP$UIDd;1;0E;K;18;CPScrollViewVRulerD;K;6;CP$UIDd;1;0E;K;18;CPScrollViewHRulerD;K;6;CP$UIDd;1;0E;E;D;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;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;69E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;56E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;58E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;71E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;10;CPTextViewK;8;$classesA;S;10;CPTextViewS;6;CPTextS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;55E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;56E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;58E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;74E;K;23;CPTextViewIsEditableKeyD;K;6;CP$UIDd;2;67E;K;25;CPTextViewIsSelectableKeyD;K;6;CP$UIDd;2;67E;K;23;CPTextViewIsRichTextKeyD;K;6;CP$UIDd;2;67E;K;21;CPTextViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;22;CPTextViewContainerKeyD;K;6;CP$UIDd;2;76E;K;32;CPTextViewInsertionPointColorKeyD;K;6;CP$UIDd;2;77E;K;35;CPTextViewSelectedTextAttributesKeyD;K;6;CP$UIDd;2;79E;K;23;CPTextViewAllowsUndoKeyD;K;6;CP$UIDd;2;67E;K;26;CPTextViewUsesFontPanelKeyD;K;6;CP$UIDd;2;67E;K;34;CPTextViewHorizontallyResizableKeyD;K;6;CP$UIDd;2;59E;K;32;CPTextViewVerticallyResizableKeyD;K;6;CP$UIDd;2;67E;K;9;CPMaxSizeD;K;6;CP$UIDd;2;80E;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;70E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;58E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;86E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;52E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;87E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;88E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;59E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;89E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;58E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;52E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;93E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;88E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;67E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;89E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPToolbarK;8;$classesA;S;9;CPToolbarS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;22;CPToolbarIdentifierKeyD;K;6;CP$UIDd;2;94E;K;23;CPToolbarDisplayModeKeyD;K;6;CP$UIDd;2;89E;K;34;CPToolbarShowsBaselineSeparatorKeyD;K;6;CP$UIDd;2;59E;K;35;CPToolbarAllowsUserCustomizationKeyD;K;6;CP$UIDd;2;67E;K;21;CPToolbarIsVisibleKeyD;K;6;CP$UIDd;2;67E;K;20;CPToolbarSizeModeKeyD;K;6;CP$UIDd;2;89E;K;27;CPToolbarIdentifiedItemsKeyD;K;6;CP$UIDd;2;96E;K;24;CPToolbarDefaultItemsKeyD;K;6;CP$UIDd;2;97E;K;24;CPToolbarAllowedItemsKeyD;K;6;CP$UIDd;2;98E;K;27;CPToolbarSelectableItemsKeyD;K;6;CP$UIDd;2;99E;K;20;CPToolbarDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPToolbarItemK;8;$classesA;S;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;100E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;101E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;101E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;102E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;103E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;104E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;2;67E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;106E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;107E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;107E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;2;52E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;108E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;109E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;109E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;110E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;103E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;111E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;2;67E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;113E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;114E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;114E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;2;52E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;115E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;116E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;116E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;116E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;103E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;117E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;2;67E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;118E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;119E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;119E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;2;52E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;19;_CPToolbarSpaceItemK;8;$classesA;S;19;_CPToolbarSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;E;D;K;10;$classnameS;27;_CPToolbarFlexibleSpaceItemK;8;$classesA;S;27;_CPToolbarFlexibleSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;E;S;24;DocumentWindowControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;E;E;S;8;textViewS;6;windowS;13;CPApplicationS;8;CPWindowd;10;1618477056S;24;{{196, 540}, {480, 270}}S;22;{{0, 0}, {1920, 1050}}d;2;15S;6;Windowd;1;0S;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;23E;E;E;d;2;18S;4;viewS;6;normalS;6;{1, 1}F;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;25E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;68E;E;E;S;10;scrollviewD;K;10;$classnameS;12;CPAppearanceK;8;$classesA;S;12;CPAppearanceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;5;_nameD;K;6;CP$UIDd;3;120E;K;15;_allowsVibrancyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;121E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;121E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;56E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;58E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;E;E;d;1;8D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;72E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;15;CPTextContainerK;8;$classesA;S;15;CPTextContainerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;22;CPTextContainerSizeKeyD;K;6;CP$UIDd;2;80E;K;31;CPTextContainerLayoutManagerKeyD;K;6;CP$UIDd;3;126E;K;37;CPTextContainerWidthTracksTextViewKeyD;K;6;CP$UIDd;2;67E;K;38;CPTextContainerHeightTracksTextViewKeyD;K;6;CP$UIDd;2;59E;K;37;CPTextContainerLineFragmentPaddingKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;72E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;78E;K;10;CP.objectsD;K;7;NSColorD;K;6;CP$UIDd;3;128E;K;17;NSBackgroundColorD;K;6;CP$UIDd;3;129E;E;E;S;15;{480, 10000000}S;24;{{-100, 355}, {240, 15}}S;19;{{0, 0}, {240, 15}}d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;_horizontalScrollerDidScroll:d;1;4d;1;1S;21;{{463, 0}, {15, 270}}S;19;{{0, 0}, {15, 270}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;_verticalScrollerDidScroll:S;36;CF0D66E0-8702-4344-A8C0-DD87E0AF7A51D;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;10;CP.objectsD;K;23;CPToolbarShowColorsItemD;K;6;CP$UIDd;2;34E;K;22;CPToolbarShowFontsItemD;K;6;CP$UIDd;2;35E;K;18;CPToolbarSpaceItemD;K;6;CP$UIDd;2;38E;K;18;CPToolbarPrintItemD;K;6;CP$UIDd;2;36E;K;26;CPToolbarFlexibleSpaceItemD;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;36E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;38E;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;23;CPToolbarShowColorsItemS;6;ColorsS;16;Show Color Paneld;2;-1S;21;orderFrontColorPanel:D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;105E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;130E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;131E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;132E;E;S;8;{45, 32}S;22;CPToolbarShowFontsItemS;5;FontsS;15;Show Font PanelS;20;orderFrontFontPanel:D;K;10;$classnameS;7;CPImageK;8;$classesA;S;7;CPImageS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;112E;K;10;CPFilenameD;K;6;CP$UIDd;3;133E;K;6;CPSizeD;K;6;CP$UIDd;3;134E;E;S;8;{37, 24}S;18;CPToolbarPrintItemS;5;PrintS;14;printDocument:D;K;6;$classD;K;6;CP$UIDd;3;112E;K;10;CPFilenameD;K;6;CP$UIDd;3;133E;K;6;CPSizeD;K;6;CP$UIDd;3;135E;E;S;8;{36, 24}S;20;CPAppearanceNameAquaS;16;{{0, 0}, {0, 0}}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;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;E;E;S;5;colorD;K;10;$classnameS;15;CPLayoutManagerK;8;$classesA;S;15;CPLayoutManagerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;29;CPLayoutManagerTextStorageKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;89E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;72E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;E;D;K;6;$classD;K;6;CP$UIDd;2;72E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;140E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;57E;E;S;7;CPImageS;21;CPImageNameColorPanelD;K;6;$classD;K;6;CP$UIDd;2;78E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;133E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;133E;K;4;sizeD;K;6;CP$UIDd;3;142E;E;E;S;0;S;8;{19, 12}S;8;{19, 16}D;K;10;$classnameS;13;CPTextStorageK;8;$classesA;S;13;CPTextStorageS;25;CPMutableAttributedStringS;18;CPAttributedStringS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;136E;K;24;CPAttributedStringStringD;K;6;CP$UIDd;3;133E;K;24;CPAttributedStringRangesD;K;6;CP$UIDd;3;143E;K;28;CPAttributedStringAttributesD;K;6;CP$UIDd;3;144E;E;f;12;0.9981992245D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;89E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;89E;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;141E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;147E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;148E;E;E;f;11;0.602715373S;22;{"width":0,"height":0}D;K;6;$classD;K;6;CP$UIDd;3;141E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;78E;K;10;CP.objectsD;E;E;S;25;{"location":0,"length":0}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Foundation/CPMapTableTest.j b/Tests/Foundation/CPMapTableTest.j index d5c7864d8..d8a5fbfc9 100644 --- a/Tests/Foundation/CPMapTableTest.j +++ b/Tests/Foundation/CPMapTableTest.j @@ -1,6 +1,8 @@ @import @import @import +@import +@import @import @import @@ -139,6 +141,18 @@ [self assertTrue:[foundValues containsObject:@"value3"]]; } +- (void)testArchivingPreservesEntries +{ + [map_table setObject:@"first" forKey:@"one"]; + [map_table setObject:@"second" forKey:@"two"]; + + var decoded = [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:map_table]]; + + [self assert:2 equals:[decoded count]]; + [self assert:@"first" equals:[decoded objectForKey:@"one"]]; + [self assert:@"second" equals:[decoded objectForKey:@"two"]]; +} + - (void)testDictionaryRepresentation { [map_table setObject:@"value1" forKey:@"key1"]; diff --git a/Tests/Foundation/CPPredicateTest.j b/Tests/Foundation/CPPredicateTest.j index f57868a9d..be0688f23 100644 --- a/Tests/Foundation/CPPredicateTest.j +++ b/Tests/Foundation/CPPredicateTest.j @@ -434,6 +434,41 @@ [self assertTrue:[predicate evaluateWithObject:dict] message:"Predicate " + predicate + " should evaluate to TRUE"]; } +- (void)testCustomSelectorPredicateParsing +{ + var predicate = [CPPredicate predicateWithFormat:@"SELF isKindOfClass: %@", [CPArray class]]; + + [self assert:CPCustomSelectorPredicateOperatorType equals:[predicate predicateOperatorType]]; + [self assert:@selector(isKindOfClass:) equals:[predicate customSelector]]; + [self assertTrue:[predicate evaluateWithObject:[CPArray array]]]; + [self assertFalse:[predicate evaluateWithObject:@{}]]; + + var negated = [CPPredicate predicateWithFormat:@"NOT SELF isKindOfClass: %@", [CPArray class]]; + + [self assertFalse:[negated evaluateWithObject:[CPArray array]]]; + [self assertTrue:[negated evaluateWithObject:@{}]]; + + // A parse failure is reported through CPLogConsole, which is captured here. + var logConsole = CPLogConsole, + messages = []; + + CPLogConsole = function(aString) + { + messages.push(aString); + }; + + try + { + [self assertNull:[CPPredicate predicateWithFormat:@"ANY SELF isKindOfClass: %@", [CPArray class]]]; + } + finally + { + CPLogConsole = logConsole; + } + + [self assertTrue:messages.length > 0]; +} + - (void)testExpressionAndPredicateIsEqual { var cexp1 = [CPExpression expressionForConstantValue:2], diff --git a/Tests/Foundation/CPTimeZoneTest.j b/Tests/Foundation/CPTimeZoneTest.j index 04dbfac33..0d4207ffe 100644 --- a/Tests/Foundation/CPTimeZoneTest.j +++ b/Tests/Foundation/CPTimeZoneTest.j @@ -27,6 +27,8 @@ CPLocale _locale; CPData _data; CPDate _date; + CPDate _januaryDate; + CPDate _julyDate; } - (void)setUp @@ -34,6 +36,42 @@ _locale = [[CPLocale alloc] initWithLocaleIdentifier:@"en_US"]; _data = [CPData dataWithRawString:@"Data with string"]; _date = [[CPDate alloc] initWithString:@"2011-10-05 16:34:38 +0900"]; + + /* + The rules of a zone decide its offset and abbreviation on a given date. Fixed + dates in January and July give the same result on any day and on any host. + A zone with daylight saving time differs between them, and a zone without it + has the same offset on both. + */ + _januaryDate = [[CPDate alloc] initWithString:@"2026-01-15 12:00:00 +0000"]; + _julyDate = [[CPDate alloc] initWithString:@"2026-07-15 12:00:00 +0000"]; +} + +- (void)assertPacificTimeZone:(CPTimeZone)timeZone +{ + [self assert:@"America/Los_Angeles" equals:[timeZone name]]; + + [self assert:@"PST" equals:[timeZone abbreviationForDate:_januaryDate]]; + [self assert:(-480 * 60) equals:[timeZone secondsFromGMTForDate:_januaryDate]]; + [self assertFalse:[timeZone isDaylightSavingTimeForDate:_januaryDate]]; + + [self assert:@"PDT" equals:[timeZone abbreviationForDate:_julyDate]]; + [self assert:(-420 * 60) equals:[timeZone secondsFromGMTForDate:_julyDate]]; + [self assertTrue:[timeZone isDaylightSavingTimeForDate:_julyDate]]; + + // The abbreviation and the offset are both those of the current date. + var now = [CPDate date]; + + [self assert:[timeZone abbreviationForDate:now] equals:[timeZone abbreviation]]; + [self assert:[timeZone secondsFromGMTForDate:now] equals:[timeZone secondsFromGMT]]; + [self assert:@"America/Los_Angeles (" + [timeZone abbreviation] + ") offset " + [timeZone secondsFromGMT] equals:[timeZone description]]; + + [self assert:@"Pacific Standard Time" equals:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale]]; + [self assert:@"PST" equals:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale]]; + [self assert:@"Pacific Daylight Time" equals:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale]]; + [self assert:@"PDT" equals:[timeZone localizedName:CPTimeZoneNameStyleShortDaylightSaving locale:_locale]]; + [self assert:@"Pacific Time" equals:[timeZone localizedName:CPTimeZoneNameStyleGeneric locale:_locale]]; + [self assert:@"PT" equals:[timeZone localizedName:CPTimeZoneNameStyleShortGeneric locale:_locale]]; } - (void)tearDown @@ -43,17 +81,8 @@ - (void)testTimeZoneWithAbbreviation { - var timeZone = [CPTimeZone timeZoneWithAbbreviation:@"PDT"]; - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortDaylightSaving locale:_locale] equals:@"PDT"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleGeneric locale:_locale] equals:@"Pacific Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortGeneric locale:_locale] equals:@"PT"]; + [self assertPacificTimeZone:[CPTimeZone timeZoneWithAbbreviation:@"PDT"]]; + [self assertPacificTimeZone:[CPTimeZone timeZoneWithAbbreviation:@"PST"]]; } - (void)testTimeZoneWithWrongAbbreviation @@ -64,26 +93,7 @@ - (void)testTimeZoneWithName { - var timeZone = [CPTimeZone timeZoneWithName:@"America/Los_Angeles"]; - - // The current implementation can return daylight saving time or standard time depending on the current date - if ([timeZone abbreviation] === @"PDT") { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; - } else { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PST"]; - [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; - } - [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortDaylightSaving locale:_locale] equals:@"PDT"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleGeneric locale:_locale] equals:@"Pacific Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortGeneric locale:_locale] equals:@"PT"]; + [self assertPacificTimeZone:[CPTimeZone timeZoneWithName:@"America/Los_Angeles"]]; } - (void)testTimeZoneWithWrongName @@ -109,24 +119,8 @@ { var timeZone = [CPTimeZone timeZoneWithName:@"America/Los_Angeles" data:_data]; - if ([timeZone abbreviation] === @"PDT") { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; - } else { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PST"]; - [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; - } - [self assert:[timeZone data] equals:_data]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortDaylightSaving locale:_locale] equals:@"PDT"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleGeneric locale:_locale] equals:@"Pacific Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortGeneric locale:_locale] equals:@"PT"]; + [self assertPacificTimeZone:timeZone]; + [self assert:_data equals:[timeZone data]]; } - (void)testTimeZoneWithWrongNameWithData @@ -179,25 +173,7 @@ - (void)testInitTimeZoneWithName { - var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"]; - - if ([timeZone abbreviation] === @"PDT") { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; - } else { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PST"]; - [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; - } - [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortDaylightSaving locale:_locale] equals:@"PDT"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleGeneric locale:_locale] equals:@"Pacific Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortGeneric locale:_locale] equals:@"PT"]; + [self assertPacificTimeZone:[[CPTimeZone alloc] initWithName:@"America/Los_Angeles"]]; } - (void)testInitTimeZoneWithWrongName @@ -223,24 +199,8 @@ { var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles" data:_data]; - if ([timeZone abbreviation] === @"PDT") { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; - } else { - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PST"]; - [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; - } - [self assert:[timeZone data] equals:_data]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortDaylightSaving locale:_locale] equals:@"PDT"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleGeneric locale:_locale] equals:@"Pacific Time"]; - [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortGeneric locale:_locale] equals:@"PT"]; + [self assertPacificTimeZone:timeZone]; + [self assert:_data equals:[timeZone data]]; } - (void)testInitTimeZoneWithWrongNameWithData @@ -262,14 +222,17 @@ } } +/* + The local time zone depends on the host, and many zones have no curated + abbreviation, so a named zone is used. +*/ - (void)testAbbreviationWithDate { - var timeZone = [CPTimeZone localTimeZone], - abbreviation = [timeZone abbreviationForDate:_date]; + var timeZone = [CPTimeZone timeZoneWithName:@"America/Los_Angeles"]; - [self assert:(abbreviation !== nil) equals:YES]; - var knownAbbreviations = [CPTimeZone abbreviationDictionary]; - [self assert:[knownAbbreviations containsKey:abbreviation] equals:YES]; + [self assert:@"PDT" equals:[timeZone abbreviationForDate:_date]]; + [self assert:@"PST" equals:[timeZone abbreviationForDate:_januaryDate]]; + [self assertNotNull:[[CPTimeZone localTimeZone] abbreviationForDate:_date]]; } - (void)testAbbreviationWithNilDate @@ -301,22 +264,17 @@ { var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"]; - if ([timeZone abbreviation] === @"PDT") { - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - } else { - [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; - } + [self assert:(-480 * 60) equals:[timeZone secondsFromGMTForDate:_januaryDate]]; + [self assert:(-420 * 60) equals:[timeZone secondsFromGMTForDate:_julyDate]]; + [self assert:[timeZone secondsFromGMTForDate:[CPDate date]] equals:[timeZone secondsFromGMT]]; } - (void)testDescription { - var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"]; + var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"], + expected = [timeZone secondsFromGMT] === -480 * 60 ? @"America/Los_Angeles (PST) offset -28800" : @"America/Los_Angeles (PDT) offset -25200"; - if ([timeZone abbreviation] === @"PDT") { - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; - } else { - [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; - } + [self assert:expected equals:[timeZone description]]; } - (void)testLocalizedName @@ -401,11 +359,14 @@ - (void)testMSKCorrectCurrentValue { - // MSD/MSK resolve to Europe/Moscow. - // Russia abolished DST in 2014, so there is no distinct summer offset. - // The current permanent offset is +03:00 (10800 seconds). + // MSD and MSK resolve to Europe/Moscow, which has no daylight saving time. var timeZone = [CPTimeZone timeZoneWithAbbreviation:@"MSD"]; - [self assert:[timeZone secondsFromGMT] equals:(180 * 60)]; + + [self assert:@"Europe/Moscow" equals:[timeZone name]]; + [self assert:(180 * 60) equals:[timeZone secondsFromGMTForDate:_januaryDate]]; + [self assert:(180 * 60) equals:[timeZone secondsFromGMTForDate:_julyDate]]; + [self assertFalse:[timeZone isDaylightSavingTimeForDate:_julyDate]]; + [self assert:[timeZone secondsFromGMTForDate:[CPDate date]] equals:[timeZone secondsFromGMT]]; } - (void)testKnownTimeZoneNamesUsesIntlWhenAvailable