From ca1a1b43f1183e69967d3e504f907cded09e490e Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 15 Jan 2011 16:36:38 +0100 Subject: [PATCH] CPRuleEditor & CPPredicateEditor & CPPredicateEditorRowtemplate implementations with theming, nib2cib support. Tests: CPRuleEditorCibTest, CPPredicateEditorCibTest, SmartFoldersDemo: a real world usage of CPPredicateEditor. Documentation for these 3 new classes. --- AppKit/AppKit.j | 3 + AppKit/CPRuleEditor/CPPredicateEditor.j | 490 ++ .../CPPredicateEditorRowTemplate.j | 806 +++ AppKit/CPRuleEditor/CPRuleEditor.j | 2531 +++++++++ .../CPRuleEditor/_CPPredicateEditorRowNode.j | 91 + AppKit/CPRuleEditor/_CPPredicateEditorTree.j | 33 + AppKit/CPRuleEditor/_CPRuleEditorLocalizer.j | 75 + .../CPRuleEditor/_CPRuleEditorPopUpButton.j | 157 + AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j | 109 + .../CPRuleEditor/_CPRuleEditorViewSliceRow.j | 493 ++ .../Aristo/Resources/rule-editor-add.png | Bin 0 -> 591 bytes .../Aristo/Resources/rule-editor-remove.png | Bin 0 -> 576 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 33 +- .../CPPredicateEditorCibTest/AppController.j | 190 + .../CPPredicateEditorCibTest/Info.plist | 12 + .../Manual/CPPredicateEditorCibTest/Jakefile | 93 + .../Resources/MainMenu.cib | 1 + .../Resources/MainMenu.xib | 4900 +++++++++++++++++ .../Resources/format.strings | 1 + .../Resources/spinner.gif | Bin 0 -> 1849 bytes .../CPPredicateEditorCibTest/index-debug.html | 101 + .../CPPredicateEditorCibTest/index.html | 79 + Tests/Manual/CPPredicateEditorCibTest/main.j | 18 + .../CPRuleEditorCibTest/AppController.j | 111 + .../CPViewAnimationTransition.j | 231 + Tests/Manual/CPRuleEditorCibTest/Info.plist | 12 + Tests/Manual/CPRuleEditorCibTest/Jakefile | 94 + .../Resources/MainMenu.cib | 1 + .../Resources/MainMenu.xib | 4447 +++++++++++++++ .../Resources/criteria.plist | 192 + .../Resources/format.strings | 18 + .../CPRuleEditorCibTest/Resources/spinner.gif | Bin 0 -> 1849 bytes .../Manual/CPRuleEditorCibTest/RuleControls.j | 76 + .../Manual/CPRuleEditorCibTest/RuleDelegate.j | 147 + .../CPRuleEditorCibTest/index-debug.html | 104 + Tests/Manual/CPRuleEditorCibTest/index.html | 78 + Tests/Manual/CPRuleEditorCibTest/main.j | 18 + Tests/Manual/SmartFoldersDemo/AppController.j | 319 ++ .../SmartFoldersDemo/BadgedOutlineView.j | 264 + .../SmartFoldersDemo/ImageAndTextView.j | 69 + Tests/Manual/SmartFoldersDemo/Info.plist | 12 + Tests/Manual/SmartFoldersDemo/Jakefile | 94 + .../SmartFoldersDemo/Resources/MainMenu.cib | 1 + .../SmartFoldersDemo/Resources/MainMenu.xib | 1123 ++++ .../Resources/PredicateEditor.cib | 1 + .../Resources/PredicateEditor.xib | 1530 +++++ .../Resources/SmartFolder.png | Bin 0 -> 1672 bytes .../Resources/searchBarBlue.png | Bin 0 -> 666 bytes .../SmartFoldersDemo/Resources/spinner.gif | Bin 0 -> 1849 bytes .../Resources/tableArray.plist | 96 + .../Manual/SmartFoldersDemo/index-debug.html | 104 + Tests/Manual/SmartFoldersDemo/index.html | 78 + Tests/Manual/SmartFoldersDemo/main.j | 18 + Tools/nib2cib/NSAppKit.j | 2 + Tools/nib2cib/NSExpression.j | 199 + Tools/nib2cib/NSFoundation.j | 1 + Tools/nib2cib/NSPredicateEditor.j | 94 + Tools/nib2cib/NSRuleEditor.j | 111 + 58 files changed, 19860 insertions(+), 1 deletion(-) create mode 100644 AppKit/CPRuleEditor/CPPredicateEditor.j create mode 100644 AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j create mode 100644 AppKit/CPRuleEditor/CPRuleEditor.j create mode 100644 AppKit/CPRuleEditor/_CPPredicateEditorRowNode.j create mode 100644 AppKit/CPRuleEditor/_CPPredicateEditorTree.j create mode 100644 AppKit/CPRuleEditor/_CPRuleEditorLocalizer.j create mode 100644 AppKit/CPRuleEditor/_CPRuleEditorPopUpButton.j create mode 100644 AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j create mode 100644 AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j create mode 100644 AppKit/Themes/Aristo/Resources/rule-editor-add.png create mode 100644 AppKit/Themes/Aristo/Resources/rule-editor-remove.png create mode 100644 Tests/Manual/CPPredicateEditorCibTest/AppController.j create mode 100644 Tests/Manual/CPPredicateEditorCibTest/Info.plist create mode 100644 Tests/Manual/CPPredicateEditorCibTest/Jakefile create mode 100644 Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPPredicateEditorCibTest/Resources/format.strings create mode 100644 Tests/Manual/CPPredicateEditorCibTest/Resources/spinner.gif create mode 100644 Tests/Manual/CPPredicateEditorCibTest/index-debug.html create mode 100644 Tests/Manual/CPPredicateEditorCibTest/index.html create mode 100644 Tests/Manual/CPPredicateEditorCibTest/main.j create mode 100644 Tests/Manual/CPRuleEditorCibTest/AppController.j create mode 100644 Tests/Manual/CPRuleEditorCibTest/CPViewAnimationTransition.j create mode 100644 Tests/Manual/CPRuleEditorCibTest/Info.plist create mode 100644 Tests/Manual/CPRuleEditorCibTest/Jakefile create mode 100644 Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPRuleEditorCibTest/Resources/criteria.plist create mode 100644 Tests/Manual/CPRuleEditorCibTest/Resources/format.strings create mode 100644 Tests/Manual/CPRuleEditorCibTest/Resources/spinner.gif create mode 100644 Tests/Manual/CPRuleEditorCibTest/RuleControls.j create mode 100644 Tests/Manual/CPRuleEditorCibTest/RuleDelegate.j create mode 100644 Tests/Manual/CPRuleEditorCibTest/index-debug.html create mode 100644 Tests/Manual/CPRuleEditorCibTest/index.html create mode 100644 Tests/Manual/CPRuleEditorCibTest/main.j create mode 100644 Tests/Manual/SmartFoldersDemo/AppController.j create mode 100644 Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j create mode 100644 Tests/Manual/SmartFoldersDemo/ImageAndTextView.j create mode 100644 Tests/Manual/SmartFoldersDemo/Info.plist create mode 100644 Tests/Manual/SmartFoldersDemo/Jakefile create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/MainMenu.cib create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/MainMenu.xib create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.cib create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.xib create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/SmartFolder.png create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/searchBarBlue.png create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/spinner.gif create mode 100644 Tests/Manual/SmartFoldersDemo/Resources/tableArray.plist create mode 100644 Tests/Manual/SmartFoldersDemo/index-debug.html create mode 100644 Tests/Manual/SmartFoldersDemo/index.html create mode 100644 Tests/Manual/SmartFoldersDemo/main.j create mode 100644 Tools/nib2cib/NSExpression.j create mode 100644 Tools/nib2cib/NSPredicateEditor.j create mode 100644 Tools/nib2cib/NSRuleEditor.j diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index a090a7805..babd86e25 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -66,9 +66,12 @@ @import "CPPanel.j" @import "CPPasteboard.j" @import "CPPopUpButton.j" +@import "CPPredicateEditor.j" +@import "CPPredicateEditorRowTemplate.j" @import "CPProgressIndicator.j" @import "CPRadio.j" @import "CPResponder.j" +@import "CPRuleEditor.j" @import "CPScroller.j" @import "CPScrollView.j" @import "CPSearchField.j" diff --git a/AppKit/CPRuleEditor/CPPredicateEditor.j b/AppKit/CPRuleEditor/CPPredicateEditor.j new file mode 100644 index 000000000..809935f7e --- /dev/null +++ b/AppKit/CPRuleEditor/CPPredicateEditor.j @@ -0,0 +1,490 @@ +/* + * CPPredicateEditor.j + * AppKit + * + * Created by cacaodev. + * Copyright 2011, cacaodev. + * + * 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 "CPRuleEditor.j" +@import "_CPPredicateEditorTree.j" +@import "_CPPredicateEditorRowNode.j" +@import "CPPredicateEditorRowTemplate.j" + +@implementation CPPredicateEditor : CPRuleEditor +{ + CPArray _allTemplates; + CPArray _rootTrees; + CPArray _rootHeaderTrees; + id _predicateTarget @accessors(property=target); + SEL _predicateAction @accessors(property=action); +} + +#pragma mark public methods +/*! + @ingroup appkit + @class CPPredicateEditor + + @brief CPPredicateEditor is a subclass of CPRuleEditor that is specialized for editing CPPredicate objects. + + CPPredicateEditor provides a CPPredicate property—objectValue (inherited from CPControl)—that you can get and set directly, and that you can bind using bindings (you typically configure a predicate editor in Interface Builder). CPPredicateEditor depends on another class, CPPredicateEditorRowTemplate, that describes the available predicates and how to display them. + + Unlike CPRuleEditor, CPPredicateEditor does not depend on its delegate to populate its rows (and does not call the populating delegate methods). Instead, its rows are populated from its objectValue property (an instance of CPPredicate). CPPredicateEditor relies on instances CPPredicateEditorRowTemplate, which are responsible for mapping back and forth between the displayed view values and various predicates. + + CPPredicateEditor exposes one property, rowTemplates, which is an array of CPPredicateEditorRowTemplate objects. +*/ + +/*! + @brief Returns the row templates for the receiver. + @return The row templates for the receiver. + @discussion Until otherwise set, this contains a single compound CPPredicateEditorRowTemplate object. + @see setRowTemplates: +*/ +- (CPArray)rowTemplates +{ + return _allTemplates; +} + +/*! + @brief Sets the row templates for the receiver. + @param rowTemplates An array of CPPredicateEditorRowTemplate objects. + @see rowTemplates +*/ +- (void)setRowTemplates:(id)rowTemplates +{ + if (_allTemplates == rowTemplates) + return; + + _allTemplates = rowTemplates; + + [self _updateItemsByCompoundTemplates]; + [self _updateItemsBySimpleTemplates]; + + if ([self numberOfRows] > 0) + { + var predicate = [super predicate]; + [self _reflectPredicate:predicate]; + } +} + +/*! @cond */ +- (void)_initRuleEditorShared +{ + [super _initRuleEditorShared]; + + _rootTrees = [CPArray array]; + _rootHeaderTrees = [CPArray array]; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + if (self != nil) + { + var initialTemplate = [[CPPredicateEditorRowTemplate alloc] initWithCompoundTypes:[CPAndPredicateType, CPOrPredicateType]]; + _allTemplates = [CPArray arrayWithObject:initialTemplate]; + } + + return self; +} + +- (id)objectValue +{ + return [super predicate]; +} + +- (void)_updateItemsBySimpleTemplates +{ + var templates = [CPMutableArray array], + count = [_allTemplates count], + t; + + while (count--) + { + var t = _allTemplates[count]; + if ([t _rowType] == CPRuleEditorRowTypeSimple) + [templates insertObject:t atIndex:0]; + } + + var trees = [self _constructTreesForTemplates:templates]; + if ([trees count] > 0) + _rootTrees = [self _mergeTree:trees]; +} + +- (void)_updateItemsByCompoundTemplates +{ + var templates = [CPMutableArray array], + count = [_allTemplates count], + t; + + while (count--) + { + var t = _allTemplates[count]; + if ([t _rowType] == CPRuleEditorRowTypeCompound) + [templates insertObject:t atIndex:0]; + } + + var trees = [self _constructTreesForTemplates:templates]; + if ([trees count] > 0) + _rootHeaderTrees = [self _mergeTree:trees]; +} + +- (CPArray)_constructTreesForTemplates:(id)templates +{ + var trees = [CPMutableArray array], + count = [templates count]; + + for (var i = 0; i < count; i++) + { + var tree = [self _constructTreeForTemplate:templates[i]]; + [trees addObjectsFromArray:tree]; + } + + return trees; +} + +- (id)_mergeTree:(id)tree +{ + var merged = [CPMutableArray array], + titles = [CPMutableArray array], + count = [tree count]; + + for (var i = 0; i < count; i++) + { + var t = tree[i], + title = [CPString stringWithString:[t title]]; + + if ([titles containsObject:title]) + { + CPLogConsole("CPPredicate does not support templates merging yet. Ignoring duplicate template: " + [t description]); + continue; + } + + [merged addObject:t]; + [titles addObject:title]; + } + + return merged; +} + +- (id)_constructTreeForTemplate:(CPPredicateEditorRowTemplate)aTemplate +{ + var tree = [CPArray array], + templateViews = [aTemplate templateViews], + count = [templateViews count]; + + while (count--) + { + var children = [CPArray array], + itemsCount = 0, + menuIndex = -1, + itemsArray, + + templateView = [templateViews objectAtIndex:count], + isPopup = [templateView isKindOfClass:[CPPopUpButton class]]; + + if (isPopup) + { + itemArray = [[templateView itemArray] valueForKey:@"title"]; + itemsCount = [itemArray count], + menuIndex = 0; + } + + for (; menuIndex < itemsCount; menuIndex++) + { + var item = [_CPPredicateEditorTree new]; + [item setIndexIntoTemplate:count]; + [item setTemplate:aTemplate]; + [item setMenuItemIndex:menuIndex]; + if (isPopup) + [item setTitle:[itemArray objectAtIndex:menuIndex]]; + + [children addObject:item]; + } + + [children makeObjectsPerformSelector:@selector(setChildren:) withObject:tree]; + tree = children; + } + + return tree; +} + +#pragma mark Set the Predicate + +- (void)setObjectValue:(id)objectValue +{ + if (![[objectValue predicateFormat] isEqualToString:[[super predicate] predicateFormat]]) // ?? + [self _reflectPredicate:objectValue]; +} + +- (void)_reflectPredicate:(id)predicate +{ + var animation = _currentAnimation; + _currentAnimation = nil; + + if (predicate != nil) + { + if ((_nestingMode == CPRuleEditorNestingModeSimple || _nestingMode == CPRuleEditorNestingModeCompound) + && [predicate isKindOfClass:[CPComparisonPredicate class]]) + predicate = [[CPCompoundPredicate alloc] initWithType:[self _compoundPredicateTypeForRootRows] subpredicates:[CPArray arrayWithObject:predicate]]; + + var row = [self _rowObjectFromPredicate:predicate]; + if (row != nil) + [_boundArrayOwner setValue:[CPArray arrayWithObject:row] forKey:_boundArrayKeyPath]; + } + + [self setAnimation:animation]; +} + +- (id)_rowObjectFromPredicate:(CPPredicate)predicate +{ + var quality, // TODO: We should use this ref somewhere ! + type, + matchedTemplate = [CPPredicateEditorRowTemplate _bestMatchForPredicate:predicate inTemplates:[self rowTemplates] quality:quality]; + + if (matchedTemplate == nil) + return nil; + + var copyTemplate = [matchedTemplate copy], + subpredicates = [matchedTemplate displayableSubpredicatesOfPredicate:predicate]; + + if (subpredicates == nil) + { + [copyTemplate _setComparisonPredicate:predicate]; + type = CPRuleEditorRowTypeSimple; + } + else + { + [copyTemplate _setCompoundPredicate:predicate]; + type = CPRuleEditorRowTypeCompound; + } + + var row = [self _rowFromTemplate:copyTemplate originalTemplate:matchedTemplate withRowType:type]; + + if (subpredicates == nil) + return row; + + var count = [subpredicates count], + subrows = [CPMutableArray array]; + + for (var i = 0; i < count; i++) + { + var subrow = [self _rowObjectFromPredicate:subpredicates[i]]; + if (subrow != nil) + [subrows addObject:subrow]; + } + + [row setValue:subrows forKey:[super subrowsKeyPath]]; + + return row; +} + +- (id)_rowFromTemplate:(CPPredicateEditorRowTemplate)aTemplate originalTemplate:(CPPredicateEditorRowTemplate)originalTemplate withRowType:(CPRuleEditorRowType)rowType +{ + var criteria = [CPArray array], + values = [CPArray array], + templateViews = [aTemplate templateViews], + rootItems, + count; + + rootItems = (rowType == CPRuleEditorRowTypeSimple) ? _rootTrees : _rootHeaderTrees; + + while ((count = [rootItems count]) > 0) + { + var treeChild; + for (var i = 0; i < count; i++) + { + treeChild = [rootItems objectAtIndex:i]; + + var currentView = [templateViews objectAtIndex:[treeChild indexIntoTemplate]], + menuItemIndex = [treeChild menuItemIndex]; + + if (menuItemIndex == -1 || [[treeChild title] isEqual:[currentView titleOfSelectedItem]]) + { + var node = [_CPPredicateEditorRowNode _rowNodeFromTree:treeChild withTemplate:aTemplate]; + [criteria addObject:node]; + [values addObject:[node displayValue]]; + break; + } + } + + rootItems = [treeChild children]; + } + + var row = [CPDictionary dictionaryWithObjectsAndKeys:criteria, @"criteria", values, @"displayValues", rowType, @"rowType"]; + + return row; +} + +#pragma mark Get the predicate + +- (void)_updatePredicate +{ + //[self willChangeValueForKey:@"objectValue"]; + [self _updatePredicateFromRows]; + //[self didChangeValueForKey:@"objectValue"]; +} + +- (void)_updatePredicateFromRows +{ + var rootRowsArray = [super _rootRowsArray], + subpredicates = [CPMutableArray array], + count = count2 = [rootRowsArray count], + predicate; + + while (count--) + { + var item = [rootRowsArray objectAtIndex:count], + subpredicate = [self _predicateFromRowItem:item]; + + if (subpredicate != nil) + [subpredicates insertObject:subpredicate atIndex:0]; + } + + if (_nestingMode != CPRuleEditorNestingModeList && count2 == 1) + predicate = [subpredicates lastObject]; + else + predicate = [[CPCompoundPredicate alloc] initWithType:[self _compoundPredicateTypeForRootRows] subpredicates:subpredicates]; + + [super _setPredicate:predicate]; +} + +- (id)_predicateFromRowItem:(id)rowItem +{ + var subpredicates = [CPArray array], + subrows = [rowItem valueForKey:[super subrowsKeyPath]], + count = [subrows count]; + + for (var i = 0; i < count; i++) + { + var predicate = [self _predicateFromRowItem:subrows[i]]; + [subpredicates addObject:predicate]; + } + + var criteria = [rowItem valueForKey:[super criteriaKeyPath]], + displayValues = [rowItem valueForKey:[super displayValuesKeyPath]], + leftNode = [criteria objectAtIndex:0], + templateViews = [leftNode templateViews], + count = [criteria count]; + + for (var j = 0; j < count; j++) + { + var view = [templateViews objectAtIndex:j], + value = [displayValues objectAtIndex:j]; + + if ([view respondsToSelector:@selector(selectItemWithTitle:)]) + [view selectItemWithTitle:value]; + else + [view setObjectValue:[value objectValue]]; + + } + + return [[leftNode templateForRow] predicateWithSubpredicates:subpredicates]; +} + +- (CPCompoundPredicateType)_compoundPredicateTypeForRootRows +{ + return CPAndPredicateType; +} + +#pragma mark Control delegate + +- (void)_setDefaultTargetAndActionOnView:(CPView)view +{ + if ([view isKindOfClass:[CPControl class]]) + { + [view setAction:@selector(_templateControlValueDidChange:)]; + [view setTarget:self]; + } +} + +- (void)controlTextDidEndEditing:(CPNotification)notification +{ + [self _updatePredicate]; +} + +- (void)_templateControlValueDidChange:(id)sender +{ + //[self _updatePredicate]; +} + +- (void)controlTextDidBeginEditing:(CPNotification)notification +{ +} + +- (void)controlTextDidChange:(CPNotification)notification +{ +} + +#pragma mark RuleEditor delegate methods + +- (int)_queryNumberOfChildrenOfItem:(id)rowItem withRowType:(int)type +{ + if (rowItem == nil) + { + var trees = (type == CPRuleEditorRowTypeSimple) ? _rootTrees : _rootHeaderTrees; + return [trees count]; + } + + return [[rowItem children] count]; +} + +- (id)_queryChild:(int)index ofItem:(id)rowItem withRowType:(int)type +{ + if (rowItem == nil) + { + var trees = (type == CPRuleEditorRowTypeSimple) ? _rootTrees : _rootHeaderTrees; + return [_CPPredicateEditorRowNode rowNodeFromTree:trees[index]]; + } + + return [[rowItem children] objectAtIndex:index]; +} + +- (id)_queryValueForItem:(id)rowItem inRow:(int)rowIndex +{ + [rowItem copyTemplateIfNecessary]; + return [rowItem displayValue]; +} + +@end + +var CPPredicateTemplatesKey = @"CPPredicateTemplates"; + +@implementation CPPredicateEditor (CPCoding) + +- (id)initWithCoder:(id)aCoder +{ + self = [super initWithCoder:aCoder]; + if (self != nil) + { + var nibTemplates = [aCoder decodeObjectForKey:CPPredicateTemplatesKey]; + if (nibTemplates != nil) + [self setRowTemplates:nibTemplates]; + } + + return self; +} + +- (void)encodeWithCoder:(id)aCoder +{ + [super encodeWithCoder:aCoder]; + [aCoder encodeObject:_allTemplates forKey:CPPredicateTemplatesKey]; +} + +@end + +/*! @endcond */ \ No newline at end of file diff --git a/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j new file mode 100644 index 000000000..e470fbe7c --- /dev/null +++ b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j @@ -0,0 +1,806 @@ +/* + * CPPredicateEditorRowTemplate.j + * AppKit + * + * Created by cacaodev. + * Copyright 2011, cacaodev. + * + * 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 + */ + +CPUndefinedAttributeType = 0, +CPInteger16AttributeType = 100, +CPInteger32AttributeType = 200, +CPInteger64AttributeType = 300, +CPDecimalAttributeType = 400, +CPDoubleAttributeType = 500, +CPFloatAttributeType = 600, +CPStringAttributeType = 700, +CPBooleanAttributeType = 800, +CPDateAttributeType = 900, +CPBinaryDataAttributeType = 1000, +CPTransformableAttributeType = 1800; + +@implementation CPPredicateEditorRowTemplate : CPObject +{ + int _templateType @accessors(readwrite, getter=_templateType, setter=_setTemplateType:); + unsigned _predicateOptions @accessors(readwrite, setter=_setOptions:); + unsigned _predicateModifier @accessors(readwrite, setter=_setModifier:); + unsigned _leftAttributeType @accessors(readwrite, getter=leftAttributeType, setter=_setLeftAttributeType:); + unsigned _rightAttributeType @accessors(readwrite, getter=rightAttributeType, setter=_setRightAttributeType:); + BOOL _leftIsWildcard @accessors(property=leftIsWildcard); + BOOL _rightIsWildcard @accessors(property=rightIsWildcard); + CPArray _views @accessors(setter=setTemplateViews:); + +} + +/*! + @ingroup appkit + @class CPPredicateEditorRowTemplate + + @brief CPPredicateEditorRowTemplate describes available predicates and how to display them. + + You can create instances of CPPredicateEditorRowTemplate programmatically or in Interface Builder. By default, a non-compound row template has three views: a popup (or static text field) on the left, a popup or static text field for operators, and either a popup or other view on the right. You can subclass CPPredicateEditorRowTemplate to create a row template with different numbers or types of views. + + CPPredicateEditorRowTemplate is a concrete class, but it has five primitive methods which are called by CPPredicateEditor: -#templateViews, -#matchForPredicate:, -#setPredicate:, -#displayableSubpredicatesOfPredicate:, and -#predicateWithSubpredicates:. CPPredicateEditorRowTemplate implements all of them, but you can override them for custom templates. The primitive methods are used by an instance of CPPredicateEditor as follows. + + First, an instance of CPPredicateEditor is created, and some row templates are set on it—either through a nib file or programmatically. The first thing predicate editor does is ask each of the templates for their views, using templateViews. + + After setting up the predicate editor, you typically send it a CPPredicateEditor#setObjectValue: message to restore a saved predicate. CPPredicateEditor needs to determine which of its templates should display each predicate in the predicate tree. It does this by sending each of its row templates a matchForPredicate: message and choosing the one that returns the highest value. + + After finding the best match for a predicate, CPPredicateEditor copies that template to get fresh views, inserts them into the proper row, and then sets the predicate on the template using setPredicate:. Within that method, the CPPredicateEditorRowTemplate object must set its views' values to represent that predicate. + + CPPredicateEditorRowTemplate next asks the template for the “displayable sub-predicates” of the predicate by sending a -#displayableSubpredicatesOfPredicate: message. If a template represents a predicate in its entirety, or if the predicate has no subpredicates, it can return nil for this. Otherwise, it should return a list of predicates to be made into sub-rows of that template's row. The whole process repeats for each sub-predicate. + + At this point, the user sees the predicate that was saved. If the user then makes some changes to the views of the templates, this causes CPPredicateEditor to recompute its predicate by asking each of the templates to return the predicate represented by the new view values, passing in the subpredicates represented by the sub-rows (an empty array if there are none, or nil if they aren't supported by that predicate type). +*/ + +/*! + @name Initializing a Template +*/ + +/*! + @brief Initializes and returns a “pop-up-pop-up-pop-up”-style row template. + @param leftExpressions An array of CPExpression objects that represent the left hand side of a predicate. + @param rightExpressions An array of CPExpression objects that represent the right hand side of a predicate. + @param modifier A modifier for the predicate (see @c CPComparisonPredicateModifier for possible values). + @param operators An array of CPNumber objects specifying the operator type (see @c CPPredicateOperatorType for possible values). + @param options Options for the predicate (see @c CPComparisonPredicateOptions for possible values). + @return A row template of the “pop-up-pop-up-pop-up”-form, with the left and right popups representing the left and right expression arrays -#leftExpressions and -#rightExpressions, and the center popup representing the operators. +*/ +- (id)initWithLeftExpressions:(CPArray)leftExpressions rightExpressions:(CPArray)rightExpressions modifier:(int)modifier operators:(CPArray)operators options:(int)options +{ + self = [super init]; + if (self != nil) + { + _templateType = 1; + _leftIsWildcard = NO; + _rightIsWildcard = NO; + _leftAttributeType = 0; + _rightAttributeType = 0; + _predicateModifier = modifier; + _predicateOptions = options; + + var leftView = [self _viewFromExpressions:leftExpressions], + rightView = [self _viewFromExpressions:rightExpressions], + middleView = [self _viewFromOperatorTypes:operators]; + + _views = [[CPArray alloc] initWithObjects:leftView, middleView, rightView]; + } + + return self; +} + +/*! + @brief Initializes and returns a “pop-up-pop-up-view”-style row template. + @param leftExpressions An array of CPExpression objects that represent the left hand side of a predicate. + @param attributeType An attribute type for the right hand side of a predicate. This value dictates the type of view created, and how the control’s object value is coerced before putting it into a predicate. + @param modifier A modifier for the predicate (see @c CPComparisonPredicateModifier for possible values). + @param operators An array of CPNumber objects specifying the operator type (see @c CPPredicateOperatorType for possible values). + @param options Options for the predicate (see CPComparisonPredicateOptions for possible values). + @return A row template initialized using the given arguments. +*/ +- (id)initWithLeftExpressions:(CPArray )leftExpressions rightExpressionAttributeType:(CPAttributeType)attributeType modifier:(CPComparisonPredicateModifier)modifier operators:(CPArray )operators options:(int)options +{ + self = [super init]; + if (self != nil) + { + var leftView = [self _viewFromExpressions:leftExpressions], + middleView = [self _viewFromOperatorTypes:operators], + rightView = [self _viewFromAttributeType:attributeType]; + + _templateType = 1; + _leftIsWildcard = NO; + _rightIsWildcard = YES; + _leftAttributeType = 0; + _rightAttributeType = attributeType; + _predicateModifier = modifier; + _predicateOptions = options; + _views = [[CPArray alloc] initWithObjects:leftView, middleView, rightView]; + } + + return self; +} + +/*! + @brief Initializes and returns a row template suitable for displaying compound predicates. + @param compoundTypes An array of CPNumber objects specifying compound predicate types. See @c CPCompoundPredicateTypes for possible values. + @return A row template initialized for displaying compound predicates of the types specified by @a compoundTypes. + @discussion CPPredicateEditor contains such a template by default. +*/ +- (id)initWithCompoundTypes:(CPArray )compoundTypes +{ + self = [super init]; + if (self != nil) + { + var leftView = [self _viewFromCompoundTypes:compoundTypes], + rightView = [[CPPopUpButton alloc] init]; + + [rightView addItemWithTitle:@"of the following are true"]; + + _templateType = 2; + _leftIsWildcard = NO; + _rightIsWildcard = NO; + _rightAttributeType = 0; + _views = [[CPArray alloc] initWithObjects:leftView, rightView]; + } + return self; +} + +/*! + @name Primitive Methods +*/ + +/*! + @brief Returns a positive number if the receiver can represent a given predicate, and 0 if it cannot. + @return A positive number if the template can represent predicate, and @c 0 if it cannot. + @discussion By default, returns values in the range @c 0 to @c 1. + The highest match among all the templates determines which template is responsible for displaying the predicate. You can override this to determine which predicates your custom template handles. +*/ +- (double)matchForPredicate:(CPPredicate)predicate +{ + // How exactly this value (float 0-1) is computed ? + if ([self _templateType] == 2 && [predicate isKindOfClass:[CPCompoundPredicate class]]) + { + if ([[self compoundTypes] containsObject:[predicate compoundPredicateType]]) + return 1; + } + else if ([self _templateType] == 1 && [predicate isKindOfClass:[CPComparisonPredicate class]]) + { + if (!_leftIsWildcard && ![[self leftExpressions] containsObject:[predicate leftExpression]]) + return 0; + + if (![[self operators] containsObject:[predicate predicateOperatorType]]) + return 0; + + if (!_rightIsWildcard && ![[self rightExpressions] containsObject:[predicate rightExpression]]) return 0; + + return 1; + } + + return 0; +} + +/*! + @brief Returns the views for the receiver. + @return The views for the receiver. + @discussion Instances of CPPopUpButton are treated specially by CPPredicateEditor; their menu items are merged into a single popup button, and matching menu item titles are combined. In this way, a single tree is built from the separate templates. +*/ +- (CPArray)templateViews +{ + return _views; +} + +/*! + @brief Sets the value of the views according to the given predicate. + @param predicate The predicate value for the receiver. + @discussion This method is only called if -#matchForPredicate: returned a positive value for the receiver. + + You can override this to set the values of custom views. +*/ +- (void)setPredicate:(CPPredicate)predicate +{ + if (_templateType == 2) + [self _setCompoundPredicate:predicate]; + else + [self _setComparisonPredicate:predicate]; +} + +/*! + @brief Returns the subpredicates that should be made sub-rows of a given predicate. + @param predicate A predicate object. + @return The subpredicates that should be made sub-rows of @a predicate. For compound predicates (instances of CPCompoundPredicate), the array of subpredicates; for other types of predicate, returns @c nil. If a template represents a predicate in its entirety, or if the predicate has no subpredicates, returns @c nil. + @discussion You can override this method to create custom templates that handle complicated compound predicates. +*/ +- (CPArray)displayableSubpredicatesOfPredicate:(CPPredicate)predicate +{ + if ([predicate isKindOfClass:[CPCompoundPredicate class]]) + { + var subpredicates = [predicate subpredicates]; + if ([subpredicates count] == 0) + return nil; + + return subpredicates; + } + + return nil; +} + +/*! + @brief Returns the predicate represented by the receiver’s views' values and the given sub-predicates. + @param subpredicates An array of predicates. + @return The predicate represented by the values of the template's views and the given @a subpredicates. You can override this method to return the predicate represented by your custom views. + @discussion This method is only called if -#matchForPredicate: returned a positive value for the receiver. + + You can override this method to return the predicate represented by a custom view. +*/ +- (CPPredicate)predicateWithSubpredicates:(CPArray)subpredicates +{ + if (_templateType == 2) + { + var type = [[_views[0] selectedItem] representedObject]; + return [[CPCompoundPredicate alloc] initWithType:type subpredicates:subpredicates]; + } + + if (_templateType == 1) + { + var lhs = [self _leftExpression], + rhs = [self _rightExpression], + operator = [[_views[1] selectedItem] representedObject]; + + return [CPComparisonPredicate predicateWithLeftExpression:lhs + rightExpression:rhs + modifier:[self modifier] + type:operator + options:[self options]]; + } + + return nil; +} + +/*! + @name Information About a Row Template +*/ + +/*! + @brief Returns the left hand expressions for the receiver. + @return The left hand expressions for the receiver. +*/ +- (CPArray)leftExpressions +{ + if (_templateType ==1 && !_leftIsWildcard) + { + var view = [_views objectAtIndex:0]; + return [[view itemArray] valueForKey:@"representedObject"]; + } + + return nil; +} + +/*! + @brief Returns the right hand expressions for the receiver. + @return The right hand expressions for the receiver. +*/ +- (CPArray)rightExpressions +{ + if (_templateType == 1 && !_rightIsWildcard) + { + var view = [_views objectAtIndex:2]; + return [[view itemArray] valueForKey:@"representedObject"]; + } + + return nil; +} + +/*! + @brief Returns the compound predicate types for the receiver. + @return An array of CPNumber objects specifying compound predicate types. See @c CompoundPredicateTypes for possible values. +*/ +- (CPArray)compoundTypes +{ + if (_templateType == 2) + { + var view = [_views objectAtIndex:0]; + return [[view itemArray] valueForKey:@"representedObject"]; + } + + return nil; +} + +/*! + @brief Returns the comparison predicate modifier for the receiver. + @return The comparison predicate modifier for the receiver. +*/ +- (CPComparisonPredicateModifier)modifier +{ + if (_templateType == 1) + return _predicateModifier; + + return nil; +} + +/*! + @brief Returns Returns the array of operators for the receiver. + @return The array of operators for the receiver. +*/ +- (CPArray)operators +{ + if (_templateType == 1) + { + var view = [_views objectAtIndex:1]; + return [[view itemArray] valueForKey:@"representedObject"]; + } + + return nil; +} + +/*! + @brief Returns the comparison predicate options for the receiver. + @return The comparison predicate options for the receiver. See @c CPComparisonPredicateOptions for possible values. Returns @c 0 if this does not apply (for example, for a compound template initialized with -#initWithCompoundTypes:). +*/ +- (int)options +{ + if (_templateType == 1) + return _predicateOptions; + + return nil; +} + +/*! + @brief Returns the attribute type of the receiver’s right expression. + @return The attribute type of the receiver’s right expression. +*/ +- (CPAttributeType)rightExpressionAttributeType +{ + return _rightAttributeType; +} + +/*! + @brief Returns the attribute type of the receiver’s left expression. + @return The attribute type of the receiver’s left expression. +*/ +- (CPAttributeType)leftExpressionAttributeType +{ + return _leftAttributeType; +} + +/*! @cond */ ++ (id)_bestMatchForPredicate:(CPPredicate)predicate inTemplates:(CPArray)templates quality:(double)quality +{ + var count = [templates count], + match_value = 0, + templateIndex = CPNotFound, + i; + + for (i = 0; i < count; i++) + { + var template = [templates objectAtIndex:i], + amatch = [template matchForPredicate:predicate]; + + if (amatch > match_value) + { + templateIndex = i; + match_value = amatch; + } + } + + if (templateIndex == CPNotFound) + { + [CPException raise:CPRangeException reason:@"Unable to find template matching predicate: " + [predicate predicateFormat]]; + return nil; + } + + return [templates objectAtIndex:templateIndex]; +} + +- (void)_setCompoundPredicate:(CPCompoundPredicate)predicate +{ + var left = [_views objectAtIndex:0], + type = [predicate compoundPredicateType], + index = [left indexOfItemWithRepresentedObject:type]; + + [left selectItemAtIndex:index]; +} + +- (void)_setComparisonPredicate:(CPComparisonPredicate)predicate +{ + var left = [_views objectAtIndex:0], + middle = [_views objectAtIndex:1], + right = [_views objectAtIndex:2], + leftExpression = [predicate leftExpression], + rightExpression = [predicate rightExpression], + operator = [predicate predicateOperatorType]; + + if (_leftIsWildcard) + [left setObjectValue:[leftExpression constantValue]]; + else + { + var index = [left indexOfItemWithRepresentedObject:leftExpression]; + [left selectItemAtIndex:index]; + } + + var op_index = [middle indexOfItemWithRepresentedObject:operator]; + [middle selectItemAtIndex:op_index]; + + if (_rightIsWildcard) + [right setObjectValue:[rightExpression constantValue]]; + else + { + var index = [right indexOfItemWithRepresentedObject:rightExpression]; + [right selectItemAtIndex:index]; + } +} + +- (CPExpression)_leftExpression +{ + return [self _expressionFromView:_views[0] forAttributeType:_leftAttributeType]; +} + +- (CPExpression)_rightExpression +{ + return [self _expressionFromView:_views[2] forAttributeType:_rightAttributeType]; +} + +- (CPExpression)_expressionFromView:(CPView)aView forAttributeType:(CPAttributeType)attributeType +{ + if (attributeType == 0) + return [[aView selectedItem] representedObject]; + + var value; + if (attributeType >= CPInteger16AttributeType && attributeType <= CPFloatAttributeType) + value = [aView intValue]; + else if (attributeType == CPBooleanAttributeType) + value = [aView state]; + else + value = [aView stringValue]; + + return [CPExpression expressionForConstantValue:value]; +} + +- (int)_rowType +{ + return (_templateType - 1); +} + +- (id)copy +{ + var t = [[CPPredicateEditorRowTemplate alloc] init], + views; + + [t _setTemplateType:_templateType]; + [t _setOptions:_predicateOptions]; + [t _setModifier:_predicateModifier]; + [t _setLeftAttributeType:_leftAttributeType]; + [t _setRightAttributeType:_rightAttributeType]; + [t setLeftIsWildcard:_leftIsWildcard]; + [t setRightIsWildcard:_rightIsWildcard]; + + if (_templateType == 2) + { + var left = [self _viewFromCompoundTypes:[self compoundTypes]], + right = [_views objectAtIndex:1]; + views = [CPArray arrayWithObjects:left,right]; + } + else if (_templateType == 1) + { + var left = [self _viewFromExpressions:[self leftExpressions]], + middle = [self _viewFromOperatorTypes:[self operators]], + right; + + if (_rightIsWildcard == YES) + right = [self _viewFromAttributeType:_rightAttributeType]; + else + right = [self _viewFromExpressions:[self rightExpressions]]; + + views = [CPArray arrayWithObjects:left,middle,right]; + } + + var count = [views count]; + while (count--) + [views[count] setObjectValue:[_views[count] objectValue]]; + + [t setTemplateViews:views]; + + return t; +} + ++ (id)_operatorsForAttributeType:(CPAttributeType)attributeType +{ + var operators_array = [CPMutableArray array]; + + switch (attributeType) + { + case CPInteger16AttributeType : [operators_array addObjects:4,5,0,2,1,3]; + break; + case CPInteger32AttributeType : [operators_array addObjects:4,5,0,2,1,3]; + break; + case CPInteger64AttributeType : [operators_array addObjects:4,5,0,2,1,3]; + break; + case CPDecimalAttributeType : [operators_array addObjects:4,5,0,2,1,3]; + break; + case CPDoubleAttributeType : [operators_array addObjects:4,5,0,2,1,3]; + break; + case CPFloatAttributeType : [operators_array addObjects:4,5,0,2,1,3]; + break; + case CPStringAttributeType : [operators_array addObjects:99,4,5,8,9]; + break; + case CPBooleanAttributeType : [operators_array addObjects:4,5]; + break; + case CPDateAttributeType : [operators_array addObjects:4,5,0,2,1,3]; + break; + default : CPLogConsole("Cannot create operators for an CPAttributeType " + attributeType); + break; + } + + return operators_array; +} + +- (int)_templateType +{ + return _templateType; +} + +- (id)_displayValueForPredicateOperator:(int)operator +{ + var value; + + switch (operator) + { + case CPLessThanPredicateOperatorType : value = @"is less than"; + break; + case CPLessThanOrEqualToPredicateOperatorType : value = @"is less than or equal to"; + break; + case CPGreaterThanPredicateOperatorType : value = @"is greater than"; + break; + case CPGreaterThanOrEqualToPredicateOperatorType : value = @"is greater than or equal to"; + break; + case CPEqualToPredicateOperatorType : value = @"is"; + break; + case CPNotEqualToPredicateOperatorType : value = @"is not"; + break; + case CPMatchesPredicateOperatorType : value = @"matches"; + break; + case CPLikePredicateOperatorType : value = @"is like"; + break; + case CPBeginsWithPredicateOperatorType : value = @"begins with"; + break; + case CPEndsWithPredicateOperatorType : value = @"ends with"; + break; + case CPInPredicateOperatorType : value = @"in"; + break; + case CPContainsPredicateOperatorType : value = @"contains"; + break; + case CPBetweenPredicateOperatorType : value = @"between"; + break; + default : CPLogConsole(@"unknown predicate operator %d" + operator); + } + + return value; +} + +- (id)_displayValueForCompoundPredicateType:(unsigned int)predicateType +{ + var value; + switch (predicateType) + { + case CPNotPredicateType: value = @"None"; + break; + case CPAndPredicateType: value = @"All"; + break; + case CPOrPredicateType: value = @"Any"; + break; + default : value = [CPString stringWithFormat:@"unknown compound predicate type %d",predicateType]; + } + + return value; +} + +- (id)_displayValueForConstantValue:(id)value +{ + return [value description]; // number, date, string, ... localize +} + +- (id)_displayValueForKeyPath:(CPString)keyPath +{ + return keyPath; // localize +} + +- (CPPopUpButton)_viewFromExpressions:(CPArray)expressions +{ + var popup = [[CPPopUpButton alloc] initWithFrame:CPMakeRect(0, 0, 100, 18)], + count = [expressions count]; + + for (var i = 0; i < count; i++) + { + var exp = expressions[i], + type = [exp expressionType], + title; + + switch (type) + { + case CPKeyPathExpressionType: title = [self _displayValueForKeyPath:[exp keyPath]]; + break; + case CPConstantValueExpressionType: title = [self _displayValueForConstantValue:[exp constantValue]]; + break; + default: [CPException raise:CPInvalidArgumentException reason:@"Invalid Expression type " + type]; + break; + } + + var item = [[CPMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""]; + [item setRepresentedObject:exp]; + [popup addItem:item]; + } + + [popup sizeToFit]; + + return popup; +} + +- (CPPopUpButton)_viewFromOperatorTypes:(CPArray)operators +{ + var popup = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0, 0, 100, 18)], + count = [operators count]; + + for (var i = 0; i < count; i++) + { + var op = operators[i], + title = [self _displayValueForPredicateOperator:op], + item = [[CPMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""]; + + [item setRepresentedObject:op]; + [popup addItem:item]; + } + + [popup sizeToFit]; + + return popup; +} + +- (CPView)_viewFromCompoundTypes:(CPArray)compoundTypes +{ + var popup = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0, 0, 100, 18)], + count = [compoundTypes count]; + + for (var i = 0; i < count; i++) + { + var type = compoundTypes[i], + title = [self _displayValueForCompoundPredicateType:type], + item = [[CPMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""]; + + [item setRepresentedObject:type]; + [popup addItem:item]; + } + + [popup sizeToFit]; + + return popup; +} + +- (CPView)_viewFromAttributeType:(CPAttributeType)attributeType +{ + var view; + + if (attributeType >= CPInteger16AttributeType && attributeType <= CPFloatAttributeType) + { + view = [self _textFieldWithFrame:CGRectMake(0,0,50,26)]; + } + else if (attributeType == CPStringAttributeType) + { + view = [self _textFieldWithFrame:CGRectMake(0,0,150,26)]; + } + else if (attributeType == CPBooleanAttributeType) + { + view = [[CPCheckBox alloc] initWithFrame:CGRectMake(0,0,50,26)]; + } + else if (attributeType == CPDateAttributeType) + view = [[CPDatePicker alloc] initWithFrame:CGRectMake(0,0,150,26)]; + else + return nil; + + [view setTag:attributeType]; + + return view; +} + +- (CPTextField)_textFieldWithFrame:(CGRect)frame +{ + var textField = [[CPTextField alloc] initWithFrame:frame]; + [textField setBezeled:YES]; + [textField setBezelStyle:CPTextFieldSquareBezel]; + [textField setBordered:YES]; + [textField setEditable:YES]; + [textField setFont:[CPFont systemFontOfSize:10]]; + + return textField; +} + +- (void)_setOptions:(unsigned int)options +{ + _predicateOptions = options; +} + +- (void)_setModifier:(unsigned int)modifier +{ + _predicateModifier = modifier; +} + +- (CPString)description +{ + if (_templateType == 2) + return [CPString stringWithFormat:@"<%@ %p %@>",[self className],self,[[self compoundTypes] componentsJoinedByString:@", "]]; + else if (_templateType == 1 && _rightIsWildcard) + return [CPString stringWithFormat:@"<%@ %p [%@] [%@] %d>",[self className],self,[[self leftExpressions] componentsJoinedByString:@", "],[[self operators] componentsJoinedByString:@", "],[self rightExpressionAttributeType]]; + else + return [CPString stringWithFormat:@"<%@ %p [%@] [%@] [%@]>",[self className],self,[[self leftExpressions] componentsJoinedByString:@", "],[[self operators] componentsJoinedByString:@", "],[[self rightExpressions] componentsJoinedByString:@", "]]; +} + +/* +- (void)_setLeftExpressionObject:(id)object +{ +} +- (void)_setRightExpressionObject:(id)object +{ +} +- (BOOL)_predicateIsNoneAreTrue:(id)predicate +{ +} +- (id)_viewFromExpressionObject:(id)object +{ +} +*/ +@end + +var CPPredicateTemplateTypeKey = @"CPPredicateTemplateType", + CPPredicateTemplateOptionsKey = @"CPPredicateTemplateOptions", + CPPredicateTemplateModifierKey = @"CPPredicateTemplateModifier", + CPPredicateTemplateLeftAttributeTypeKey = @"CPPredicateTemplateLeftAttributeType", + CPPredicateTemplateRightAttributeTypeKey = @"CPPredicateTemplateRightAttributeType", + CPPredicateTemplateLeftIsWildcardKey = @"CPPredicateTemplateLeftIsWildcard", + CPPredicateTemplateRightIsWildcardKey = @"CPPredicateTemplateRightIsWildcard", + CPPredicateTemplateViewsKey = @"CPPredicateTemplateViews"; + +@implementation CPPredicateEditorRowTemplate (CPCoding) + +- (id)initWithCoder:(CPCoder)coder +{ + self = [super init]; + if (self != nil) + { + _templateType = [coder decodeIntForKey:CPPredicateTemplateTypeKey]; + _predicateOptions = [coder decodeIntForKey:CPPredicateTemplateOptionsKey]; + _predicateModifier = [coder decodeIntForKey:CPPredicateTemplateModifierKey]; + _leftAttributeType = [coder decodeIntForKey:CPPredicateTemplateLeftAttributeTypeKey]; + _rightAttributeType = [coder decodeIntForKey:CPPredicateTemplateRightAttributeTypeKey]; + _leftIsWildcard = [coder decodeBoolForKey:CPPredicateTemplateLeftIsWildcardKey]; + _rightIsWildcard = [coder decodeBoolForKey:CPPredicateTemplateRightIsWildcardKey]; + _views = [coder decodeObjectForKey:CPPredicateTemplateViewsKey]; + } + return self; +} + +- (void)encodeWithCoder:(CPCoder)coder +{ + [coder encodeInt:_templateType forKey:CPPredicateTemplateTypeKey]; + [coder encodeInt:_predicateOptions forKey:CPPredicateTemplateOptionsKey]; + [coder encodeInt:_predicateModifier forKey:CPPredicateTemplateModifierKey]; + [coder encodeInt:_leftAttributeType forKey:CPPredicateTemplateLeftAttributeTypeKey]; + [coder encodeInt:_rightAttributeType forKey:CPPredicateTemplateRightAttributeTypeKey]; + [coder encodeBool:_leftIsWildcard forKey:CPPredicateTemplateLeftIsWildcardKey]; + [coder encodeBool:_rightIsWildcard forKey:CPPredicateTemplateRightIsWildcardKey]; + [coder encodeObject:_views forKey:CPPredicateTemplateViewsKey]; +} + +@end +/*! @endcond */ \ No newline at end of file diff --git a/AppKit/CPRuleEditor/CPRuleEditor.j b/AppKit/CPRuleEditor/CPRuleEditor.j new file mode 100644 index 000000000..2121af3e5 --- /dev/null +++ b/AppKit/CPRuleEditor/CPRuleEditor.j @@ -0,0 +1,2531 @@ +/* + * CPRuleEditor.j + * AppKit + * + * Created by cacaodev. + * Copyright 2011, cacaodev. + * + * 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 +@import +@import +@import +@import +@import +@import + +@import "_CPRuleEditorViewSliceRow.j" +@import "_CPRuleEditorLocalizer.j" + +CPRuleEditorPredicateLeftExpression = "CPRuleEditorPredicateLeftExpression"; +CPRuleEditorPredicateRightExpression = "CPRuleEditorPredicateRightExpression"; +CPRuleEditorPredicateComparisonModifier = "CPRuleEditorPredicateComparisonModifier"; +CPRuleEditorPredicateOptions = "CPRuleEditorPredicateOptions"; +CPRuleEditorPredicateOperatorType = "CPRuleEditorPredicateOperatorType"; +CPRuleEditorPredicateCustomSelector = "CPRuleEditorPredicateCustomSelector"; +CPRuleEditorPredicateCompoundType = "CPRuleEditorPredicateCompoundType"; + +CPRuleEditorRowsDidChangeNotification = "CPRuleEditorRowsDidChangeNotification"; +CPRuleEditorRulesDidChangeNotification = "CPRuleEditorRulesDidChangeNotification"; + +CPRuleEditorNestingModeSingle = 0; // Only a single row is allowed. Plus/minus buttons will not be shown +CPRuleEditorNestingModeList = 1; // Allows a single list, with no nesting and no compound rows +CPRuleEditorNestingModeCompound = 2; // Unlimited nesting and compound rows; this is the default +CPRuleEditorNestingModeSimple = 3; // One compound row at the top with subrows beneath it, and no further nesting allowed + +CPRuleEditorRowTypeSimple = 0; +CPRuleEditorRowTypeCompound = 1; + +var CPRuleEditorItemPBoardType = @"CPRuleEditorItemPBoardType"; + +var itemsContext = "items", + valuesContext = "values", + subrowsContext = "subrows_array", + boundArrayContext = "bound_array"; + +/*! + @ingroup appkit + @class CPRuleEditor + + @brief A view for creating and configuring criteria. + + A CPRuleEditor object is a view that allows the user to visually create and configure a list of options which are expressed by the rule editor as a predicate (see Predicate documentation). The view has a delegate which offers a tree of choices to the view. The choices are presented by the view to the user as a row of popup buttons, static text fields, and custom views. Each row in the list represents a particular path down the tree of choices. + + CPRuleEditor exposes one binding, rows. You can bind rows to an ordered collection (such as an instance of CPMutableArray). Each object in the collection should have the following properties: + @n @n + @c @@"rowType" + @n An integer representing the type of the row (CPRuleEditorRowType). + @n@n @c @@"subrows" + @n An ordered to-many relation (such as an instance of CPMutableArray) containing the directly nested subrows for the given row. + @n@n @c @@"displayValues" + @n An ordered to-many relation containing the display values for the row. + @n@n @c @@"criteria" + @n An ordered to-many relation containing the criteria for the row. +*/ + +@implementation CPRuleEditor : CPControl +{ + BOOL _suppressKeyDownHandling; + BOOL _allowsEmptyCompoundRows; + BOOL _disallowEmpty; + BOOL _delegateWantsValidation; + BOOL _editable; + + Class _rowClass; + + CPIndexSet _draggingRows; + CPInteger _subviewIndexOfDropLine; + CPView _dropLineView; + + CPMutableArray _rowCache; + CPMutableArray _slices; + + CPPredicate _predicate; + + CPString _itemsKeyPath; + CPString _subrowsArrayKeyPath; + CPString _typeKeyPath; + CPString _valuesKeyPath; + CPString _boundArrayKeyPath @accessors(property=boundArrayKeyPath); + + CPView _slicesHolder; + CPViewAnimation _currentAnimation; + + CPInteger _lastRow; + CPInteger _nestingMode; + + float _alignmentGridWidth; + float _sliceHeight; + + id _ruleDataSource; + id _ruleDelegate; + id _boundArrayOwner; + + CPString _stringsFilename; + + BOOL _isKeyDown; + BOOL _nestingModeDidChange; + + id _standardLocalizer @accessors(property=standardLocalizer); + id _itemsAndValuesToAddForRowType; +} + +/*! @cond */ + ++ (CPString)defaultThemeClass +{ + return @"rule-editor"; +} + ++ (id)themeAttributes +{ + return [CPDictionary dictionaryWithObjects:[[CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null]] + forKeys:[@"alternating-row-colors", @"selected-color", @"slice-top-border-color", @"slice-bottom-border-color", @"slice-last-bottom-border-color", @"font", @"add-image", @"remove-image"]]; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self != nil) + { + _slices = [[CPMutableArray alloc] init]; + + _sliceHeight = 26.; + _nestingMode = CPRuleEditorNestingModeSimple; // 10.5 default is CPRuleEditorNestingModeCompound + _editable = YES; + _allowsEmptyCompoundRows = NO; + _disallowEmpty = NO; + + [self setCriteriaKeyPath:@"criteria"]; + [self setSubrowsKeyPath:@"subrows"]; + [self setRowTypeKeyPath:@"rowType"]; + [self setDisplayValuesKeyPath:@"displayValues"]; + [self setBoundArrayKeyPath:@"boundArray"]; + + _slicesHolder = [[_CPRuleEditorViewSliceHolder alloc] initWithFrame:[self bounds]]; + [_slicesHolder setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + [self addSubview:_slicesHolder]; + + _boundArrayOwner = [[_CPRuleEditorViewUnboundRowHolder alloc] init]; + + [self _initRuleEditorShared]; + } + + return self; +} + +- (void)_initRuleEditorShared +{ + _rowCache = [[CPMutableArray alloc] init]; + _rowClass = [RowObject class]; + _isKeyDown = NO; + _subviewIndexOfDropLine = CPNotFound; + _lastRow = 0; + _delegateWantsValidation = YES; + _suppressKeyDownHandling = NO; + _nestingModeDidChange = NO; + _itemsAndValuesToAddForRowType = {}; + var animation = [[CPViewAnimation alloc] initWithDuration:0.5 animationCurve:CPAnimationEaseInOut]; + [self setAnimation:animation]; + + _dropLineView = [self _createSliceDropSeparator]; + [_slicesHolder addSubview:_dropLineView]; + + [self registerForDraggedTypes:[CPArray arrayWithObjects:CPRuleEditorItemPBoardType,nil]]; + [_boundArrayOwner addObserver:self forKeyPath:_boundArrayKeyPath options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:boundArrayContext]; +} + +/*! @endcond */ + +/*! + @name Configuring a Rule Editor +*/ + +/*! + @brief Returns the receiver’s delegate. + @return The receiver’s delegate. + @see setDelegate: +*/ +- (id)delegate +{ + return _ruleDelegate; +} + +/*! + @brief Sets the receiver’s delegate. + @param aDelegate The delegate for the receiver. + @discussion CPRuleEditor requires a delegate that implements the required delegate methods to function. + @see delegate +*/ +- (void)setDelegate:(id)aDelegate +{ + if (_ruleDelegate === aDelegate) + return; + + var nc = [CPNotificationCenter defaultCenter]; + if (_ruleDelegate) + [nc removeObserver:_ruleDelegate name:nil object:self]; + + _ruleDelegate = aDelegate; + + if ([_ruleDelegate respondsToSelector:@selector(ruleEditorRowsDidChange:)]) + [nc addObserver:_ruleDelegate selector:@selector(ruleEditorRowsDidChange:) name:CPRuleEditorRowsDidChangeNotification object:nil]; +} +/*! + @brief Returns a Boolean value that indicates whether the receiver is editable. + @return @c YES if the receiver is editable, otherwise @c NO. + @discussion The default is @c YES. + @see setEditable: +*/ +- (BOOL)isEditable +{ + return _editable; +} + +/*! + @brief Sets whether the receiver is editable. + @param editable @c YES if the receiver is editable, otherwise @c NO. + @see isEditable: +*/ +- (void)setEditable:(BOOL)editable +{ + if (editable == _editable) + return; + + _editable = editable; + + if (!_editable) + [self _deselectAll]; + + [_slices makeObjectsPerformSelector:@selector(setEditable:) withObject:_editable]; +} + +/*! + @brief Returns the nesting mode for the receiver. + @return The nesting mode for the receiver. + @see setNestingMode: +*/ +- (CPRuleEditorNestingMode)nestingMode +{ + return _nestingMode; +} + +/*! + @brief Sets the nesting mode for the receiver. + @param mode The nesting mode for the receiver. + @discussion You typically set the nesting mode at view creation time and do not subsequently modify it. The default is @c CPRuleEditorNestingModeSimple. + @see nestingMode + @note Currently CPRuleEditorNestingModeCompound is experimental. +*/ +- (void)setNestingMode:(CPRuleEditorNestingMode)mode +{ + if (mode != _nestingMode) + { + _nestingMode = mode; + if ([self numberOfRows] > 0) + _nestingModeDidChange = YES; + } +} + +/*! + @brief Returns a Boolean value that indicates whether all the rows can be removed. + @return @c YES if all the rows can be removed, otherwise @c NO. + @see setCanRemoveAllRows: +*/ +- (BOOL)canRemoveAllRows +{ + return !_disallowEmpty; +} + +/*! + @brief Sets whether all the rows can be removed. + @param canRemove @c YES if all the rows can be removed, otherwise @c NO. + @see canRemoveAllRows +*/ +- (void)setCanRemoveAllRows:(BOOL)canRemove +{ + _disallowEmpty = !canRemove; + [self _updateButtonVisibilities]; +} + +/*! + @brief Returns a Boolean value that indicates whether compounds rows can be childless. + @return @c YES if compounds rows can be childless, otherwise @c NO. + @see setAllowsEmptyCompoundRows: +*/ +- (BOOL)allowsEmptyCompoundRows +{ + return _allowsEmptyCompoundRows; +} + +/*! + @brief Sets whether compounds rows can be childless. + @param allows @c YES if compounds rows can be childless, otherwise @c NO. + @see allowsEmptyCompoundRows +*/ +- (void)setAllowsEmptyCompoundRows:(BOOL)allows +{ + _allowsEmptyCompoundRows = allows; + [self _updateButtonVisibilities]; +} + +/*! + @brief Returns the row height for the receiver. + @return The row height for the receiver. + @see setRowHeight: +*/ +- (CPInteger)rowHeight +{ + return _sliceHeight; +} + +/*! + @brief Sets the row height for the receiver. + @param height The row height for the receiver. + @see rowHeight +*/ +- (void)setRowHeight:(float)height +{ + if (height == _sliceHeight) + return; + + _sliceHeight = MAX([self _minimumFrameHeight], height); + [self _reconfigureSubviewsAnimate:NO]; +} + +/*! + @name Working with Formatting +*/ + +/*! + @brief Returns the formatting dictionary for the receiver. + @return The formatting dictionary for the receiver. + @see setFormattingDictionary: + @see setFormattingStringsFilename: +*/ +- (CPDictionary)formattingDictionary +{ + return [_standardLocalizer dictionary]; +} + +/*! + @brief Sets the formatting dictionary for the receiver. + @param dictionary The formatting dictionary for the receiver. + @discussion If you set the formatting dictionary with this method, it sets the current formatting strings file name to @c nil. + @see formattingDictionary + @see formattingStringsFilename +*/ +- (void)setFormattingDictionary:(CPDictionary)dictionary +{ + [_standardLocalizer setDictionary:dictionary]; + _stringsFilename = nil; +} + +/*! + @brief Returns the name of the strings file for the receiver. + @return The name of the strings file for the receiver. + @see setFormattingStringsFilename: +*/ +- (CPString)formattingStringsFilename +{ + return _stringsFilename; +} + +/*! + @brief Sets the name of the strings file used for formatting. + @param stringsFilename The name of the strings file for the receiver. + @discussion CPRuleEditor looks for a strings file with the given name in the main bundle and (if appropriate) the bundle containing the nib file from which it was loaded. If it finds a strings file resource with the given name, CPRuleEditor loads it and sets it as the formatting dictionary for the receiver. You can obtain the resulting dictionary using formattingDictionary. + If you set the formatting dictionary with -#setFormattingDictionary:, it sets the current formatting strings file name nil. + @see formattingStringsFilename +*/ +- (void)setFormattingStringsFilename:(CPString)stringsFilename +{ + // Can we set _stringsFilename to nil in cocoa ? + if (_standardLocalizer == nil) + _standardLocalizer = [_CPRuleEditorLocalizer new]; + + if (_stringsFilename != stringsFilename) + { + _stringsFilename = stringsFilename; + + if (stringsFilename !== nil) + { + if (![stringsFilename hasSuffix:@".strings"]) + stringsFilename = stringsFilename + @".strings"; + var path = [[CPBundle mainBundle] pathForResource:stringsFilename]; + if (path !=nil) + [_standardLocalizer loadContentOfURL:[CPURL URLWithString:path]]; + } + } +} + +/*! + @name Providing Data +*/ + +/*! + @brief Instructs the receiver to refetch criteria from its delegate. + @discussion You can use this method to indicate that the available criteria may have changed and should be refetched from the delegate and the popups recalculated. +*/ +- (void)reloadCriteria +{ + var current_rows = [_boundArrayOwner valueForKey:_boundArrayKeyPath]; + [self _stopObservingRowObjectsRecursively:current_rows]; + [_boundArrayOwner setValue:[CPArray arrayWithArray:current_rows] forKey:_boundArrayKeyPath]; +} + +/*! + @brief Modifies the row at a given index to contain the given items and values. + @param criteria The array of criteria for the row at @a rowIndex. Pass an empty array to force the receiver to query its delegate. This value must not be nil. + @param values The array of values for the row at @a rowIndex. Pass an empty array to force the receiver to query its delegate. This value must not be @c nil. + @param rowIndex The index of a row in the receiver. + + @discussion It is your responsibility to ensure that each item in the array is a child of the previous item, and that the first item is a root item for the row type. If the last item has child items, then the items array will be extended by querying the delegate for child items until a childless item is reached. +*/ +- (void)setCriteria:(CPArray)criteria andDisplayValues:(CPArray)values forRowAtIndex:(int)rowIndex +{ +// TODO: reload from the delegate if criteria is an empty array. + if (criteria == nil || values == nil) + [CPException raise:CPInvalidArgumentException reason:_cmd + @". criteria and values parameters must not be nil."]; + + if (rowIndex < 0 || rowIndex >= [self numberOfRows]) + [CPException raise:CPRangeException reason:_cmd + @". rowIndex is out of bounds."]; + + var rowObject = [[self _rowCacheForIndex:rowIndex] rowObject]; + + [rowObject setValue:criteria forKey:_itemsKeyPath]; + [rowObject setValue:values forKey:_valuesKeyPath]; + + [self reloadCriteria]; +} + +/*! + @brief Returns the currently chosen items for a given row. + @param row The index of a row in the receiver. + @return The currently chosen items for row @a row. +*/ +- (id)criteriaForRow:(int)row +{ + var rowcache = [self _rowCacheForIndex:row]; + if (rowcache) + return [[rowcache rowObject] valueForKey:_itemsKeyPath]; + + return nil; +} + +/*! + @name Working with the Selection +*/ + +/*! + @brief Returns the chosen values for a given row. + @param row The index of a row in the receiver. + @return The chosen values (strings, views, or menu items) for row row. + @discussion The values returned are the same as those returned from the delegate method -#ruleEditor:displayValueForCriterion:inRow: +*/ +- (CPMutableArray)displayValuesForRow:(int)row +{ + var rowcache = [self _rowCacheForIndex:row]; + if (rowcache) + return [[rowcache rowObject] valueForKey:_valuesKeyPath]; + + return nil; +} + +/*! + @brief Returns the number of rows in the receiver. + @return The number of rows in the receiver. +*/ +- (int)numberOfRows +{ + return [_slices count]; +} + +/*! + @brief Returns the index of the parent of a given row. + @param rowIndex The index of a row in the receiver. + @return The index of the parent of the row at @a rowIndex. If the row at @a rowIndex is a root row, returns @c -1. +*/ +- (int)parentRowForRow:(int)rowIndex +{ + if (rowIndex < 0 || rowIndex >= [self numberOfRows]) + [CPException raise:CPRangeException reason:_cmd+@" row " + rowIndex + " is out of range"]; + + var targetObject = [[self _rowCacheForIndex:rowIndex] rowObject]; + + for (var current_index = 0; current_index < rowIndex; current_index++) + { + if ([self rowTypeForRow:current_index] == CPRuleEditorRowTypeCompound) + { + var candidate = [[self _rowCacheForIndex:current_index] rowObject], + subObjects = [[self _subrowObjectsOfObject:candidate] _representedObject]; + + if ([subObjects indexOfObjectIdenticalTo:targetObject] != CPNotFound) + return current_index; + } + } + + return -1; +} + +/* +TODO: implement + Returns the index of the row containing a given value. + + displayValue The display value (string, view, or menu item) of an item in the receiver. This value must not be nil. + + The index of the row containing displayValue, or CPNotFound. + + This method searches each row via objects equality for the given display value, which may be present as an alternative in a popup menu for that row. + +- (CPInteger)rowForDisplayValue:(id)displayValue +*/ + +/*! + @brief Returns the type of a given row. + @param rowIndex The index of a row in the receiver. + @return The type of the row at @a rowIndex. + @warning Raises a @c CPRangeException if rowIndex is less than @c 0 or greater than or equal to the number of rows. +*/ +- (CPRuleEditorRowType)rowTypeForRow:(int)rowIndex +{ + if (rowIndex < 0 || rowIndex > [self numberOfRows]) + [CPException raise:CPRangeException reason:_cmd+@"row " + rowIndex + " is out of range"]; + + var rowcache = [self _rowCacheForIndex:rowIndex]; + if (rowcache) + { + var rowobject = [rowcache rowObject]; + return [rowobject valueForKey:_typeKeyPath]; + } + + return CPNotFound; +} + +/*! + @brief Returns the immediate subrows of a given row. + @param rowIndex The index of a row in the receiver, or @c -1 to get the top-level rows. + @return The immediate subrows of the row at @a rowIndex. + @discussion Rows are numbered starting at @c 0. +*/ +- (CPIndexSet)subrowIndexesForRow:(int)rowIndex +{ + var object; + if (rowIndex == -1) + object = _boundArrayOwner; + else + object = [[self _rowCacheForIndex:rowIndex] rowObject]; + + var subobjects = [self _subrowObjectsOfObject:object], + objectsCount = [subobjects count], + indexes = [CPMutableIndexSet indexSet], + count = [self numberOfRows]; + + for (var i = rowIndex + 1; i < count; i++) + { + var candidate = [[self _rowCacheForIndex:i] rowObject], + indexInSubrows = [[subobjects _representedObject] indexOfObjectIdenticalTo:candidate]; + + if (indexInSubrows != CPNotFound) + { + [indexes addIndex:i]; + objectsCount --; + // [buffer removeObjectAtIndex:indexInSubrows]; + if ([self rowTypeForRow:i] == CPRuleEditorRowTypeCompound) + i += [[self subrowIndexesForRow:i] count]; + } + + if (objectsCount == 0) + break; + } + + return indexes; +} + +/*! + @brief Returns the indexes of the receiver’s selected rows. + @return The indexes of the receiver’s selected rows. +*/ +- (CPIndexSet)selectedRowIndexes +{ + return [self _selectedSliceIndices]; +} + +/*! + @brief Sets in the receiver the indexes of rows that are selected. + @param indexes The indexes of rows in the receiver to select. + @param extend If @c NO, the selected rows are specified by indexes. If @c YES, the rows indicated by indexes are added to the collection of already selected rows, providing multiple selection. +*/ +- (void)selectRowIndexes:(CPIndexSet)indexes byExtendingSelection:(BOOL)extend +{ + var count = [_slices count], + lastSelected = [indexes lastIndex]; + + if (lastSelected >= [self numberOfRows]) + [CPException raise:CPRangeException reason:@"row indexes " + indexes + " are out of range"]; + + if (!extend) + [self _deselectAll]; + + while (count--) + { + var slice = _slices[count], + rowIndex = [slice rowIndex], + contains = [indexes containsIndex:rowIndex]; + shouldSelect = (contains && !(extend && [slice _isSelected])); + + if (contains) + [slice _setSelected:shouldSelect]; + [slice _setLastSelected:(rowIndex == lastSelected)]; + [slice setNeedsDisplay:YES]; + } +} + +/*! + @name Manipulating Rows +*/ + +/*! + @brief Adds a row to the receiver. + @param sender Typically the object that sent the message. + @see insertRowAtIndex:withType:asSubrowOfRow:animate: +*/ +- (void)addRow:(id)sender +{ + var parentRowIndex = -1, + rowtype, + numberOfRows = [self numberOfRows], + hasRows = (numberOfRows > 0), + nestingMode = [self _applicableNestingMode]; + + switch (nestingMode) + { + case CPRuleEditorNestingModeSimple: + rowtype = hasRows ? CPRuleEditorRowTypeSimple : CPRuleEditorRowTypeCompound; + if (hasRows) + parentRowIndex = 0; + break; + case CPRuleEditorNestingModeSingle: + if (hasRows) + return; + case CPRuleEditorNestingModeList: + rowtype = CPRuleEditorRowTypeSimple; + break; + case CPRuleEditorNestingModeCompound: + rowtype = CPRuleEditorRowTypeCompound; + if (hasRows) + parentRowIndex = 0; + break; + default: + [CPException raise:CPInvalidArgumentException reason:@"Not supported CPRuleEditorNestingMode " + nestingMode]; + // Compound mode: parentRowIndex=(lastRowType == CPRuleEditorRowTypeCompound)?lastRow :[self parentRowForRow:lastRow]; break; + } + + [self insertRowAtIndex:numberOfRows withType:rowtype asSubrowOfRow:parentRowIndex animate:YES]; +} + +/*! + @brief Adds a new row of a given type at a given location. + @param rowIndex The index at which the new row should be inserted. @a rowIndex must be greater than @a parentRow, and much specify a row that does not fall amongst the children of some other parent. + @param rowType The type of the new row. + @param parentRow The index of the row of which the new row is a child. Pass -1 to indicate that the new row should be a root row. + @param shouldAnimate @c YES if creation of the new row should be animated, otherwise @c NO. + @note Currently, @a shouldAnimate has no effect, rows are always animated when calling this method. + @see addRow: +*/ +- (void)insertRowAtIndex:(int)rowIndex withType:(unsigned int)rowType asSubrowOfRow:(int)parentRow animate:(BOOL)shouldAnimate +{ +/* + TODO: raise exceptions if parentRow is greater than or equal to rowIndex, or if rowIndex would fall amongst the children of some other parent, or if the nesting mode forbids this configuration. +*/ + var newObject = [self _insertNewRowAtIndex:rowIndex ofType:rowType withParentRow:parentRow]; + + if (rowType == CPRuleEditorRowTypeCompound && !_allowsEmptyCompoundRows) + { + var subrow = [self _insertNewRowAtIndex:(rowIndex + 1) ofType:CPRuleEditorRowTypeSimple withParentRow:rowIndex]; + } +} + +/*! + @brief Removes the row at a given index. + @param rowIndex The index of a row in the receiver. + @warning Raises a @c CPRangeException if @a rowIndex is less than @c 0 or greater than or equal to the number of rows. + @see removeRowsAtIndexes:includeSubrows: +*/ +- (void)removeRowAtIndex:(int)rowIndex +{ + // TO DO : Any subrows of the deleted row are adopted by the parent of the deleted row, or are made root rows. + + if (rowIndex < 0 || rowIndex >= [self numberOfRows]) + [CPException raise:CPRangeException reason:@"row " + rowIndex + " is out of range"]; + + [self removeRowsAtIndexes:[CPIndexSet indexSetWithIndex:rowIndex] includeSubrows:NO]; +} + +/*! + @brief Removes the rows at a given index. + @param rowIndexes Indexes of one or more rows in the receiver. + @param includeSubrows If @c YES, then sub-rows of deleted rows are also deleted; if @c NO, then each sub-row is adopted by its first non-deleted ancestor, or becomes a root row. + @warning Raises a @c CPRangeException if any index in @a rowIndexes is less than 0 or greater than or equal to the number of rows. + @see removeRowAtIndex: +*/ +- (void)removeRowsAtIndexes:(CPIndexSet)rowIndexes includeSubrows:(BOOL)includeSubrows +{ + if ([rowIndexes count] == 0) + return; + + if ([rowIndexes lastIndex] >= [self numberOfRows]) + [CPException raise:CPRangeException reason:@"rows indexes " + rowIndexes + " are out of range"]; + + var current_index = [rowIndexes firstIndex], + parentRowIndex = [self parentRowForRow:current_index], + childsIndexes = [CPMutableIndexSet indexSet], + subrows; + + if (parentRowIndex == -1) + subrows = [self _rootRowsArray]; + else + { + var parentRowObject = [[self _rowCacheForIndex:parentRowIndex] rowObject]; + subrows = [self _subrowObjectsOfObject:parentRowObject]; + } + + while (current_index != CPNotFound) + { + var rowObject = [[self _rowCacheForIndex:current_index] rowObject], + relativeChildIndex = [[subrows _representedObject] indexOfObjectIdenticalTo:rowObject]; + + if (relativeChildIndex != CPNotFound) + [childsIndexes addIndex:relativeChildIndex]; + + if (includeSubrows && [self rowTypeForRow:current_index] == CPRuleEditorRowTypeCompound) + { + var more_childs = [self subrowIndexesForRow:current_index]; + [self removeRowsAtIndexes:more_childs includeSubrows:includeSubrows]; + } + + current_index = [rowIndexes indexGreaterThanIndex:current_index]; + } + + [subrows removeObjectsAtIndexes:childsIndexes]; +} + +/*! + @name Working with Predicates +*/ + +/*! + @brief Returns the predicate for the receiver. + @return If the delegate implements -#ruleEditor:predicatePartsForCriterion:withDisplayValue:inRow:, the predicate for the receiver. If not, or if the delegate does not return enough parts to construct a full predicate, returns @c nil. + @see predicateForRow: +*/ +- (CPPredicate)predicate +{ + return _predicate; +} + +/*! + @brief Instructs the receiver to regenerate its predicate by invoking the corresponding delegate method. + @discussion You typically invoke this method because something has changed (for example, a view's value). +*/ +- (void)reloadPredicate +{ + [self _updatePredicate]; +} + +/*! + @brief Returns the predicate for a given row. + @param aRow The index of a row in the receiver. + @return The predicate for the row at @a aRow. + @discussion You should rarely have a need to call this directly, but you can override this method in a subclass to perform specialized predicate handling for certain criteria or display values. +*/ +- (CPPredicate)predicateForRow:(CPInteger)aRow +{ + var predicateParts = [CPDictionary dictionary], + items = [self criteriaForRow:aRow], + count = [items count], + predicate, + i; + + for (i = 0; i < count; i++) + { + var item = [items objectAtIndex:i], + //var displayValue = [self _queryValueForItem:item inRow:aRow]; A voir. On peut aussi prendre la valeur affichée dans le row cache. + displayValue = [[self displayValuesForRow:aRow] objectAtIndex:i], + predpart = [_ruleDelegate ruleEditor:self predicatePartsForCriterion:item withDisplayValue:displayValue inRow:aRow]; + + if (predpart) + [predicateParts addEntriesFromDictionary:predpart]; + } + + if ([self rowTypeForRow:aRow] == CPRuleEditorRowTypeCompound) + { + var compoundPredicate, + subpredicates = [CPMutableArray array], + subrowsIndexes = [self subrowIndexesForRow:aRow]; + + if ([subrowsIndexes count] == 0) + return nil; + + var current_index = [subrowsIndexes firstIndex]; + while (current_index != CPNotFound) + { + var subpredicate = [self predicateForRow:current_index]; + if (subpredicate != nil) + [subpredicates addObject:subpredicate]; + + current_index = [subrowsIndexes indexGreaterThanIndex:current_index]; + } + + var compoundType = [predicateParts objectForKey:CPRuleEditorPredicateCompoundType]; + + if ([subpredicates count] == 0) + return nil; + else + { + try + { + compoundPredicate = [[CPCompoundPredicate alloc ] initWithType:compoundType subpredicates:subpredicates]; + } + catch(error) + { + CPLogConsole(@"Compound predicate error: [%@]\npredicateType:%i",[error description],compoundType); + compoundPredicate = nil; + } + finally + { + return compoundPredicate; + } + + } + } + + var lhs = [predicateParts objectForKey:CPRuleEditorPredicateLeftExpression], + rhs = [predicateParts objectForKey:CPRuleEditorPredicateRightExpression], + operator = [predicateParts objectForKey:CPRuleEditorPredicateOperatorType], + options = [predicateParts objectForKey:CPRuleEditorPredicateOptions], + modifier = [predicateParts objectForKey:CPRuleEditorPredicateComparisonModifier], + selector = CPSelectorFromString([predicateParts objectForKey:CPRuleEditorPredicateCustomSelector]); + + if (lhs == nil){ CPLogConsole(@"missing left expression in predicate parts dictionary"); return NULL;} + if (rhs == nil){ CPLogConsole(@"missing right expression in predicate parts dictionary"); return NULL;} + if (selector == nil && operator == nil){ CPLogConsole(@"missing operator and selector in predicate parts dictionary"); return NULL;} + + if (modifier == nil) CPLogConsole(@"missing modifier in predicate parts dictionary. Setting default: CPDirectPredicateModifier"); + if (options == nil) CPLogConsole(@"missing options in predicate parts dictionary. Setting default: CPCaseInsensitivePredicateOption"); + + try + { + if (selector != nil) + predicate = [CPComparisonPredicate + predicateWithLeftExpression:lhs + rightExpression:rhs + customSelector:selector + ]; + else + predicate = [CPComparisonPredicate + predicateWithLeftExpression:lhs + rightExpression:rhs + modifier:(modifier || CPDirectPredicateModifier) + type:operator + options:(options || CPCaseInsensitivePredicateOption) + ]; + } + catch(error) + { + CPLogConsole(@"Row predicate error: ["+[error description]+"] for row "+aRow); + predicate = nil; + } + finally + { + return predicate; + } +} + +/*! + @name Supporting Bindings +*/ + +/*! + @brief Returns the class used to create a new row in the “rows” binding. + @return The class used to create a new row in the "rows" binding. + @see setRowClass: +*/ +- (Class)rowClass +{ + return _rowClass; +} + +/*! + @brief Sets the class to use to create a new row in the "rows” binding. + @param rowClass The class to use to create a new row in the "rows” binding. + @see rowClass +*/ +- (void)setRowClass:(Class)rowClass +{ + if (rowClass == [CPMutableDictionary class]) + rowClass = [RowObject class]; + + _rowClass = rowClass; +} + +/*! + @brief Returns the key path for the row type. + @return The key path for the row type. + @discussion The default value is @c @"rowType". + The key path is used to get the row type in the “rows” binding. The corresponding property should be a number that specifies an @c CPRuleEditorRowType value. + @see setRowTypeKeyPath: +*/ +- (CPString)rowTypeKeyPath +{ + return _typeKeyPath; +} + +/*! + @brief Sets the key path for the row type. + @param keyPath The key path for the row type. + @see rowTypeKeyPath +*/ +- (void)setRowTypeKeyPath:(CPString)keyPath +{ + if (_typeKeyPath !== keyPath) + _typeKeyPath = keyPath; +} + +/*! + @brief Returns the key path for the subrows. + @return The key path for the subrows. + @discussion The default value is @"subrows". + The key path is used to get the nested rows in the “rows” binding. The corresponding property should be an ordered to-many relationship containing additional bound row objects. + @see setSubrowsKeyPath: +*/ +- (CPString)subrowsKeyPath +{ + return _subrowsArrayKeyPath; +} + +/*! + @brief Sets the key path for the subrows. + @param keyPath The key path for the subrows. + @see subrowsKeyPath +*/ +- (void)setSubrowsKeyPath:(CPString)keyPath +{ + if (_subrowsArrayKeyPath !== keyPath) + _subrowsArrayKeyPath = keyPath; +} + +/*! + @brief Returns the criteria key path. + @return The criteria key path. + @discussion The default value is @"criteria". + The key path is used to get the criteria for a row in the "rows" binding. The criteria objects are what the delegate returns from -#ruleEditor:child:forCriterion:withRowType: . The corresponding property should be an ordered to-many relationship. + @see setCriteriaKeyPath: +*/ +- (CPString)criteriaKeyPath +{ + return _itemsKeyPath; +} + +/*! + @brief Sets the key path for the criteria. + @param keyPath The key path for the criteria. + @see criteriaKeyPath +*/ +- (void)setCriteriaKeyPath:(CPString)keyPath +{ + if (_itemsKeyPath !== keyPath) + _itemsKeyPath = keyPath; +} + +/*! + @brief Returns the display values key path. + @return The display values key path. + @discussion The default is @"displayValues". + The key path is used to get the display values for a row in the "rows" binding. The display values are what the delegate returns from -#ruleEditor:displayValueForCriterion:inRow: The corresponding property should be an ordered to-many relationship. + @see setDisplayValuesKeyPath: +*/ +- (CPString)displayValuesKeyPath +{ + return _valuesKeyPath; +} + +/*! + @brief Sets the key path for the display values. + @param keyPath The key path for the the display values. + @see displayValuesKeyPath +*/ +- (void)setDisplayValuesKeyPath:(CPString)keyPath +{ + if (_valuesKeyPath !== keyPath) + _valuesKeyPath = keyPath; +} + +/*! + @name Configuring Rows Animation +*/ + +/*! + @brief Returns the current animation for the receiver. + @return The current animation for the receiver. + @see setAnimation: +*/ +- (id)animation +{ + return _currentAnimation; +} + +/*! + @brief Sets the current animation for the receiver. + @param animation A CPViewAnimation object used to animate rows. + @discussion The default is a CPViewAnimation with a @c 0.5s duration and a @c CPAnimationEaseInOut curve. + @see animation +*/ +- (void)setAnimation:(CPViewAnimation)animation +{ + _currentAnimation = animation; + [_currentAnimation setDelegate:self]; +} + +// TODO: delegate methods are implemented by the delegate. How do you document them in doxygen without implementing them here ? @fn not working ? +/*! + @name Delegate Methods +*/ + +/*! + @param editor The rule editor that sent the message. + @param index The index of the requested child criterion. This value must be in the range from 0 up to (but not including) the number of children, as reported by the delegate in ruleEditor:numberOfChildrenForCriterion:withRowType:. + @param criterion The parent of the requested child, or nil if the rule editor is requesting a root criterion. + @param rowType The type of the row. + @return An object representing the requested child (or root) criterion. This object is used by the delegate to represent that position in the tree, and is passed as a parameter in subsequent calls to the delegate. + @discussion This method is required. + + - (id)ruleEditor:(CPRuleEditor)editor child:(CPInteger)index forCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType +*/ + +/*! + @param editor The rule editor that sent the message. + @param criterion The criterion for which the value is required. + @param row The row number of criterion. + @return The value for criterion. + @discussion The value should be an instance of CPString, CPView, or CPMenuItem. If the value is a CPView or CPMenuItem, you must ensure it is unique for every invocation of this method; that is, do not return a particular instance of CPView or CPMenuItem more than once. + + - (id)ruleEditor:(CPRuleEditor)editor displayValueForCriterion:(id)criterion inRow:(CPInteger)row +*/ + +/*! + @param editor The rule editor that sent the message. + @param criterion The criterion for which the number of children is required. + @param rowType The type of row of criterion. + @return The number of child items of criterion. If criterion is nil, return the number of root criteria for the row type rowType. + + - (CPInteger)ruleEditor:(CPRuleEditor)editor numberOfChildrenForCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType +*/ + +/*! + @param editor The rule editor that sent the message. + @param criterion The criterion for which the predicate parts are required. + @param value The display value. + @param row The row number of criterion. + @return A dictionary representing the parts of the predicate determined by the given criterion and value. The keys of the dictionary should be the string constants specified in Predicate Part Keys with corresponding appropriate values. + + - (CPDictionary)ruleEditor:(CPRuleEditor)editor predicatePartsForCriterion:(id)criterion withDisplayValue:(id)value inRow:(CPInteger)row +*/ + +/*! @cond */ +- (BOOL)acceptsFirstResponder +{ + return YES; +} + +- (void)keyDown:(CPEvent)event +{ + if (!_suppressKeyDownHandling && [self _applicableNestingMode] == CPRuleEditorNestingModeCompound && !_isKeyDown && ([event modifierFlags] & CPAlternateKeyMask)) + { + [_slices makeObjectsPerformSelector:@selector(_configurePlusButtonByRowType:) withObject:CPRuleEditorRowTypeCompound]; + } + + _isKeyDown = YES; +} + +- (void)keyUp:(CPEvent)event +{ + if (!_suppressKeyDownHandling) + { + [_slices makeObjectsPerformSelector:@selector(_configurePlusButtonByRowType:) withObject:CPRuleEditorRowTypeSimple]; + } + + _isKeyDown = NO; +} + +- (_CPRuleEditorViewSliceDropSeparator)_createSliceDropSeparator +{ + var view = [[_CPRuleEditorViewSliceDropSeparator alloc] initWithFrame:CGRectMake(0,-10, [self frame].size.width, 2)]; + [view setAutoresizingMask:CPViewWidthSizable]; +#if PLATFORM(DOM) + view._DOMElement.style.webkitTransition = "opacity 300ms ease-in"; +#endif + return view; +} + +- (BOOL)_suppressKeyDownHandling +{ + return _suppressKeyDownHandling; +} + +- (BOOL)_wantsRowAnimations +{ + return (_currentAnimation != nil); +} + +- (void)_updateButtonVisibilities +{ + [_slices makeObjectsPerformSelector:@selector(_updateButtonVisibilities)]; +} + +- (float)_alignmentGridWidth +{ + return _alignmentGridWidth; +} + +- (float)_minimumFrameHeight +{ + return 26.; +} + +- (CPRuleEditorNestingMode)_applicableNestingMode +{ + if (!_nestingModeDidChange) + return _nestingMode; + + var a = (_nestingMode == CPRuleEditorNestingModeCompound || _nestingMode == CPRuleEditorNestingModeSimple); + var b = ([self rowTypeForRow:0] == CPRuleEditorRowTypeCompound); + + if (a == b) + return _nestingMode; + + return a ? CPRuleEditorNestingModeList : CPRuleEditorNestingModeSimple; +} + +- (BOOL)_shouldHideAddButtonForSlice:(id)slice +{ + return (!_editable || [self _applicableNestingMode] == CPRuleEditorNestingModeSingle); +} + +- (BOOL)_shouldHideSubtractButtonForSlice:(id)slice +{ + if (!_editable) + return YES; + + if (!_disallowEmpty) + return NO; + + var shouldHide, + rowIndex = [slice rowIndex], + parentIndex = [self parentRowForRow:rowIndex], + subrowsIndexes = [self subrowIndexesForRow:parentIndex], + nestingMode = [self _applicableNestingMode]; + + switch (nestingMode) + { + case CPRuleEditorNestingModeCompound: + case CPRuleEditorNestingModeSimple: shouldHide = ([subrowsIndexes count] == 1 && !_allowsEmptyCompoundRows) || parentIndex == -1; + break; + case CPRuleEditorNestingModeList: shouldHide = ([self numberOfRows] == 1); + break; + case CPRuleEditorNestingModeSingle: shouldHide = YES; + break; + default: shouldHide = NO; + } + + return shouldHide; +} + +#pragma mark Rows management + +- (id)_rowCacheForIndex:(int)index +{ + return [_rowCache objectAtIndex:index]; +} + +- (id)_searchCacheForRowObject:(id)rowObject +{ + var count = [_rowCache count], + i; + + for (i = 0; i < count; i++) + { + var cache = _rowCache[i]; + if ([cache rowObject] === rowObject) + return cache; + } + + return nil; +} + +- (int)_rowIndexForRowObject:(id)rowobject +{ + if (rowobject == _boundArrayOwner) + return -1; + + return [[self _searchCacheForRowObject:rowobject] rowIndex]; // Pas bon car le rowIndex du row cache n'est pas synchro avec la position dans _rowCache. +} + +- (CPMutableArray)_subrowObjectsOfObject:(id)object +{ + if (object === _boundArrayOwner) + return [self _rootRowsArray]; + + return [object mutableArrayValueForKey:_subrowsArrayKeyPath]; +} + +- (CPIndexSet)_childlessParentsIfSlicesWereDeletedAtIndexes:(id)indexes +{ + var childlessParents = [CPIndexSet indexSet], + current_index = [indexes firstIndex]; + + while (current_index != CPNotFound) + { + var parentIndex = [self parentRowForRow:current_index]; + + var subrowsIndexes = [self subrowIndexesForRow:parentIndex]; + if ([subrowsIndexes count]==1) + { + if (parentIndex != -1) + return [CPIndexSet indexSetWithIndex:0]; + + var childlessGranPa = [self _childlessParentsIfSlicesWereDeletedAtIndexes:[CPIndexSet indexSetWithIndex:parentIndex]]; + [childlessParents addIndexes:childlessGranPa]; + } + + current_index = [indexes indexGreaterThanIndex:current_index]; + } + + return childlessParents; + // (id)-[RuleEditor _includeSubslicesForSlicesAtIndexes:] +} + +- (CPIndexSet)_includeSubslicesForSlicesAtIndexes:(CPIndexSet)indexes +{ + var subindexes = [indexes copy], + current_index = [indexes firstIndex]; + + while (current_index != CPNotFound) + { + var sub = [self subrowIndexesForRow:current_index]; + [subindexes addIndexes:[self _includeSubslicesForSlicesAtIndexes:sub]]; + current_index = [indexes indexGreaterThanIndex:current_index]; + } + + return subindexes; +} + +- (void)_deleteSlice:(id)slice +{ + var rowindexes = [CPIndexSet indexSetWithIndex:[slice rowIndex]]; + + if (!_allowsEmptyCompoundRows) + { + var childlessIndexes = [self _childlessParentsIfSlicesWereDeletedAtIndexes:rowindexes]; + if ([childlessIndexes count] > 0) + rowindexes = childlessIndexes; + } + + [self removeRowsAtIndexes:rowindexes includeSubrows:YES]; + [self _postRowCountChangedNotificationOfType:CPRuleEditorRowsDidChangeNotification indexes:rowindexes]; // indexes should include childs +} + +- (CPArray)_rootRowsArray +{ + return [_boundArrayOwner mutableArrayValueForKey:_boundArrayKeyPath]; +} + +- (BOOL)_nextUnusedItems:({CPArray})items andValues:({CPArray})values forRow:(int)rowIndex forRowType:(unsigned int)type +{ + var parentItem = [items lastObject], // if empty items array, this is NULL aka the root item; + childrenCount = [self _queryNumberOfChildrenOfItem:parentItem withRowType:type], + foundIndex = CPNotFound; + + if (childrenCount == 0) + return NO; + + var current_criterions = [CPMutableArray array], + count = [self numberOfRows], + row; + + for (row = 0; row < count; row++) // num of rows should be num of siblings of parentItem + { + var aCriteria = [self criteriaForRow:row], + itemIndex = [items count]; + + if ([self rowTypeForRow:row] == type && itemIndex < [aCriteria count]) + { + var crit = [aCriteria objectAtIndex:itemIndex]; + [current_criterions addObject:crit]; + } + } + + while (foundIndex == CPNotFound) + { + var buffer = [CPMutableArray arrayWithArray:current_criterions], + i; + for (i = 0; i < childrenCount; i++) + { + var child = [self _queryChild:i ofItem:parentItem withRowType:type]; + if ([current_criterions indexOfObject:child] == CPNotFound) + { + foundIndex = i; + break; + } + } + + if (foundIndex == CPNotFound) + { + for (var k = 0; k < childrenCount; k++) + { + var anobject = [self _queryChild:k ofItem:parentItem withRowType:type], + index = [buffer indexOfObject:anobject]; + if (index != CPNotFound) + [buffer removeObjectAtIndex:index]; + } + + current_criterions = buffer; + } + } + + var foundItem = [self _queryChild:foundIndex ofItem:parentItem withRowType:type], + foundValue = [self _queryValueForItem:foundItem inRow:rowIndex]; + + [items addObject:foundItem]; + [values addObject:foundValue]; + + return YES; +} + +- (CPMutableArray)_getItemsAndValuesToAddForRow:(int)rowIndex ofType:(CPRuleEditorRowType)type +{ + var cachedItemsAndValues = _itemsAndValuesToAddForRowType[type]; + if (cachedItemsAndValues) + return cachedItemsAndValues; + + var itemsAndValues = [CPMutableArray array], + items = [CPMutableArray array], + values = [CPMutableArray array], + unusedItems = YES; + + while (unusedItems) + unusedItems = [self _nextUnusedItems:items andValues:values forRow:rowIndex forRowType:type]; + + var count = [items count]; + + for (var i = 0; i < count; i++) + { + var item = [items objectAtIndex:i], + value = [values objectAtIndex:i], + itemAndValue = [CPDictionary dictionaryWithObjects:[item,value] forKeys:["item","value"]]; + + [itemsAndValues addObject:itemAndValue]; + } + + return itemsAndValues; +} + +- (void)_addOptionFromSlice:(id)slice ofRowType:(unsigned int)type +{ + // for CPRuleEditorNestingModeSimple only + + var rowIndexEvent = [slice rowIndex], + rowTypeEvent = [self rowTypeForRow:rowIndexEvent]; + + var parentRowIndex = (rowTypeEvent == CPRuleEditorRowTypeCompound) ? rowIndexEvent:[self parentRowForRow:rowIndexEvent]; + + [self insertRowAtIndex:rowIndexEvent + 1 withType:type asSubrowOfRow:parentRowIndex animate:YES]; + + // [self _reconfigureSubviewsAnimate:YES]; + // [self _updatePredicate]; +} + +- (id)_insertNewRowAtIndex:(int)insertIndex ofType:(CPRuleEditorRowType)rowtype withParentRow:(int)parentRowIndex +{ + var row = [[[self rowClass] alloc] init]; + + var itemsandvalues = [self _getItemsAndValuesToAddForRow:insertIndex ofType:rowtype], + newitems = [itemsandvalues valueForKey:@"item"], + newvalues = [itemsandvalues valueForKey:@"value"]; + + [row setValue:newitems forKey:_itemsKeyPath]; + [row setValue:newvalues forKey:_valuesKeyPath]; + [row setValue:rowtype forKey:_typeKeyPath]; + [row setValue:[CPMutableArray array] forKey:_subrowsArrayKeyPath]; + + var subrowsObjects; + if (parentRowIndex == -1 || [self _applicableNestingMode] == CPRuleEditorNestingModeList) + subrowsObjects = [self _rootRowsArray]; + else + { + var parentRowObject = [[self _rowCacheForIndex:parentRowIndex] rowObject]; + subrowsObjects = [self _subrowObjectsOfObject:parentRowObject]; + } + + var relInsertIndex = insertIndex - parentRowIndex - 1; + [subrowsObjects insertObject:row atIndex:relInsertIndex]; + + return row; +} + +#pragma mark Key value observing + +- (void)_startObservingRowObjectsRecursively:(CPArray)rowObjects +{ + [_boundArrayOwner addObserver:self forKeyPath:_boundArrayKeyPath options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:boundArrayContext]; + + var count = [rowObjects count]; + + for (var i = 0; i < count; i++) + { + var rowObject = [rowObjects objectAtIndex:i]; + + [rowObject addObserver:self forKeyPath:_itemsKeyPath options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:itemsContext]; + [rowObject addObserver:self forKeyPath:_valuesKeyPath options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:valuesContext]; + [rowObject addObserver:self forKeyPath:_subrowsArrayKeyPath options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:subrowsContext]; + + var subrows = [self _subrowObjectsOfObject:rowObject]; + if ([subrows count] > 0) + [self _startObservingRowObjectsRecursively:subrows]; + } + // ORIG IMPL : calls +keyPathsForValuesAffectingValueForKey: for all keys +} + +- (void)_stopObservingRowObjectsRecursively:(CPArray)rowObjects +{ + [_boundArrayOwner removeObserver:self forKeyPath:_boundArrayKeyPath]; + + var count = [rowObjects count]; + + for (var i = 0; i < count; i++) + { + var rowObject = [rowObjects objectAtIndex:i]; + [rowObject removeObserver:self forKeyPath:_itemsKeyPath]; + [rowObject removeObserver:self forKeyPath:_valuesKeyPath]; + [rowObject removeObserver:self forKeyPath:_subrowsArrayKeyPath]; + + var subrows = [rowObject valueForKey:_subrowsArrayKeyPath]; + if ([subrows count] > 0) + [self _stopObservingRowObjectsRecursively:subrows]; + } +} + +- (void)observeValueForKeyPath:(CPString)keypath ofObject:(id)object change:(CPDictionary)change context:(void)context +{ + var changeKind = [change objectForKey:CPKeyValueChangeKindKey], + changeNewValue = [change objectForKey:CPKeyValueChangeNewKey], + changeOldValue = [change objectForKey:CPKeyValueChangeOldKey], + newRows, + oldRows; + + if (context == boundArrayContext || context == subrowsContext) + { + if (changeKind == CPKeyValueChangeSetting) + { + newRows = changeNewValue; + oldRows = changeOldValue; + + } + else if (changeKind == CPKeyValueChangeInsertion) + { + newRows = [self _subrowObjectsOfObject:object]; + oldRows = [CPArray arrayWithArray:newRows]; + [oldRows removeObjectsInArray:changeNewValue]; + } + else if (changeKind == CPKeyValueChangeRemoval) + { + newRows = [self _subrowObjectsOfObject:object]; + oldRows = [CPArray arrayWithArray:newRows]; + var delIndexes = [change objectForKey:CPKeyValueChangeIndexesKey]; + [oldRows insertObjects:delObjects atIndexes:changeOldValue]; // Pas sur que ce soit bon + } + + [self _changedRowArray:newRows withOldRowArray:oldRows forParent:object]; + + [self _reconfigureSubviewsAnimate:[self _wantsRowAnimations]]; + [self _postRowCountChangedNotificationOfType:CPRuleEditorRowsDidChangeNotification indexes:[change objectForKey:CPKeyValueChangeIndexesKey]]; + + } + else if (context == itemsContext) + { + } + else if (context == valuesContext) + { + } +} + +- (void)_changedItem:(id)oldItem toItem:(id)newItem inRow:(int)rowIndex atCriteriaIndex:(int)indexInCriteria +{ + var criteria = [self criteriaForRow:rowIndex], + values = [self displayValuesForRow:rowIndex], + type = [self rowTypeForRow:rowIndex], + + itemToAdd = newItem, + relativeIndexInCriteria = 0, + num_childs = 1000, + + remainingRange = CPMakeRange(0, indexInCriteria), + finalCriteria = [[CPMutableArray alloc] initWithArray:[criteria subarrayWithRange:remainingRange]], + finalValues = [[CPMutableArray alloc] initWithArray:[values subarrayWithRange:remainingRange]]; + + while (num_childs > 0) + { + var displayvalue = [self _queryValueForItem:itemToAdd inRow:rowIndex]; + + [finalCriteria addObject:itemToAdd]; + [finalValues addObject:displayvalue]; + + num_childs = [self _queryNumberOfChildrenOfItem:itemToAdd withRowType:type]; + + if (num_childs > 0) + itemToAdd = [self _queryChild:0 ofItem:itemToAdd withRowType:type]; + + relativeIndexInCriteria++; + } + + var object = [[self _rowCacheForIndex:rowIndex] rowObject]; + [object setValue:finalCriteria forKey:_itemsKeyPath]; + [object setValue:finalValues forKey:_valuesKeyPath]; + + [[_slices objectAtIndex:rowIndex] _reconfigureSubviews]; + + [self _postRuleOptionChangedNotification]; +} + +- (void)_changedRowArray:(CPArray)newRows withOldRowArray:(CPArray)oldRows forParent:(id)parentRowObject +{ + var newRowCount = [newRows count], + oldRowCount = [oldRows count], + deltaCount = newRowCount - oldRowCount, + minusCount = MIN(newRowCount, oldRowCount), + maxCount = MAX(newRowCount, oldRowCount), + + insertCacheIndexes = [CPIndexSet indexSet], + newCaches = [CPArray array], + + parentCacheIndentation, + parentCacheIndex = [self _rowIndexForRowObject:parentRowObject], + + newRowCacheIndex = 0, + changeStartIndex = 0; + + [self _stopObservingRowObjectsRecursively:oldRows]; + [self _startObservingRowObjectsRecursively:newRows]; + + //var gindexes = [self _globalIndexesForSubrowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0,oldRowCount)] ofParentObject:parentRowObject]; + + if (parentCacheIndex == -1) + parentCacheIndentation = -1; + else + parentCacheIndentation = [[self _rowCacheForIndex:parentCacheIndex] indentation]; + + for (; newRowCacheIndex < newRowCount; newRowCacheIndex++) + { + var newCacheGlobalIndex = (parentCacheIndex + 1) + newRowCacheIndex, + obj = [newRows objectAtIndex:newRowCacheIndex], + newRowType = [obj valueForKey:_typeKeyPath]; + + var cache = [[_CPRuleEditorCache alloc] init]; + [cache setRowObject:obj]; + [cache setRowIndex:newCacheGlobalIndex]; + [cache setIndentation:parentCacheIndentation + 1]; + + [insertCacheIndexes addIndex:newCacheGlobalIndex]; + [newCaches addObject:cache]; + } + + //var lastCacheIndex = [self _rowIndexForRowObject:[oldRows lastObject]]; + [_rowCache removeObjectsInRange:CPMakeRange(parentCacheIndex + 1, [oldRows count])]; + [_rowCache insertObjects:newCaches atIndexes:insertCacheIndexes]; + + for (; changeStartIndex < minusCount; changeStartIndex++) + { + var oldrow = [oldRows objectAtIndex:changeStartIndex], + newrow = [newRows objectAtIndex:changeStartIndex]; + + if (newrow != oldrow) + break; + } + + var replaceCount = (deltaCount == 0) ? maxCount : maxCount - minusCount; + var startIndex = parentCacheIndex + changeStartIndex + 1; + + if (deltaCount <= 0) + { + var removeIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(startIndex, replaceCount)]; + var removeSlices = [_slices objectsAtIndexes:removeIndexes]; + [removeSlices makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [_slices removeObjectsAtIndexes:removeIndexes]; + } + + if (deltaCount >= 0) + { + var newIndentation = parentCacheIndentation + 1, + newIndex = startIndex; + + for (; newIndex < startIndex + replaceCount; newIndex++) + { + var newslice = [self _newSlice], + rowType = [self rowTypeForRow:newIndex]; + + [newslice setRowIndex:newIndex]; + [newslice setIndentation:newIndentation]; + [newslice _setRowType:rowType]; + [newslice _configurePlusButtonByRowType:CPRuleEditorRowTypeSimple]; + + [_slices insertObject:newslice atIndex:newIndex]; + } + } + + var emptyArray = [CPArray array], + count = [oldRows count], + n; + for (n = 0; n < count; n++) + { + var oldRow = [oldRows objectAtIndex:n], + subOldRows = [self _subrowObjectsOfObject:oldRow]; + + if ([subOldRows count] > 0) + [self _changedRowArray:emptyArray withOldRowArray:subOldRows forParent:oldRow]; + } + + count = [newRows count]; + for (n = 0; n < count; n++) + { + var newRow = [newRows objectAtIndex:n], + subnewRows = [self _subrowObjectsOfObject:newRow]; + + if ([subnewRows count] > 0) + [self _changedRowArray:subnewRows withOldRowArray:emptyArray forParent:newRow]; + } +} + +- (void)bind:(CPString)binding toObject:(id)observableController withKeyPath:(CPString)keyPath options:(CPDictionary)options +{ + if (keyPath == nil || [observableController valueForKey:keyPath] == nil) + { + [CPException raise:CPInvalidArgumentException reason:"Keypath or bound object cannot be nil"]; + return; + } + + if ([observableController respondsToSelector:@selector(objectClass)]) + _rowClass = [observableController objectClass]; + + if ([binding isEqualToString:@"rows"]) + [self _setBoundDataSource:observableController withKeyPath:keyPath options:options]; +} + +- (void)unbind:(id)object +{ + _rowClass = [RowObject class]; + [super unbind:object]; +} + +- (void)_setBoundDataSource:(id)datasource withKeyPath:(CPString)keyPath options:(CPDictionary)options +{ + if (_boundArrayOwner != nil) + [_boundArrayOwner removeObserver:self forKeyPath:_boundArrayKeyPath]; + + _boundArrayKeyPath = keyPath; + _boundArrayOwner = datasource; + + var boundRows = [_boundArrayOwner valueForKey:_boundArrayKeyPath]; + + [_boundArrayOwner addObserver:self forKeyPath:_boundArrayKeyPath options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:boundArrayContext]; + + if ([boundRows isKindOfClass:[CPArray class]] && [boundRows count] > 0) + [_boundArrayOwner setValue:boundRows forKey:_boundArrayKeyPath]; +} + +- (void)_setPredicate:(CPPredicate)predicate +{ + if (_predicate !== predicate) + _predicate = predicate; +} + +- (void)_updatePredicate +{ + if (_delegateWantsValidation) + { + var selector = @selector(ruleEditor:predicatePartsForCriterion:withDisplayValue:inRow:); + if (![_ruleDelegate respondsToSelector:selector]) + return; + + _delegateWantsValidation = NO; + } + + var subpredicates = [CPMutableArray array], + subindexes = [self subrowIndexesForRow:-1], + current_index = [subindexes firstIndex]; + + while (current_index != CPNotFound) + { + var subpredicate = [self predicateForRow:current_index]; + + if (subpredicate != nil) + [subpredicates addObject:subpredicate]; + + current_index = [subindexes indexGreaterThanIndex:current_index]; + } + + var new_predicate = [[CPCompoundPredicate alloc] initWithType:CPOrPredicateType subpredicates:subpredicates]; + + [self _setPredicate:new_predicate]; +} + +- (_CPRuleEditorViewSliceRow)_newSlice +{ + var sliceRect = CGRectMake(0, 0, CGRectGetWidth([self frame]), 0), + slice = [self _createNewSliceWithFrame:sliceRect ruleEditorView:self]; + + return slice; +} + +- (_CPRuleEditorViewSliceRow)_createNewSliceWithFrame:(CGRect)frame ruleEditorView:(CPRuleEditor)editor +{ + return [[_CPRuleEditorViewSliceRow alloc] initWithFrame:frame ruleEditorView:editor]; +} + +- (void)_reconfigureSubviewsAnimate:(BOOL)animate +{ + [self _updateSliceRows]; + + var viewAnimations = [CPMutableArray array], + added_slices = [CPMutableArray array], + count = [_slices count]; + + for (var i = 0; i < count; i++) + { + var aslice = [_slices objectAtIndex:i], + targetRect = [aslice _animationTargetRect], + startRect = [aslice frame], + startIndex = [aslice rowIndex] - 1; + + if ([aslice superview] == nil) + { + startRect = CGRectMake(0, startIndex * _sliceHeight, CGRectGetWidth(startRect), _sliceHeight); + [aslice _reconfigureSubviews]; + [added_slices addObject:aslice]; + } + + if (animate) + { + var animation = [CPDictionary dictionary]; + [animation setObject:aslice forKey:CPViewAnimationTargetKey]; + [animation setObject:startRect forKey:CPViewAnimationStartFrameKey]; + [animation setObject:targetRect forKey:CPViewAnimationEndFrameKey]; + + [viewAnimations insertObject:animation atIndex:0]; + } + else + [aslice setFrame:targetRect]; + } + + var addcount = [added_slices count]; + for (var i = 0; i < addcount; i++) + [_slicesHolder addSubview:added_slices[i] positioned:CPWindowBelow relativeTo:nil]; + + if (animate) + { + [_currentAnimation setViewAnimations:viewAnimations]; + [_currentAnimation startAnimation]; + } + + _lastRow = [self numberOfRows] - 1; + + if (_lastRow == -1) + _nestingModeDidChange = NO; + + [self setNeedsDisplay:YES]; + [_slices makeObjectsPerformSelector:@selector(_updateButtonVisibilities)]; +} + +- (void)animationDidEnd:(CPViewAnimation)animation +{ + var nextSimple = [self _getItemsAndValuesToAddForRow:0 ofType:CPRuleEditorRowTypeSimple], + nextCompound = [self _getItemsAndValuesToAddForRow:0 ofType:CPRuleEditorRowTypeCompound]; + + _itemsAndValuesToAddForRowType = {CPRuleEditorRowTypeSimple:nextSimple, CPRuleEditorRowTypeCompound:nextCompound}; +} + +- (void)_updateSliceRows +{ + var width = [self frame].size.width, + count = [_slices count], + i; + + for (i = 0; i < count; i++) + { + var slice = [_slices objectAtIndex:i], + targetRect = CGRectMake(0, i * _sliceHeight, width, _sliceHeight); + + [slice setRowIndex:i]; + [slice _setAnimationTargetRect:targetRect]; + } +} + +- (CPArray)_backgroundColors +{ + return [self valueForThemeAttribute:@"alternating-row-colors"]; +} + +- (CPColor)_selectedRowColor +{ + return [self valueForThemeAttribute:@"selected-color"]; +} + +- (CPColor)_sliceTopBorderColor +{ + return [self valueForThemeAttribute:@"slice-top-border-color"]; +} + +- (CPColor)_sliceBottomBorderColor +{ + return [self valueForThemeAttribute:@"slice-bottom-border-color"]; +} + +- (CPColor)_sliceLastBottomBorderColor +{ + return [self valueForThemeAttribute:@"slice-last-bottom-border-color"]; +} + +- (CPFont)font +{ + return [self valueForThemeAttribute:@"font"]; +} + +- (CPImage)_addImage +{ + return [self valueForThemeAttribute:@"add-image"]; +} + +- (CPImage)_removeImage +{ + return [self valueForThemeAttribute:@"remove-image"]; +} + +- (CPString)_toolTipForAddCompoundRowButton +{ + return @"Add Compound row"; +} + +- (CPString)_toolTipForAddSimpleRowButton +{ + return @"Add row"; +} + +- (CPString)_toolTipForDeleteRowButton +{ + return @"Delete row"; +} + +- (void)_updateSliceIndentations +{ + [self _updateSliceIndentationAtIndex:0 toIndentation:0 withIndexSet:[self subrowIndexesForRow:0]]; +} + +- (void)_updateSliceIndentationAtIndex:(int)index toIndentation:(int)indentation withIndexSet:(id)indexes +{ + var current_index = [indexes firstIndex]; + + while (current_index !=CPNotFound) + { + var subindexes = [self subrowIndexesForRow:index]; + [self _updateSliceIndentationAtIndex:current_index toIndentation:indentation + 1 withIndexSet:subindexes]; + current_index = [indexes indexGreaterThanIndex:current_index]; + } + + [[_slices objectAtIndex:index] setIndentation:indentation]; +} + +- (CPArray)_selectedSlices +{ + var _selectedSlices = [CPMutableArray array], + count = [_slices count], + i; + + for (i = 0; i < count; i++) + { + var slice = _slices[i]; + if ([slice _isSelected]) + [_selectedSlices addObject:slice]; + } + + return _selectedSlices; +} + +- (int)_lastSelectedSliceIndex +{ + var lastIndex = -1, + count = [_slices count], + i; + + for (i = 0; i < count; i++) + { + var slice = _slices[i]; + if ([slice _isLastSelected]) + return [slice rowIndex]; + } + + return CPNotFound; +} + +- (void)_mouseUpOnSlice:(id)slice withEvent:(CPEvent)event +{ + if ([slice _rowType] != CPRuleEditorRowTypeSimple) + return; + + var modifierFlags = [event modifierFlags], + extend = (modifierFlags & CPCommandKeyMask) || (modifierFlags & CPShiftKeyMask), + rowIndexes = [CPIndexSet indexSetWithIndex:[slice rowIndex]]; + + [self selectRowIndexes:rowIndexes byExtendingSelection:extend]; +} + +- (void)_mouseDownOnSlice:(id)slice withEvent:(CPEvent)event +{ +} + +- (void)_rightMouseDownOnSlice:(_CPRuleEditorViewSlice)slice withEvent:(CPEvent)event +{ +} + +- (void)_performClickOnSlice:(id)slice withEvent:(CPEvent)event +{ +} + +- (void)_setSuppressKeyDownHandling:(BOOL)flag +{ + _suppressKeyDownHandling = flag; +} + +- (void)selectAll:(id)sender +{ + var count = [_slices count]; + + while (count--) + { + var slice = _slices[count]; + [slice _setSelected:YES]; + [slice setNeedsDisplay:YES]; + } +} + +- (void)_deselectAll +{ + var count = [_slices count]; + + while (count--) + { + var slice = _slices[count]; + [slice _setSelected:NO]; + [slice _setLastSelected:NO]; + [slice setNeedsDisplay:YES]; + } +} + +- (int)_queryNumberOfChildrenOfItem:(id)item withRowType:(CPRuleEditorRowType)type +{ + return [_ruleDelegate ruleEditor:self numberOfChildrenForCriterion:item withRowType:type]; +} + +- (id)_queryChild:(int)childIndex ofItem:(id)item withRowType:(CPRuleEditorRowType)type +{ + return [_ruleDelegate ruleEditor:self child:childIndex forCriterion:item withRowType:type]; +} + +- (id)_queryValueForItem:(id)item inRow:(int)row +{ + return [_ruleDelegate ruleEditor:self displayValueForCriterion:item inRow:row]; +} + +- (int)_lastRow +{ + return _lastRow; +} + +- (int)_countOfRowsStartingAtObject:(id)object +{ + var index = [self _rowIndexForRowObject:object]; + return ([self numberOfRows] - index); +} + +- (void)_setAlignmentGridWidth:(float)width +{ + _alignmentGridWidth = width; +} + +- (BOOL)_validateItem:(id)item value:(id)value inRow:(int)row +{ + return [self _queryCanSelectItem:item displayValue:value inRow:row]; +} + +- (BOOL)_queryCanSelectItem:(id)item displayValue:(id)value inRow:(int)row +{ + return YES; +} + +- (void)_windowChangedKeyState +{ + [self setNeedsDisplay:YES]; +} + +- (void)setNeedsDisplay:(BOOL)flag +{ + [_slices makeObjectsPerformSelector:@selector(setNeedsDisplay:) withObject:flag]; + [super setNeedsDisplay:flag]; +} + +- (void)setFrameSize:(CPSize)size +{ + [self setNeedsDisplay:YES]; + + if (CGRectGetWidth([self frame]) != size.width) + [_slices makeObjectsPerformSelector:@selector(setNeedsLayout)]; + + [super setFrameSize:size]; +} + +- (CPIndexSet)_selectedSliceIndices +{ + var selectedIndices = [CPMutableIndexSet indexSet], + count = [_slices count], + i; + + for (i = 0; i < count; i++) + { + var slice = _slices[i]; + if ([slice _isSelected]) + [selectedIndices addIndex:[slice rowIndex]]; + } + + return selectedIndices; +} + +- (void)mouseDragged:(CPEvent)event +{ + if (!_editable) + return; + + var point = [self convertPoint:[event locationInWindow] fromView:nil], + view = [_slices objectAtIndex:FLOOR(point.y / _sliceHeight)]; + + if ([self _dragShouldBeginFromMouseDown:view]) + [self _performDragForSlice:view withEvent:event]; +} + +- (BOOL)_dragShouldBeginFromMouseDown:(CPView)view +{ + return (([self nestingMode] == CPRuleEditorNestingModeList || [view rowIndex] != 0) && _editable && [view isKindOfClass:[_CPRuleEditorViewSliceRow class]] && _draggingRows == nil); +} + +- (BOOL)_performDragForSlice:(id)slice withEvent:(CPEvent)event +{ + var dragPoint, + mainRowIndex = [slice rowIndex], + draggingRows = [CPIndexSet indexSetWithIndex:mainRowIndex], + selected_indices = [self _selectedSliceIndices], + pasteboard = [CPPasteboard pasteboardWithName: CPDragPboard]; + + [pasteboard declareTypes:[CPArray arrayWithObjects: CPRuleEditorItemPBoardType, nil] owner: self]; + + if ([selected_indices containsIndex:mainRowIndex]) + [draggingRows addIndexes:selected_indices]; + _draggingRows = [self _includeSubslicesForSlicesAtIndexes:draggingRows]; + + var firstIndex = [_draggingRows firstIndex], + firstSlice = [_slices objectAtIndex:firstIndex], + dragview = [[CPView alloc] initWithFrame:[firstSlice frame]]; + +#if PLATFORM(DOM) + var html = firstSlice._DOMElement.innerHTML; + dragview._DOMElement.innerHTML = [html copy]; +#endif + [dragview setBackgroundColor:[firstSlice backgroundColor]]; + [dragview setAlphaValue:0.7]; + + dragPoint = CPMakePoint(0, firstIndex * _sliceHeight); + + [self dragView:dragview + at:dragPoint + offset:CGSizeMake(0, _sliceHeight) + event:event + pasteboard:pasteboard + source:self + slideBack:YES]; + + return YES; +} + +- (CPDragOperation)draggingEntered:(id < CPDraggingInfo >)sender +{ + if ([sender draggingSource] == self) + { + [self _clearDropLine]; + return CPDragOperationMove; + } + + return CPDragOperationNone; +} + +- (void)draggingExited:(id)sender +{ + [self _clearDropLine]; + [self setNeedsDisplay:YES]; +} + +- (void)_clearDropLine +{ + [_dropLineView setAlphaValue:0]; + + if (_subviewIndexOfDropLine != CPNotFound && _subviewIndexOfDropLine < _lastRow) + { + var previousBelowSlice = [_slices objectAtIndex:_subviewIndexOfDropLine]; + [previousBelowSlice setFrameOrigin:CGPointMake(0, [previousBelowSlice rowIndex] * _sliceHeight)]; + } + + _subviewIndexOfDropLine = CPNotFound; +} + +- (CPDragOperation)draggingUpdated:(id )sender +{ + var point = [self convertPoint:[sender draggingLocation] fromView:nil], + y = point.y + _sliceHeight /2, + indexOfDropLine = FLOOR(y / _sliceHeight), + numberOfRows = [self numberOfRows]; + + if (indexOfDropLine < 0 || indexOfDropLine > numberOfRows || (indexOfDropLine >= [_draggingRows firstIndex] && indexOfDropLine <= [_draggingRows lastIndex] + 1)) + { + if (_subviewIndexOfDropLine != CPNotFound && indexOfDropLine != _subviewIndexOfDropLine) + [self _clearDropLine]; + return CPDragOperationNone; + } + + if (_subviewIndexOfDropLine != indexOfDropLine) + { + if (_subviewIndexOfDropLine != CPNotFound && _subviewIndexOfDropLine < numberOfRows) + { + var previousBelowSlice = [_slices objectAtIndex:_subviewIndexOfDropLine]; + [previousBelowSlice setFrameOrigin:CPMakePoint(0, [previousBelowSlice rowIndex] * _sliceHeight)]; + } + + if (indexOfDropLine <= _lastRow && indexOfDropLine < numberOfRows) + { + var belowSlice = [_slices objectAtIndex:indexOfDropLine]; + [belowSlice setFrameOrigin:CGPointMake(0, [belowSlice rowIndex] * _sliceHeight + 2)]; + } + + [_dropLineView setAlphaValue:1]; + [_dropLineView setFrameOrigin:CGPointMake(CGRectGetMinX([_dropLineView frame]), indexOfDropLine * _sliceHeight)]; + + _subviewIndexOfDropLine = indexOfDropLine; + } + + return CPDragOperationMove; +} + +- (BOOL)prepareForDragOperation:(id < CPDraggingInfo >)sender +{ + return (_subviewIndexOfDropLine != CPNotFound); +} + +- (BOOL)performDragOperation:(id < CPDraggingInfo >)info +{ + var aboveInsertIndexCount = 0, + object, + removeIndex; + + var rowObjects = [_rowCache valueForKey:@"rowObject"], + index = [_draggingRows lastIndex]; + + var parentRowIndex = [self parentRowForRow:index]; // first index of draggingrows + var parentRowObject = (parentRowIndex == -1) ? _boundArrayOwner : [[self _rowCacheForIndex:parentRowIndex] rowObject]; + var insertIndex = _subviewIndexOfDropLine; + + while (index != CPNotFound) + { + if (index >= insertIndex) + { + removeIndex = index + aboveInsertIndexCount; + aboveInsertIndexCount += 1; + } + else + { + removeIndex = index; + insertIndex -= 1; + } + + object = [rowObjects objectAtIndex:removeIndex]; + [self removeRowAtIndex:removeIndex]; + [[self _subrowObjectsOfObject:parentRowObject] insertObject:object atIndex:insertIndex - parentRowIndex - 1]; + + index = [_draggingRows indexLessThanIndex:index]; + } + + [self _clearDropLine]; + _draggingRows = nil; + return YES; +} + +- (CPIndexSet)_draggingTypes +{ + return [CPIndexSet indexSetWithIndex:CPDragOperationMove]; +} + +- (void)draggedView:(CPView)dragView endedAt:(CPPoint)aPoint operation:(CPDragOperation)operation +{ + _draggingRows = nil; +} + +- (BOOL)wantsPeriodicDraggingUpdates +{ + return NO; +} + +- (void)pasteboard:(CPPasteboard)pasteboard provideDataForType:(int)type +{ +} + +- (void)_setWindow:(id)window +{ + [super _setWindow:window]; +} + +- (void)_windowUpdate:(id)sender +{ + [super _windowUpdate:sender]; +} + +- (void)_postRuleOptionChangedNotification +{ + [self reloadPredicate]; + [self _sendRuleAction]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPRuleEditorRulesDidChangeNotification object:self]; +} + +- (void)_postRowCountChangedNotificationOfType:(CPString)notificationName indexes:indexes +{ + [self reloadPredicate]; + [self _sendRuleAction]; + [[CPNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:[CPDictionary dictionaryWithObject:indexes forKey:"indexes"]]; +} + +- (CPIndexSet)_globalIndexesForSubrowIndexes:(CPIndexSet)indexes ofParentObject:(id)parentRowObject +{ + var _subrows = [self _subrowObjectsOfObject:parentRowObject], + parentRowIndex = [self _rowIndexForRowObject:parentRowObject], + + globalIndexes = [CPMutableIndexSet indexSet], + current_index = [indexes firstIndex], + numberOfChildrenOfPreviousBrother = 0; + + while (current_index != CPNotFound) + { + var globalChildIndex = current_index + parentRowIndex + 1 + numberOfChildrenOfPreviousBrother; + [globalIndexes addIndex:globalChildIndex]; + + if ([self rowTypeForRow:globalChildIndex] == CPRuleEditorRowTypeCompound) + { + var rowObject = [[self _rowCacheForIndex:current_index] rowObject], + subrows = [self _subrowObjectsOfObject:rowObject]; + + var subIndexes = [self _globalIndexesForSubrowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0,[subrows count])] ofParentObject:rowObject]; + numberOfChildrenOfPreviousBrother = [subIndexes count]; + } + + current_index = [indexes indexGreaterThanIndex:current_index]; + } + + return globalIndexes; +} + +- (void)_sendRuleAction +{ + var action = [self action], + target = [self target]; + + if (action && target) + [self sendAction:[self action] to:[self target]]; +} + +@end + +var CPRuleEditorAlignmentGridWidthKey = @"CPRuleEditorAlignmentGridWidth", + CPRuleEditorSliceHeightKey = @"CPRuleEditorSliceHeight", + CPRuleEditorStringsFilenameKey = @"CPRuleEditorStringsFilename", + CPRuleEditorEditableKey = @"CPRuleEditorEditable", + CPRuleEditorAllowsEmptyCompoundRowsKey = @"CPRuleEditorAllowsEmptyCompoundRows", + CPRuleEditorDisallowEmptyKey = @"CPRuleEditorDisallowEmpty", + CPRuleEditorNestingModeKey = @"CPRuleEditorNestingMode", + CPRuleEditorRowTypeKeyPathKey = @"CPRuleEditorRowTypeKeyPath", + CPRuleEditorItemsKeyPathKey = @"CPRuleEditorItemsKeyPath", + CPRuleEditorValuesKeyPathKey = @"CPRuleEditorValuesKeyPath", + CPRuleEditorSubrowsArrayKeyPathKey = @"CPRuleEditorSubrowsArrayKeyPath", + CPRuleEditorBoundArrayKeyPathKey = @"CPRuleEditorBoundArrayKeyPath", + CPRuleEditorRowClassKey = @"CPRuleEditorRowClass", + CPRuleEditorSlicesHolderKey = @"CPRuleEditorSlicesHolder", + CPRuleEditorSlicesKey = @"CPRuleEditorSlices", + CPRuleEditorDelegateKey = @"CPRuleEditorDelegate", + CPRuleEditorBoundArrayOwnerKey = @"CPRuleEditorBoundArrayOwner"; + +@implementation CPRuleEditor (CPCoding) + +- (id)initWithCoder:(CPCoder)coder +{ + self = [super initWithCoder:coder]; + if (self != nil) + { + [self setFormattingStringsFilename:[coder decodeObjectForKey:CPRuleEditorStringsFilenameKey]]; + _alignmentGridWidth = [coder decodeFloatForKey:CPRuleEditorAlignmentGridWidthKey]; + _sliceHeight = [coder decodeDoubleForKey:CPRuleEditorSliceHeightKey]; + _editable = [coder decodeBoolForKey:CPRuleEditorEditableKey]; + _allowsEmptyCompoundRows = [coder decodeBoolForKey:CPRuleEditorAllowsEmptyCompoundRowsKey]; + _disallowEmpty = [coder decodeBoolForKey:CPRuleEditorDisallowEmptyKey]; + _nestingMode = [coder decodeIntForKey:CPRuleEditorNestingModeKey]; + _typeKeyPath = [coder decodeObjectForKey:CPRuleEditorRowTypeKeyPathKey]; + _itemsKeyPath = [coder decodeObjectForKey:CPRuleEditorItemsKeyPathKey]; + _valuesKeyPath = [coder decodeObjectForKey:CPRuleEditorValuesKeyPathKey]; + _subrowsArrayKeyPath = [coder decodeObjectForKey:CPRuleEditorSubrowsArrayKeyPathKey]; + _boundArrayKeyPath = [coder decodeObjectForKey:CPRuleEditorBoundArrayKeyPathKey]; + + _slicesHolder = [[self subviews] objectAtIndex:0]; + _boundArrayOwner = [coder decodeObjectForKey:CPRuleEditorBoundArrayOwnerKey]; + _slices = [coder decodeObjectForKey:CPRuleEditorSlicesKey]; + _ruleDelegate = [coder decodeObjectForKey:CPRuleEditorDelegateKey]; + + [self _initRuleEditorShared]; + } + + return self; +} + +- (void)encodeWithCoder:(id)coder +{ + [super encodeWithCoder:coder]; + + [coder encodeBool:_editable forKey:CPRuleEditorEditableKey]; + [coder encodeBool:_allowsEmptyCompoundRows forKey:CPRuleEditorAllowsEmptyCompoundRowsKey]; + [coder encodeBool:_disallowEmpty forKey:CPRuleEditorDisallowEmptyKey]; + + [coder encodeFloat:_alignmentGridWidth forKey:CPRuleEditorAlignmentGridWidthKey]; + [coder encodeDouble:_sliceHeight forKey:CPRuleEditorSliceHeightKey]; + [coder encodeInt:_nestingMode forKey:CPRuleEditorNestingModeKey]; + + [coder encodeObject:_stringsFilename forKey:CPRuleEditorStringsFilenameKey]; + [coder encodeObject:_typeKeyPath forKey:CPRuleEditorRowTypeKeyPathKey]; + [coder encodeObject:_itemsKeyPath forKey:CPRuleEditorItemsKeyPathKey]; + [coder encodeObject:_valuesKeyPath forKey:CPRuleEditorValuesKeyPathKey]; + [coder encodeObject:_boundArrayKeyPath forKey:CPRuleEditorBoundArrayKeyPathKey]; + [coder encodeObject:_subrowsArrayKeyPath forKey:CPRuleEditorSubrowsArrayKeyPathKey]; + + [coder encodeConditionalObject:_slicesHolder forKey:CPRuleEditorSlicesHolderKey]; + [coder encodeObject:_slices forKey:CPRuleEditorSlicesKey]; + [coder encodeObject:_boundArrayOwner forKey:CPRuleEditorBoundArrayOwnerKey]; +} + +@end + +var CriteriaKey = @"criteria", + SubrowsKey = @"subrows", + DisplayValuesKey = @"displayValues", + RowTypeKey = @"rowType"; + +@implementation RowObject : CPObject +{ + CPArray subrows @accessors; + CPArray criteria @accessors; + CPArray displayValues @accessors; + CPInteger rowType @accessors; +} + +- (id)copy +{ + var copy = [[RowObject alloc] init]; + [copy setSubrows:[[CPArray alloc] initWithArray:subrows copyItems:YES]]; + [copy setCriteria:[[CPArray alloc] initWithArray:criteria copyItems:YES]]; + [copy setDisplayValues:[[CPArray alloc] initWithArray:displayValues copyItems:YES]]; + [copy setRowType:rowType]; + + return copy; +} + +- (CPString)description +{ + return "\nsubrows = " + [subrows description] + "\ncriteria = " + [criteria description] + "\ndisplayValues = " + [displayValues description]; +} + +- (id)initWithCoder:(id)coder +{ + self = [super init]; + if (self != nil) + { + subrows = [coder decodeObjectForKey:SubrowsKey]; + criteria = [coder decodeObjectForKey:CriteriaKey]; + displayValues = [coder decodeObjectForKey:DisplayValuesKey]; + rowType = [coder decodeIntForKey:RowTypeKey]; + } + + return self; +} + +- (void)encodeWithCoder:(id)coder +{ + [coder encodeObject:subrows forKey:SubrowsKey]; + [coder encodeObject:criteria forKey:CriteriaKey]; + [coder encodeObject:displayValues forKey:DisplayValuesKey]; + [coder encodeInt:rowType forKey:RowTypeKey]; +} + +@end + +@implementation _CPRuleEditorCache : CPObject +{ + CPDictionary rowObject @accessors; + CPInteger rowIndex @accessors; + CPInteger indentation @accessors; +} + +- (CPString)description +{ + return [CPString stringWithFormat:@"<%d object:%d rowIndex:%d indentation:%d>",[self hash], [rowObject hash], rowIndex, indentation]; +} + +@end + +var CPBoundArrayKey = @"CPBoundArray"; + +@implementation _CPRuleEditorViewUnboundRowHolder : CPObject +{ + CPArray boundArray; +} + +- (id)init +{ + if (self = [super init]) + boundArray = [[CPArray alloc] init]; + + return self; +} + +- (id)initWithCoder:(id)coder +{ + if (self = [super init]) + boundArray = [coder decodeObjectForKey:CPBoundArrayKey]; + + return self; +} + +- (void)encodeWithCoder:(id)coder +{ + [coder encodeObject:boundArray forKey:CPBoundArrayKey]; +} + +@end + +@implementation _CPRuleEditorViewSliceHolder : CPView +{ +} + +- (void)addSubview:(CPView)subview +{ + [self setNeedsDisplay:YES]; + [super addSubview:subview]; +} + +@end + +var dropSeparatorColor = [CPColor colorWithHexString:@"4886ca"]; + +@implementation _CPRuleEditorViewSliceDropSeparator : CPView +{ +} + +- (void)drawRect:(CPRect)rect +{ + var context = [[CPGraphicsContext currentContext] graphicsPort]; + CGContextSetFillColor(context, dropSeparatorColor); + CGContextFillRect(context, [self bounds]); +} + +@end + +@implementation CPControl (ToolTip) + +- (void)setToolTip:(CPString)aToolTip +{ + if (_toolTip == aToolTip) + return; + + _toolTip = aToolTip; +#if PLATFORM(DOM) + _DOMElement.title = aToolTip; +#endif +} + +- (CPString)toolTip +{ + return _toolTip; +} + +@end + +/*! @endcond */ \ No newline at end of file diff --git a/AppKit/CPRuleEditor/_CPPredicateEditorRowNode.j b/AppKit/CPRuleEditor/_CPPredicateEditorRowNode.j new file mode 100644 index 000000000..412ed6ed6 --- /dev/null +++ b/AppKit/CPRuleEditor/_CPPredicateEditorRowNode.j @@ -0,0 +1,91 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2011 Pear, Inc. All rights reserved. + */ + +@class _CPPredicateEditorTree; +@implementation _CPPredicateEditorRowNode : CPObject +{ + _CPPredicateEditorTree tree @accessors; + CPMutableArray templateViews @accessors; + CPMutableArray copiedTemplateContainer @accessors; + CPArray children @accessors(copy); +} + +- (BOOL)applyTemplate:(id)template withViews:(id)views forOriginalTemplate:(id)arg3 +{ + return YES; // not in use +} + ++ (id)rowNodeFromTree:(id)aTree +{ + return [_CPPredicateEditorRowNode _rowNodeFromTree:aTree withTemplate:[aTree template]]; +} + ++ (id)_rowNodeFromTree:(id)aTree withTemplate:(id)template +{ + var nodeChildren = [CPArray array], + treeChildren = [aTree children], + count = [treeChildren count]; + + for (var i = 0; i < count; i++) + { + var childnode = [self _rowNodeFromTree:treeChildren[i] withTemplate:template]; + [nodeChildren addObject:childnode]; + } + + var node = [_CPPredicateEditorRowNode new]; + [node setTree:aTree]; + [node setCopiedTemplateContainer:[CPMutableArray arrayWithObject:template]]; + [node setTemplateViews:[template templateViews]]; + [node setChildren:nodeChildren]; + + return node; +} + + +- (BOOL)isEqual:(id)node +{ + return (self === node || tree === [node tree]); +} + +- (void)copyTemplateIfNecessary +{ + if ([[self templateForRow] rightIsWildcard]) + { + var copy = [[tree template] copy]; + [self setCopiedTemplateContainer:[CPMutableArray arrayWithObject:copy]]; + [self setTemplateViews:[copy templateViews]]; + } +} + +- (CPView)templateView +{ + return [templateViews objectAtIndex:[tree indexIntoTemplate]]; +} + +- (id)templateForRow +{ + return [copiedTemplateContainer lastObject]; +} + +- (CPString)title +{ + return [tree title]; +} + +- (id)displayValue +{ + var title = [self title]; + if (title == nil) + return [self templateView]; + + return title; +} + +- (CPString)description +{ + return [CPString stringWithFormat:@"<%@ %@ %@ %p>", [self className], [self title], [self displayValue], self]; +} + +@end \ No newline at end of file diff --git a/AppKit/CPRuleEditor/_CPPredicateEditorTree.j b/AppKit/CPRuleEditor/_CPPredicateEditorTree.j new file mode 100644 index 000000000..004c8d5c7 --- /dev/null +++ b/AppKit/CPRuleEditor/_CPPredicateEditorTree.j @@ -0,0 +1,33 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2011 Pear, Inc. All rights reserved. + */ + +@implementation _CPPredicateEditorTree : CPObject +{ + CPPredicateEditorRowTemplate template @accessors; + CPString title @accessors(copy); + CPArray children @accessors(copy); + CPInteger indexIntoTemplate @accessors; + CPInteger menuItemIndex @accessors; +} + +- (id)copy +{ + var tree = [[_CPPredicateEditorTree alloc] init]; + [tree setTemplate:template]; + [tree setTitle:title]; + [tree setMenuItemIndex:menuItemIndex]; + [tree setIndexIntoTemplate:indexIntoTemplate]; + [tree setChildren:children]; + + return tree; +} + +- (CPString)description +{ + return [CPString stringWithFormat:@"<%@: %p (%@) [%d-%d] T:%p at:%d> [\r%@\r]", [self className], self, title, indexIntoTemplate, menuItemIndex, template, [template rightExpressionAttributeType], children]; +} + +@end + diff --git a/AppKit/CPRuleEditor/_CPRuleEditorLocalizer.j b/AppKit/CPRuleEditor/_CPRuleEditorLocalizer.j new file mode 100644 index 000000000..638532901 --- /dev/null +++ b/AppKit/CPRuleEditor/_CPRuleEditorLocalizer.j @@ -0,0 +1,75 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2011 Pear, Inc. All rights reserved. + */ + +@import +@import +@import + +var regex = new RegExp("\"(.+)\"\\s*=\\s*\"(.+)\"\\s*;\\s*(//.+)?"); + +@implementation _CPRuleEditorLocalizer : CPObject +{ + CPDictionary _dictionary @accessors(property=dictionary); + CPURLConnection connection; + CPURLRequest resquest; +} + +- (void)loadContentOfURL:(CPURL)aURL +{ + request = [CPURLRequest requestWithURL:aURL]; + connection = [CPURLConnection connectionWithRequest:request delegate:self]; +} + +- (void)reloadIfNeeded +{ + if (connection != nil) // Connection waiting + { + connection = nil; + var data = [CPURLConnection sendSynchronousRequest:request returningResponse:NULL]; + [self loadContent:[data rawString]]; + } +} + +- (void)connection:(CPURLConnection)aConnection didReceiveData:(CPString)rawString +{ + if (connection != nil && rawString != nil) + [self loadContent:rawString]; + + connection = nil; +} + +- (void)loadContent:(CPString)aContent +{ + var dict = [CPDictionary dictionary], + lines = [aContent componentsSeparatedByString:"\n"], + count = [lines count]; + + for (var i = 0 ; i < count ; i++) + { + var line = [lines objectAtIndex:i]; + if (line.length > 1) + { + var match = regex.exec(line); + if (match.length >= 3) + [dict setObject:match[2] forKey:match[1]]; + } + } + + _dictionary = [CPDictionary dictionaryWithDictionary:dict]; +} + +- (CPString)localizedStringForString:(CPString)aString +{ + [self reloadIfNeeded]; + + if (_dictionary != nil && aString != nil) + { + var localized = [_dictionary objectForKey:aString]; + if (localized != nil) + return localized; + } + + return aString; +} \ No newline at end of file diff --git a/AppKit/CPRuleEditor/_CPRuleEditorPopUpButton.j b/AppKit/CPRuleEditor/_CPRuleEditorPopUpButton.j new file mode 100644 index 000000000..7393e5a36 --- /dev/null +++ b/AppKit/CPRuleEditor/_CPRuleEditorPopUpButton.j @@ -0,0 +1,157 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2011 Pear, Inc. All rights reserved. + */ + +var GRADIENT_NORMAL, + GRADIENT_HIGHLIGHTED, + IE_FILTER = "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fcfcfc', endColorstr='#dfdfdf')"; + +@implementation _CPRuleEditorPopUpButton : CPPopUpButton +{ + CPInteger radius; +} + ++ (void)initialize +{ + if (CPBrowserIsEngine(CPWebKitBrowserEngine)) + { + GRADIENT_NORMAL = "-webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)))", + GRADIENT_HIGHLIGHTED = "-webkit-gradient(linear, left top, left bottom, from(rgb(223, 223, 223)), to(rgb(252, 252, 252)))"; + } + else if (CPBrowserIsEngine(CPGeckoBrowserEngine)) + { + GRADIENT_NORMAL = "-moz-linear-gradient(top, rgb(252, 252, 252), rgb(223, 223, 223))", + GRADIENT_HIGHLIGHTED = "-moz-linear-gradient(top, rgb(223, 223, 223), rgb(252, 252, 252))"; + } +} + +- (id)initWithFrame:(CGRect)aFrame +{ + if (self = [super initWithFrame:aFrame]) + { + var style = _DOMElement.style; + style.backgroundImage = GRADIENT_NORMAL; + style.border = "1px solid rgb(189, 189, 189)"; + style.filter = IE_FILTER; + + [self setTextColor:[CPColor colorWithWhite:101/255 alpha:1]]; + [self setBordered:NO]; + } + + return self; +} + +- (id)hitTest:(CPPoint)point +{ + var slice = [self superview]; + if (!CPRectContainsPoint([self frame], point) || ![self sliceIsEditable]) + return nil; + + return self; +} + +- (void)setHighlighted:(BOOL)shouldHighlight +{ + _DOMElement.style.backgroundImage = (shouldHighlight) ? GRADIENT_HIGHLIGHTED : GRADIENT_NORMAL; +} + +- (BOOL)sliceIsEditable +{ + return [[self superview] isEditable]; +} + +- (BOOL)trackMouse:(CPEvent)theEvent +{ + if (![self sliceIsEditable]) + return NO; + + return [super trackMouse:theEvent]; +} + +- (CGRect)contentRectForBounds:(CGRect)bounds +{ + var contentRect = [super contentRectForBounds:bounds]; + contentRect.origin.x += radius; + contentRect.size.width -= 2 * radius; + + return contentRect; +} + +- (void)layoutSubviews +{ + radius = FLOOR(CGRectGetHeight([self bounds])/2); + + var style = _DOMElement.style, + radiusCSS = radius + "px"; + + //style.webkitBorderRadius = radiusCSS; + //style.mozBorderRadius = radiusCSS; + style.borderRadius = radiusCSS; + + [super layoutSubviews]; +} + +- (void)drawRect:(CGRect)aRect +{ + var bounds = [self bounds], + context = [[CPGraphicsContext currentContext] graphicsPort]; + + var arrow_width = FLOOR(CGRectGetHeight(bounds)/3.5); + + CGContextTranslateCTM(context, CGRectGetWidth(bounds) - radius - arrow_width, CGRectGetHeight(bounds) / 2); + + var arrowsPath = [CPBezierPath bezierPath]; + [arrowsPath moveToPoint:CGPointMake(0, 1)]; + [arrowsPath lineToPoint:CGPointMake(arrow_width, 1)]; + [arrowsPath lineToPoint:CGPointMake(arrow_width/2, arrow_width + 1)]; + [arrowsPath closePath]; + + CGContextSetFillColor(context, [CPColor colorWithWhite:101/255 alpha:1]); + [arrowsPath fill]; + + CGContextScaleCTM(context, 1 , -1); + [arrowsPath fill]; +} + +@end + +@implementation _CPRuleEditorButton : CPButton +{ + CPInteger radius; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + if (self) + { + [self setFont:[CPFont boldFontWithName:@"Apple Symbol" size:12.0]]; + [self setTextColor:[CPColor colorWithWhite:150/255 alpha:1]]; + [self setAlignment:CPCenterTextAlignment]; + [self setAutoresizingMask:CPViewMinXMargin]; + [self setImagePosition:CPImageOnly]; + [self setBordered:NO]; + var style = _DOMElement.style; + style.border = "1px solid rgb(189, 189, 189)"; + style.filter = IE_FILTER; + } + + return self; +} + +- (void)layoutSubviews +{ + radius = FLOOR(CGRectGetHeight([self bounds])/2); + + var style = _DOMElement.style, + radiusCSS = radius + "px"; + + style.borderRadius = radiusCSS; + style.backgroundImage = ([self isHighlighted]) ? GRADIENT_HIGHLIGHTED : GRADIENT_NORMAL; + + [super layoutSubviews]; +} + +@end + diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j new file mode 100644 index 000000000..f0128dbcd --- /dev/null +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j @@ -0,0 +1,109 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2011 Pear, Inc. All rights reserved. + */ + +@implementation _CPRuleEditorViewSlice : CPView +{ + CPRuleEditor _ruleEditor; + int _indentation @accessors(property=indentation); + int _rowIndex @accessors(property=rowIndex); + CPRect _animationTargetRect @accessors(property=_animationTargetRect); + BOOL _selected @accessors(getter=_isSelected, setter=_setSelected:); + BOOL _lastSelected @accessors(getter=_isLastSelected, setter=_setLastSelected:); + CPColor _backgroundColor @accessors(property=backgroundColor); +} + +- (void)removeFromSuperview +{ + [super removeFromSuperview]; +} + +- (id)initWithFrame:(CGRect)frame ruleEditorView:(id)editor +{ + if (self = [super initWithFrame:frame]) + { + _ruleEditor = editor; + _selected = NO; + _lastSelected = NO; + } + + return self; +} + +- (void)_setSelected:(BOOL)select +{ + if (select == _selected) + return; + + var selector = select ? @"setThemeState:" : @"unsetThemeState:"; + [[self subviews] makeObjectsPerformSelector:CPSelectorFromString(selector) withObject:CPThemeStateSelectedDataView]; + _selected = select; +} + +- (void)drawRect:(CPRect)rect +{ + var context = [[CPGraphicsContext currentContext] graphicsPort], + bounds = [self bounds], + maxX = CGRectGetWidth(bounds) - 2, + maxY = CGRectGetHeight(bounds); + +// Draw background + if ([self _isSelected]) + _backgroundColor = [_ruleEditor _selectedRowColor]; + else + { + var colors = [_ruleEditor _backgroundColors], + count = [colors count]; + _backgroundColor = [colors objectAtIndex:(_rowIndex % count)]; + } + + CGContextSetFillColor(context, _backgroundColor); + CGContextFillRect(context, rect); + +// Draw Top Border + CGContextBeginPath(context); + CGContextMoveToPoint(context, 1, 0); + CGContextAddLineToPoint(context, maxX, 0); + CGContextClosePath(context); + CGContextSetStrokeColor(context, [_ruleEditor _sliceTopBorderColor]); + CGContextStrokePath(context); + +// Draw Bottom Border + CGContextBeginPath(context); + CGContextMoveToPoint(context, 1, maxY - 0.5); + CGContextAddLineToPoint(context, maxX, maxY - 0.5); + CGContextClosePath(context); + var bottomColor = (_rowIndex == [_ruleEditor _lastRow]) ? [_ruleEditor _sliceLastBottomBorderColor] : [_ruleEditor _sliceBottomBorderColor]; + CGContextSetStrokeColor(context, bottomColor); + CGContextStrokePath(context); +} + +- (void)mouseDown:(CPEvent)theEvent +{ + if (editable) + [_ruleEditor _mouseDownOnSlice:self withEvent:theEvent]; +} + +- (void)mouseUp:(CPEvent)theEvent +{ + if (editable) + [_ruleEditor _mouseUpOnSlice:self withEvent:theEvent]; +} + +/* +- (void)rightMouseDown:(CPEvent)theEvent +{ + [_ruleEditor _rightMouseDownOnSlice:self withEvent:theEvent]; +} +*/ + +// ========= +// ! DEBUG +// ========= +- (CPString)description +{ + return [CPString stringWithFormat:@"<%@ %p index:%d indentation:%d>",[self className],self,[self rowIndex],[self indentation]]; +} + +@end \ No newline at end of file diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j new file mode 100644 index 000000000..4805c95f5 --- /dev/null +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -0,0 +1,493 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2011 Pear, Inc. All rights reserved. + */ + +@import "_CPRuleEditorViewSlice.j" +@import "_CPRuleEditorPopUpButton.j" +@import "CPRuleEditor.j" + +var CONTROL_HEIGHT = 16., + BUTTON_HEIGHT = 16.; + +@implementation _CPRuleEditorViewSliceRow : _CPRuleEditorViewSlice +{ + CPMutableArray _ruleOptionViews; + CPMutableArray _ruleOptionFrames; + CPMutableArray _correspondingRuleItems; + CPMutableArray _ruleOptionInitialViewFrames; + CPButton _addButton; + CPButton _subtractButton; + BOOL editable; + CPRuleEditorRowType _rowType @accessors; + CPRuleEditorRowType _plusButtonRowType; +} + +- (id)initWithFrame:(CGRect)frame ruleEditorView:(id)editor +{ + if (self = [super initWithFrame:frame ruleEditorView:editor]) + [self _initShared]; + + return self; +} + +- (void)_initShared +{ + _correspondingRuleItems = [[CPMutableArray alloc] init]; + _ruleOptionFrames = [[CPMutableArray alloc] init]; + _ruleOptionInitialViewFrames = [[CPMutableArray alloc] init]; + _ruleOptionViews = [[CPMutableArray alloc] init]; + editable = [_ruleEditor isEditable]; + + _addButton = [self _createAddRowButton]; + _subtractButton = [self _createDeleteRowButton]; + [_addButton setToolTip:[_ruleEditor _toolTipForAddSimpleRowButton]]; + [_subtractButton setToolTip:[_ruleEditor _toolTipForDeleteRowButton]]; + [_addButton setHidden:!editable]; + [_subtractButton setHidden:!editable]; + [self addSubview:_addButton]; + [self addSubview:_subtractButton]; + + [self setAutoresizingMask:CPViewWidthSizable]; + + var center = [CPNotificationCenter defaultCenter]; + [center addObserver:self selector:@selector(_textDidChange:) name:CPControlTextDidChangeNotification object:nil]; +} + +- (CPButton)_createAddRowButton +{ + var button = [[_CPRuleEditorButton alloc] initWithFrame:CGRectMakeZero()]; + [button setImage:[_ruleEditor _addImage]]; + + [button setAction:@selector(_addOption:)]; + [button setTarget:self]; + [button setAutoresizingMask:CPViewMinXMargin]; + + return button; +} + +- (CPButton)_createDeleteRowButton +{ + var button = [[_CPRuleEditorButton alloc] initWithFrame:CGRectMakeZero()]; + [button setImage:[_ruleEditor _removeImage]]; + + [button setAction:@selector(_deleteOption:)]; + [button setTarget:self]; + [button setAutoresizingMask:CPViewMinXMargin]; + + return button; +} + +- (CPMenuItem)_createMenuItemWithTitle:(CPString )title +{ + title = [[_ruleEditor standardLocalizer] localizedStringForString:title]; + return [[CPMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""]; +} + +- (CPPopUpButton)_createPopUpButtonWithItems:(CPArray)itemsArray selectedItemIndex:(int)index +{ + var title = [[itemsArray objectAtIndex:index] title], + font = [_ruleEditor font], + width = [title sizeWithFont:font].width + 20, + rect = CGRectMake(0, ([_ruleEditor rowHeight] - CONTROL_HEIGHT)/2, (width - width % 40) + 80, CONTROL_HEIGHT); + + var popup = [[_CPRuleEditorPopUpButton alloc] initWithFrame:rect]; + [popup setValue:font forThemeAttribute:@"font"]; + + var count = [itemsArray count]; + for (var i = 0; i < count; i++) + [popup addItem:[itemsArray objectAtIndex:i]]; + + [popup selectItemAtIndex:index]; + + return popup; +} + +- (CPMenuItem)_createMenuSeparatorItem +{ + return [CPMenuItem separatorItem]; +} + +- (_CPRuleEditorTextField)_createStaticTextFieldWithStringValue:(CPString )text +{ + text = [[_ruleEditor standardLocalizer] localizedStringForString:text]; + + var textField = [[_CPRuleEditorTextField alloc] initWithFrame:CPMakeRect(0, 0, 200, CONTROL_HEIGHT)]; + var font = [_ruleEditor font]; + font = [CPFont fontWithName:font._name size:font._size + 2]; + [textField setValue:font forThemeAttribute:@"font"]; + [textField setStringValue:text]; + [textField sizeToFit]; + + return textField; +} + +- (void)_addOption:(id)sender +{ + if (_rowIndex == [_ruleEditor numberOfRows] - 1) + [self setNeedsDisplay:YES]; + + var type = _plusButtonRowType; + if ([_ruleEditor nestingMode] == CPRuleEditorNestingModeCompound && ([[CPApp currentEvent] modifierFlags] & CPAlternateKeyMask)) + type = CPRuleEditorRowTypeCompound; + + [_ruleEditor _addOptionFromSlice:self ofRowType:type]; +} + +- (void)_deleteOption:(id)sender +{ + [_ruleEditor _deleteSlice:self]; +} + +- (void)_ruleOptionPopupChangedAction:(CPMenuItem )sender +{ + var layoutdict = [sender representedObject], + newItem = [layoutdict objectForKey:@"item"], + indexInCriteria = [[layoutdict objectForKey:@"indexInCriteria"] intValue], + oldItem = [_correspondingRuleItems objectAtIndex:indexInCriteria]; + + if (newItem != oldItem) + { + [_correspondingRuleItems replaceObjectAtIndex:indexInCriteria withObject:newItem]; + [_ruleEditor _changedItem:oldItem toItem:newItem inRow:_rowIndex atCriteriaIndex:indexInCriteria]; + } +} + +- (BOOL)validateMenuItem:(CPMenuItem )menuItem +{ + return [_ruleEditor _validateItem:menuItem value:[[menuItem representedObject] valueForKey:@"item"] inRow:_rowIndex]; +} + +- (void)_emptyRulePartSubviews +{ + var count = [_ruleOptionViews count]; + + while (count--) + [_ruleOptionViews[count] removeFromSuperview]; + + [_ruleOptionViews removeAllObjects]; + [_ruleOptionFrames removeAllObjects]; + [_ruleOptionInitialViewFrames removeAllObjects]; +} + +- (void)_reconfigureSubviews +{ + var numItems; + currentItem = nil, + optionView = nil, + indexInCriteria = 0, + + rowtype = [_ruleEditor rowTypeForRow:_rowIndex], + displayValues = [_ruleEditor displayValuesForRow:_rowIndex]; + + [self _emptyRulePartSubviews]; + [_correspondingRuleItems removeAllObjects]; + + while ((numItems = [_ruleEditor _queryNumberOfChildrenOfItem:currentItem withRowType:rowtype]) > 0) + { + var isCustomRightControl = NO; + isStaticTextField = NO, + isPopupMenu = NO, + isMultiValue = numItems > 1, + selectedMenuItemIndex = 0, + selectedItem = nil, + current_display_value = nil, + + itemsArray = [CPMutableArray array], + display_value_cached = [displayValues objectAtIndex:indexInCriteria]; + + for (var childIndex = 0; childIndex < numItems; childIndex++) + { + var childItem = [_ruleEditor _queryChild:childIndex ofItem:currentItem withRowType:rowtype]; + current_display_value = [_ruleEditor _queryValueForItem:childItem inRow:_rowIndex]; + + if (isMultiValue) + { + var menuItem; + + if ([current_display_value isKindOfClass:[CPString class]]) + menuItem = [self _createMenuItemWithTitle:current_display_value]; + else if ([current_display_value isKindOfClass:[CPMenuItem class]]) + menuItem = current_display_value; + else + [CPException raise:CPInternalInconsistencyException reason:@"Display value must be a string or a menu item"]; + + var layoutDictionary = [CPDictionary dictionaryWithObjectsAndKeys:childItem, @"item", indexInCriteria, @"indexInCriteria"]; + + [menuItem setAction:@selector(_ruleOptionPopupChangedAction:)]; + [menuItem setTarget:self]; + [menuItem setRepresentedObject:layoutDictionary]; + [menuItem setTag:indexInCriteria]; + + [itemsArray addObject:menuItem]; + isPopupMenu = YES; + + if ((childIndex == numItems - 1 && selectedItem == nil) + || ([current_display_value isEqual:display_value_cached]) + || ([current_display_value isKindOfClass:[CPView class]] + && [[current_display_value objectValue] isEqualTo:[display_value_cached objectValue]])) + { + selectedItem = childItem; + selectedMenuItemIndex = childIndex; + } + } + else if ([current_display_value isKindOfClass:[CPString class]]) + { + isStaticTextField = YES; + selectedItem = childItem; + selectedMenuItemIndex =0; + } + else if ([current_display_value isKindOfClass:[CPView class]]) + { + isCustomRightControl = YES; + selectedItem = childItem; + selectedMenuItemIndex = 0; + } else + [CPException raise:CPInternalInconsistencyException reason:@"Display value must be a string or a custom control"]; + } + + if (isPopupMenu) + { + optionView = [self _createPopUpButtonWithItems:itemsArray selectedItemIndex:selectedMenuItemIndex]; + } + else if (isStaticTextField) + { + optionView = [self _createStaticTextFieldWithStringValue:[current_display_value description]]; + } + else if (isCustomRightControl) + { + optionView = display_value_cached; //display_value_cached + [optionView setTarget:self]; + [optionView setAction:@selector(_sendRuleAction:)]; + if ([optionView respondsToSelector:@selector(setEditable:)]) + [optionView setEditable:editable]; + } + + if (optionView) + { + [_ruleOptionViews addObject:optionView]; + [_ruleOptionInitialViewFrames addObject:[optionView frame]]; + [_ruleOptionFrames addObject:[optionView frame]]; + } + + [_correspondingRuleItems addObject:selectedItem]; + currentItem = selectedItem; + indexInCriteria++; + } + + [self _relayoutSubviewsWidthChanged:(CGRectGetWidth([self frame]) != [_ruleEditor rowHeight])]; +} + +- (void)layoutSubviews +{ + [self _relayoutSubviewsWidthChanged:YES]; +} + +- (void)_relayoutSubviewsWidthChanged:(BOOL)widthChanged +{ + var optionViewOriginX, + rowHeight = [_ruleEditor rowHeight], + count = [_ruleOptionViews count], + sliceFrame = [self frame]; + + if (widthChanged) + optionViewOriginX = [self _leftmostViewFixedHorizontalPadding] + [self _indentationHorizontalPadding]*[self indentation]; + for (var i = 0; i < count; i++) + { + var ruleOptionView = _ruleOptionViews[i], + optionFrame = _ruleOptionFrames[i], + initialFrame = _ruleOptionInitialViewFrames[i]; + + optionFrame.origin.y = (rowHeight - CGRectGetHeight(optionFrame))/2 - 2; + if (widthChanged) + { + optionFrame.origin.x = optionViewOriginX; + optionFrame.size.width = MIN(CGRectGetMinX(optionFrame) + CGRectGetWidth(initialFrame), CGRectGetMinX([_subtractButton frame]) - [self _rowButtonsLeftHorizontalPadding]) - CGRectGetMinX(optionFrame); + } + + [ruleOptionView setFrame:optionFrame]; + [self addSubview:ruleOptionView]; + if (widthChanged) + optionViewOriginX += CGRectGetWidth(optionFrame) + [self _interviewHorizontalPadding]; + } + + var buttonFrame = CGRectMake(CGRectGetWidth(sliceFrame) - BUTTON_HEIGHT - [self _rowButtonsRightHorizontalPadding], ([_ruleEditor rowHeight] - BUTTON_HEIGHT)/2 - 2, BUTTON_HEIGHT, BUTTON_HEIGHT); + [_addButton setFrame:buttonFrame]; + + buttonFrame.origin.x -= BUTTON_HEIGHT + [self _rowButtonsInterviewHorizontalPadding]; + [_subtractButton setFrame:buttonFrame]; +} + +- (void)_updateButtonVisibilities +{ + [_addButton setHidden:[_ruleEditor _shouldHideAddButtonForSlice:self]]; + [_subtractButton setHidden:[_ruleEditor _shouldHideSubtractButtonForSlice:self]]; +} + +- (void)_configurePlusButtonByRowType:(CPRuleEditorRowType)type +{ + [self _setRowTypeToAddFromPlusButton:type]; +} + +- (BOOL)isEditable +{ + return editable; +} + +- (void)setEditable:(BOOL)value +{ + editable = value; +// [self _updateEnabledStateForSubviews]; + [self _updateButtonVisibilities]; +} + +- (float)_alignmentGridWidth +{ + return [_ruleEditor _alignmentGridWidth]; +} + +- (float)_indentationHorizontalPadding +{ + return 30.; +} + +- (float)_interviewHorizontalPadding +{ + return 6.; +} + +- (float)_leftmostViewFixedHorizontalPadding +{ + return 7.; +} + +- (float)_minimumVerticalPopupPadding +{ + return 2.; +} + +- (float)_rowButtonsInterviewHorizontalPadding +{ + return 6.; +} + +- (float)_rowButtonsLeftHorizontalPadding +{ + return 10.; +} + +- (float)_rowButtonsRightHorizontalPadding +{ + return 10.; +} + +- (void)_setRowTypeToAddFromPlusButton:(int)type +{ + _plusButtonRowType = type; +} + +- (void)setNeedsDisplay:(BOOL)flag +{ + [super setNeedsDisplay:flag]; +} + +- (BOOL)_nestingModeShouldHideAddButton +{ + return [_ruleEditor _applicableNestingMode] == CPRuleEditorNestingModeSingle; +} + +- (BOOL)_nestingModeShouldHideSubtractButton +{ + return [_ruleEditor _applicableNestingMode] == CPRuleEditorNestingModeSingle; +} + +- (BOOL)containsDisplayValue:(id)value +{ + return [[_ruleEditor displayValuesForRow:_rowIndex] containsObject:value]; + // Ou alors avec _correspondingRuleItems +} + +- (void)viewDidMoveToWindow +{ + [self layoutSubviews]; +} + +- (void)drawRect:(CPRect)rect +{ + [super drawRect:rect]; +} + +- (BOOL)_isRulePopup:(CPView)view +{ + if ([view isKindOfClass:[_CPRuleEditorPopUpButton class]]) + return YES; + return NO; +} + +- (BOOL)_isRuleStaticTextField:(CPView)view +{ + if ([view isKindOfClass:[_CPRuleEditorTextField class]]) + return YES; + return NO; +} + +- (void)_sendRuleAction:(id)sender +{ + [_ruleEditor _sendRuleAction]; +} + +- (void)_textDidChange:(CPNotification)aNotif +{ + if ([[aNotif object] superview] == self) + [_ruleEditor _sendRuleAction]; +} + +/* +- (BOOL)_dropsIndentWhenImmediatelyBelow +{ +} +- (double)_minWidthForPass:(int)pass forView:(id)view withProposedMinWidth:(double)minWidth +{ +} +- (id)_sortOptionDictionariesByLayoutOrder:(id)fp8 +{ +} +- (void)_setHideNonPartDrawing:(BOOL)value +{ +} +- (void)_tightenResizables:(id)fp8 intoGivenWidth:(double)fp12 +{ +} +- (void)_updateEnabledStateForSubviews +{ +} +*/ + +@end + +@implementation _CPRuleEditorTextField : CPTextField +{ +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self != nil) + { + [self setBordered:NO]; + [self setEditable:NO]; + [self setDrawsBackground:NO]; + } + + return self; +} + +- (id)hitTest:(CPPoint)point +{ + if (!CPRectContainsPoint([self frame], point)) + return nil; + + return [self superview]; +} + +@end \ No newline at end of file diff --git a/AppKit/Themes/Aristo/Resources/rule-editor-add.png b/AppKit/Themes/Aristo/Resources/rule-editor-add.png new file mode 100644 index 0000000000000000000000000000000000000000..5506b84f47261a30556446983f7262698cf3df54 GIT binary patch literal 591 zcmV-V04Tx0C)kdlFv&UK@`WoNo=DiBE{w=>_H?#Dr?q2P9-MLQtTnbNNR6!@=I_x z%VrZ5Joq*Aq6ZJ9v=#NQXuwMd>vwht>7k*QJ{aaRZ@%x%n>Pc5 zqD9-@3IZ@K*U7z1Yj4)yYT;`H@E8%yV4)})_Hs7+nvx-Q|C4Ik_h&NK5YaIAq{9P& zK#YRvs^XO74aIrM+pg_WQpoq-oZfKX^xu3fp09XoNf~`@)&l`VBn)K+VCxw|)W~r-7&4 zfp2b!T%sj$iV+<=2nyM^=V3&iq@w-f*X002ovPDHLkV1gs{2I~L- literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/rule-editor-remove.png b/AppKit/Themes/Aristo/Resources/rule-editor-remove.png new file mode 100644 index 0000000000000000000000000000000000000000..0b50001233fc9fe1b14a0a3fc4c4596e78f9335f GIT binary patch literal 576 zcmV-G0>Ax4Tx0C)kdlFv&UK@`WoNo=DiBE{w=>_H?#Dr?q2P9-MLQtTnbNNR6!@=I_x z%VrZ5Joq*Aq6ZJ9v=#NQXuwMd>vwht>7k*QJ{aaRZ@%x%n>Pc5 zqD9-@3IZ@K*U7z1Yj4)yYT;`H@E8%yV4)})_Hs7+nvx-Q|C4Ik_h&NK5YaIAq{9P& zK#YRvs^XO74aIrM+pg_WQpoq-oZfKX^xu3fp09XoNf~`@)&l`VBn)K+VCxw|)W~r-7&4 zfp2b!T%sj$iV+<=2nyM + +@implementation AppController : CPObject +{ + CPWindow window; + CPRuleEditor predicateEditor; + CPTextField predicateField; + + CPTableView leftTable; + CPTableView rightTable; + CPPopUpButton rightExpressionsType; + CPButton addTemplate; + CPBox templateBox; + + CPMutableArray operators; + CPMutableArray leftKeyPaths; + CPMutableArray rightConstants; +} + +- (void)awakeFromCib +{ + operators = [CPMutableArray new]; + leftKeyPaths = [CPMutableArray new]; + rightConstants = [CPMutableArray new]; + + [templateBox setCornerRadius:10]; + [self updateAddTemplateButton]; + + [window setBackgroundColor:[CPColor colorWithHexString:@"f3f4f5"]]; + [window setFullBridge:YES]; +} + +- (IBAction)displayPredicate:(id)sender +{ + var pred = [CPPredicate predicateWithFormat:[sender stringValue]]; + if (pred) + [predicateEditor setObjectValue:pred]; +} + +- (IBAction)predicateEditorAction:(id)sender +{ + [predicateEditor reloadPredicate]; + [predicateField setStringValue:[[predicateEditor objectValue] predicateFormat]]; +} + +- (void)ruleEditorRowsDidChange:(CPNotification)notification +{ + CPLogConsole(_cmd); +} + +// Templates maker +- (IBAction)updateOperators:(id)sender +{ + var op = [CPNumber numberWithInt:[sender tag]]; + if ([sender state] == CPOnState) + { + if (![operators containsObject:op]) + [operators addObject:op]; + + } + else if ([sender state] == CPOffState) + [operators removeObject:op]; + + [self updateAddTemplateButton]; +} + +- (IBAction)selectRightAttributeType:(id)sender +{ + [self updateAddTemplateButton]; +} + +- (IBAction)addLeftKeyPath:(id)sender +{ + [self addUniqueValue:@"keypath" toArray:leftKeyPaths]; + [leftTable reloadData]; + [self updateAddTemplateButton]; +} + +- (IBAction)addRightConstant:(id)sender +{ + if ([rightExpressionsType indexOfSelectedItem] != 2) + return; + + [self addUniqueValue:@"constant" toArray:rightConstants]; + [rightTable reloadData]; + [self updateAddTemplateButton]; +} + +- (IBAction)addTemplate:(id)sender +{ + var template; + + var leftExpressions = [CPMutableArray array], + count = [leftKeyPaths count]; + while (count--) + { + var exp = [CPExpression expressionForKeyPath:leftKeyPaths[count]]; + [leftExpressions insertObject:exp atIndex:0]; + } + + var type = [rightExpressionsType indexOfSelectedItem]; + if (type == 0) + template = [[CPPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftExpressions rightExpressionAttributeType:CPStringAttributeType modifier:0 operators:operators options:0]; + else if (type == 1) + template = [[CPPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftExpressions rightExpressionAttributeType:CPInteger16AttributeType modifier:0 operators:operators options:0]; + else if (type ==2) + { + var rightExpressions = [CPMutableArray array], + count = [rightConstants count]; + while (count--) + { + var exp = [CPExpression expressionForConstantValue:rightConstants[count]]; + [rightExpressions insertObject:exp atIndex:0]; + } + + template = [[CPPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftExpressions rightExpressions:rightExpressions modifier:0 operators:operators options:0]; + } + + var templates = [[predicateEditor rowTemplates] arrayByAddingObject:template]; + [predicateEditor setRowTemplates:templates]; + [self cleanAll]; +} + +- (void)cleanAll +{ + var subviews = [[templateBox contentView] subviews], + count = [subviews count]; + while (count--) + { + var view = subviews[count]; + if ([view isKindOfClass:[CPCheckBox class]]) + [view setState:CPOffState]; + } + + [leftKeyPaths removeAllObjects]; + [operators removeAllObjects]; + [rightConstants removeAllObjects]; + + [leftTable reloadData]; + [rightTable reloadData]; + [self updateAddTemplateButton]; +} + +- (void)updateAddTemplateButton +{ + var enabled = ([leftKeyPaths count] > 0 && [operators count] > 0 && ([rightExpressionsType indexOfSelectedItem] != 2 || [rightConstants count] > 0)); + [addTemplate setEnabled:enabled]; +} + +- (void)addUniqueValue:(CPString)value toArray:(CPMutableArray)array +{ + var i = 0, + count = [array count]; + + while (count--) + if ([array[count] hasPrefix:value]) + i++; + + [array addObject:(i==0)?value:[CPString stringWithFormat:@"%@%d", value, i]]; +} + +- (CPArray)arrayForTable:(CPTableView)tableView +{ + return (tableView == leftTable) ? leftKeyPaths : rightConstants; +} + +- (id)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(CPInteger)row +{ + return [[self arrayForTable:tableView] objectAtIndex:row]; +} + +- (void)tableView:(CPTableView)tableView setObjectValue:(id)object forTableColumn:(CPTableColumn)tableColumn row:(CPInteger)row +{ + [[self arrayForTable:tableView] replaceObjectAtIndex:row withObject:object]; +} + +- (int)numberOfRowsInTableView:(CPTableView)tableView +{ + return [[self arrayForTable:tableView] count]; +} + +@end diff --git a/Tests/Manual/CPPredicateEditorCibTest/Info.plist b/Tests/Manual/CPPredicateEditorCibTest/Info.plist new file mode 100644 index 000000000..547a1302d --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/Info.plist @@ -0,0 +1,12 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPPredicateEditorTest + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPPredicateEditorCibTest/Jakefile b/Tests/Manual/CPPredicateEditorCibTest/Jakefile new file mode 100644 index 000000000..773e9ac9e --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/Jakefile @@ -0,0 +1,93 @@ +/* + * Jakefile + * CPPredicateEditorTest + * + * Created by You on May 7, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CPPredicateEditorTest", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPPredicateEditorTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPPredicateEditorTest"); + task.setIdentifier("com.yourcompany.CPPredicateEditorTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPPredicateEditorTest"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CPPredicateEditorTest"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CPPredicateEditorTest", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPPredicateEditorTest", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPPredicateEditorTest")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPPredicateEditorTest"), FILE.join("Build", "Deployment", "CPPredicateEditorTest")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPPredicateEditorTest")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPPredicateEditorTest"), FILE.join("Build", "Desktop", "CPPredicateEditorTest", "CPPredicateEditorTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPPredicateEditorTest", "CPPredicateEditorTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPPredicateEditorTest")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.cib b/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.cib new file mode 100644 index 000000000..fc0aeb751 --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;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;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;202E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;D;K;6;CP$UIDd;3;319E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;D;K;6;CP$UIDd;3;369E;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;D;K;6;CP$UIDd;3;452E;D;K;6;CP$UIDd;3;453E;D;K;6;CP$UIDd;3;454E;D;K;6;CP$UIDd;3;455E;D;K;6;CP$UIDd;3;456E;D;K;6;CP$UIDd;3;457E;D;K;6;CP$UIDd;3;458E;D;K;6;CP$UIDd;3;459E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;462E;D;K;6;CP$UIDd;3;463E;D;K;6;CP$UIDd;3;464E;D;K;6;CP$UIDd;3;465E;D;K;6;CP$UIDd;3;466E;D;K;6;CP$UIDd;3;467E;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;478E;D;K;6;CP$UIDd;3;479E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;481E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;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;58E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;2;76E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;167E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;482E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;483E;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;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;485E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;486E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;489E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;490E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;46E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;491E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;484E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;493E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;496E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;497E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;498E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;499E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;96E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;500E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;501E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;96E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;489E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;490E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;96E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;491E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;484E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;502E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;503E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;504E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;505E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;507E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;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;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;507E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;511E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;512E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;517E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;518E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;95E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;520E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;133E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;521E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;522E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;523E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;524E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;525E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;526E;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;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;527E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;16;$aimage-positionD;K;6;CP$UIDd;3;484E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;516E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;493E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;531E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;484E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;532E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;533E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;534E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;535E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;146E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;500E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;501E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;146E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;489E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;490E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;146E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;491E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;484E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;502E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;536E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;537E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;538E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;539E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;540E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;544E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;50E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;20E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;545E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;508E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;509E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;508E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;546E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;547E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;548E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;549E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;16;$aimage-positionD;K;6;CP$UIDd;3;484E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;516E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;493E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;531E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;484E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;552E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;553E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;489E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;46E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;484E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;556E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;557E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;558E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;559E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;560E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;561E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;562E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;563E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;516E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;564E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;565E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;493E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;566E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;567E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;567E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;568E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;569E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;570E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;484E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;492E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;509E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;508E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;508E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;508E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;508E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;571E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;1;0E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;508E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;573E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;574E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;575E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;576E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;577E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;578E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;493E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;27E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;580E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;581E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;512E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;582E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;583E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;584E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;585E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;586E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;587E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;197E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;588E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;589E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;516E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;35E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;564E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;590E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;591E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;592E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;593E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;594E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;35E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;595E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;596E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;597E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;598E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;84E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;96E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;599E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;600E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;96E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;489E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;96E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;484E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;602E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;603E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;604E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;605E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;576E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;606E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;607E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;608E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;161E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;607E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;609E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;610E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;611E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;612E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;613E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;614E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;615E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;616E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;617E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;618E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;619E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;559E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;620E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;598E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;621E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;622E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;623E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;624E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;625E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;626E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;627E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;628E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;16;$aimage-positionD;K;6;CP$UIDd;3;484E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;516E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;493E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;629E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;484E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;630E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;148E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;631E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;146E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;599E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;600E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;146E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;489E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;146E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;484E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;601E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;632E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;521E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;633E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;634E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;492E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;635E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;636E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;637E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;518E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;638E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;639E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;640E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;641E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;642E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;71E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;26E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;545E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;508E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;508E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;508E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;643E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;644E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;645E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;646E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;647E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;648E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;646E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;649E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;650E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;651E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;618E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;81E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;24E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;652E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;587E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;654E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;655E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;656E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;107E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;105E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;493E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;484E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;484E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;484E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;657E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;509E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;508E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;658E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;656E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;659E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;660E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;492E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;661E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;512E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;662E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;663E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;665E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;667E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;668E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;669E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;509E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;508E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;487E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;670E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;671E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;672E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;673E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;674E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;114E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;675E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;676E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;677E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;516E;K;11;$aalignmentD;K;6;CP$UIDd;3;492E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;678E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;679E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;509E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;509E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;509E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;516E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;492E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;680E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;681E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;682E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;669E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;683E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;646E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;685E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;577E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;686E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;27E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;687E;E;D;K;6;$classD;K;6;CP$UIDd;3;114E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;688E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;689E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;690E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;677E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;691E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;516E;K;11;$aalignmentD;K;6;CP$UIDd;3;492E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;692E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;679E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;508E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;508E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;508E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;694E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;516E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;492E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;695E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;696E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;697E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;669E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;35E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;683E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;646E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;525E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;35E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;698E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;699E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;700E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;576E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;609E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;699E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;701E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;702E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;685E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;520E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;703E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;704E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;161E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;705E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;706E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;669E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;531E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;707E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;516E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;708E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;516E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;709E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;512E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;710E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;711E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;673E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;113E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;649E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;559E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;536E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;43E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;713E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;482E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;714E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;640E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;715E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;566E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;90E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;42E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;545E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;545E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;508E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;508E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;508E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;716E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;717E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;718E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;671E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$aimage-positionD;K;6;CP$UIDd;3;516E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;719E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;630E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;720E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;721E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;195E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;722E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;493E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;487E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;723E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;590E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;724E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;725E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;3;105E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;516E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;484E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;484E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;484E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;484E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;509E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;509E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;663E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;665E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;727E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;728E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;669E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;509E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;508E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;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;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;729E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;730E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;731E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;628E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;484E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;492E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;493E;K;19;CPBoxBorderColorKeyD;K;6;CP$UIDd;3;732E;K;17;CPBoxFillColorKeyD;K;6;CP$UIDd;3;733E;K;20;CPBoxCornerRadiusKeyD;K;6;CP$UIDd;3;484E;K;19;CPBoxBorderWidthKeyD;K;6;CP$UIDd;3;493E;K;21;CPBoxContentMarginKeyD;K;6;CP$UIDd;3;734E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;735E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;736E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;737E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;738E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;739E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;740E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;741E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;742E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;744E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;646E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;615E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;80E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;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;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;76E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;745E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;746E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;747E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;492E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;748E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;557E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;51E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;749E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;750E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;493E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;751E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;510E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;752E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;510E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;16;$aimage-positionD;K;6;CP$UIDd;3;484E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;484E;K;11;$aalignmentD;K;6;CP$UIDd;3;516E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;493E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;531E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;509E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;484E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;484E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;753E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;754E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;493E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;35E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;751E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;755E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;696E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;609E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;756E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;757E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;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;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;544E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;758E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;758E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;759E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;544E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;690E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;760E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;508E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;3;509E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;509E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;761E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;762E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;669E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;3;763E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;764E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;765E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;766E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;767E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;768E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;769E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;771E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;773E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;774E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;35E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;775E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;776E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;777E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;778E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;503E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;642E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;567E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;567E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;642E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;568E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;569E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;570E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;484E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;492E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;509E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;508E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;508E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;508E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;508E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;780E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;1;0E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;508E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;781E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;782E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;685E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;609E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;496E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;24E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;783E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;784E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;785E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;493E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;786E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;787E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;788E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;587E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;790E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;72E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;791E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;740E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;161E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;602E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;519E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;72E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;24E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;721E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;792E;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;3;196E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;793E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;793E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;794E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;795E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;796E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;797E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;798E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;711E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;508E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;509E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;43E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;S;1;0S;1;1S;1;2S;1;3S;1;4S;1;5S;1;6S;1;7S;2;10S;1;8S;1;9S;2;11S;2;12S;2;13S;2;14S;2;15S;2;16S;2;17S;2;18S;2;19S;2;20S;2;21S;2;22S;2;23S;2;24S;2;25S;2;26S;2;27S;2;28S;2;29S;2;30S;2;32S;2;31S;2;33S;2;35S;2;34S;2;36S;2;38S;2;37S;2;39S;2;40S;2;41S;2;42S;2;43S;2;44S;2;45S;2;46S;2;47S;2;48S;2;49S;2;50S;2;56S;2;52S;2;51S;2;53S;2;55S;2;54S;2;57S;2;58S;2;59S;2;60S;2;61S;2;62S;2;63S;2;64S;2;65S;2;66S;2;67S;2;68S;2;69S;2;70S;2;71S;2;72S;2;73S;2;74S;2;75S;2;76S;2;77S;2;78S;2;79S;2;80S;2;81S;2;82S;2;83S;2;84S;2;85S;2;86S;2;87S;2;88S;2;89S;2;90S;2;91S;2;92S;2;93S;2;94S;2;95S;2;96S;2;97S;2;98S;2;99S;3;100S;3;101S;3;102S;3;103S;3;104S;3;107S;3;106S;3;105S;3;108S;3;109S;3;110S;3;111S;3;112S;3;113S;3;114S;3;115S;3;116S;3;117S;3;118S;3;119S;3;120S;3;121S;3;122S;3;127S;3;124S;3;125S;3;126S;3;123S;3;128S;3;129S;3;130S;3;131S;3;132S;3;133S;3;134S;3;135S;3;136S;3;137S;3;138S;3;139S;3;140S;3;141S;3;142S;3;143S;3;144S;3;145S;3;146S;3;147S;3;148S;3;149S;12;File's OwnerS;3;150S;3;151S;3;152S;3;153S;3;154S;3;155S;3;156S;3;157S;3;158S;3;159S;3;160S;3;161S;3;162S;3;163S;3;164S;3;165S;3;166S;3;167S;3;168S;3;169S;3;170S;3;171S;3;172S;3;173S;3;174S;3;175S;3;176S;3;177S;3;178S;3;179S;3;180S;3;181S;3;182S;3;183S;3;184S;3;185D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;87E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;179E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;122E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;167E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;184E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;157E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;64E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;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;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;812E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;813E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;814E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;815E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;816E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;817E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;818E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;819E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;820E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;821E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;822E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;145E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;823E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;176E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;824E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;825E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;826E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;22E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;827E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;828E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;829E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;830E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;831E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;832E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;833E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;181E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;834E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;25E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;835E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;175E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;836E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;837E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;838E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;839E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;840E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;75E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;841E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;842E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;843E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;844E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;845E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;118E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;846E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;847E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;848E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;849E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;850E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;851E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;852E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;853E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;854E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;54E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;855E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;856E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;857E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;858E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;859E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;170E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;860E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;53E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;861E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;862E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;863E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;864E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;865E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;866E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;867E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;868E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;869E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;179E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;870E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;871E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;872E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;873E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;875E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;876E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;874E;E;D;K;6;$classD;K;6;CP$UIDd;3;405E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;877E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;E;E;d;1;0S;24;{{-100, 249}, {360, 15}}S;19;{{0, 0}, {360, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:d;1;4d;1;1S;14;Start Speakingd;7;1048576S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;100E;E;E;S;4;UndoS;1;zS;21;{{1, -37}, {223, 15}}S;19;{{0, 0}, {223, 15}}f;18;0.9953917050691244S;0;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;121E;E;E;S;6;is notS;17;_popUpItemAction:d;1;5T;F;D;K;6;$classD;K;6;CP$UIDd;3;196E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;946E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;947E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;948E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;S;21;{{72, 175}, {33, 18}}S;18;{{0, 0}, {33, 18}}d;2;36S;9;check-boxS;8;borderedd;1;2S;1;≠S;4;HelpS;14;submenuAction:S;4;Kernd;1;9S;22;{{144, 201}, {84, 18}}S;18;{{0, 0}, {84, 18}}S;9;Ends WithS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;2;68E;E;E;S;20;{{9, 399}, {25, 24}}S;18;{{0, 0}, {25, 24}}S;6;buttonS;17;selected+borderedS;1;+S;6;Print…S;1;pS;6;CenterS;1;|S;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;39E;E;E;S;22;{{20, 74}, {611, 164}}S;20;{{0, 0}, {611, 164}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;544E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;3;546E;E;E;S;10;scrollviewS;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;543E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;878E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;758E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;879E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;880E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;179E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;196E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;881E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;881E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;S;12;Preferences…S;1;,S;15;Constant ValuesS;22;{{601, 242}, {30, 24}}S;18;{{0, 0}, {30, 24}}S;21;{{336, 79}, {15, 84}}S;18;{{0, 0}, {15, 84}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;17;0.977011501789093S;8;BaselineD;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;3;116E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;3;117E;E;E;S;11;Use DefaultS;5;RaiseS;11;Show ColorsS;1;CS;12;Smart QuotesS;1;gS;7;StringsD;K;6;$classD;K;6;CP$UIDd;3;543E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;146E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;889E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;567E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;906E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;146E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;487E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;891E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;58E;E;S;19;{{0, 0}, {216, 95}}S;9;tableviewd;2;23S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;155E;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;3;572E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;882E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;883E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;884E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;S;13;AppControllerS;10;Copy RulerS;1;cd;7;1310720S;6;stringD;K;10;$classnameS;20;CPExpression_keypathK;8;$classesA;S;20;CPExpression_keypathS;21;CPExpression_functionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;579E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;885E;K;11;CPArgumentsD;K;6;CP$UIDd;3;886E;K;9;CPOperandD;K;6;CP$UIDd;3;888E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;669E;E;S;22;{{189, 175}, {33, 18}}S;1;S;8;Use NoneS;4;SaveS;1;sS;20;{{9, 30}, {218, 97}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;566E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;3;716E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;196E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;146E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;881E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;881E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;d;1;6S;21;{{14, 227}, {96, 18}}S;7;MatchesD;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;89E;E;E;S;4;EditS;11;begins withS;8;containsS;10;Select AllS;1;aD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;907E;D;K;6;CP$UIDd;3;908E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;666E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;881E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;881E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;909E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;896E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;484E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;503E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;898E;E;D;K;6;$classD;K;6;CP$UIDd;3;114E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;881E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;881E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;677E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;899E;K;6;$afontD;K;6;CP$UIDd;3;910E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;492E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;516E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;15;$acontent-insetD;K;6;CP$UIDd;3;911E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;503E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;679E;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;3;492E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;484E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;503E;E;S;23;{{701, 34}, {242, 440}}S;20;{{0, 0}, {242, 440}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;510E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;693E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;912E;E;D;K;6;$classD;K;6;CP$UIDd;3;693E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;913E;E;S;6;{0, 0}S;15;Revert to SavedS;10;Align LeftS;1;{S;11;Align RightS;1;}S;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;134E;E;E;S;20;About NewApplicationS;4;RedoS;1;ZS;21;{{6, 265}, {223, 24}}S;19;{{0, 0}, {223, 24}}S;12;popup-buttonS;7;Use AllS;9;SubscriptS;16;Smart Copy/PasteS;1;fS;21;{{10, 127}, {25, 24}}S;7;NumbersS;5;Find…S;11;Hide OthersS;19;Quit NewApplicationS;1;qS;20;{{0, 0}, {609, 162}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;915E;E;E;S;11;rule-editord;2;75d;2;26S;6;formatS;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;770E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;916E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;106E;E;E;S;22;Use Selection for Findd;1;7S;1;eS;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingD;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;2;28E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;151E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;572E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;882E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;883E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;488E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;884E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;S;11;Paste StyleS;3;CutS;1;xS;6;ItalicS;1;iS;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;2;32E;E;E;S;9;UnderlineS;1;uD;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;3;163E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;88E;E;E;S;20;{{0, 0}, {960, 534}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;87E;E;E;S;7;TightenS;3;NewS;1;nS;10;Clear MenuS;8;delegateS;11;addTemplateS;9;leftTableS;15;predicateEditorS;14;predicateFieldS;20;rightExpressionsTypeS;10;rightTableS;11;templateBoxS;6;windowS;10;dataSourceS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;7;addRow:S;17;displayPredicate:S;22;predicateEditorAction:S;15;addLeftKeyPath:S;16;updateOperators:S;25;selectRightAttributeType:S;17;addRightConstant:S;12;addTemplate:S;20;{{1, 1}, {609, 162}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;179E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;693E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;917E;E;S;16;{{0, 0}, {0, 0}}S;20;{{224, 0}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewS;12;valueForKey:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;919E;E;E;D;K;10;$classnameS;17;CPExpression_selfK;8;$classesA;S;17;CPExpression_selfS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;887E;E;S;19;{{1, 1}, {216, 95}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;693E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;920E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;27E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;921E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;922E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;747E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;6;$afontD;K;6;CP$UIDd;3;923E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;492E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;183E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;924E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;925E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;747E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;6;$afontD;K;6;CP$UIDd;3;923E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;492E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;114E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;926E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;927E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;677E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;928E;K;6;$afontD;K;6;CP$UIDd;3;923E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;516E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;503E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;679E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;508E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;508E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;508E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;694E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;516E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;484E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;930E;E;E;S;12;columnHeaderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;897E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;931E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;932E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;509E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;900E;K;4;nameD;K;6;CP$UIDd;3;933E;K;6;valuesD;K;6;CP$UIDd;3;935E;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;902E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;936E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;937E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;493E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;938E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;939E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;940E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;747E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;6;$afontD;K;6;CP$UIDd;3;923E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;492E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;941E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;942E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;943E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;747E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;6;$afontD;K;6;CP$UIDd;3;923E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;492E;K;11;$aalignmentD;K;6;CP$UIDd;3;484E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;492E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;516E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;944E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;900E;K;4;nameD;K;6;CP$UIDd;3;933E;K;6;valuesD;K;6;CP$UIDd;3;945E;E;D;K;6;$classD;K;6;CP$UIDd;3;902E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;936E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;484E;D;K;6;CP$UIDd;3;949E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;950E;D;K;6;CP$UIDd;3;951E;D;K;6;CP$UIDd;3;952E;D;K;6;CP$UIDd;3;493E;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;914E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;179E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;484E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;758E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;758E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;179E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;953E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;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;954E;D;K;6;CP$UIDd;3;954E;D;K;6;CP$UIDd;3;954E;D;K;6;CP$UIDd;3;493E;E;E;D;K;10;$classnameS;21;CPExpression_constantK;8;$classesA;S;21;CPExpression_constantS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;918E;K;15;CPConstantValueD;K;6;CP$UIDd;3;578E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;493E;D;K;6;CP$UIDd;3;493E;E;E;S;19;{{37, 8}, {79, 24}}S;18;{{0, 0}, {79, 24}}D;K;6;$classD;K;6;CP$UIDd;3;897E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;955E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;956E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;509E;E;S;20;{{122, 8}, {99, 24}}S;18;{{0, 0}, {99, 24}}S;21;{{224, 1}, {167, 25}}S;19;{{0, 0}, {167, 25}}S;19;bezeled+placeholderD;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;929E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;667E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;881E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;881E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;667E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;953E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;S;17;Arial, sans-serifd;2;12S;4;fontD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;934E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;957E;K;6;normalD;K;6;CP$UIDd;3;898E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;918E;K;15;CPConstantValueD;K;6;CP$UIDd;3;686E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;503E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;958E;E;S;18;{{7, 8}, {58, 24}}S;18;{{0, 0}, {58, 24}}D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;503E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;959E;E;S;20;{{71, 8}, {167, 24}}S;19;{{0, 0}, {167, 24}}D;K;6;$classD;K;6;CP$UIDd;3;929E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;727E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;881E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;881E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;727E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;953E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;542E;E;D;K;6;$classD;K;6;CP$UIDd;3;934E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;957E;K;6;normalD;K;6;CP$UIDd;3;898E;E;E;S;20;{{1, 1}, {240, 438}}S;20;{{0, 0}, {240, 438}}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;3;146E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;62E;E;E;f;4;0.42f;12;0.8911290323f;12;0.8901341359f;12;0.8899458051d;2;18f;12;0.9100000262S;5;Ariald;2;11D;K;6;$classD;K;6;CP$UIDd;3;897E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;931E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;932E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;508E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;960E;D;K;6;CP$UIDd;3;961E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;962E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;963E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;493E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;938E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;964E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;938E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;493E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;965E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;506E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;493E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;941E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;495E;E;S;3;AnyS;3;AllS;25;of the following are trueE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.xib b/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.xib new file mode 100644 index 000000000..9e96ff71a --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/Resources/MainMenu.xib @@ -0,0 +1,4900 @@ + + + + 1050 + 10H574 + 823 + 1038.35 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 823 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + + + Font + + 2147483647 + + + submenuAction: + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 15 + 2 + {{335, 417}, {960, 534}} + 1946157056 + Window + NSWindow + + {1.79769e+308, 1.79769e+308} + + + 256 + + + + 268 + {{601, 264}, {30, 30}} + + + YES + + -2080244224 + 134217728 + + + + LucidaGrande + 13 + 1044 + + + -2038021889 + 134 + + LucidaGrande + 13 + 16 + + + + 400 + 75 + + + + + 270 + {{20, 476}, {611, 22}} + + YES + + -1804468671 + 268436480 + string ENDSWITH "foo" + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + + 268 + + + + 2304 + + + + 294 + + + + 274 + + + + 290 + + + + 257 + {{581, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + + + + LucidaGrande-Bold + 12 + 16 + + + + add + + + + + _addOption: + + -2038284033 + 36 + + LucidaGrande + 12 + 4883 + + + 400 + 75 + + + + + 257 + {{561, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + - + + + + remove + + + + + _deleteOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 256 + {{7, 4}, {58, 19}} + + + -1 + YES + + 67239488 + 4196352 + + LucidaGrande + 11 + 3100 + + + + -2038284033 + 36 + + LucidaGrande + 11 + 16 + + + 400 + 75 + + + Any + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + + YES + + + + + + + All + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{71, 4}, {167, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + -2038284033 + 36 + + + 400 + 75 + + + of the following are true + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + + + + + + 3 + YES + YES + 2 + + + + {609, 26} + + + 0 + 0 + + + + + + + 2 + {{7, 4}, {58, 19}} + {{71, 4}, {167, 19}} + + + + + 2 + 0 + 0 + 0 + 0 + + + + + NO + NO + + + + + + + + 2 + {{7, 4}, {58, 19}} + {{71, 4}, {167, 19}} + + + 0 + 0 + YES + + + + 290 + + + + 257 + {{581, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + + + + + + add + + + + + _addOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 257 + {{561, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + - + + + + remove + + + + + _deleteOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 256 + {{37, 4}, {79, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + 3 + valueForKey: + + 1 + + + + 10 + string + + + + + -2038284033 + 36 + + + 400 + 75 + + + string + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + + YES + + + + + + + string2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + 3 + valueForKey: + + + + 10 + string2 + + + + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{122, 4}, {99, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + + -2038284033 + 36 + + + 400 + 75 + + + begins with + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + + YES + + + + + + + is not + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + ends with + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + contains + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{227, 4}, {160, 18}} + + + YES + + 343014976 + 4326400 + + + + YES + + + 6 + System + controlTextColor + + + + + + {{0, 26}, {609, 26}} + + + 1 + 1 + + + + + + + + 3 + {{37, 4}, {79, 19}} + {{122, 4}, {99, 19}} + {{227, 4}, {160, 18}} + + + + + 1 + 0 + 0 + 0 + 700 + + + + + + NO + YES + + + + + + + + + + + + 3 + {{37, 4}, {79, 19}} + {{122, 4}, {99, 19}} + {{227, 4}, {160, 18}} + + + 0 + 0 + YES + + + {609, 162} + + + + + + NSRuleEditorItemPBoardType + + {609, 162} + + + YES + 75 + 26 + format + YES + NO + NO + 3 + rowType + subrows + criteria + displayValues + boundArray + NSMutableDictionary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{1, 1}, {609, 162}} + + + + + 3 + MC45MTAwMDAwMjYyAA + + 4 + + + + -2147483392 + {{336, 1}, {15, 84}} + + + + _doScroller: + 0.97701150178909302 + + + + -2147483392 + {{-100, -100}, {360, 15}} + + + 1 + + _doScroller: + + + {{20, 296}, {611, 164}} + + + 530 + + + + + + + 9 + + + + 256 + + + + 268 + {{9, 11}, {25, 25}} + + YES + + -2080244224 + 134217728 + + + + + -2038152961 + 134 + + + 400 + 75 + + + + + 268 + + + + 2304 + + + + 256 + {216, 95} + + + YES + + + -2147483392 + {{224, 0}, {16, 17}} + + + + 213 + 40 + 1000 + + 75628096 + 2048 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + + + + 337772096 + 2048 + Text Cell + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + + 3 + YES + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -692060160 + + + 4 + 15 + 0 + YES + 0 + + + {{1, 1}, {216, 95}} + + + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _doScroller: + 0.9925373134328358 + + + + -2147483392 + {{1, 119}, {223, 15}} + + + 1 + + _doScroller: + 0.99539170506912444 + + + {{9, 311}, {218, 97}} + + + 562 + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 268 + {{144, 219}, {84, 18}} + + + 9 + YES + + 67239424 + 0 + Ends With + + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 268 + {{6, 145}, {223, 26}} + + + YES + + -2076049856 + 2048 + + + 109199615 + 129 + + + 400 + 75 + + + Strings + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + + + + Numbers + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Constant Values + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 1 + YES + YES + 2 + + + + + 268 + {{14, 219}, {96, 18}} + + + 8 + YES + + 67239424 + 0 + Begins With + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{72, 245}, {33, 18}} + + + 5 + YES + + 67239424 + 0 + + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{127, 245}, {33, 18}} + + + 2 + YES + + 67239424 + 0 + > + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{144, 193}, {78, 18}} + + + 99 + YES + + 67239424 + 0 + Contains + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{14, 245}, {33, 18}} + + + 4 + YES + + 67239424 + 0 + = + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{7, 416}, {142, 17}} + + + YES + + 68288064 + 272630784 + Key Paths: + + + + 6 + System + controlColor + + + + + + + + 268 + + + + 2304 + + + + 256 + {216, 95} + + + YES + + + -2147483392 + {{224, 0}, {16, 17}} + + + + 213 + 40 + 1000 + + 75628096 + 2048 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 17 + -692060160 + + + 4 + 15 + 0 + YES + 0 + + + {{1, 1}, {216, 95}} + + + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _doScroller: + 0.9925373134328358 + + + + -2147483392 + {{1, 119}, {223, 15}} + + + 1 + + _doScroller: + 0.99539170506912444 + + + {{9, 39}, {218, 97}} + + + 562 + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 268 + {{10, 283}, {25, 25}} + + + YES + + -2080244224 + 134217728 + + + + + -2038152961 + 134 + + + 400 + 75 + + + + + 268 + {{14, 193}, {96, 18}} + + + 6 + YES + + 67239424 + 0 + Matches + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{189, 245}, {33, 18}} + + + YES + + 67239424 + 0 + < + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{1, 1}, {240, 438}} + + + + + {{701, 60}, {242, 440}} + + + {0, 0} + + 67239424 + 0 + Box + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 4 + 0 + NO + + 1 + MC44OTExMjkwMzIzIDAuODkwMTM0MTM1OSAwLjg4OTk0NTgwNTEAA + + + + + 265 + {{837, 20}, {103, 25}} + + YES + + -1543373312 + 134217728 + Add Template + + + -2038152961 + 134 + + + 400 + 75 + + + + {960, 534} + + + + {{0, 0}, {1680, 1028}} + {1.79769e+308, 1.79769e+308} + + + AppController + + + + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + terminate: + + + + 449 + + + + delegate + + + + 475 + + + + addRow: + + + + 1131 + + + + delegate + + + + 1133 + + + + displayPredicate: + + + + 1134 + + + + predicateEditor + + + + 1136 + + + + predicateField + + + + 1137 + + + + window + + + + 1138 + + + + predicateEditorAction: + + + + 1139 + + + + leftTable + + + + 1318 + + + + rightExpressionsType + + + + 1320 + + + + rightTable + + + + 1321 + + + + templateBox + + + + 1322 + + + + addLeftKeyPath: + + + + 1323 + + + + addRightConstant: + + + + 1324 + + + + selectRightAttributeType: + + + + 1327 + + + + updateOperators: + + + + 1329 + + + + updateOperators: + + + + 1330 + + + + updateOperators: + + + + 1331 + + + + updateOperators: + + + + 1332 + + + + updateOperators: + + + + 1333 + + + + updateOperators: + + + + 1334 + + + + updateOperators: + + + + 1335 + + + + updateOperators: + + + + 1336 + + + + dataSource + + + + 1337 + + + + delegate + + + + 1338 + + + + dataSource + + + + 1339 + + + + delegate + + + + 1340 + + + + addTemplate: + + + + 1344 + + + + addTemplate + + + + 1345 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + MainMenu + + + 19 + + + + + + + + 56 + + + + + + + + 103 + + + + + + 1 + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + + + + 2 + + + 111 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + + + + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 378 + + + + + + + + 379 + + + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 471 + + + + + + + + 472 + + + + + 474 + + + AppController + + + 476 + + + + + + + + 477 + + + + + 1051 + + + + + + + + + + 1052 + + + + + 1053 + + + + + 1054 + + + + + + + + + 1055 + + + + + 1056 + + + + + + + + + 1057 + + + + + + + + + 1058 + + + + + + + + + + + 1060 + + + + + 1063 + + + + + 1071 + + + + + 1072 + + + + + 1073 + + + + + 1074 + + + + + 1309 + + + + + + + + + + + + + + + + + + + + + 1280 + + + + + + + + 1281 + + + + + 1239 + + + + + + + + + + 1243 + + + + + + + + 1242 + + + + + 1240 + + + + + 1244 + + + + + + + + 1247 + + + + + 1256 + + + + + + + + 1257 + + + + + 1274 + + + + + + + + 1275 + + + + + + + + 1276 + + + + + + + + + + 1279 + + + + + 1278 + + + + + 1277 + + + + + 1254 + + + + + + + + 1255 + + + + + 1260 + + + + + + + + 1261 + + + + + 1252 + + + + + + + + 1253 + + + + + 1266 + + + + + + + + 1267 + + + + + 1262 + + + + + + + + 1263 + + + + + 1248 + + + + + + + + 1249 + + + + + 1268 + + + + + + + + + + 1271 + + + + + 1270 + + + + + 1269 + + + + + + + + 1272 + + + + + + + + 1273 + + + + + 1250 + + + + + + + + 1251 + + + + + 1264 + + + + + + + + 1265 + + + + + 1310 + + + + + + + + 1311 + + + + + 1342 + + + + + + + + 1343 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + {{596, 852}, {216, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + {{522, 812}, {146, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{436, 809}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {275, 83}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{187, 434}, {243, 243}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {167, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {241, 103}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{525, 802}, {197, 73}} + {{207, 285}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + {74, 862} + {{6, 978}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{475, 832}, {234, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {215, 63}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{91, 135}, {960, 534}} + com.apple.InterfaceBuilder.CocoaPlugin + {{91, 135}, {960, 534}} + + {{33, 99}, {480, 360}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{437, 242}, {86, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{523, 2}, {178, 283}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{219, 102}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{23, 794}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{145, 474}, {199, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + 1345 + + + + + AppController + NSObject + + id + id + id + id + id + id + id + id + + + + addLeftKeyPath: + id + + + addRightConstant: + id + + + addTemplate: + id + + + displayPredicate: + id + + + newTemplate: + id + + + predicateEditorAction: + id + + + selectRightAttributeType: + id + + + updateOperators: + id + + + + NSButton + NSTableView + NSPredicateEditor + NSTextField + NSPopUpButton + NSTableView + NSBox + NSWindow + + + + addTemplate + NSButton + + + leftTable + NSTableView + + + predicateEditor + NSPredicateEditor + + + predicateField + NSTextField + + + rightExpressionsType + NSPopUpButton + + + rightTable + NSTableView + + + templateBox + NSBox + + + window + NSWindow + + + + IBProjectSource + ./classes-xjh84/AppController.h + + + + NSDocument + NSObject + + id + id + id + id + id + id + + + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + IBProjectSource + ./classes-xjh84/NSDocument.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + ../PredicateEditor.xcodeproj + 3 + + {9, 8} + {7, 2} + {15, 15} + + + diff --git a/Tests/Manual/CPPredicateEditorCibTest/Resources/format.strings b/Tests/Manual/CPPredicateEditorCibTest/Resources/format.strings new file mode 100644 index 000000000..3b2423ea6 --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/Resources/format.strings @@ -0,0 +1 @@ +"string" = "loc string"; diff --git a/Tests/Manual/CPPredicateEditorCibTest/Resources/spinner.gif b/Tests/Manual/CPPredicateEditorCibTest/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPPredicateEditorCibTest/index-debug.html b/Tests/Manual/CPPredicateEditorCibTest/index-debug.html new file mode 100644 index 000000000..a35f6f935 --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/index-debug.html @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + CPPredicateEditorTest + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPPredicateEditorCibTest/index.html b/Tests/Manual/CPPredicateEditorCibTest/index.html new file mode 100644 index 000000000..e1730c3c2 --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/index.html @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + CPPredicateEditorTest + + + + + + + + + + + + +
+
+ + + +
+
+ + + + diff --git a/Tests/Manual/CPPredicateEditorCibTest/main.j b/Tests/Manual/CPPredicateEditorCibTest/main.j new file mode 100644 index 000000000..ffd7e88f7 --- /dev/null +++ b/Tests/Manual/CPPredicateEditorCibTest/main.j @@ -0,0 +1,18 @@ +/* + * main.j + * CPPredicateEditorTest + * + * Created by You on May 7, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/CPRuleEditorCibTest/AppController.j b/Tests/Manual/CPRuleEditorCibTest/AppController.j new file mode 100644 index 000000000..f95891fac --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/AppController.j @@ -0,0 +1,111 @@ +/* + * AppController.j + * CPRuleEditorCibTest + * + * Created by cacaodev on September 3, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import "RuleDelegate.j" +@import "CPViewAnimationTransition.j" + +var THEME_ATTRIBUTES = [@"slice-top-border-color", @"slice-bottom-border-color",@"slice-last-bottom-border-color", @"selected-color"]; + +@implementation AppController : CPObject +{ + CPWindow theWindow; //this "outlet" is connected automatically by the Cib + CPRuleEditor ruleEditor @accessors; + CPTextField predicateField; + id animation; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (void)awakeFromCib +{ + var contentView = [theWindow contentView]; + [theWindow setFullBridge:YES]; + [contentView setBackgroundColor:[CPColor colorWithHexString:@"f3f4f5"]]; + + var animationClass = (CPBrowserIsEngine(CPWebKitBrowserEngine)) ? [CPViewAnimationTransition class] : [CPViewAnimation class]; + animation = [[animationClass alloc] initWithDuration:0.4 animationCurve:CPAnimationEaseInOut]; + //[ruleEditor setAnimation:animation]; + for (var i = 0; i < 4; i++) + { + var view = [[theWindow contentView] viewWithTag:(1001 + i)]; + [view setColor:[ruleEditor valueForThemeAttribute:THEME_ATTRIBUTES[i]]]; + } + + var colors = [ruleEditor valueForThemeAttribute:@"alternating-row-colors"]; + [[contentView viewWithTag:1005] setColor:colors[0]]; + [[contentView viewWithTag:1006] setColor:colors[1]]; +} + +- (void)ruleEditorAction:(id)sender +{ + [ruleEditor reloadPredicate]; + [predicateField setStringValue:[[ruleEditor predicate] predicateFormat]]; +} + +- (void)setAnimate:(id)sender +{ + var anim = ([sender state]) ? animation : nil; + [ruleEditor setAnimation:anim]; +} + +- (void)setEditable:(id)sender +{ + [ruleEditor setEditable:[sender state]]; +} + +- (void)setCanRemoveAllRows:(id)sender +{ + [ruleEditor setCanRemoveAllRows:[sender state]]; +} + +- (void)setAllowsEmptyCompoundRows:(id)sender +{ + [ruleEditor setAllowsEmptyCompoundRows:[sender state]]; +} + +- (void)setNestingMode:(id)sender +{ + [ruleEditor setNestingMode:[sender indexOfSelectedItem]]; +} + +- (void)setFormattingStringsFilename:(id)sender +{ + [ruleEditor setFormattingStringsFilename:[sender stringValue]]; +} + +- (void)setRowHeight:(id)sender +{ + [ruleEditor setRowHeight:[sender value]]; +} + +- (void)setAttributeValue:(id)sender +{ + var tag = [sender tag], + value, + attribute; + + if (tag == 1005 || tag == 1006) + { + var colorIndex = tag - 1005, + attribute = @"alternating-row-colors", + value = [ruleEditor valueForThemeAttribute:attribute]; + + value[colorIndex] = [sender color]; + } + else + { + value = [sender color]; + attribute = THEME_ATTRIBUTES[tag - 1001]; + } + + [ruleEditor setValue:value forThemeAttribute:attribute]; + [ruleEditor setNeedsDisplay:YES]; +} \ No newline at end of file diff --git a/Tests/Manual/CPRuleEditorCibTest/CPViewAnimationTransition.j b/Tests/Manual/CPRuleEditorCibTest/CPViewAnimationTransition.j new file mode 100644 index 000000000..ebd4cf00c --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/CPViewAnimationTransition.j @@ -0,0 +1,231 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2008 Pear, Inc. All rights reserved. + */ + +@import +@import + +CPViewAnimationStartFrameKey = "CPViewAnimationStartFrameKey"; +CPViewAnimationEndFrameKey = "CPViewAnimationEndFrameKey"; +CPViewAnimationTargetKey = "CPViewAnimationTargetKey"; +CPViewAnimationEffectKey = "CPViewAnimationEffectKey"; + +CPViewAnimationFadeInEffect = "CPViewAnimationFadeInEffect"; +CPViewAnimationFadeOutEffect = "CPViewAnimationFadeOutEffect"; + +@implementation CPViewAnimationTransition : CPAnimation +{ + CPArray _viewAnimations; + Function endListener; + BOOL _isAnimating; +} + +// INSTANCE METHODS +- (id)initWithViewAnimations:(CPArray)animations +{ + self = [super initWithDuration:0.5 animationCurve:CPAnimationEaseInOut]; + if (self) + { + [self setViewAnimations:animations]; + _isAnimating = NO; + } + + return self; +} + +- (id)initWithDuration:(CPInteger)duration animationCurve:(id)curve +{ + self = [super initWithDuration:duration animationCurve:curve]; + if (self) + { + _isAnimating = NO; + } + + return self; +} + +- (CPArray)viewAnimations +{ + return _viewAnimations; +} + +- (void)setViewAnimations:(CPArray)animations +{ + _viewAnimations = animations; + + var count = [_viewAnimations count]; + for (var i = 0; i < count; i++) + { + var animation = [_viewAnimations objectAtIndex:i], + target = [animation objectForKey:CPViewAnimationTargetKey]; + + [self _updateAnimationCurve:[self animationCurve] forView:target]; + [self _updateAnimationDuration:[self duration] forView:target]; + } + + endListener = function(event){[self _animationDidEnd:_viewAnimations]}; +} + +- (void)_updateTransitionPropertiesForView:(CPView)target +{ + target._DOMElement.style.webkitTransitionProperty = "left, top, width, height, opacity"; +} + +// SUBCLASSING +- (BOOL)isAnimating +{ + return _isAnimating; +} + +- (void)setAnimationCurve:(CPAnimationCurve)anAnimationCurve +{ + var i, + count = [_viewAnimations count]; + + for (i = 0; i < count; i++) + { + var animation = [_viewAnimations objectAtIndex:i], + target = [animation objectForKey:CPViewAnimationTargetKey]; + + [self _updateAnimationCurve:anAnimationCurve forView:target]; + } + + [super setAnimationCurve:anAnimationCurve]; +} + +- (void)setAnimationDuration:(int)duration +{ + var i, + count = [_viewAnimations count]; + + for (i = 0; i < count; i++) + { + var animation = [_viewAnimations objectAtIndex:i], + target = [animation objectForKey:CPViewAnimationTargetKey]; + + [self _updateAnimationDuration:duration forView:target]; + } + + [super setAnimationDuration:duration]; +} + +- (void)startAnimation +{ + if (![self _animationShouldStart]) + return; + + var count = [_viewAnimations count]; + if (count > 0) + { + _isAnimating = YES; + document.addEventListener("webkitTransitionEnd", endListener, false); + } + + for (var i = 0; i < count; i++) + { + var animation = [_viewAnimations objectAtIndex:i], + target = [animation objectForKey:CPViewAnimationTargetKey], + startFrame = [animation objectForKey:CPViewAnimationStartFrameKey], + endFrame = [animation objectForKey:CPViewAnimationEndFrameKey], + effect; + + [target setFrame:startFrame]; + + [self _updateTransitionPropertiesForView:target]; + + if (effect = [animation objectForKey:CPViewAnimationEffectKey]) + { + var opacity; + switch (effect) + { + case CPViewAnimationFadeInEffect: opacity = 1; + break; + case CPViewAnimationFadeOutEffect: opacity = 0; + break; + default : opacity = 1; + } + + [target setAlphaValue:opacity]; + } + + [target setFrame:endFrame]; + } +} + +// PRIVATE METHODS +- (void)_updateAnimationCurve:(CPAnimationCurve)anAnimationCurve forView:(CPView)view +{ + var webkitTimingFunction; + + switch (anAnimationCurve) + { + case CPAnimationEaseInOut: webkitTimingFunction = "ease-in-out"; + break; + + case CPAnimationEaseIn: webkitTimingFunction = "ease-in"; + break; + + case CPAnimationEaseOut: webkitTimingFunction = "ease-out"; + break; + + case CPAnimationLinear: webkitTimingFunction = "linear"; + break; + + default: [CPException raise:CPInvalidArgumentException + reason:"Invalid value provided for animation curve"]; + break; + } + + view._DOMElement.style.webkitTransitionTimingFunction = webkitTimingFunction; +} + +- (void)_updateAnimationDuration:(int)duration forView:(CPView)view +{ + view._DOMElement.style.webkitTransitionDuration = duration + "s"; +} + +- (BOOL)_animationShouldStart +{ + if (_delegate && [_delegate respondsToSelector:@selector(animationShouldStart:)]) + return [_delegate animationShouldStart:self]; + + return YES; +} + +- (void)_animationDidEnd:(CPArray)viewAnimations +{ + var count = [viewAnimations count]; + + if (this.counter == null) + this.counter = count; + + this.counter--; + + if (this.counter == 0) + { + document.removeEventListener("webkitTransitionEnd", endListener, false); + this.counter = null; + _isAnimating = NO; + + while(count--) + { + var target = [viewAnimations[count] objectForKey:CPViewAnimationTargetKey]; + target._DOMElement.style.removeProperty("-webkit-transition"); + } + + if (_delegate && [_delegate respondsToSelector:@selector(animationDidEnd:)]) + [_delegate animationDidEnd:self]; + } +} + +- (void)_stopAnimation:(int)value +{ +} + +- (void)setCurrentProgress:(float)progress +{ +} + +@end + diff --git a/Tests/Manual/CPRuleEditorCibTest/Info.plist b/Tests/Manual/CPRuleEditorCibTest/Info.plist new file mode 100644 index 000000000..8d37c79ba --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/Info.plist @@ -0,0 +1,12 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPRuleEditorCibTest + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPRuleEditorCibTest/Jakefile b/Tests/Manual/CPRuleEditorCibTest/Jakefile new file mode 100644 index 000000000..c66879a92 --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CPRuleEditorCibTest + * + * Created by You on September 3, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CPRuleEditorCibTest", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPRuleEditorCibTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPRuleEditorCibTest"); + task.setIdentifier("com.yourcompany.CPRuleEditorCibTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPRuleEditorCibTest"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CPRuleEditorCibTest"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CPRuleEditorCibTest", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPRuleEditorCibTest", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPRuleEditorCibTest")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPRuleEditorCibTest"), FILE.join("Build", "Deployment", "CPRuleEditorCibTest")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPRuleEditorCibTest")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPRuleEditorCibTest"), FILE.join("Build", "Desktop", "CPRuleEditorCibTest", "CPRuleEditorCibTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPRuleEditorCibTest", "CPRuleEditorCibTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPRuleEditorCibTest")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.cib b/Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.cib new file mode 100644 index 000000000..d2a61a4fb --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;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;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;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;1;0E;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;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;265E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;269E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;271E;D;K;6;CP$UIDd;3;272E;D;K;6;CP$UIDd;3;273E;D;K;6;CP$UIDd;3;274E;D;K;6;CP$UIDd;3;275E;D;K;6;CP$UIDd;3;276E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;278E;D;K;6;CP$UIDd;3;279E;D;K;6;CP$UIDd;3;280E;D;K;6;CP$UIDd;3;281E;D;K;6;CP$UIDd;3;282E;D;K;6;CP$UIDd;3;283E;D;K;6;CP$UIDd;3;284E;D;K;6;CP$UIDd;3;285E;D;K;6;CP$UIDd;3;286E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;288E;D;K;6;CP$UIDd;3;289E;D;K;6;CP$UIDd;3;290E;D;K;6;CP$UIDd;3;291E;D;K;6;CP$UIDd;3;292E;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;296E;D;K;6;CP$UIDd;3;297E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;301E;D;K;6;CP$UIDd;3;302E;D;K;6;CP$UIDd;3;303E;D;K;6;CP$UIDd;3;304E;D;K;6;CP$UIDd;3;305E;D;K;6;CP$UIDd;3;306E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;308E;D;K;6;CP$UIDd;3;309E;D;K;6;CP$UIDd;3;310E;D;K;6;CP$UIDd;3;311E;D;K;6;CP$UIDd;3;312E;D;K;6;CP$UIDd;3;313E;D;K;6;CP$UIDd;3;314E;D;K;6;CP$UIDd;3;315E;D;K;6;CP$UIDd;3;316E;D;K;6;CP$UIDd;3;317E;D;K;6;CP$UIDd;3;318E;D;K;6;CP$UIDd;3;319E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;321E;D;K;6;CP$UIDd;3;322E;D;K;6;CP$UIDd;3;323E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;325E;D;K;6;CP$UIDd;3;326E;D;K;6;CP$UIDd;3;327E;D;K;6;CP$UIDd;3;328E;D;K;6;CP$UIDd;3;329E;D;K;6;CP$UIDd;3;330E;D;K;6;CP$UIDd;3;331E;D;K;6;CP$UIDd;3;332E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;334E;D;K;6;CP$UIDd;3;335E;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;338E;D;K;6;CP$UIDd;3;339E;D;K;6;CP$UIDd;3;340E;D;K;6;CP$UIDd;3;341E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;343E;D;K;6;CP$UIDd;3;344E;D;K;6;CP$UIDd;3;345E;D;K;6;CP$UIDd;3;346E;D;K;6;CP$UIDd;3;347E;D;K;6;CP$UIDd;3;348E;D;K;6;CP$UIDd;3;349E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;351E;D;K;6;CP$UIDd;3;352E;D;K;6;CP$UIDd;3;353E;D;K;6;CP$UIDd;3;354E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;356E;D;K;6;CP$UIDd;3;357E;D;K;6;CP$UIDd;3;358E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;360E;D;K;6;CP$UIDd;3;361E;D;K;6;CP$UIDd;3;362E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;364E;D;K;6;CP$UIDd;3;365E;D;K;6;CP$UIDd;3;366E;D;K;6;CP$UIDd;3;367E;D;K;6;CP$UIDd;3;368E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;370E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;372E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;376E;D;K;6;CP$UIDd;3;377E;D;K;6;CP$UIDd;3;378E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;380E;D;K;6;CP$UIDd;3;381E;D;K;6;CP$UIDd;3;382E;D;K;6;CP$UIDd;3;383E;D;K;6;CP$UIDd;3;384E;D;K;6;CP$UIDd;3;385E;D;K;6;CP$UIDd;3;386E;D;K;6;CP$UIDd;3;387E;D;K;6;CP$UIDd;3;388E;D;K;6;CP$UIDd;3;389E;D;K;6;CP$UIDd;3;390E;D;K;6;CP$UIDd;3;391E;D;K;6;CP$UIDd;3;392E;D;K;6;CP$UIDd;3;393E;D;K;6;CP$UIDd;3;394E;D;K;6;CP$UIDd;3;395E;D;K;6;CP$UIDd;3;396E;D;K;6;CP$UIDd;3;397E;D;K;6;CP$UIDd;3;398E;D;K;6;CP$UIDd;3;399E;D;K;6;CP$UIDd;3;400E;D;K;6;CP$UIDd;3;401E;D;K;6;CP$UIDd;3;402E;D;K;6;CP$UIDd;3;403E;D;K;6;CP$UIDd;3;404E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;406E;D;K;6;CP$UIDd;3;407E;D;K;6;CP$UIDd;3;408E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;410E;D;K;6;CP$UIDd;3;411E;D;K;6;CP$UIDd;3;412E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;414E;D;K;6;CP$UIDd;3;415E;D;K;6;CP$UIDd;3;416E;D;K;6;CP$UIDd;3;417E;D;K;6;CP$UIDd;3;418E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;420E;D;K;6;CP$UIDd;3;421E;D;K;6;CP$UIDd;3;422E;D;K;6;CP$UIDd;3;423E;D;K;6;CP$UIDd;3;424E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;427E;D;K;6;CP$UIDd;3;428E;D;K;6;CP$UIDd;3;429E;D;K;6;CP$UIDd;3;430E;D;K;6;CP$UIDd;3;431E;D;K;6;CP$UIDd;3;432E;D;K;6;CP$UIDd;3;433E;D;K;6;CP$UIDd;3;434E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;436E;D;K;6;CP$UIDd;3;437E;D;K;6;CP$UIDd;3;438E;D;K;6;CP$UIDd;3;439E;D;K;6;CP$UIDd;3;440E;D;K;6;CP$UIDd;3;441E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;443E;D;K;6;CP$UIDd;3;444E;D;K;6;CP$UIDd;3;445E;D;K;6;CP$UIDd;3;446E;D;K;6;CP$UIDd;3;447E;D;K;6;CP$UIDd;3;448E;D;K;6;CP$UIDd;3;449E;D;K;6;CP$UIDd;3;450E;D;K;6;CP$UIDd;3;451E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;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;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;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;1;0E;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;57E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;2;98E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;35E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;452E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;453E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;454E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;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;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;456E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;463E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;3;464E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;465E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;61E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;468E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;469E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;470E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;471E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;472E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;115E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;473E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;474E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;475E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;476E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;477E;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;480E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;483E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;485E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;151E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;487E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;488E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;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;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;98E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;489E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;490E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;491E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;492E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;461E;K;11;$aalignmentD;K;6;CP$UIDd;3;478E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;493E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;474E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;495E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;496E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;497E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;3;464E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;498E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;499E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;500E;E;D;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;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;501E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;502E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;503E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;501E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;505E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;464E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;3;467E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;467E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;506E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;507E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;493E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;3;508E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;509E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;510E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;511E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;512E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;513E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;514E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;517E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;518E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;519E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;520E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;521E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;522E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;523E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;472E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;524E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;525E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;526E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;493E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;527E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;528E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;476E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;29E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;529E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;530E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;531E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;532E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;533E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;534E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;3;464E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;535E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;536E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;537E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;538E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;452E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;539E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;540E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;541E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;542E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;543E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;544E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;545E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;546E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;528E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;547E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;548E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;549E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;3;464E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;550E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;551E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;552E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;50E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;553E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;554E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;556E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;557E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;558E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;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;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;559E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;560E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;561E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;562E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;563E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;501E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;112E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;132E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;565E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;565E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;565E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;565E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;467E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;467E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;467E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;566E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;474E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;567E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;568E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;569E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;570E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;571E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;572E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;573E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;574E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;141E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;575E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;136E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;576E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;577E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;578E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;579E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;493E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;527E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;528E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;523E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;580E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;581E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;578E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;582E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;474E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;583E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;584E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;585E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;535E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;53E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;586E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;587E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;588E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;589E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;35E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;590E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;591E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;550E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;61E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;592E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;593E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;594E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;482E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;595E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;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;2;90E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;596E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;597E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;598E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;599E;K;16;$aimage-positionD;K;6;CP$UIDd;3;493E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;478E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;482E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;600E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;467E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;493E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;478E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;601E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;602E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;603E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;604E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;605E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;606E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;607E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;608E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;3;464E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;609E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;577E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;610E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;611E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;612E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;3;464E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;613E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;614E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;615E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;616E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;617E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;618E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;620E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;528E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;567E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;622E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;623E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;624E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;562E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;626E;K;6;$afontD;K;6;CP$UIDd;3;628E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;461E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;466E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;464E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;478E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;461E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;629E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;630E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;631E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;632E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;577E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;500E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;633E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;634E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;635E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;636E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;637E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;638E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;639E;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;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;66E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;640E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;641E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;66E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;642E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;643E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;644E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;645E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;482E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;66E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;646E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;478E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;647E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;648E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;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;3;114E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;649E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;649E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;650E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;569E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;651E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;652E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;35E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;590E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;654E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;35E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;590E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;482E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;655E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;638E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;656E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;618E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;657E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;658E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;659E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;660E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;598E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;599E;K;16;$aimage-positionD;K;6;CP$UIDd;3;493E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;478E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;482E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;661E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;467E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;493E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;478E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;662E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;663E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;573E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;664E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;665E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;666E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;667E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;668E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;669E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;670E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;671E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;672E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;673E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;633E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;108E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;66E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;674E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;675E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;66E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;642E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;643E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;644E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;676E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;478E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;66E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;677E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;478E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;678E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;679E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;680E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;681E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;682E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;575E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;683E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;684E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;482E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;685E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;686E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;471E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;687E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;688E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;574E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;689E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;690E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;520E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;44E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;691E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;692E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;693E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;694E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;695E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;61E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;696E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;578E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;697E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;592E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;88E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;698E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;696E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;485E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;699E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;700E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;701E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;598E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;492E;K;16;$aimage-positionD;K;6;CP$UIDd;3;493E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;478E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;478E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;702E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;467E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;493E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;478E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;703E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;704E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;705E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;461E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;508E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;464E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;464E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;464E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;706E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;461E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;707E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;708E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;709E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;710E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;461E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;711E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;529E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;50E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;571E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;714E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;499E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;601E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;715E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;716E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;472E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;486E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;47E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;135E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;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;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;717E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;718E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;719E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;478E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;720E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;721E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;722E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;478E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;723E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;724E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;725E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;726E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;528E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;727E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;728E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;660E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;598E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;599E;K;16;$aimage-positionD;K;6;CP$UIDd;3;493E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;478E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;482E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;729E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;467E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;493E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;478E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;730E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;731E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;732E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;482E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;733E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;484E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;467E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;467E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;474E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;482E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;734E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;735E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;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;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;115E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;736E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;737E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;115E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;738E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;739E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;599E;K;16;$aimage-positionD;K;6;CP$UIDd;3;478E;K;6;$afontD;K;6;CP$UIDd;3;740E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;474E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;482E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;461E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;741E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;467E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;478E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;478E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;742E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;47E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;743E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;151E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;744E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;499E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;578E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;745E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;474E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;583E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;746E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;141E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;747E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;621E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;748E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;581E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;749E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;482E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;685E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;750E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;493E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;741E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;751E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;752E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;464E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;467E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;753E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;35E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;590E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;455E;E;S;1;0S;1;1S;1;2S;1;3S;1;4S;1;5S;1;6S;1;7S;1;8S;1;9S;2;10S;2;11S;2;12S;2;13S;2;14S;2;15S;2;16S;2;17S;2;18S;2;19S;2;20S;2;21S;2;22S;2;23S;2;24S;2;25S;2;26S;2;27S;2;28S;2;29S;2;30S;2;31S;2;32S;2;34S;2;33S;2;35S;2;36S;2;37S;2;38S;2;39S;2;40S;2;41S;2;42S;2;43S;2;44S;2;45S;2;46S;2;47S;2;48S;2;49S;2;50S;2;51S;2;52S;2;53S;2;54S;2;55S;2;56S;2;57S;2;58S;2;59S;2;60S;2;61S;2;62S;2;64S;2;63S;2;65S;2;66S;2;67S;2;68S;2;69S;2;70S;2;71S;2;72S;2;73S;2;80S;2;74S;2;75S;2;77S;2;78S;2;79S;2;76S;2;81S;2;82S;2;83S;2;84S;2;85S;2;86S;2;90S;2;87S;2;89S;2;88S;2;91S;2;92S;2;93S;2;94S;2;95S;2;96S;2;97S;2;98S;2;99S;3;100S;3;101S;3;102S;3;103S;3;104S;3;105S;3;107S;3;106S;3;108S;3;109S;3;110S;3;111S;3;112S;3;113S;3;114S;3;115S;3;116S;3;117S;3;118S;3;119S;3;120S;3;121S;3;122S;3;123S;3;124S;3;125S;3;126S;3;127S;3;128S;3;129S;3;130S;3;131S;3;132S;3;133S;3;134S;3;135S;3;136S;3;137S;3;138S;3;139S;3;140S;3;141S;3;142S;3;143S;3;144S;3;145S;3;146S;3;147S;3;148S;3;149S;12;File's OwnerS;3;150S;3;151S;3;152S;3;153S;3;154S;3;155S;3;156S;3;157S;3;158S;3;159S;3;160S;3;161S;3;162S;3;163S;3;164S;3;165S;3;166S;3;167S;3;168S;3;169S;3;170S;3;171S;3;172S;3;173S;3;174S;3;175S;3;176D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;369E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;E;D;K;6;$classD;K;6;CP$UIDd;3;369E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;105E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;755E;E;D;K;6;$classD;K;6;CP$UIDd;3;369E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;756E;E;D;K;6;$classD;K;6;CP$UIDd;3;369E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;757E;E;D;K;6;$classD;K;6;CP$UIDd;3;369E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;754E;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;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;758E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;759E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;760E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;761E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;762E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;763E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;764E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;765E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;766E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;767E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;769E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;770E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;771E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;55E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;773E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;774E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;777E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;778E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;780E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;781E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;96E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;783E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;784E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;785E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;786E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;787E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;788E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;789E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;790E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;23E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;791E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;20E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;792E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;793E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;794E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;795E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;796E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;797E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;798E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;799E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;800E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;801E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;802E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;803E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;804E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;180E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;805E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;806E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;807E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;808E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;809E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;178E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;810E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;812E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;813E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;814E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;183E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;815E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;816E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;817E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;818E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;176E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;819E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;820E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;22E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;821E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;821E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;821E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;821E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;821E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;821E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;170E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;822E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;823E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;824E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;825E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;826E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;827E;E;D;K;6;$classD;K;6;CP$UIDd;3;375E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;171E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;828E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;S;27;Check Grammar With Spellingd;7;1048576d;4;1003S;23;{{936, 280}, {106, 23}}S;19;{{0, 0}, {106, 23}}d;2;33S;6;normald;1;4D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;462E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;829E;E;T;S;18;Customize Toolbar…S;0;F;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;25;{{335, 128}, {1067, 550}}d;1;7S;6;WindowS;4;Boldd;1;2S;1;bS;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;36E;E;E;d;1;0S;23;{{822, 172}, {104, 17}}S;19;{{0, 0}, {104, 17}}S;9;textfieldd;1;1S;16;Formattting Filed;4;3072S;4;EditS;14;submenuAction:S;10;Select AllS;1;aS;23;{{933, 135}, {112, 24}}S;19;{{0, 0}, {112, 24}}S;12;popup-buttonS;8;borderedd;1;3S;6;Loosend;4;1006S;23;{{936, 401}, {106, 23}}D;K;6;$classD;K;6;CP$UIDd;3;462E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;830E;E;S;10;Copy RulerS;1;cd;7;1310720D;K;6;$classD;K;6;CP$UIDd;3;564E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;66E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;836E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;837E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;66E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;642E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;41E;E;S;20;{{0, 0}, {537, 217}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;832E;E;E;d;2;18S;11;rule-editord;2;75d;2;25S;14;format.stringsS;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;515E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;833E;E;S;20;About NewApplicationS;5;CloseS;1;wS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;48E;E;E;S;9;SubscriptS;8;Use NoneS;14;_CPWindowsMenuD;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;3;120E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;177E;E;E;S;11;Smart LinksS;1;Gd;7;1179648S;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;62E;E;E;d;4;1001S;23;{{936, 204}, {106, 23}}D;K;6;$classD;K;6;CP$UIDd;3;462E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;834E;E;S;4;TextD;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;187E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;3;107E;E;E;S;12;Preferences…S;1;,S;22;{{841, 451}, {85, 17}}S;18;{{0, 0}, {85, 17}}S;10;Row HeightS;8;MinimizeS;1;mS;12;RuleDelegateS;8;Save As…S;1;Sd;4;1002S;23;{{936, 241}, {106, 23}}D;K;6;$classD;K;6;CP$UIDd;3;462E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;835E;E;S;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;23E;E;E;S;10;Clear MenuS;23;{{810, 364}, {116, 17}}S;19;{{0, 0}, {116, 17}}S;15;Backround ColorS;22;{{831, 244}, {95, 17}}S;18;{{0, 0}, {95, 17}}S;13;Bottom BorderS;23;{{20, 190}, {539, 219}}S;20;{{0, 0}, {539, 219}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;501E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;566E;E;E;d;2;38S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;114E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;66E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;838E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;838E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;66E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;E;S;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;3;113E;E;E;S;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;169E;E;E;S;20;Spelling and GrammarS;5;LowerS;6;FormatS;4;FindS;8;BaselineS;11;Paste StyleS;1;vd;7;1572864S;13;Find PreviousS;11;Hide OthersS;1;hS;12;Smart QuotesS;1;gS;9;UnderlineS;1;uS;3;NewS;1;nS;10;Show RulerS;8;CompoundS;17;_popUpItemAction:S;7;JustifyS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;173E;E;E;S;6;ItalicS;1;iS;22;{{780, 18}, {166, 18}}S;19;{{0, 0}, {166, 18}}S;9;check-boxS;17;selected+borderedS;19;Can Remove All RowsS;4;FontS;4;UndoS;1;zS;14;Show Spelling…S;1;:d;4;1004S;23;{{936, 321}, {106, 23}}D;K;6;$classD;K;6;CP$UIDd;3;462E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;839E;E;S;5;Pasted;4;1005S;23;{{936, 361}, {106, 23}}D;K;6;$classD;K;6;CP$UIDd;3;462E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;840E;E;S;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;119E;E;E;S;22;{{835, 139}, {91, 17}}S;18;{{0, 0}, {91, 17}}S;12;Nesting ModeS;14;NewApplicationS;4;RedoS;1;ZS;11;Use DefaultS;19;Quit NewApplicationS;1;qS;21;{{17, 82}, {752, 86}}S;19;{{0, 0}, {752, 86}}S;11;placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;627E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;841E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;504E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;464E;E;S;9;PredicateS;5;Open…S;1;oS;11;Paste RulerS;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;SaveS;1;sS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;E;E;S;24;{{-100, 102}, {15, 217}}S;19;{{0, 0}, {15, 217}}d;1;8d;11;-2147483648S;8;scrollerS;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9636362791061401S;7;Use AllS;21;{{0, 0}, {1067, 550}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;56E;E;E;S;3;CutS;1;xS;4;ListS;6;SimpleS;4;ZoomS;15;Revert to SavedS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;104E;E;E;S;22;{{866, 110}, {80, 18}}S;18;{{0, 0}, {80, 18}}S;7;AnimateS;11;Show ColorsS;1;CD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;82E;E;E;S;23;{{742, 404}, {184, 17}}S;19;{{0, 0}, {184, 17}}S;26;Alternate Background ColorS;23;{{801, 283}, {125, 17}}S;19;{{0, 0}, {125, 17}}S;18;Last Bottom BorderS;22;{{851, 207}, {75, 17}}S;18;{{0, 0}, {75, 17}}S;10;Top BorderS;24;{{-100, 304}, {223, 15}}S;19;{{0, 0}, {223, 15}}S;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.5060241222381592S;14;Start SpeakingS;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;121E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;2;72E;E;E;S;5;Find…S;1;fS;22;Use Selection for FindS;1;eS;7;TightenD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;182E;E;E;S;8;Show AllS;10;Align LeftS;1;{S;11;Align RightS;1;}S;12;Show ToolbarS;1;tS;27;Check Spelling While TypingS;10;Show FontsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;116E;E;E;S;22;{{721, 48}, {225, 18}}S;19;{{0, 0}, {225, 18}}S;26;Allows Empty Compound RowsS;23;{{933, 165}, {113, 29}}S;19;{{0, 0}, {113, 29}}S;7;bezeledD;K;6;$classD;K;6;CP$UIDd;3;462E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;842E;E;S;6;DeleteS;14;Check SpellingS;1;;S;7;SmallerS;1;-S;11;SuperscriptD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;20E;E;E;S;4;CopyS;11;_CPFontMenuD;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;2;27E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;2;76E;E;E;S;22;{{934, 451}, {96, 21}}S;18;{{0, 0}, {96, 21}}S;6;sliderd;2;26d;2;20d;2;78S;19;NewApplication HelpS;1;?S;13;Page Setup...S;1;PS;13;Stop SpeakingS;21;{{866, 80}, {80, 18}}S;8;EditableS;13;AppControllerS;22;{{869, 324}, {57, 17}}S;18;{{0, 0}, {57, 17}}S;8;SelectedS;6;Print…S;1;pS;21;{{20, 415}, {26, 24}}S;18;{{0, 0}, {26, 24}}d;2;36S;6;buttonD;K;6;$classD;K;6;CP$UIDd;3;627E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;843E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;504E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;467E;E;S;1;+S;18;Bring All to FrontS;5;RaiseS;10;Copy StyleS;9;Find NextS;17;Jump to SelectionS;1;jS;19;Hide NewApplicationS;16;Smart Copy/PasteS;6;BiggerS;6;CenterS;1;|S;6;SingleS;8;delegateS;14;predicateFieldS;10;ruleEditorS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;7;addRow:S;17;ruleEditorAction:S;18;setAttributeValue:S;12;setEditable:S;15;setNestingMode:S;29;setFormattingStringsFilename:S;20;setCanRemoveAllRows:S;27;setAllowsEmptyCompoundRows:S;11;setAnimate:S;13;setRowHeight:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;844E;D;K;6;CP$UIDd;3;845E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;844E;D;K;6;CP$UIDd;3;845E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;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;831E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;478E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;502E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;41E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;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;844E;D;K;6;CP$UIDd;3;845E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;844E;D;K;6;CP$UIDd;3;845E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;E;E;S;20;{{1, 1}, {537, 217}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;41E;E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;844E;D;K;6;CP$UIDd;3;845E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;844E;D;K;6;CP$UIDd;3;845E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;E;E;S;5;ArialD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;D;K;6;CP$UIDd;3;482E;E;E;S;12;AppleSymbolsf;13;0.05813049898f;13;0.05554189906E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.xib b/Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.xib new file mode 100644 index 000000000..c86f3d6ed --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/Resources/MainMenu.xib @@ -0,0 +1,4447 @@ + + + + 1050 + 10H574 + 823 + 1038.35 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 823 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 7 + 2 + {{335, 200}, {1067, 550}} + 1946157056 + Window + NSWindow + + {1.79769e+308, 1.79769e+308} + + + 256 + + YES + + + 268 + {{20, 107}, {26, 26}} + + YES + + -2080244224 + 134217728 + + + + AppleSymbols + 18 + 16 + + + -2038152961 + 134 + + + 400 + 75 + + + + + 270 + + YES + + + 2304 + + YES + + + 274 + + YES + + + 274 + {537, 217} + + + + + YES + + YES + NSRuleEditorItemPBoardType + + + {537, 217} + + YES + 75 + 25 + format.strings + YES + NO + NO + 3 + rowType + subrows + criteria + displayValues + boundArray + NSMutableDictionary + + + + + YES + + + + YES + + + + {{1, 1}, {537, 217}} + + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + 4 + + + + -2147483392 + {{-100, -100}, {15, 217}} + + + _doScroller: + 1 + 0.96363627910614014 + + + + -2147483392 + {{-100, -100}, {223, 15}} + + 1 + + _doScroller: + 0.50602412223815918 + + + {{20, 141}, {539, 219}} + + + 2 + + + + + + + 270 + {{17, 382}, {752, 86}} + + YES + + 69336577 + 272629760 + + + LucidaGrande-Bold + 18 + 16 + + Predicate + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 265 + + YES + + YES + NSColor pasteboard type + + + {{936, 247}, {106, 23}} + + 1003 + YES + YES + + 1 + MC4wNTgxMzA0OTg5OCAwLjA1NTU0MTg5OTA2IDEAA + + + + + 265 + + YES + + YES + NSColor pasteboard type + + + {{936, 286}, {106, 23}} + + 1002 + YES + YES + + 1 + MC4wNTgxMzA0OTg5OCAwLjA1NTU0MTg5OTA2IDEAA + + + + + 265 + + YES + + YES + NSColor pasteboard type + + + {{936, 323}, {106, 23}} + + 1001 + YES + YES + + 1 + MC4wNTgxMzA0OTg5OCAwLjA1NTU0MTg5OTA2IDEAA + + + + + 265 + + YES + + YES + NSColor pasteboard type + + + {{936, 206}, {106, 23}} + + 1004 + YES + YES + + 1 + MC4wNTgxMzA0OTg5OCAwLjA1NTU0MTg5OTA2IDEAA + + + + + 265 + + YES + + YES + NSColor pasteboard type + + + {{936, 166}, {106, 23}} + + 1005 + YES + YES + + 1 + MC4wNTgxMzA0OTg5OCAwLjA1NTU0MTg5OTA2IDEAA + + + + + 265 + + YES + + YES + NSColor pasteboard type + + + {{936, 126}, {106, 23}} + + 1006 + YES + YES + + 1 + MC4wNTgxMzA0OTg5OCAwLjA1NTU0MTg5OTA2IDEAA + + + + + 265 + {{851, 326}, {75, 17}} + + YES + + 68288064 + 71304192 + Top Border + + LucidaGrande + 13 + 1044 + + + + + + + + + 265 + {{831, 289}, {95, 17}} + + YES + + 68288064 + 71304192 + Bottom Border + + + + + + + + + 265 + {{801, 250}, {125, 17}} + + YES + + 68288064 + 71304192 + Last Bottom Border + + + + + + + + + 265 + {{869, 209}, {57, 17}} + + YES + + 68288064 + 71304192 + Selected + + + + + + + + + 265 + {{810, 169}, {116, 17}} + + YES + + 68288064 + 71304192 + Backround Color + + + + + + + + + 265 + {{742, 129}, {184, 17}} + + YES + + 68288064 + 71304192 + Alternate Background Color + + + + + + + + + 265 + {{866, 452}, {80, 18}} + + YES + + -2080244224 + 0 + Editable + + + 1210864127 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 265 + {{933, 387}, {112, 26}} + + YES + + -2076049856 + 2048 + + + 109199615 + 129 + + + 400 + 75 + + + Simple + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + Single + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + List + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Compound + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + + 3 + 1 + YES + YES + 2 + + + + + 265 + {{835, 394}, {91, 17}} + + YES + + 68288064 + 71304192 + Nesting Mode + + + + + + + + + 265 + {{936, 359}, {106, 22}} + + YES + + -1804468671 + 272630784 + format.strings + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + + + + 265 + {{822, 361}, {104, 17}} + + YES + + 68288064 + 71304192 + Formattting File + + + + + + + + + 265 + {{780, 514}, {166, 18}} + + YES + + -2080244224 + 0 + Can Remove All Rows + + + 1210864127 + 2 + + + + + 200 + 25 + + + + + 265 + {{721, 484}, {225, 18}} + + YES + + 67239424 + 0 + Allows Empty Compound Rows + + + 1210864127 + 2 + + + + + 200 + 25 + + + + + 265 + {{866, 422}, {80, 18}} + + YES + + -2080244224 + 0 + Animate + + + 1210864127 + 2 + + + + + 200 + 25 + + + + + 265 + {{934, 78}, {96, 21}} + + YES + + -2080244224 + 0 + + + 78 + 20 + 26 + 0.0 + 0 + 1 + NO + NO + + + + + 265 + {{841, 82}, {85, 17}} + + YES + + 68288064 + 71304192 + Row Height + + + + + + + + {1067, 550} + + + {{0, 0}, {1440, 878}} + {1.79769e+308, 1.79769e+308} + + + AppController + + + RuleDelegate + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + terminate: + + + + 449 + + + + delegate + + + + 451 + + + + theWindow + + + + 459 + + + + ruleEditor + + + + 473 + + + + addRow: + + + + 474 + + + + ruleEditorAction: + + + + 475 + + + + predicateField + + + + 478 + + + + delegate + + + + 480 + + + + setAttributeValue: + + + + 482 + + + + setAttributeValue: + + + + 486 + + + + setAttributeValue: + + + + 488 + + + + setAttributeValue: + + + + 489 + + + + setCanRemoveAllRows: + + + + 529 + + + + setEditable: + + + + 531 + + + + setNestingMode: + + + + 532 + + + + setAttributeValue: + + + + 534 + + + + setAttributeValue: + + + + 535 + + + + setAllowsEmptyCompoundRows: + + + + 536 + + + + setFormattingStringsFilename: + + + + 537 + + + + setAnimate: + + + + 543 + + + + setRowHeight: + + + + 550 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + YES + + + + + + 372 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + 466 + + + YES + + + + + + 467 + + + + + 469 + + + YES + + + + + + + + 470 + + + + + 471 + + + + + 472 + + + + + 479 + + + + + 476 + + + YES + + + + + + 477 + + + + + 481 + + + + + 516 + + + YES + + + + + + 517 + + + + + 506 + + + YES + + + + + + 507 + + + + + 492 + + + + + 487 + + + + + 500 + + + YES + + + + + + 501 + + + + + 485 + + + + + 525 + + + YES + + + + + + 526 + + + + + 483 + + + + + 523 + + + YES + + + + + + 524 + + + + + 521 + + + YES + + + + + + 522 + + + + + 496 + + + YES + + + + + + 497 + + + + + 490 + + + + + 498 + + + YES + + + + + + 499 + + + + + 502 + + + YES + + + + + + 503 + + + + + 519 + + + YES + + + + + + 520 + + + + + 508 + + + YES + + + + + + 509 + + + + + 510 + + + YES + + + + + + 511 + + + YES + + + + + + 512 + + + YES + + + + + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 518 + + + + + 504 + + + YES + + + + + + 505 + + + + + 540 + + + YES + + + + + + 541 + + + + + 544 + + + YES + + + + + + 545 + + + + + 547 + + + YES + + + + + + 548 + + + + + + + YES + + YES + -3.IBPluginDependency + 103.IBPluginDependency + 103.ImportedFromIB2 + 106.IBPluginDependency + 106.ImportedFromIB2 + 106.editorWindowContentRectSynchronizationRect + 111.IBPluginDependency + 111.ImportedFromIB2 + 112.IBPluginDependency + 112.ImportedFromIB2 + 124.IBPluginDependency + 124.ImportedFromIB2 + 125.IBPluginDependency + 125.ImportedFromIB2 + 125.editorWindowContentRectSynchronizationRect + 126.IBPluginDependency + 126.ImportedFromIB2 + 129.IBPluginDependency + 129.ImportedFromIB2 + 130.IBPluginDependency + 130.ImportedFromIB2 + 130.editorWindowContentRectSynchronizationRect + 131.IBPluginDependency + 131.ImportedFromIB2 + 134.IBPluginDependency + 134.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 143.IBPluginDependency + 143.ImportedFromIB2 + 144.IBPluginDependency + 144.ImportedFromIB2 + 145.IBPluginDependency + 145.ImportedFromIB2 + 149.IBPluginDependency + 149.ImportedFromIB2 + 150.IBPluginDependency + 150.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 195.IBPluginDependency + 195.ImportedFromIB2 + 196.IBPluginDependency + 196.ImportedFromIB2 + 197.IBPluginDependency + 197.ImportedFromIB2 + 198.IBPluginDependency + 198.ImportedFromIB2 + 199.IBPluginDependency + 199.ImportedFromIB2 + 200.IBPluginDependency + 200.ImportedFromIB2 + 200.editorWindowContentRectSynchronizationRect + 201.IBPluginDependency + 201.ImportedFromIB2 + 202.IBPluginDependency + 202.ImportedFromIB2 + 203.IBPluginDependency + 203.ImportedFromIB2 + 204.IBPluginDependency + 204.ImportedFromIB2 + 205.IBPluginDependency + 205.ImportedFromIB2 + 205.editorWindowContentRectSynchronizationRect + 206.IBPluginDependency + 206.ImportedFromIB2 + 207.IBPluginDependency + 207.ImportedFromIB2 + 208.IBPluginDependency + 208.ImportedFromIB2 + 209.IBPluginDependency + 209.ImportedFromIB2 + 210.IBPluginDependency + 210.ImportedFromIB2 + 211.IBPluginDependency + 211.ImportedFromIB2 + 212.IBPluginDependency + 212.ImportedFromIB2 + 212.editorWindowContentRectSynchronizationRect + 213.IBPluginDependency + 213.ImportedFromIB2 + 214.IBPluginDependency + 214.ImportedFromIB2 + 215.IBPluginDependency + 215.ImportedFromIB2 + 216.IBPluginDependency + 216.ImportedFromIB2 + 217.IBPluginDependency + 217.ImportedFromIB2 + 218.IBPluginDependency + 218.ImportedFromIB2 + 219.IBPluginDependency + 219.ImportedFromIB2 + 220.IBPluginDependency + 220.ImportedFromIB2 + 220.editorWindowContentRectSynchronizationRect + 221.IBPluginDependency + 221.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 236.IBPluginDependency + 236.ImportedFromIB2 + 239.IBPluginDependency + 239.ImportedFromIB2 + 24.IBPluginDependency + 24.ImportedFromIB2 + 24.editorWindowContentRectSynchronizationRect + 29.IBEditorWindowLastContentRect + 29.IBPluginDependency + 29.ImportedFromIB2 + 29.WindowOrigin + 29.editorWindowContentRectSynchronizationRect + 295.IBPluginDependency + 296.IBPluginDependency + 296.editorWindowContentRectSynchronizationRect + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 346.ImportedFromIB2 + 348.IBPluginDependency + 348.ImportedFromIB2 + 349.IBPluginDependency + 349.ImportedFromIB2 + 349.editorWindowContentRectSynchronizationRect + 350.IBPluginDependency + 350.ImportedFromIB2 + 351.IBPluginDependency + 351.ImportedFromIB2 + 354.IBPluginDependency + 354.ImportedFromIB2 + 371.IBEditorWindowLastContentRect + 371.IBPluginDependency + 371.IBWindowTemplateEditedContentRect + 371.NSWindowTemplate.visibleAtLaunch + 371.editorWindowContentRectSynchronizationRect + 371.windowTemplate.maxSize + 372.IBPluginDependency + 375.IBPluginDependency + 376.IBEditorWindowLastContentRect + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBEditorWindowLastContentRect + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 466.IBPluginDependency + 467.IBPluginDependency + 469.IBPluginDependency + 470.IBPluginDependency + 471.IBPluginDependency + 472.IBPluginDependency + 476.IBPluginDependency + 477.IBPluginDependency + 481.IBPluginDependency + 483.IBPluginDependency + 485.IBPluginDependency + 487.IBPluginDependency + 490.IBPluginDependency + 492.IBPluginDependency + 496.IBPluginDependency + 497.IBPluginDependency + 498.IBPluginDependency + 499.IBPluginDependency + 5.IBPluginDependency + 5.ImportedFromIB2 + 500.IBPluginDependency + 501.IBPluginDependency + 502.IBPluginDependency + 503.IBPluginDependency + 504.IBPluginDependency + 505.IBPluginDependency + 506.IBPluginDependency + 507.IBPluginDependency + 508.IBPluginDependency + 509.IBPluginDependency + 510.IBPluginDependency + 511.IBPluginDependency + 512.IBEditorWindowLastContentRect + 512.IBPluginDependency + 513.IBPluginDependency + 514.IBPluginDependency + 515.IBPluginDependency + 516.IBPluginDependency + 517.IBPluginDependency + 518.IBPluginDependency + 519.IBPluginDependency + 520.IBPluginDependency + 521.IBPluginDependency + 522.IBPluginDependency + 523.IBPluginDependency + 524.IBPluginDependency + 525.IBPluginDependency + 526.IBPluginDependency + 540.IBPluginDependency + 541.IBPluginDependency + 544.IBPluginDependency + 545.IBPluginDependency + 547.IBPluginDependency + 548.IBPluginDependency + 56.IBPluginDependency + 56.ImportedFromIB2 + 57.IBEditorWindowLastContentRect + 57.IBPluginDependency + 57.ImportedFromIB2 + 57.editorWindowContentRectSynchronizationRect + 58.IBPluginDependency + 58.ImportedFromIB2 + 72.IBPluginDependency + 72.ImportedFromIB2 + 73.IBPluginDependency + 73.ImportedFromIB2 + 74.IBPluginDependency + 74.ImportedFromIB2 + 75.IBPluginDependency + 75.ImportedFromIB2 + 77.IBPluginDependency + 77.ImportedFromIB2 + 78.IBPluginDependency + 78.ImportedFromIB2 + 79.IBPluginDependency + 79.ImportedFromIB2 + 80.IBPluginDependency + 80.ImportedFromIB2 + 81.IBPluginDependency + 81.ImportedFromIB2 + 81.editorWindowContentRectSynchronizationRect + 82.IBPluginDependency + 82.ImportedFromIB2 + 83.IBPluginDependency + 83.ImportedFromIB2 + 92.IBPluginDependency + 92.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{596, 852}, {216, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{522, 812}, {146, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{436, 809}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {275, 83}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{187, 434}, {243, 243}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {167, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {241, 103}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{525, 802}, {197, 73}} + {{143, 285}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + {74, 862} + {{6, 978}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{475, 832}, {234, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {215, 63}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{44, 281}, {1067, 550}} + com.apple.InterfaceBuilder.CocoaPlugin + {{44, 281}, {1067, 550}} + + {{33, 99}, {480, 360}} + {3.40282e+38, 3.40282e+38} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{437, 242}, {86, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{523, 2}, {178, 283}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{891, 592}, {141, 83}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + {{155, 102}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{23, 794}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{145, 474}, {199, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + + YES + + + + + YES + + + YES + + + + 550 + + + + YES + + AppController + + YES + + YES + ruleEditorAction: + setAllowsEmptyCompoundRows: + setAnimate: + setAttributeValue: + setCanRemoveAllRows: + setEditable: + setFormattingStringsFilename: + setNestingMode: + setRowHeight: + + + YES + id + id + id + id + id + id + id + id + id + + + + YES + + YES + ruleEditorAction: + setAllowsEmptyCompoundRows: + setAnimate: + setAttributeValue: + setCanRemoveAllRows: + setEditable: + setFormattingStringsFilename: + setNestingMode: + setRowHeight: + + + YES + + ruleEditorAction: + id + + + setAllowsEmptyCompoundRows: + id + + + setAnimate: + id + + + setAttributeValue: + id + + + setCanRemoveAllRows: + id + + + setEditable: + id + + + setFormattingStringsFilename: + id + + + setNestingMode: + id + + + setRowHeight: + id + + + + + YES + + YES + predicateField + ruleEditor + theWindow + + + YES + id + id + NSWindow + + + + YES + + YES + predicateField + ruleEditor + theWindow + + + YES + + predicateField + id + + + ruleEditor + id + + + theWindow + NSWindow + + + + + IBUserSource + + + + + NSRuleEditor + NSControl + + IBUserSource + + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../adsfsdf.xcodeproj + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + NSSwitch + + + YES + {9, 8} + {7, 2} + {15, 15} + + + + diff --git a/Tests/Manual/CPRuleEditorCibTest/Resources/criteria.plist b/Tests/Manual/CPRuleEditorCibTest/Resources/criteria.plist new file mode 100644 index 000000000..2ec458116 --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/Resources/criteria.plist @@ -0,0 +1,192 @@ + + + + + rootHeaders + + subrows + + + CPRuleEditorPredicateCompoundType + 2 + criteria + + + valeur + of the following is true + + + valeur + Any + + + CPRuleEditorPredicateCompoundType + 1 + criteria + + + valeur + of the following is true + + + valeur + All + + + + rootChildren + + subrows + + + CPRuleEditorPredicateLeftExpression + firstName + criteria + + + CPRuleEditorPredicateComparisonModifier + 0 + CPRuleEditorPredicateOperatorType + 8 + CPRuleEditorPredicateOptions + 3 + criteria + + + CPRuleEditorCustomControlClass + RuleTextField + + + valeur + CPBeginsWithPredicateOperatorType + + + CPRuleEditorPredicateComparisonModifier + 0 + CPRuleEditorPredicateOperatorType + 7 + CPRuleEditorPredicateOptions + 3 + criteria + + + CPRuleEditorCustomControlClass + RuleTextField + + + valeur + CPLikePredicateOperatorType + + + CPRuleEditorPredicateComparisonModifier + 0 + CPRuleEditorPredicateOperatorType + 6 + CPRuleEditorPredicateOptions + 0 + criteria + + + CPRuleEditorCustomControlClass + RuleTextField + + + valeur + CPMatchesPredicateOperatorType + + + valeur + firstName + + + CPRuleEditorPredicateLeftExpression + lastName + criteria + + + CPRuleEditorPredicateComparisonModifier + 0 + CPRuleEditorPredicateOperatorType + 8 + CPRuleEditorPredicateOptions + 0 + criteria + + + CPRuleEditorCustomControlClass + RuleTextField + + + valeur + CPBeginsWithPredicateOperatorType + + + CPRuleEditorPredicateComparisonModifier + 0 + CPRuleEditorPredicateOperatorType + 9 + CPRuleEditorPredicateOptions + 0 + criteria + + + CPRuleEditorCustomControlClass + RuleTextField + + + valeur + CPEndsWithPredicateOperatorType + + + valeur + lastName + + + CPRuleEditorPredicateLeftExpression + age + criteria + + + CPRuleEditorPredicateComparisonModifier + 0 + CPRuleEditorPredicateOperatorType + 0 + CPRuleEditorPredicateOptions + 0 + criteria + + + CPRuleEditorCustomControlClass + RuleSlider + + + valeur + CPLessThanPredicateOperatorType + + + CPRuleEditorPredicateComparisonModifier + 0 + CPRuleEditorPredicateOperatorType + 3 + CPRuleEditorPredicateOptions + 0 + criteria + + + CPRuleEditorPredicateRightExpression + 50 + valeur + 50 ans + + + valeur + CPGreaterThanOrEqualToPredicateOperatorType + + + valeur + age + + + + + diff --git a/Tests/Manual/CPRuleEditorCibTest/Resources/format.strings b/Tests/Manual/CPRuleEditorCibTest/Resources/format.strings new file mode 100644 index 000000000..4d802654d --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/Resources/format.strings @@ -0,0 +1,18 @@ +"CPLessThanPredicateOperatorType" = "is less than"; //0 +"CPLessThanOrEqualToPredicateOperatorType" = "is less than or equal to"; //1 +"CPGreaterThanPredicateOperatorType" = "is greater than"; //2 +"CPGreaterThanOrEqualToPredicateOperatorType" = "is greater than or equal to"; //3 +"CPEqualToPredicateOperatorType" = "is equal to"; //4 +"CPNotEqualToPredicateOperatorType" = "is not equal"; //5 +"CPMatchesPredicateOperatorType" = "matches"; //6 +"CPLikePredicateOperatorType" = "is like"; //7 +"CPBeginsWithPredicateOperatorType" = "begins with"; //8 +"CPEndsWithPredicateOperatorType" = "ends with"; //9 +"CPInPredicateOperatorType" = "is in"; //10 +"CPCustomSelectorPredicateOperatorType" = "function"; //11 +"CPContainsPredicateOperatorType" = "contains"; //99 +"CPBetweenPredicateOperatorType" = "is between"; //100 +"firstName" = "First Name"; +"lastName" = "Last Name"; +"age" = "Age"; +"birthDate" = "Birth Date"; diff --git a/Tests/Manual/CPRuleEditorCibTest/Resources/spinner.gif b/Tests/Manual/CPRuleEditorCibTest/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPRuleEditorCibTest/RuleControls.j b/Tests/Manual/CPRuleEditorCibTest/RuleControls.j new file mode 100644 index 000000000..3a313fa44 --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/RuleControls.j @@ -0,0 +1,76 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2008 Pear, Inc. All rights reserved. + */ + +@implementation RuleTextField : CPTextField +{ +} + +- (id)initWithFrame:(CPRect)frame +{ + self = [super initWithFrame:CGRectMake(0, 0, 500, 24)]; + + if (self != nil) + { + [self setBezeled:YES]; + [self setBezelStyle:CPTextFieldSquareBezel]; + [self setBordered:YES]; + [self setEditable:YES]; + [self setFont:[CPFont systemFontOfSize:11]]; + } + + return self; +} + +- (BOOL)isEqual:(id)object +{ + if ([object class] == [RuleTextField class] && + [[object objectValue] isEqual:[self objectValue]]) + return YES; + + return YES; +} + +- (id)copy +{ + var copy = [[RuleTextField alloc] initWithFrame:CGRectMakeZero()]; + [copy setObjectValue:[self objectValue]]; + + return copy; +} + +@end + +@implementation RuleSlider : CPSlider +{ +} + +- (id) initWithFrame:(CPRect)frame +{ + self = [super initWithFrame:CGRectMake(0, 0, 500, 18)]; + + if (self != nil) + { + [self setMinValue:0]; + [self setMaxValue:60]; + [self setContinuous:YES]; + } + + return self; +} + +- (id)objectValue +{ + return ROUND([self doubleValue]); +} + +- (id)copy +{ + var copy = [[RuleSlider alloc] initWithFrame:CGRectMakeZero()]; + [copy setObjectValue:[self objectValue]]; + + return copy; +} + +@end \ No newline at end of file diff --git a/Tests/Manual/CPRuleEditorCibTest/RuleDelegate.j b/Tests/Manual/CPRuleEditorCibTest/RuleDelegate.j new file mode 100644 index 000000000..430121e98 --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/RuleDelegate.j @@ -0,0 +1,147 @@ +/* + * Created by cacaodev@gmail.com. + * Copyright (c) 2008 Pear, Inc. All rights reserved. + */ + +@import +@import "RuleControls.j" + +var CPRuleEditorPredicateKeys = [ + CPRuleEditorPredicateLeftExpression, + CPRuleEditorPredicateRightExpression, + CPRuleEditorPredicateComparisonModifier, + CPRuleEditorPredicateOptions, + CPRuleEditorPredicateOperatorType, + CPRuleEditorPredicateCustomSelector, + CPRuleEditorPredicateCompoundType + ]; + +var CPRuleEditorCustomControlClass = @"CPRuleEditorCustomControlClass"; + +@implementation RuleDelegate : CPObject +{ + CPDictionary criteria; +} + +- (id)init +{ + self = [super init]; + if (self != nil) + { + var path = [[CPBundle mainBundle] pathForResource:@"criteria.plist"], + request = [CPURLRequest requestWithURL:path], + connection = [CPURLConnection connectionWithRequest:request delegate:self]; + } + + return self; +} + +- (void)connection:(CPURLConnection)connection didReceiveData:(CPString)dataString +{ + if (!dataString) + return; + + var data = [[CPData alloc] initWithRawString:dataString]; + criteria = [CPPropertyListSerialization propertyListFromData:data format:CPPropertyListXMLFormat_v1_0]; +} + +/* When called, you should return the number of child items of the given criterion. If criterion is nil, you should return the number of root criteria for the given row type. Implementation of this method is required. */ + +- (int)ruleEditor:(CPRuleEditor)editor numberOfChildrenForCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType +{ + var childs; + if (criterion) + childs = [criterion objectForKey:@"criteria"]; + else + childs = [criteria valueForKeyPath:(rowType == CPRuleEditorRowTypeSimple) ? @"rootChildren.subrows" : @"rootHeaders.subrows"]; + + return (childs == NULL) ? 0 : [childs count]; +} + +/* When called, you should return the child of the given item at the given index. If criterion is nil, return the root criterion for the given row type at the given index. Implementation of this method is required. */ + +- (id)ruleEditor:(CPRuleEditor)editor child:(int)index forCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType +{ + var childs; + + if (criterion) + childs = [criterion objectForKey:@"criteria"]; + else + childs = [criteria valueForKeyPath:(rowType == CPRuleEditorRowTypeSimple) ? @"rootChildren.subrows" : @"rootHeaders.subrows"]; + + return [childs objectAtIndex:index]; + +} + +/* + When called, you should return a value for the given criterion. The value should be an instance of CPString, CPView, or CPMenuItem (1). If the value is an CPView or CPMenuItem (1), you must ensure it is unique for every invocation of this method; that is, do not return a particular instance of CPView or CPMenuItem more than once. Implementation of this method is required. + (1) CPMenuItem: not implemented yet. +*/ + +- (id)ruleEditor:(CPRuleEditor)editor displayValueForCriterion:(id)criterion inRow:(int)row +{ + var custom_control_class = [criterion objectForKey:CPRuleEditorCustomControlClass]; + + if (custom_control_class != nil) + { + var custom_class = CPClassFromString(custom_control_class); + return [[custom_class alloc] initWithFrame:CGRectMake(0, 0, 100, 18)]; + } + + return [criterion objectForKey:@"valeur"]; +} + +- (CPDictionary)ruleEditor:(CPRuleEditor)editor predicatePartsForCriterion:(id)criterion withDisplayValue:(id)value inRow:(int)row +{ + var predicatePartsForCriterion = [CPDictionary dictionary]; + + if ([editor rowTypeForRow:row] == CPRuleEditorRowTypeCompound) + { + var compound_type = [criterion objectForKey:CPRuleEditorPredicateCompoundType]; + if (compound_type != nil) + [predicatePartsForCriterion setObject:compound_type forKey:CPRuleEditorPredicateCompoundType]; + return predicatePartsForCriterion; + } + + var count = CPRuleEditorPredicateKeys.length; + for (var i = 0 ;i + + + + + + + + + + + + + + + CPRuleEditorCibTest + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPRuleEditorCibTest/index.html b/Tests/Manual/CPRuleEditorCibTest/index.html new file mode 100644 index 000000000..50db3f53f --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/index.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + CPRuleEditorCibTest + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPRuleEditorCibTest/main.j b/Tests/Manual/CPRuleEditorCibTest/main.j new file mode 100644 index 000000000..7424228fa --- /dev/null +++ b/Tests/Manual/CPRuleEditorCibTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPRuleEditorCibTest + * + * Created by You on September 3, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/SmartFoldersDemo/AppController.j b/Tests/Manual/SmartFoldersDemo/AppController.j new file mode 100644 index 000000000..fbe833c42 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/AppController.j @@ -0,0 +1,319 @@ +/* + * AppController.j + * Smart Folders Demo + * + * Created by cacaodev on November 25, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import "BadgedOutlineView.j" +@import "ImageAndTextView.j" + +@import + +var rootItems = [CPArray arrayWithObject:[CPDictionary dictionaryWithObjectsAndKeys:@"SMART FOLDERS", @"name", YES, @"isContainer"]], + smartFolderImage = [[CPImage alloc] initWithContentsOfFile:@"Resources/SmartFolder.png" size:CGSizeMake(24, 24)], + newFolder = [CPDictionary dictionaryWithObjectsAndKeys:@"Smart Folder", @"name", [CPPredicate predicateWithFormat:@"firstName BEGINSWITH ''"], @"predicate"]; + +@implementation AppController : CPObject +{ +// Outlets in MainMenu.cib + @outlet CPWindow theWindow; + @outlet CPView searchBar; + @outlet CPSearchField searchField; + @outlet CPOutlineView smartOutlineView; + @outlet CPTableView table; + @outlet CPArrayController tableController; + +// Outlets in PredicateEditor.cib + @outlet CPPredicateEditor predicateEditor; + @outlet CPTextField folderNameField; + @outlet CPWindow predicateSheet; + +//Model + CPArray smartFolders; + CPString searchCategory; + CPArray tableArray @accessors; + CPPredicate filterPredicate @accessors; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. + var path = [[CPBundle mainBundle] pathForResource:@"tableArray.plist"], + request = [CPURLRequest requestWithURL:path], + connection = [CPURLConnection connectionWithRequest:request delegate:self]; + + smartFolders = [CPArray array]; + // restore saved folders if they exist + var saved = [[CPUserDefaults standardUserDefaults] objectForKey:@"SmartFolders"]; + if (saved) + { + [smartFolders addObjectsFromArray:saved]; + [smartOutlineView reloadData]; + } + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(ruleEditorRowsDidChange:) name:CPRuleEditorRowsDidChangeNotification object:nil]; +} +// Save folders into defaults +- (void)saveSmartFolders +{ + [CPTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(_saveSmartFolders) userInfo:nil repeats:NO]; +} + +- (void)_saveSmartFolders +{ + var defaults = [CPUserDefaults standardUserDefaults]; + [defaults setObject:smartFolders forKey:@"SmartFolders"]; +} + +- (void)awakeFromCib +{ +// Search Bar + var color = [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:@"Resources/searchBarBlue.png" size:CGSizeMake(1.0, 34.0)]]; + [searchBar setBackgroundColor:color]; + +// Smart Outline View + var dataView = [[ImageAndTextView alloc] initWithFrame:CGRectMakeZero()], + column = [[smartOutlineView tableColumns] objectAtIndex:0]; + [column setDataView:dataView]; + [smartOutlineView setBackgroundColor:[CPColor colorWithRed:212.0 / 255.0 green:221.0 / 255.0 blue:230.0 / 255.0 alpha:1.0]]; + [smartOutlineView setDoubleAction:@selector(editFolderAction:)]; + [smartOutlineView setAction:@selector(outlineViewAction:)]; + [smartOutlineView setSourceListDataSource:self]; + [smartOutlineView setRowHeight:26]; + [smartOutlineView expandItem:[smartOutlineView itemAtRow:0]]; + +// Search Field + [searchField setSearchMenuTemplate:[searchField defaultSearchMenuTemplate]]; + [searchField setRecentsAutosaveName:"autosave"]; + +// Button Bar + var plusButton = [CPButtonBar plusButton], + minusButton = [CPButtonBar minusButton], + superView = [[smartOutlineView enclosingScrollView] contentView], + buttonBar = [[CPButtonBar alloc] initWithFrame:CGRectMake(0.0, CGRectGetHeight([superView frame]) - 26, CGRectGetWidth([superView frame]), 26)]; + + [plusButton setTarget:self]; + [minusButton setTarget:self]; + [plusButton setAction:@selector(createNewFolder:)]; + [minusButton setAction:@selector(removeFolder:)]; + + [buttonBar setHasResizeControl:YES]; + [buttonBar setAutoresizingMask:CPViewWidthSizable | CPViewMinYMargin]; + [buttonBar setButtons:[CPArray arrayWithObjects:plusButton, minusButton]]; + [superView addSubview:buttonBar]; + + [theWindow setFullBridge:YES]; +} +// Get the table data +- (void)connection:(CPURLConnection)connection didReceiveData:(CPString)dataString +{ + if (!dataString) + return; + + var data = [[CPData alloc] initWithRawString:dataString], + array = [CPPropertyListSerialization propertyListFromData:data format:CPPropertyListXMLFormat_v1_0]; + + var count = [array count]; + while (count--) + { + var record = array[count], + string = [record objectForKey:@"birthDate"], + date = [[CPDate alloc] initWithString:string]; + + [record setObject:date forKey:@"birthDate"]; + } + + [self setTableArray:array]; +} + +// ======================= +// ! Search field action +// ======================= +- (IBAction)searchFieldFilter:(id)sender +{ + var searchString = [searchField stringValue], + predicate = [CPPredicate predicateWithFormat:@"(%K CONTAINS[cd] %@) OR (%K CONTAINS[cd] %@)", "firstName", searchString, "lastName", searchString]; + + [self setFilterPredicate:predicate]; +} + +// ======================== +// ! Manage smart folders +// ======================== + +// Simple click: just filter +- (IBAction)outlineViewAction:(id)sender +{ + var folder = [self selectedFolder], + predicate = [folder objectForKey:@"predicate"]; + + [self setFilterPredicate:predicate]; + + [CPTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(setPredicateEditorValue:) userInfo:predicate repeats:NO]; +} + +- (void)setPredicateEditorValue:(CPTimer)timer +{ + [predicateEditor setObjectValue:[timer userInfo]]; +} + +// Double click: edit folder +- (IBAction)editFolderAction:(id)sender +{ + var folder = [self selectedFolder]; + [self displaySheetWithFolder:folder]; +} + +- (IBAction)createNewFolder:(id)sender +{ + var folder = [newFolder copy]; + [smartFolders addObject:folder]; + [smartOutlineView reloadData]; + [smartOutlineView selectRowIndexes:[CPIndexSet indexSetWithIndex:[smartFolders count]] byExtendingSelection:NO]; + + [self displaySheetWithFolder:folder]; +} + +- (IBAction)removeFolder:(id)sender +{ + var selectionIndexes = [smartOutlineView selectedRowIndexes]; + if ([selectionIndexes count] == 0) + return; + + [smartFolders removeObjectAtIndex:[selectionIndexes firstIndex] - 1]; + [smartOutlineView reloadData]; + [smartOutlineView selectRowIndexes:[CPIndexSet indexSet] byExtendingSelection:NO]; + [self saveSmartFolders]; +} + +- (void)displaySheetWithFolder:(id)folder +{ + if (predicateSheet == nil) + [CPBundle loadCibNamed:@"PredicateEditor" owner:self]; + + [folderNameField setStringValue:[folder objectForKey:@"name"]]; + [predicateEditor setObjectValue:[folder objectForKey:@"predicate"]]; // nil is ok + + [predicateSheet makeFirstResponder:folderNameField]; + + [CPApp beginSheet:predicateSheet modalForWindow:theWindow modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:folder:) contextInfo:folder]; +} + +- (IBAction)closeSheet:(id)sender +{ + if ([sender tag] == CPOKButton) + [predicateEditor reloadPredicate]; + + [CPApp endSheet:predicateSheet returnCode:[sender tag]]; +} + +- (void)sheetDidEnd:(CPWindow)aSheet returnCode:(int)returnCode folder:(id)folder +{ + var name = [folderNameField stringValue]; + + if (returnCode == CPOKButton && [name length] > 0) + { + var predicate = [predicateEditor objectValue]; + [self setFilterPredicate:predicate]; + + [folder setObject:predicate forKey:@"predicate"]; + [folder setObject:name forKey:@"name"]; + [folder setObject:[[tableController arrangedObjects] count] forKey:@"count"]; + [smartOutlineView reloadData]; + + [self saveSmartFolders]; + } +} +// convenience method +- (id)selectedFolder +{ + var selectionIndexes = [smartOutlineView selectedRowIndexes]; + if ([selectionIndexes count] > 0) + { + return [smartFolders objectAtIndex:[selectionIndexes firstIndex] - 1]; // O is not selectable + } + + return nil; +} + +// ================================================================ +// Badged Outline View data source & delegate methods. +// ================================================================ + +- (CPArray)childrenForItem:(id)item +{ + if (item == nil) + return rootItems; + + return smartFolders; +} + +- (id)outlineView:(CPOutlineView)theOutlineView child:(CPInteger)index ofItem:(id)item +{ + var children = [self childrenForItem:item]; + return [children objectAtIndex:index]; +} + +- (CPInteger)outlineView:(CPOutlineView)theOutlineView numberOfChildrenOfItem:(id)item +{ + var children = [self childrenForItem:item]; + return [[self childrenForItem:item] count]; +} + +- (id)outlineView:(CPOutlineView)theOutlineView objectValueForTableColumn:(CPTableColumn)tableColumn byItem:(id)item +{ + return " " + [item objectForKey:@"name"]; +} + +- (void)outlineView:(CPOutlineView)theOutlineView willDisplayView:(CPView)aView forTableColumn:(CPTableColumn)tableColumn item:(id)item +{ + if (![aView isKindOfClass:[ImageAndTextView class]]) + return; + + var isContainer = !![item objectForKey:@"isContainer"]; + if (isContainer) + { + [aView setFont:[CPFont boldSystemFontOfSize:11.0]]; + [aView setTextColor:[CPColor colorWithWhite:100.0 / 255.0 alpha:0.9]]; + [aView setImagePosition:CPNoImage]; + } + else + { + [aView setImagePosition:CPImageLeft]; + [aView setImage:smartFolderImage]; + } +} + +- (BOOL)outlineView:(CPOutlineView)theOutlineView shouldSelectItem:(id)item +{ + return ![item objectForKey:@"isContainer"]; +} + +- (BOOL)outlineView:(CPOutlineView)theOutlineView isItemExpandable:(id)item +{ + return !![item objectForKey:@"isContainer"]; +} +// Badged outline data source methods +- (BOOL)sourceList:(CPOutlineView)aSourceList itemHasBadge:(id)item +{ + return ([item objectForKey:@"count"] != nil); +} + +- (CPInteger)sourceList:(CPOutlineView)aSourceList badgeValueForItem:(id)item +{ + return [item objectForKey:@"count"]; +} + +// Resize the sheet if needed +- (void)ruleEditorRowsDidChange:(CPNotification)notif +{ + var frame = [predicateSheet frame], + newHeight = [predicateEditor numberOfRows] * [predicateEditor rowHeight] + 103; + + frame.size.height = MAX([predicateSheet minSize].height, newHeight); + [predicateSheet setFrame:frame display:[predicateSheet isSheet] animate:[predicateSheet isSheet]]; +} + +@end diff --git a/Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j b/Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j new file mode 100644 index 000000000..8bf191afb --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j @@ -0,0 +1,264 @@ +/* + * BadgedOutlineView.j + * + * Created by cacaodev on February 22, 2010. + * Copyright 2010, All rights reserved. + * + * Based on PXSourceList + * Created by Alex Rozanski on 05/09/2009. + * Copyright 2009-10 Alex Rozanski http://perspx.com +*/ + +@import "AppController.j" + +var MIN_BADGE_WIDTH = 22.0, //The minimum badge width for each item (default 22.0) + BADGE_HEIGHT = 14.0, //The badge height for each item (default 14.0) + BADGE_MARGIN = 5.0, //The spacing between the badge and the cell for that row + ROW_RIGHT_MARGIN = 5.0, //The spacing between the right edge of the badge and the edge of the table column + BADGE_BACKGROUND_COLOR = [CPColor colorWithCalibratedRed:(152/255.0) green:(168/255.0) blue:(202/255.0) alpha:1], + BADGE_HIDDEN_BACKGROUND_COLOR = [CPColor colorWithWhite:(180/255.0) alpha:1], + BADGE_SELECTED_TEXT_COLOR = [CPColor colorWithCalibratedRed:(75/255.0) green:(137/255.0) blue:(208/255.0) alpha:1], + BADGE_SELECTED_UNFOCUSED_TEXT_COLOR = [CPColor colorWithCalibratedRed:(153/255.0) green:(169/255.0) blue:(203/255.0) alpha:1], + BADGE_SELECTED_HIDDEN_TEXT_COLOR = [CPColor colorWithCalibratedWhite:(170/255.0) alpha:1], + BADGE_FONT = [CPFont boldSystemFontOfSize:11]; + +var CPSourceListDataSource_sourceList_itemHasBadge_ = 1 << 1, + CPSourceListDataSource_sourceList_badgeValueForItem_ = 1 << 2, + CPSourceListDataSource_sourceList_badgeBackgroundColorForItem_ = 1 << 3, + CPSourceListDataSource_sourceList_badgeTextColorForItem_ = 1 << 4; + +@implementation BadgedOutlineView : CPOutlineView +{ + id _sourceListDataSource @accessors(property=sourceListDataSource); + int _implementedSourceListDataSourceMethods; +} + +- (void)setSourceListDataSource:(id)aDataSource +{ + _sourceListDataSource = aDataSource; + implementedSourceListDataSourceMethods = 0; + + if ([_sourceListDataSource respondsToSelector:@selector(sourceList:itemHasBadge:)]) + implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_itemHasBadge_; + if ([_sourceListDataSource respondsToSelector:@selector(sourceList:badgeValueForItem:)]) + implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeValueForItem_; + if ([_sourceListDataSource respondsToSelector:@selector(sourceList:badgeBackgroundColorForItem:)]) + implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeBackgroundColorForItem_; + if ([_sourceListDataSource respondsToSelector:@selector(sourceList:badgeTextColorForItem:)]) + implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeTextColorForItem_; +} + +- (BOOL)itemHasBadge:(id)item +{ + if (implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_itemHasBadge_) + return [_sourceListDataSource sourceList:self itemHasBadge:item]; + + return NO; +} + +- (CPInteger)badgeValueForItem:(id)item +{ + if ([self itemHasBadge:item] && implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeValueForItem_) + return [_sourceListDataSource sourceList:self badgeValueForItem:item]; + + return CPNotFound; +} + +//This method calculates and returns the size of the badge for the row index passed to the method. If the +//row for the row index passed to the method does not have a badge, then NSZeroSize is returned. +- (CGSize)sizeOfBadgeAtRow:(CPInteger)rowIndex +{ + var rowItem = [self itemAtRow:rowIndex]; + + //Make sure that the item has a badge + if (![self itemHasBadge:rowItem]) + return CGSizeZero(); + + var badgeString = [CPString stringWithFormat:@"%d", [self badgeValueForItem:rowItem]]; + + var stringSize = [badgeString sizeWithFont:BADGE_FONT]; + + //Calculate the width needed to display the text or the minimum width if it's smaller + var width = MAX(MIN_BADGE_WIDTH, stringSize.width + 2 * BADGE_MARGIN); + + return CGSizeMake(width, BADGE_HEIGHT); +} + +- (void)drawRow:(CPInteger)rowIndex clipRect:(CGRect)clipRect +{ + var item = [self itemAtRow:rowIndex]; + //Draw the badge if the item has one + if ([self itemHasBadge:item]) + { + var columnIndex = [_tableColumns indexOfObjectIdenticalTo:[self outlineTableColumn]], + viewRect = [self frameOfDataViewAtColumn:columnIndex row:rowIndex], + badgeSize = [self sizeOfBadgeAtRow:rowIndex], + + badgeFrame = CGRectMake(CGRectGetMaxX(viewRect) - badgeSize.width - ROW_RIGHT_MARGIN, + CGRectGetMidY(viewRect) - (badgeSize.height/2.0), + badgeSize.width, + badgeSize.height); + + [self drawBadgeForRow:rowIndex inRect:badgeFrame]; + } +} + +- (void)drawBadgeForRow:(CPInteger)rowIndex inRect:(CGRect)badgeFrame +{ + + var rowItem = [self itemAtRow:rowIndex], + badgePath = [CPBezierPath bezierPath]; + + [badgePath appendBezierPathWithRoundedRect:badgeFrame xRadius:(BADGE_HEIGHT/2.0) yRadius:(BADGE_HEIGHT/2.0)]; + + //Get window and control state to determine colours used + var isFocused = [[[self window] firstResponder] isEqual:self], + rowBeingEdited = -1 // uninplemented [self editedRow]; + + //Set the attributes based on the row state + var backgroundColor, + textColor; + + if ([[self selectedRowIndexes] containsIndex:rowIndex]) + { + backgroundColor = [CPColor whiteColor]; + + //Set the text color based on window and control state + if (isFocused || rowBeingEdited == rowIndex) + textColor = BADGE_SELECTED_TEXT_COLOR; + else if (!isFocused) + textColor = BADGE_SELECTED_UNFOCUSED_TEXT_COLOR; + else + textColor = BADGE_SELECTED_HIDDEN_TEXT_COLOR; + } + else + { + //Set the text colour based on window and control state + textColor = [CPColor whiteColor]; + + //If the data source returns a custom colour.. + if (implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeBackgroundColorForItem_) + { + backgroundColor = [_sourceListDataSource sourceList:self badgeBackgroundColorForItem:rowItem]; + + if (backgroundColor == nil) + backgroundColor = BADGE_BACKGROUND_COLOR; + } + else //Otherwise use the default (purple-blue colour) + backgroundColor = BADGE_BACKGROUND_COLOR; + + //If the delegate wants a custom badge text colour.. + if (implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeTextColorForItem_) + { + textColor = [_sourceListDataSource sourceList:self badgeTextColorForItem:rowItem]; + + if (textColor == nil) + textColor = [CPColor whiteColor]; + } + } + + [backgroundColor set]; + [badgePath fill]; + + //Draw the badge text + var badgeString = [CPString stringWithFormat:@"%d", [self badgeValueForItem:rowItem]], + stringSize = [badgeString sizeWithFont:BADGE_FONT], + badgeTextPoint = CGPointMake(CGRectGetMidX(badgeFrame) - (stringSize.width/2.0), //Center in the badge frame + CGRectGetMidY(badgeFrame) + (stringSize.height/4.0)); //Center in the badge frame + [textColor setFill]; + [badgeString drawAtPoint:badgeTextPoint withFont:BADGE_FONT]; +} + +/* This CPOutlineView subclass is necessary only if you want to delete items by dragging them to the trash. In order to support drags to the trash, you need to implement draggedImage:endedAt:operation: and handle the CPDragOperationDelete operation. For any other operation, pass the message to the superclass +*/ +- (void)draggedImage:(CPImage)image endedAt:(CPPoint)screenPoint operation:(CPDragOperation)operation +{ + if (operation == CPDragOperationDelete) + { + // Tell all of the dragged nodes to remove themselves from the model. + var selection = [[self dataSource] draggedNodes], + count = [selection count]; + + while (count--) + { + var node = selection[count]; + [[[node parentNode] mutableChildNodes] removeObject:node]; + } + + [self reloadData]; + [self deselectAll:nil]; + } + else + { + [super draggedImage:image endedAt:screenPoint operation:operation]; + } +} + +@end + +@implementation CPOutlineView (MyExtensions) + +- (CPView)preparedViewAtColumn:(int)column row:(int)row +{ + return [self _newDataViewForRow:row tableColumn:_tableColumns[column]]; +} + +- (CPArray)selectedItems +{ + var items = [CPArray array], + selectedRows = [self selectedRowIndexes], + row = [selectedRows firstIndex]; + + if (selectedRows != nil) + { + while (row != CPNotFound) + { + [items addObject:[self itemAtRow:row]]; + row = [selectedRows indexGreaterThanIndex:row]; + } + } + + return items; +} + +- (void)setSelectedItems:(CPArray)items +{ + // If we are extending the selection, we start with the existing selection; otherwise, we create a new blank set of the indexes. + var newSelection = [CPIndexSet indexSet], + count = [items count]; + + for (var i = 0; i < count; i++) + { + var row = [self rowForItem:[items objectAtIndex:i]]; + if (row != CPNotFound) + [newSelection addIndex:row]; + } + + [self selectRowIndexes:newSelection byExtendingSelection:NO]; +} + +@end + +@implementation CPString (DrawingAdditions) + +- (CGSize)drawAtPoint:(CGPoint)point withFont:(CPFont)font +{ + var ctx = [[CPGraphicsContext currentContext] graphicsPort]; + CGContextSaveGState(ctx); + CGContextSetFont(ctx, font); + CGContextShowTextAtPoint(ctx, point.x, point.y + 1, self, 0); + CGContextRestoreGState(ctx); + return [self sizeWithFont:font]; +} + +@end + +function CGContextShowTextAtPoint(aContext, x, y, aString,/* unused */ aStringLength) +{ + aContext.fillText(aString, x, y); +} + +function CGContextSetFont(aContext, aFont) +{ + aContext.font = [aFont cssString]; +} diff --git a/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j b/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j new file mode 100644 index 000000000..995c5926f --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j @@ -0,0 +1,69 @@ + +@implementation ImageAndTextView : _CPImageAndTextView +{ +} + +- (id)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) + { + [self _initShared]; + } + + return self; +} + +- (void)_initShared +{ + //[self setLineBreakMode:CPLineBreakByTruncatingTail]; + [self setImagePosition:CPImageLeft]; + [self setAlignment:CPLeftTextAlignment]; + [self setVerticalAlignment:CPCenterVerticalTextAlignment]; +} + +- (id)initWithCoder:(CPCoder)coder +{ + self = [super initWithCoder:coder]; + [self _initShared]; + + return self; +} + +- (void)encodeWithCoder:(CPCoder)coder +{ + [super encodeWithCoder:coder]; +} + +- (id)objectValue +{ + return [self text]; +} + +- (void)setObjectValue:(id)value +{ + [self setText:value]; +} + +- (void)setThemeState:(CPThemeState)state +{ + if (state === CPThemeStateSelectedDataView) + { + [self setTextColor:[CPColor whiteColor]]; + [self setFont:[CPFont boldSystemFontOfSize:13]]; + } + + [super setThemeState:state]; +} + +- (void)unsetThemeState:(CPThemeState)state +{ + if (state === CPThemeStateSelectedDataView) + { + [self setTextColor:[CPColor colorWithWhite:0.3 alpha:1]]; + [self setFont:[CPFont systemFontOfSize:13]]; + } + + [super unsetThemeState:state]; +} +@end + diff --git a/Tests/Manual/SmartFoldersDemo/Info.plist b/Tests/Manual/SmartFoldersDemo/Info.plist new file mode 100644 index 000000000..8f75aee51 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/Info.plist @@ -0,0 +1,12 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + SmartFoldersDemo + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/SmartFoldersDemo/Jakefile b/Tests/Manual/SmartFoldersDemo/Jakefile new file mode 100644 index 000000000..d7c4148a6 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * SmartFoldersDemo + * + * Created by You on November 25, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("SmartFoldersDemo", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "SmartFoldersDemo.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("SmartFoldersDemo"); + task.setIdentifier("com.yourcompany."); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("SmartFoldersDemo"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["SmartFoldersDemo"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "SmartFoldersDemo", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "SmartFoldersDemo", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "SmartFoldersDemo")); + OS.system(["press", "-f", FILE.join("Build", "Release", "SmartFoldersDemo"), FILE.join("Build", "Deployment", "SmartFoldersDemo")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "SmartFoldersDemo")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "SmartFoldersDemo"), FILE.join("Build", "Desktop", "SmartFoldersDemo", "SmartFoldersDemo.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "SmartFoldersDemo", "SmartFoldersDemo.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "SmartFoldersDemo")); + print("----------------------------"); +} diff --git a/Tests/Manual/SmartFoldersDemo/Resources/MainMenu.cib b/Tests/Manual/SmartFoldersDemo/Resources/MainMenu.cib new file mode 100644 index 000000000..0d6adb5d7 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;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;1;0E;D;K;6;CP$UIDd;2;42E;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;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;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;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;81E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;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;1;0E;D;K;6;CP$UIDd;2;42E;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;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;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;44E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;49E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;101E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;102E;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;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;105E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;103E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;44E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;110E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;103E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;112E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;52E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;113E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;114E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;52E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;103E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;52E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;110E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;103E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;115E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;101E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;116E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;120E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;121E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;122E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;123E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;124E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;126E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;128E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;129E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;130E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;131E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;132E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;131E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;130E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;131E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;130E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;131E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;131E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;131E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;130E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;130E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;133E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;134E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;135E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;124E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;136E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;137E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;129E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;130E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;131E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;138E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;139E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;140E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;141E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;142E;E;D;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;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;39E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;143E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;143E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;39E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;131E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;130E;E;D;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;2;33E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;149E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;150E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;151E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;152E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;153E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;154E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;131E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;156E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;152E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;157E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;130E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;130E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;158E;K;24;CPRecentsAutosaveNameKeyD;K;6;CP$UIDd;3;159E;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;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;160E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;161E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;161E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;160E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;162E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;41E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;163E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;165E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;103E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;44E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;166E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;103E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;167E;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;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;168E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;168E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;170E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;171E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;171E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;170E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;172E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;173E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;174E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;103E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;103E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;130E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;131E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;131E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;131E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;131E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;175E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;176E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;131E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;178E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;36E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;179E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;134E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;141E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;180E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;181E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;182E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;129E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;130E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;131E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;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;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;183E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;184E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;185E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;188E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;37E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;20E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;141E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;141E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;141E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;141E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;130E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;130E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;130E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;189E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;52E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;190E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;52E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;165E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;103E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;52E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;166E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;103E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;193E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;188E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;194E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;194E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;188E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;172E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;195E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;196E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;176E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;176E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;130E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;131E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;130E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;130E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;130E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;197E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;1;0E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;130E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;198E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;K;34;CPOutlineViewOutlineTableColumnKeyD;K;6;CP$UIDd;2;26E;K;35;CPOutlineViewIndentationPerLevelKeyD;K;6;CP$UIDd;3;106E;K;26;CPOutlineViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;24;CPOutlineViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;2;81E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;200E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;201E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;135E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;124E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;202E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;203E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;129E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;130E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;131E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;50E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;204E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;205E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;206E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;207E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;208E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;39E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;209E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;211E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;170E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;160E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;45E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;21E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;141E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;141E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;141E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;141E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;131E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;130E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;131E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;3;178E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;212E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;152E;E;S;1;0S;1;1S;1;2S;1;3S;1;4S;1;5S;12;File's OwnerS;1;6S;1;7S;1;8S;1;9S;2;10S;2;11S;2;12S;2;13S;2;14S;2;15S;2;16S;2;17S;2;18S;2;19S;2;20S;2;21S;2;22S;2;23S;2;24S;2;25S;2;26S;17;BadgedOutlineViewD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;22E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;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;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;223E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;223E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;227E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;228E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;230E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;231E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;232E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;234E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;231E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;235E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;237E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;231E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;238E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;239E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;51E;E;E;d;1;0S;24;{{-100, 769}, {238, 15}}S;19;{{0, 0}, {238, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:d;1;4f;18;0.9933774834437086S;24;{{-100, 738}, {713, 15}}S;19;{{0, 0}, {713, 15}}f;18;0.9106002554278416S;19;{{0, 0}, {956, 34}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;d;2;34S;6;normalS;12;NSCustomViewS;4;NAMEd;3;175d;2;16d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;242E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;103E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;244E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;245E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;246E;K;6;$afontD;K;6;CP$UIDd;3;248E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;111E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;152E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;15;$acontent-insetD;K;6;CP$UIDd;3;250E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;153E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;154E;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;3;111E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;153E;E;d;1;3F;T;S;19;CPMutableDictionaryS;8;lastNamed;3;305d;2;40D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;251E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;242E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;103E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;252E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;245E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;246E;K;6;$afontD;K;6;CP$UIDd;3;253E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;111E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;152E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;15;$acontent-insetD;K;6;CP$UIDd;3;254E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;153E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;154E;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;3;111E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;153E;E;S;22;{{181, 0}, {956, 684}}S;20;{{0, 0}, {956, 684}}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;24E;E;E;d;2;10S;6;CPViewS;21;{{0, 0}, {1137, 684}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;30E;E;E;d;2;18S;9;splitviewS;21;{{745, 2}, {195, 29}}S;19;{{0, 0}, {195, 29}}d;2;33S;11;searchfieldS;27;bezeled+rounded+placeholderd;1;2S;0;d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;255E;E;S;22;First Name | Last Named;3;254S;8;autosaveD;K;6;$classD;K;6;CP$UIDd;3;187E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;52E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;274E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;275E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;276E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;52E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;273E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;36E;E;S;19;{{0, 0}, {954, 23}}S;14;tableHeaderRowS;24;{{-100, 682}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9984871406959153S;21;{{0, 0}, {1137, 682}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;187E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;52E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;271E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;171E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;272E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;52E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;273E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;41E;E;S;20;{{0, 0}, {954, 635}}S;9;tableviewd;2;23S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;42E;E;E;d;1;1D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;177E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;52E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;257E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;52E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;258E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;S;3;aged;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;259E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;242E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;103E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;260E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;245E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;246E;K;6;$afontD;K;6;CP$UIDd;3;261E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;111E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;152E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;15;$acontent-insetD;K;6;CP$UIDd;3;262E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;153E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;154E;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;3;111E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;153E;E;S;20;{{0, 0}, {180, 684}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;3;189E;E;E;d;2;28S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;187E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;263E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;194E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;264E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;265E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;S;24;{{-100, 249}, {15, 504}}S;19;{{0, 0}, {15, 504}}f;18;0.9752883031301482S;13;AppControllerS;20;{{0, 0}, {178, 682}}d;2;20S;6;{3, 0}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;177E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;266E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;257E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;258E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;S;13;CPOutlineViewS;9;firstNamed;3;335D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;267E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;242E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;103E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;268E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;245E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;246E;K;6;$afontD;K;6;CP$UIDd;3;269E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;111E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;152E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;15;$acontent-insetD;K;6;CP$UIDd;3;270E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;153E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;154E;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;3;111E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;153E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;25;{{347, 158}, {1137, 682}}d;2;15S;7;FenêtreS;21;{{0, 31}, {956, 653}}S;20;{{0, 0}, {956, 653}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;212E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;52E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;52E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;S;8;delegateS;9;searchBarS;11;searchFieldS;16;smartOutlineViewS;5;tableS;15;tableControllerS;9;theWindowS;10;dataSourceS;18;searchFieldFilter:S;32;filterPredicate: filterPredicateS;15;filterPredicateD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;E;E;S;24;contentArray: tableArrayS;12;contentArrayS;10;tableArrayD;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;E;E;S;26;value: arrangedObjects.ageS;5;valueS;19;arrangedObjects.ageD;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;E;E;S;31;value: arrangedObjects.lastNameS;24;arrangedObjects.lastNameD;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;E;E;S;32;value: arrangedObjects.firstNameS;25;arrangedObjects.firstNameD;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;278E;E;E;S;12;columnHeaderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;243E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;279E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;280E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;130E;E;S;9;textfieldS;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;247E;K;4;nameD;K;6;CP$UIDd;3;281E;K;6;valuesD;K;6;CP$UIDd;3;282E;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;249E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;284E;E;E;S;9;Last NameD;K;6;$classD;K;6;CP$UIDd;3;247E;K;4;nameD;K;6;CP$UIDd;3;281E;K;6;valuesD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;3;249E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;E;E;S;22;{{758, 630}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;286E;E;E;S;3;AgeD;K;6;$classD;K;6;CP$UIDd;3;247E;K;4;nameD;K;6;CP$UIDd;3;281E;K;6;valuesD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;3;249E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;283E;E;S;20;{{1, 1}, {178, 682}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;288E;E;S;20;{{224, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;289E;E;E;S;9;FirstNameD;K;6;$classD;K;6;CP$UIDd;3;247E;K;4;nameD;K;6;CP$UIDd;3;281E;K;6;valuesD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;3;249E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;283E;E;S;20;{{1, 1}, {954, 635}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;41E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;291E;E;S;21;{{1, 636}, {954, 17}}S;19;{{0, 0}, {954, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;E;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;3;277E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;126E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;S;17;Arial, sans-serifd;2;12S;4;fontD;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;292E;K;6;normalD;K;6;CP$UIDd;3;244E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;277E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;136E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;136E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;292E;K;6;normalD;K;6;CP$UIDd;3;244E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;277E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;292E;K;6;normalD;K;6;CP$UIDd;3;244E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;293E;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;277E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;202E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;202E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;3;224E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;292E;K;6;normalD;K;6;CP$UIDd;3;244E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;243E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;279E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;280E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;131E;E;f;12;0.7549452686f;12;0.8328956135E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/SmartFoldersDemo/Resources/MainMenu.xib b/Tests/Manual/SmartFoldersDemo/Resources/MainMenu.xib new file mode 100644 index 000000000..d5592dbfc --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/Resources/MainMenu.xib @@ -0,0 +1,1123 @@ + + + + 1060 + 10H574 + 823 + 1038.35 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 823 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{347, 188}, {1137, 682}} + 611844096 + Fenêtre + NSWindow + + {1.79769e+308, 1.79769e+308} + + + 256 + + YES + + + 274 + + YES + + + 308 + + YES + + + 2304 + + YES + + + 274 + {178, 682} + + YES + + + -2147483392 + {{224, 0}, {16, 17}} + + + YES + + NAME + 175 + 16 + 1000 + + 75628096 + 2048 + + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337772096 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + + 3 + 0.0 + + 6 + System + _sourceListBackgroundColor + + 1 + MC44MzkyMTU2OTU5IDAuODY2NjY2Njc0NiAwLjg5ODAzOTIyMTgAA + + + + 6 + System + gridColor + + 3 + MC41AA + + + 20 + 306216960 + + + 1 + 15 + 0 + YES + 1 + 1 + 8 + + + {{1, 1}, {178, 682}} + + + + + 1 + MC43NTQ5NDUyNjg2IDAuODMyODk1NjEzNSAxAA + + 4 + + + + -2147483392 + {{-100, -100}, {15, 102}} + + + _doScroller: + 0.99848714069591527 + + + + -2147483392 + {{-100, -100}, {238, 15}} + + 1 + + _doScroller: + 0.99337748344370858 + + + {180, 684} + + + 2 + + + + QSAAAEEgAABBoAAAQaAAAA + + + + 258 + + YES + + + 274 + + YES + + + 2304 + + YES + + + 274 + {954, 635} + + YES + + + 256 + {954, 17} + + + + + + -2147483392 + {{758, 0}, {16, 17}} + + + + YES + + firstName + 335 + 40 + 1000 + + 75628096 + 2048 + FirstName + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + lastName + 305 + 40 + 1000 + + 75628096 + 2048 + Last Name + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + age + 305 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + Age + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 17 + -692060160 + + + 1 + 0 + 15 + 0 + YES + 0 + + + {{1, 17}, {954, 635}} + + + + + 4 + + + + -2147483392 + {{-100, -100}, {15, 504}} + + + _doScroller: + 0.97528830313014825 + + + + -2147483392 + {{-100, -100}, {713, 15}} + + 1 + + _doScroller: + 0.91060025542784162 + + + + 2304 + + YES + + + {{1, 0}, {954, 17}} + + + + + 4 + + + + {956, 653} + + + 530 + + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 266 + + YES + + + 265 + {{748, 6}, {188, 22}} + + YES + + 343014976 + 268436544 + + + First Name | Last Name + + YES + 1 + + 6 + System + textBackgroundColor + + + + + 130560 + 0 + search + + _searchFieldSearch: + + 138690815 + 0 + + 400 + 75 + + + 130560 + 0 + clear + + YES + + YES + + YES + AXDescription + NSAccessibilityEncodedAttributesValueType + + + YES + cancel + + + + + + _searchFieldCancel: + + 138690815 + 0 + + 400 + 75 + + autosave + 255 + + + + {{0, 650}, {956, 34}} + + NSCustomView + + + {{181, 0}, {956, 684}} + + NSView + + + {{0, -2}, {1137, 684}} + + YES + 2 + + + {1137, 682} + + + {{0, 0}, {1680, 1028}} + {1.79769e+308, 1.79769e+308} + + + AppController + + + + YES + firstName + lastName + age + + YES + + YES + YES + YES + YES + + + + + YES + + + delegate + + + + 822 + + + + searchField + + + + 907 + + + + dataSource + + + + 909 + + + + table + + + + 937 + + + + searchBar + + + + 940 + + + + theWindow + + + + 941 + + + + delegate + + + + 942 + + + + smartOutlineView + + + + 943 + + + + searchFieldFilter: + + + + 946 + + + + delegate + + + + 948 + + + + contentArray: tableArray + + + + + + contentArray: tableArray + contentArray + tableArray + 2 + + + 949 + + + + value: arrangedObjects.firstName + + + + + + value: arrangedObjects.firstName + value + arrangedObjects.firstName + 2 + + + 952 + + + + value: arrangedObjects.lastName + + + + + + value: arrangedObjects.lastName + value + arrangedObjects.lastName + 2 + + + 954 + + + + value: arrangedObjects.age + + + + + + value: arrangedObjects.age + value + arrangedObjects.age + 2 + + + 956 + + + + filterPredicate: filterPredicate + + + + + + filterPredicate: filterPredicate + filterPredicate + filterPredicate + 2 + + + 958 + + + + tableController + + + + 959 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 367 + + + YES + + + + + + 368 + + + YES + + + + + + 821 + + + + + 921 + + + YES + + + + + + + 836 + + + YES + + + + + + + + 839 + + + YES + + + + + + 838 + + + + + 837 + + + + + 841 + + + YES + + + + + + 846 + + + YES + + + + + + + 891 + + + YES + + + + + + + + + 895 + + + + + 894 + + + YES + + + + + + + + 893 + + + + + 892 + + + + + 900 + + + YES + + + + + + 897 + + + YES + + + + + + 896 + + + YES + + + + + + 899 + + + + + 898 + + + + + 901 + + + + + 844 + + + + + 924 + + + + + 939 + + + YES + + + + + + 847 + + + YES + + + + + + 848 + + + + + + + YES + + YES + -3.IBPluginDependency + 367.IBEditorWindowLastContentRect + 367.IBPluginDependency + 367.IBWindowTemplateEditedContentRect + 367.NSWindowTemplate.visibleAtLaunch + 367.editorWindowContentRectSynchronizationRect + 367.windowTemplate.maxSize + 368.IBPluginDependency + 836.IBPluginDependency + 837.IBPluginDependency + 838.IBPluginDependency + 839.CustomClassName + 839.IBPluginDependency + 841.IBPluginDependency + 844.IBPluginDependency + 846.IBPluginDependency + 846.IBViewBoundsToFrameTransform + 847.IBPluginDependency + 847.IBViewBoundsToFrameTransform + 848.IBPluginDependency + 891.IBPluginDependency + 891.IBViewBoundsToFrameTransform + 892.IBPluginDependency + 893.IBPluginDependency + 894.IBPluginDependency + 895.IBPluginDependency + 896.IBPluginDependency + 897.IBPluginDependency + 898.IBPluginDependency + 899.IBPluginDependency + 921.IBViewBoundsToFrameTransform + 924.IBPluginDependency + 939.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + {{42, 195}, {1137, 682}} + com.apple.InterfaceBuilder.CocoaPlugin + {{42, 195}, {1137, 682}} + + {{11, 666}, {480, 270}} + {3.40282e+38, 3.40282e+38} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + BadgedOutlineView + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + AUNJAABCQAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABD84AAxCNAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAAAAAAAAxCIAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAAAAAAAAxCUAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 959 + + + + YES + + AppController + NSObject + + searchFieldFilter: + id + + + searchFieldFilter: + + searchFieldFilter: + id + + + + YES + + YES + searchBar + searchField + smartOutlineView + table + tableController + theWindow + + + YES + NSCustomView + NSSearchField + BadgedOutlineView + NSTableView + NSArrayController + NSWindow + + + + YES + + YES + searchBar + searchField + smartOutlineView + table + tableController + theWindow + + + YES + + searchBar + NSCustomView + + + searchField + NSSearchField + + + smartOutlineView + BadgedOutlineView + + + table + NSTableView + + + tableController + NSArrayController + + + theWindow + NSWindow + + + + + IBUserSource + + + + + BadgedOutlineView + NSOutlineView + + IBUserSource + + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + + 3 + + diff --git a/Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.cib b/Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.cib new file mode 100644 index 000000000..d8ad2dafb --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;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;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;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;24E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;33E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;106E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;107E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;108E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;109E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;109E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;109E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;109E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;110E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;110E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;111E;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;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;112E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;113E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;116E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;117E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;37E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;118E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;109E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;120E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;121E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;121E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;121E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;124E;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;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;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;127E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;125E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;130E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;131E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;3;110E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;131E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;132E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;133E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;134E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;1;0E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;135E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;136E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;137E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;138E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;139E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;140E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;142E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;3;143E;E;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;3;144E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;147E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;148E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;149E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;150E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;151E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;119E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;152E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;153E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;108E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;119E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;154E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;109E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;109E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;109E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;155E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;110E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;131E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;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;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;159E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;25E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;154E;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;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;160E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;161E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;162E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;163E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;130E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;125E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;22E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;60E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;165E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;165E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;165E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;165E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;131E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;110E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;131E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;166E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;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;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;121E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;171E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;24E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;172E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;39E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;173E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;25E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;174E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;175E;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;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;154E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;176E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;177E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;178E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;16;$aimage-positionD;K;6;CP$UIDd;3;109E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;109E;K;11;$aalignmentD;K;6;CP$UIDd;3;108E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;180E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;109E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;181E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;54E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;30;_CPCibWindowTemplateMinSizeKeyD;K;6;CP$UIDd;3;182E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;183E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;184E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;185E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;186E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;187E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;188E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;24E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;109E;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;50E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;189E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;189E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;190E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;130E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;154E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;134E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;109E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;109E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;191E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;110E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;131E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;193E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;194E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;150E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;151E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;195E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;119E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;121E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;153E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;131E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;197E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;108E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;119E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;121E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;121E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;200E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;24E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;202E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;145E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;26E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;146E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;204E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;178E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;16;$aimage-positionD;K;6;CP$UIDd;3;109E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;109E;K;11;$aalignmentD;K;6;CP$UIDd;3;108E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;206E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;109E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;207E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;208E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;116E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;209E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;37E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;109E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;154E;E;S;1;0S;1;2S;2;35S;1;3S;1;4S;1;5S;1;6S;1;7S;1;9S;1;8S;2;10S;2;15S;2;11S;2;12S;2;14S;2;13S;2;16S;2;17S;2;18S;12;File's OwnerS;2;19S;2;20S;2;22S;2;21S;2;23S;2;24S;2;25S;2;26S;2;27S;2;28S;2;29S;2;30S;2;31S;2;32S;2;33S;2;34S;1;1D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;53E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;214E;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;3;103E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;103E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;S;13;AppControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;d;1;2d;1;0F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;E;E;S;21;{{492, 51}, {15, 49}}S;18;{{0, 0}, {15, 49}}d;1;8d;11;-2147483648S;8;scrollerS;17;disabled+verticalS;27;_verticalScrollerDidScroll:d;1;4f;4;0.98S;0;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;49E;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;42E;D;K;6;CP$UIDd;2;35E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;225E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;226E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;227E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;130E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;28E;E;S;19;{{0, 0}, {506, 99}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;220E;E;E;d;2;18S;11;rule-editorS;6;normalT;d;2;75d;2;25d;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;141E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;33E;E;E;S;8;containsS;17;_popUpItemAction:d;7;1048576d;2;99S;20;{{17, 18}, {45, 17}}S;18;{{0, 0}, {45, 17}}d;2;36S;9;textfieldS;5;Name:d;4;3072d;1;1d;3;300D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;E;E;S;9;ends withd;1;9S;3;AllS;22;{{20, 50}, {508, 101}}S;20;{{0, 0}, {508, 101}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;166E;E;E;S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;2;50E;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;3;228E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;228E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;130E;E;S;8;lastNameD;K;10;$classnameS;20;CPExpression_keypathK;8;$classesA;S;20;CPExpression_keypathS;21;CPExpression_functionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;168E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;229E;K;11;CPArgumentsD;K;6;CP$UIDd;3;230E;K;9;CPOperandD;K;6;CP$UIDd;3;232E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;134E;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;34E;D;K;6;CP$UIDd;2;30E;E;E;S;15;is greater thanS;11;begins withS;3;AnyS;9;firstNameD;K;6;$classD;K;6;CP$UIDd;3;168E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;229E;K;11;CPArgumentsD;K;6;CP$UIDd;3;233E;K;9;CPOperandD;K;6;CP$UIDd;3;232E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;134E;E;S;22;{{477, 164}, {51, 24}}S;18;{{0, 0}, {51, 24}}S;6;buttonS;8;borderedS;2;OKS;25;of the following are trueS;10;{548, 172}S;10;{548, 522}S;8;CPWindowS;24;{{571, 393}, {548, 204}}d;2;79S;16;Predicate EditorS;12;is less thanS;20;{{0, 0}, {548, 204}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;59E;E;E;d;3;700D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;E;E;S;21;{{64, 11}, {468, 29}}S;19;{{0, 0}, {468, 29}}S;19;bezeled+placeholderD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;196E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;237E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;38E;E;E;S;2;isS;13;CPApplicationS;3;ageD;K;6;$classD;K;6;CP$UIDd;3;168E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;229E;K;11;CPArgumentsD;K;6;CP$UIDd;3;238E;K;9;CPOperandD;K;6;CP$UIDd;3;232E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;134E;E;S;22;{{391, 164}, {76, 24}}S;18;{{0, 0}, {76, 24}}S;6;CancelS;24;{{-100, 186}, {360, 15}}S;19;{{0, 0}, {360, 15}}S;8;disabledS;29;_horizontalScrollerDidScroll:S;8;delegateS;15;folderNameFieldS;15;predicateEditorS;14;predicateSheetS;11;closeSheet: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;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;239E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;108E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;54E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;244E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;245E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;108E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;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;219E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;246E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;130E;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;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;26E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;247E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;248E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;108E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;249E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;250E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;108E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;251E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;252E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;151E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;195E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;121E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;153E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;131E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;197E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;108E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;109E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;19;{{1, 1}, {506, 99}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;196E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;253E;E;S;16;{{0, 0}, {0, 0}}S;12;valueForKey:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;255E;E;E;D;K;10;$classnameS;17;CPExpression_selfK;8;$classesA;S;17;CPExpression_selfS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;256E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;257E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;258E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;108E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;39E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;259E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;260E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;109E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;119E;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;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;108E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;261E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;151E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;195E;K;6;$afontD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;121E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;153E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;131E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;131E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;197E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;108E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;109E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;263E;E;E;S;18;{{7, 7}, {58, 24}}S;18;{{0, 0}, {58, 24}}S;12;popup-buttonD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;242E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;264E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;265E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;110E;E;S;20;{{71, 7}, {167, 24}}S;19;{{0, 0}, {167, 24}}S;20;{{1, -1}, {506, 99}}S;19;{{37, 7}, {57, 24}}S;18;{{0, 0}, {57, 24}}S;21;{{100, 7}, {115, 24}}S;19;{{0, 0}, {115, 24}}S;20;{{218, 1}, {32, 25}}S;18;{{0, 0}, {32, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;154E;E;E;D;K;10;$classnameS;21;CPExpression_constantK;8;$classesA;S;21;CPExpression_constantS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;254E;K;15;CPConstantValueD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;3;254E;K;15;CPConstantValueD;K;6;CP$UIDd;3;174E;E;S;19;{{37, 7}, {89, 24}}S;18;{{0, 0}, {89, 24}}S;20;{{132, 7}, {99, 24}}S;18;{{0, 0}, {99, 24}}S;21;{{234, 1}, {167, 25}}S;19;{{0, 0}, {167, 25}}D;K;6;$classD;K;6;CP$UIDd;3;254E;K;15;CPConstantValueD;K;6;CP$UIDd;3;202E;E;S;5;Ariald;2;11f;12;0.9100000262E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.xib b/Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.xib new file mode 100644 index 000000000..facd33868 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/Resources/PredicateEditor.xib @@ -0,0 +1,1530 @@ + + + + 1060 + 10H574 + 823 + 1038.35 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 823 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + AppController + + + FirstResponder + + + NSApplication + + + 79 + 2 + {{571, 431}, {548, 204}} + 611844096 + Predicate Editor + NSWindow + + {548, 500} + {548, 150} + + + 256 + + + + 268 + {{67, 167}, {461, 22}} + + YES + + -1804468671 + 272630784 + + + LucidaGrande + 13 + 1044 + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + + 268 + {{17, 169}, {45, 17}} + + YES + + 68288064 + 272630784 + Name: + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + + + + 274 + + + + 2304 + + + + 274 + + + + 274 + + + + 290 + + + + 257 + {{478, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + + + + LucidaGrande-Bold + 12 + 16 + + + + add + + + + + _addOption: + + -2038284033 + 36 + + LucidaGrande + 12 + 4883 + + + 400 + 75 + + + + + -2147483391 + {{458, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + - + + + + remove + + + + + _deleteOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 256 + {{7, 3}, {58, 19}} + + + -1 + YES + + 67239488 + 4196352 + + LucidaGrande + 11 + 3100 + + + + -2038284033 + 36 + + LucidaGrande + 11 + 16 + + + 400 + 75 + + + Any + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + + YES + + + + + + + All + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{71, 3}, {167, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + -2038284033 + 36 + + + 400 + 75 + + + of the following are true + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + + + + + + 3 + YES + YES + 2 + + + + {506, 25} + + + 0 + 0 + + + + + + + 2 + {{7, 3}, {58, 19}} + {{71, 3}, {167, 19}} + + + + + 2 + 0 + 0 + 0 + 0 + + + + + NO + NO + + + + + + + + 2 + {{7, 3}, {58, 19}} + {{71, 3}, {167, 19}} + + + 0 + 0 + YES + + + + 290 + + + + 257 + {{478, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + + + + + + add + + + + + _addOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 257 + {{458, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + - + + + + remove + + + + + _deleteOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 256 + {{37, 3}, {89, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + 3 + valueForKey: + + 1 + + + + 10 + firstName + + + + + -2038284033 + 36 + + + 400 + 75 + + + firstName + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + + YES + + + + + + + lastName + + 1048576 + 2147483647 + + + _popUpItemAction: + + 3 + valueForKey: + + + + 10 + lastName + + + + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{132, 3}, {99, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + + -2038284033 + 36 + + + 400 + 75 + + + begins with + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + + YES + + + + + + + ends with + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + contains + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{237, 4}, {160, 18}} + + + YES + + 343014976 + 4326400 + + + + YES + + + + + + {{0, 25}, {506, 25}} + + + 1 + 1 + + + + + + + + 3 + {{37, 3}, {89, 19}} + {{132, 3}, {99, 19}} + {{237, 4}, {160, 18}} + + + + + 1 + 3 + 0 + 0 + 700 + + + + + + NO + YES + + + + + + + + + + + + 3 + {{37, 3}, {89, 19}} + {{132, 3}, {99, 19}} + {{237, 4}, {160, 18}} + + + 0 + 0 + YES + + + + 290 + + + + 257 + {{478, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + + + + + + add + + + + + _addOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 257 + {{458, 4}, {18, 18}} + + + -1 + YES + + 67239424 + 134348800 + - + + + + remove + + + + + _deleteOption: + + -2038284033 + 36 + + + 400 + 75 + + + + + 256 + {{37, 3}, {57, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + 3 + valueForKey: + + + + 10 + age + + + + + -2038284033 + 36 + + + 400 + 75 + + + age + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + + YES + + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{100, 3}, {115, 19}} + + + -1 + YES + + 67239488 + 4196352 + + + + -2038284033 + 36 + + + 400 + 75 + + + is + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + + YES + + + + + + + is less than + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + is greater than + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 3 + YES + YES + 2 + + + + + 256 + {{221, 4}, {25, 18}} + + + YES + + 343014976 + 4326400 + + + + YES + + + + + + {{0, 50}, {506, 25}} + + + 2 + 1 + + + + + + + + 3 + {{37, 3}, {57, 19}} + {{100, 3}, {115, 19}} + {{221, 4}, {25, 18}} + + + + + 1 + 0 + 0 + 0 + 300 + + + + + + NO + YES + + + + + + + + + + + + 3 + {{37, 3}, {57, 19}} + {{100, 3}, {115, 19}} + {{221, 4}, {25, 18}} + + + 0 + 0 + YES + + + {{1, 1}, {506, 99}} + + + + + + NSRuleEditorItemPBoardType + + {506, 99} + + + YES + 75 + 25 + YES + NO + YES + 3 + rowType + subrows + criteria + displayValues + boundArray + NSMutableDictionary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{1, 1}, {506, 99}} + + + + + 3 + MC45MTAwMDAwMjYyAA + + 4 + + + + -2147483392 + {{492, 1}, {15, 49}} + + + _doScroller: + 0.97999999999999998 + + + + -2147483392 + {{-100, -100}, {360, 15}} + + 1 + + _doScroller: + + + {{20, 53}, {508, 101}} + + + 530 + + + + + + + 289 + {{477, 12}, {51, 25}} + + 1 + YES + + 67239424 + 134217728 + OK + + + -2038152961 + 134 + + + 400 + 75 + + + + + 289 + {{391, 12}, {76, 25}} + + YES + + 67239424 + 134217728 + Cancel + + + -2038152961 + 134 + + + 400 + 75 + + + + {548, 204} + + + {{0, 0}, {1680, 1028}} + {548, 172} + {548, 522} + + + + + + + delegate + + + + 36 + + + + predicateSheet + + + + 43 + + + + closeSheet: + + + + 68 + + + + predicateEditor + + + + 69 + + + + folderNameField + + + + 70 + + + + closeSheet: + + + + 84 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + Sheet + + + 2 + + + + + + + + + + + + 24 + + + + + + + + 25 + + + + + 26 + + + + + + + + 27 + + + + + 44 + + + + + + + + + + 45 + + + + + 46 + + + + + 47 + + + + + + + + + + 48 + + + + + + + + + 49 + + + + + + + + + 50 + + + + + + + + + 51 + + + + + + + + + + 57 + + + + + 58 + + + + + 60 + + + + + + + + + 61 + + + + + + + + 62 + + + + + 63 + + + + + 64 + + + + + 65 + + + + + + + + 66 + + + + + 78 + + + + + 79 + + + + + 80 + + + + + 81 + + + + + + + + 82 + + + + + 85 + + + + + + + + + 86 + + + + + + + + 90 + + + + + + + + + + 94 + + + + + 98 + + + + + 99 + + + + + 100 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{439, 592}, {548, 204}} + com.apple.InterfaceBuilder.CocoaPlugin + {{439, 592}, {548, 204}} + + + + {548, 500} + {548, 150} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDGgAAwzsAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwzYAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBoAAAwxgAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{487, 675}, {126, 41}} + com.apple.InterfaceBuilder.CocoaPlugin + {{569, 618}, {137, 98}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABD7oAAwiQAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDw4AAwiQAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100 + + + + + AppController + NSObject + + closeSheet: + id + + + closeSheet: + + closeSheet: + id + + + + NSTextField + NSPredicateEditor + NSWindow + + + + folderNameField + NSTextField + + + predicateEditor + NSPredicateEditor + + + predicateSheet + NSWindow + + + + IBUserSource + + + + + NSObject + + IBUserSource + + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + + 3 + + {9, 8} + {7, 2} + + + diff --git a/Tests/Manual/SmartFoldersDemo/Resources/SmartFolder.png b/Tests/Manual/SmartFoldersDemo/Resources/SmartFolder.png new file mode 100644 index 0000000000000000000000000000000000000000..85e175cb06bc2ce986149ea6b08ec0de360f9a39 GIT binary patch literal 1672 zcmV;326y?1P)OxUmx)+xsE<|058wJ6lBI4eaLa8FAHch8BA+6~`Y@5G%^YiBY`+fJ#OU57# zRf?Nla&!OAJ?A^$IrqE~x!3+@2DDE5IkP-8H~GTpiSg;DJNG;1mns*&n_v9mbJt(J z*17+0=SF(bGLLl6PCkG7&9`2EEo12Abbt5wTyU)X?mHq!r{+HV__I@u-RF0@-Ubj$ zuz!5)=#!osmc9K0ufI8S7K~NE#Esht?{&5fpqQIE{MfOn6OI$?bw`drF@2)9 zxAfkgg8v|J?#Ca#?F`{IfEQ1_{D!7!rqjHw_o+&AbZqdEba5x+=-5lKd@6GM@ssa= z@X@o5Haz(1UuA8(dUo~twNH$h=||t5nVB7a>Y2minl1tsB#vXr zWOOyA>nMtq%{YP#jt&a}B!G56@gDC-0LC-w)&U}y%St|9 z&~@9kZ$=0^54VM(h|1UlKT>C57|G(rW%2z`DKjz|DfRbB|GtvstgMpdS>@6-cp9oZ z37{QNiGEQ!eLs+9vvE^zwVW-_^My3A6G%Gp0@2d={Cq`fHCyI?zAR457tP2>1|0(M zN*C7+WMN@R8qJ0*F0LpLystcmBb|-F!Y~xr-qanZStFW|o9t~6K0N1~Ghk(fxn zdd-*di2=NxoZ`39XvvkzA5!ejNq~&LaDEjbitzMA#>NjR@A50 z7ziR&11OZ_K@tXgvnIWz0vy-G%w|=xxAWx5= zOs#Xei9JJ1(@;$EjEy5@lQ6VH;QLJ@2>d4F;kJ@Qq!6oBdNFV15p!KK*r##9cx%I! z{rByILS{27Tqx_eY`l^lY1BOcHsP;GSCLF500`pma{>kf@ZR+q0whc-6v0DMM6?rA zgYErL7A~x!dYO{RYI6RUCF$$$Q50`%)TPviR{<~S$dSnh+D?cx8%c##N;>}08Q69V z7{WY=8FzY})c&1(*xFzmL%E3J(p|I=hAa{i&#qvIU2C8^Xwp|IV$a0=1o%(qR%B#s z08Aiz+bs=2I)ZsR85lmQ2wsBL0`iVTP4B6(a^*U_({XM{z2V}?;Z;C+AzwshXeg;Z zs+uR+tclp0kPBt$w?AcMvcysz}acsi$k+C&Hf z9W=yP=ne{phqCLUQl;I;6XKq2`!G5rxq=DBgR;KniHq`Ecf8~diqHC*E0fa)#Iyir z_Mo%?hI*)jo%6KZb4}Lae9R=o$HgI#U0KR?!UDhl)lFB%Mh2v2!$Yv;xgIhe6d-QJ zE@pcqn`0#yP%(>#%)`F4B!M`a|d@I#TbhH^$<3^p(4A>7IeT82Ae#fq;ea SC>NOk00004Tx0C)kdlFv&UK@`Won;haNRO7D0=?Kn4FmhHKj=P7+=_O;&n7cJ<-L-Zq&6BTDXoqkD^Tjcxzn!MT@ma%m6?Z*Dr z=F0kURZr}kRBv%=sJmP~2xt*1dWwpZlIIj>CBN|;k2WRAqLj;%SIH4Ko0%YgBX<=Q z|ByVVct>(g6s7MG*|76v8wj@iM$|Cl((zu!TBvePfrR;eP_SQ3ahEfR&AZPs z4K90=*#;wpQ5cAFnTTUr&6Kx@CD`MA!teU8+GnY`E?!|N=+(rcv+S0OB~KscA66fa6RqcPWrsABe;VaWf`&2pA*Tnsu=02lN$C zX7v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/SmartFoldersDemo/Resources/tableArray.plist b/Tests/Manual/SmartFoldersDemo/Resources/tableArray.plist new file mode 100644 index 000000000..31317585f --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/Resources/tableArray.plist @@ -0,0 +1,96 @@ + + + + + + birthDate + 2010-05-16 10:40:55 +0000 + firstName + Jimmy + lastName + McNulty + age + 46 + + + birthDate + 2010-05-12 10:40:55 +0000 + firstName + Kima + lastName + Georges + age + 41 + + + birthDate + 2010-04-31 10:40:55 +0000 + firstName + Lester + lastName + Freamon + age + 57 + + + birthDate + 2010-02-16 10:40:55 +0000 + firstName + kevin + lastName + Russel + age + 37 + + + birthDate + 2010-01-16 10:40:55 +0000 + firstName + William + lastName + Moreland + age + 53 + + + birthDate + 2007-12-16 10:40:55 +0000 + firstName + Cedric + lastName + Daniels + age + 47 + + + birthDate + 2008-11-16 10:40:55 +0000 + firstName + Roland + lastName + Prysbylewski + age + 27 + + + birthDate + 2007-10-16 10:40:55 +0000 + firstName + Omar + lastName + Little + age + 29 + + + birthDate + 2008-09-16 10:40:55 +0000 + firstName + Avon + lastName + Barkstale + age + 36 + + + diff --git a/Tests/Manual/SmartFoldersDemo/index-debug.html b/Tests/Manual/SmartFoldersDemo/index-debug.html new file mode 100644 index 000000000..a987ded85 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/index-debug.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + SmartFoldersDemo + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/SmartFoldersDemo/index.html b/Tests/Manual/SmartFoldersDemo/index.html new file mode 100644 index 000000000..130870d18 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/index.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + SmartFoldersDemo + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/SmartFoldersDemo/main.j b/Tests/Manual/SmartFoldersDemo/main.j new file mode 100644 index 000000000..c446f82f7 --- /dev/null +++ b/Tests/Manual/SmartFoldersDemo/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * null + * + * Created by You on November 25, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 1003a954e..79ef4f13b 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -47,7 +47,9 @@ @import "NSObjectController.j" @import "NSOutlineView.j" @import "NSPopUpButton.j" +@import "NSPredicateEditor.j" @import "NSResponder.j" +@import "NSRuleEditor.j" @import "NSScrollView.j" @import "NSScroller.j" @import "NSSearchField.j" diff --git a/Tools/nib2cib/NSExpression.j b/Tools/nib2cib/NSExpression.j new file mode 100644 index 000000000..52f2c09ef --- /dev/null +++ b/Tools/nib2cib/NSExpression.j @@ -0,0 +1,199 @@ +@import + +@implementation NSKeyPathExpression : CPExpression_keypath +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_keypath class]; +} + +@end + +@implementation CPKeyPathSpecifierExpression : CPExpression_constant +{ +} + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + var keyPath = [aCoder decodeObjectForKey:@"NSKeyPath"]; + self = [super initWithValue:keyPath]; + return self; +} + +@end + +@implementation NSKeyPathSpecifierExpression : CPKeyPathSpecifierExpression +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_constant class]; +} + +@end + +@implementation CPExpression_constant (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + var value = [aCoder decodeObjectForKey:@"NSConstantValue"]; + return [self initWithValue:value]; +} + +@end + +@implementation NSConstantValueExpression : CPExpression_constant +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_constant class]; +} + +@end + +@implementation CPExpression_function (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + var type = [aCoder decodeIntForKey:@"NSExpressionType"], + operand = [aCoder decodeObjectForKey:@"NSOperand"], + selector = CPSelectorFromString([aCoder decodeObjectForKey:@"NSSelectorName"]), + args = [aCoder decodeObjectForKey:@"NSArguments"]; + + return [self initWithTarget:operand selector:selector arguments:args type:type]; +} + +@end + +@implementation NSFunctionExpression : CPExpression_function +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_function class]; +} + +@end + +@implementation CPExpression_set (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + var type = [aCoder decodeIntForKey:@"NSExpressionType"], + left = [aCoder decodeObjectForKey:@"NSLeftExpression"], + right = [aCoder decodeObjectForKey:@"NSRightExpression"]; + + return [self initWithType:type left:left right:right]; +} + +@end + +@implementation NSSetExpression : CPExpression_set +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_set class]; +} + +@end + +@implementation NSSelfExpression : CPExpression_self +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [super init]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_self class]; +} + +@end + +@implementation CPExpression_variable (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + var variable = [aCoder decodeObjectForKey:@"NSVariable"]; + return [self initWithVariable:variable]; +} + +@end + +@implementation NSVariableExpression : CPExpression_variable +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_variable class]; +} + +@end + +@implementation CPExpression_aggregate (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + var collection = [aCoder decodeObjectForKey:@"NSCollection"]; + return [self initWithAggregate:collection]; +} + +@end + +@implementation NSAggregateExpression : CPExpression_aggregate +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPExpression_aggregate class]; +} + +@end diff --git a/Tools/nib2cib/NSFoundation.j b/Tools/nib2cib/NSFoundation.j index d49818b1a..499e2a544 100644 --- a/Tools/nib2cib/NSFoundation.j +++ b/Tools/nib2cib/NSFoundation.j @@ -21,6 +21,7 @@ */ @import "NSArray.j" +@import "NSExpression.j" @import "NSDictionary.j" @import "NSMutableString.j" @import "NSSet.j" diff --git a/Tools/nib2cib/NSPredicateEditor.j b/Tools/nib2cib/NSPredicateEditor.j new file mode 100644 index 000000000..2ef4ea8a1 --- /dev/null +++ b/Tools/nib2cib/NSPredicateEditor.j @@ -0,0 +1,94 @@ +/* + * NSPredicateEditor.j + * nib2cib + * + * Created by cacaodev. + * Copyright 2010. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import + +@implementation CPPredicateEditor (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + self = [super NS_initWithCoder:aCoder]; + + if (self) + { + _allTemplates = [aCoder decodeObjectForKey:@"NSPredicateTemplates"]; + } + + return self; +} + +@end + +@implementation NSPredicateEditor : CPPredicateEditor +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPPredicateEditor class]; +} + +@end + +@implementation CPPredicateEditorRowTemplate (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + self = [super init]; + + if (self) + { + _templateType = [aCoder decodeIntForKey:@"NSPredicateTemplateType"]; + _predicateOptions = [aCoder decodeIntForKey:@"NSPredicateTemplateOptions"]; + _predicateModifier = [aCoder decodeIntForKey:@"NSPredicateTemplateModifier"]; + _leftAttributeType = [aCoder decodeIntForKey:@"NSPredicateTemplateLeftAttributeType"]; + _rightAttributeType = [aCoder decodeIntForKey:@"NSPredicateTemplateRightAttributeType"]; + _leftIsWildcard = [aCoder decodeBoolForKey:@"NSPredicateTemplateLeftIsWildcard"]; + _rightIsWildcard = [aCoder decodeBoolForKey:@"NSPredicateTemplateRightIsWildcard"]; + _views = [aCoder decodeObjectForKey:@"NSPredicateTemplateViews"]; + } + + return self; +} + +@end + +@implementation NSPredicateEditorRowTemplate : CPPredicateEditorRowTemplate +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPPredicateEditorRowTemplate class]; +} + +@end diff --git a/Tools/nib2cib/NSRuleEditor.j b/Tools/nib2cib/NSRuleEditor.j new file mode 100644 index 000000000..8955626f4 --- /dev/null +++ b/Tools/nib2cib/NSRuleEditor.j @@ -0,0 +1,111 @@ +/* + * NSRuleEditor.j + * nib2cib + * + * Created by cacaodev. + * Copyright 2010. + * + * 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 +@import + +@import "NSCell.j" +@import "NSControl.j" + +@implementation CPRuleEditor (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + self = [super NS_initWithCoder:aCoder]; + + if (self) + { + _alignmentGridWidth = [aCoder decodeFloatForKey:@"NSRuleEditorAlignmentGridWidth"]; + _sliceHeight = [aCoder decodeDoubleForKey:@"NSRuleEditorSliceHeight"]; + _stringsFilename = [aCoder decodeObjectForKey:@"NSRuleEditorStringsFileName"]; + _editable = [aCoder decodeBoolForKey:@"NSRuleEditorEditable"]; + _allowsEmptyCompoundRows = [aCoder decodeBoolForKey:@"NSRuleEditorAllowsEmptyCompoundRows"]; + _disallowEmpty = [aCoder decodeBoolForKey:@"NSRuleEditorDisallowEmpty"]; + _nestingMode = [aCoder decodeIntForKey:@"NSRuleEditorNestingMode"]; + _typeKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorRowTypeKeyPath"]; + _itemsKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorItemsKeyPath"]; + _valuesKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorValuesKeyPath"]; + _subrowsArrayKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorSubrowsArrayKeyPath"]; + _boundArrayKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorBoundArrayKeyPath"]; + + //_slicesHolder = [aCoder decodeObjectForKey:@"NSRuleEditorViewSliceHolder"]; + _boundArrayOwner = [aCoder decodeObjectForKey:@"NSRuleEditorBoundArrayOwner"]; + _slices = [aCoder decodeObjectForKey:@"NSRuleEditorSlices"]; + _ruleDelegate = [aCoder decodeObjectForKey:@"NSRuleEditorDelegate"]; + } + + return self; +} + +@end + +@implementation NSRuleEditor : CPRuleEditor +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPRuleEditor class]; +} + +@end + +@implementation _NSRuleEditorViewSliceHolder : _CPRuleEditorViewSliceHolder +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [_CPRuleEditorViewSliceHolder class]; +} + +@end + +@implementation _NSRuleEditorViewUnboundRowHolder : _CPRuleEditorViewUnboundRowHolder +{ +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super init]) + boundArray = [aCoder decodeObjectForKey:@"NSBoundArray"]; + + return self; +} + +- (Class)classForKeyedArchiver +{ + return [_CPRuleEditorViewUnboundRowHolder class]; +} + +@end