diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 1794085a3..c49b70aa1 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -190,7 +190,7 @@ var CPBindingOperationAnd = 0, var destination = [_info objectForKey:CPObservedObjectKey], keyPath = [_info objectForKey:CPObservedKeyPathKey], options = [_info objectForKey:CPOptionsKey], - newValue = [_source valueForKeyPath:aBinding]; + newValue = [self valueForBinding:aBinding]; newValue = [self reverseTransformValue:newValue withOptions:options]; @@ -199,6 +199,11 @@ var CPBindingOperationAnd = 0, [self unsuppressSpecificNotificationFromObject:destination keyPath:keyPath]; } +- (id)valueForBinding:(CPString)aBinding +{ + return [_source valueForKeyPath:aBinding]; +} + - (void)observeValueForKeyPath:(CPString)aKeyPath ofObject:(id)anObject change:(CPDictionary)changes context:(id)context { if (!changes) @@ -546,20 +551,35 @@ CPNotApplicableMarker = @"CPNotApplicableMarker"; CPNullMarker = @"CPNullMarker"; // Binding name constants -CPAlignmentBinding = @"alignment"; -CPEditableBinding = @"editable"; -CPEnabledBinding = @"enabled"; -CPFontBinding = @"font"; -CPHiddenBinding = @"hidden"; -CPSelectedIndexBinding = @"selectedIndex"; -CPTextColorBinding = @"textColor"; -CPToolTipBinding = @"toolTip"; -CPValueBinding = @"value"; -CPValueURLBinding = @"valueURL"; -CPValuePathBinding = @"valuePath"; -CPDataBinding = @"data"; -CPContentBinding = @"content"; -CPContentValuesBinding = @"contentValues"; +CPAlignmentBinding = @"alignment"; +CPContentArrayBinding = @"contentArray"; +CPContentBinding = @"content"; +CPContentObjectBinding = @"contentObject"; +CPContentObjectsBinding = @"contentObjects"; +CPContentValuesBinding = @"contentValues"; +CPEditableBinding = @"editable"; +CPEnabledBinding = @"enabled"; +CPFontBinding = @"font"; +CPFontNameBinding = @"fontName"; +CPFontBoldBinding = @"fontBold"; +CPHiddenBinding = @"hidden"; +CPFilterPredicateBinding = @"filterPredicate"; +CPPredicateBinding = @"predicate"; +CPSelectedIndexBinding = @"selectedIndex"; +CPSelectedLabelBinding = @"selectedLabel"; +CPSelectedObjectBinding = @"selectedObject"; +CPSelectedObjectsBinding = @"selectedObjects"; +CPSelectedTagBinding = @"selectedTag"; +CPSelectedValueBinding = @"selectedValue"; +CPSelectedValuesBinding = @"selectedValues"; +CPSelectionIndexesBinding = @"selectionIndexes"; +CPTextColorBinding = @"textColor"; +CPTitleBinding = @"title"; +CPToolTipBinding = @"toolTip"; +CPValueBinding = @"value"; +CPValueURLBinding = @"valueURL"; +CPValuePathBinding = @"valuePath"; +CPDataBinding = @"data"; //Binding options constants CPAllowsEditingMultipleValuesSelectionBindingOption = @"CPAllowsEditingMultipleValuesSelection"; diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index 84ab5adcc..98f837d4c 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -23,10 +23,10 @@ @import @import "CPButton.j" +@import "CPKeyValueBinding.j" @import "CPMenu.j" @import "CPMenuItem.j" - var VISIBLE_MARGIN = 7.0; CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); @@ -247,22 +247,6 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); return _selectedIndex; } -/*! - @ignore -*/ -- (int)_selectedTag -{ - return [[self selectedItem] tag]; -} - -/*! - @ignore -*/ -- (void)_setSelectedTag:(int)aTag -{ - [self selectItemWithTag:aTag]; -} - // Setting the Current Selection /*! Selects the specified menu item. @@ -787,16 +771,286 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)_reverseSetBinding { - var binderClass = [[self class] _binderClassForBinding:CPSelectedIndexBinding], - theBinding = [binderClass getBinding:CPSelectedIndexBinding forObject:self]; - - [theBinding reverseSetValueFor:@"objectValue"]; + [_CPPopUpButtonSelectionBinder reverseSetValueForObject:self]; [super _reverseSetBinding]; } @end +@implementation CPPopUpButton (BindingSupport) + ++ (Class)_binderClassForBinding:(CPString)aBinding +{ + if (aBinding == CPSelectedIndexBinding || + aBinding == CPSelectedObjectBinding || + aBinding == CPSelectedTagBinding || + aBinding == CPSelectedValueBinding || + aBinding == CPContentBinding || + aBinding == CPContentObjectsBinding || + aBinding == CPContentValuesBinding) + { + var capitalizedBinding = aBinding.charAt(0).toUpperCase() + aBinding.substr(1); + + return [CPClassFromString(@"_CPPopUpButton" + capitalizedBinding + "Binder") class]; + } + + return [super _binderClassForBinding:aBinding]; +} + +@end + +@implementation _CPPopUpButtonContentBinder : CPBinder +{ +} + +- (CPInteger)_getInsertNullOffset +{ + var options = [_info objectForKey:CPOptionsKey]; + + return [options objectForKey:CPInsertsNullPlaceholderBindingOption] ? 1 : 0; +} + +- (CPString)_getNullPlaceholder +{ + var options = [_info objectForKey:CPOptionsKey], + placeholder = [options objectForKey:CPNullPlaceholderBindingOption] || @""; + + if (placeholder === [CPNull null]) + placeholder = @""; + + return placeholder; +} + +- (id)transformValue:(CPArray)contentArray withOptions:(CPDictionary)options +{ + // Desactivate the full array transformation forced by super because we don't want this. We want individual transformations (see below). + return contentArray; +} + +- (void)setValue:(CPArray)contentArray forBinding:(CPString)aBinding +{ + [self _setContent:contentArray]; + [self _setContentValuesIfNeeded:contentArray]; +} + +- (void)valueForBinding:(CPString)aBinding +{ + return [self _content]; +} + +- (void)_setContent:(CPArray)aValue +{ + var count = [aValue count], + options = [_info objectForKey:CPOptionsKey], + offset = [self _getInsertNullOffset]; + + if (count + offset != [_source numberOfItems]) + { + [_source removeAllItems]; + + if (offset) + [_source addItemWithTitle:[self _getNullPlaceholder]]; + + for (var i = 0; i < count; i++) + { + var item = [[CPMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:nil]; + [self _setValue:[aValue objectAtIndex:i] forItem:item withOptions:options]; + [_source addItem:item]; + } + } + else + { + for (var i = 0; i < count; i++) + { + [self _setValue:[aValue objectAtIndex:i] forItem:[_source itemAtIndex:i + offset] withOptions:options]; + } + } +} + +- (void)_setContentValuesIfNeeded:(CPArray)values +{ + var offset = [self _getInsertNullOffset]; + + if (![_source infoForBinding:CPContentValuesBinding]) + { + if (offset) + [[_source itemAtIndex:0] setTitle:[self _getNullPlaceholder]]; + + var count = [values count]; + + for (var i = 0; i < count; i++) + [[_source itemAtIndex:i + offset] setTitle:[[values objectAtIndex:i] description]]; + } +} + +- (void)_setValue:(id)aValue forItem:(CPMenuItem)aMenuItem withOptions:(CPDictionary)options +{ + var value = [self _transformValue:aValue withOptions:options]; + [aMenuItem setRepresentedObject:value]; +} + +- (id)_transformValue:(id)aValue withOptions:(CPDictionary)options +{ + return [super transformValue:aValue withOptions:options]; +} + +- (CPArray)_content +{ + return [_source valueForKeyPath:@"itemArray.representedObject"]; +} + +@end + +@implementation _CPPopUpButtonContentValuesBinder : _CPPopUpButtonContentBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [super _setContent:aValue]; +} + +- (void)_setValue:(id)aValue forItem:(CPMenuItem)aMenuItem withOptions:(CPDictionary)options +{ + if (aValue === [CPNull null]) + aValue = nil; + + var value = [self _transformValue:aValue withOptions:options]; + [aMenuItem setTitle:value]; +} + +- (CPArray)_content +{ + return [_source valueForKeyPath:@"itemArray.title"]; +} + +@end + +var binderForObject = {}; + +@implementation _CPPopUpButtonSelectionBinder : CPBinder +{ + CPString _selectionBinding @accessors; +} + +- (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource +{ + self = [super initWithBinding:aBinding name:aName to:aDestination keyPath:aKeyPath options:options from:aSource]; + + if (self) + { + binderForObject[[aSource UID]] = self; + _selectionBinding = aName; + } + + return self; +} + ++ (void)reverseSetValueForObject:(id)aSource +{ + var binder = binderForObject[[aSource UID]]; + [binder reverseSetValueFor:[binder _selectionBinding]]; +} + +- (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding +{ + [self setValue:aValue forBinding:aBinding]; +} + +- (CPInteger)_getInsertNullOffset +{ + var options = [[CPBinder infoForBinding:CPContentBinding forObject:_source] objectForKey:CPOptionsKey]; + + return [options objectForKey:CPInsertsNullPlaceholderBindingOption] ? 1 : 0; +} + +@end + +@implementation _CPPopUpButtonSelectedIndexBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [_source selectItemAtIndex:aValue + [self _getInsertNullOffset]]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [_source indexOfSelectedItem] - [self _getInsertNullOffset]; +} + +@end + +@implementation _CPPopUpButtonSelectedObjectBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + var index = [_source indexOfItemWithRepresentedObject:aValue], + offset = [self _getInsertNullOffset]; + + // If the content binding has the option CPNullPlaceholderBindingOption and the object to select is nil, select the first item (i.e., the placeholder). + // Other cases to consider: + // 1. no binding: + // 1.1 there's no item with a represented object matching the object to select. + // 1.2 the object to select is nil/CPNull + // 2. there's a binding: + // 2.1 there's a CPNullPlaceholderBindingOption: + // 2.1.1 there's no item with a represented object matching the object to select? + // 2.1.2 the object to select is nil/CPNull + // 2.2 there's no CPNullPlaceholderBindingOption: + // 2.2.1 there's no item with a represented object matching the object to select? + // 2.2.2 the object to select is nil/CPNull + // More cases? Behaviour that depends on array controller settings? + + if (offset === 1 && index === CPNotFound) + index = 0; + + [_source selectItemAtIndex:index]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [[_source selectedItem] representedObject]; +} + +@end + +@implementation _CPPopUpButtonSelectedTagBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [_source selectItemWithTag:aValue]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [[_source selectedItem] tag]; +} + +@end + +@implementation _CPPopUpButtonSelectedValueBinder : _CPPopUpButtonSelectionBinder +{ +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [_source selectItemWithTitle:aValue]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [_source titleOfSelectedItem]; +} + +@end + var DEPRECATED_CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey", DEPRECATED_CPPopUpButtonSelectedIndexKey = @"CPPopUpButtonSelectedIndexKey"; diff --git a/Tests/AppKit/CPPopUpButtonTest.j b/Tests/AppKit/CPPopUpButtonTest.j index 9711c0f0e..b31366a42 100644 --- a/Tests/AppKit/CPPopUpButtonTest.j +++ b/Tests/AppKit/CPPopUpButtonTest.j @@ -1,10 +1,12 @@ +@import @import @import @implementation CPPopUpButtonTest : OJTestCase { CPPopUpButton button @accessors; + id objects @accessors; } - (void)setUp @@ -205,6 +207,251 @@ [self assert:2 equals:[[self button] indexOfItemWithTitle:@"three"]]; } +- (void)testSimpleStringBindingArrayController +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = @"Martin", + malte = @"Malte", + johan = @"Johan", + menuObjects = [martin, malte, johan]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:nil]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testSimpleStringBindingNullPlaceholderOption +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = @"Martin", + malte = @"Malte", + johan = @"Johan", + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:insertsNullPlaceholderOption]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [[self button] selectItemWithTitle:@"Null Placeholder"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assertNull:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:3 equals:[[self button] indexOfSelectedItem]]; + + [testObject removeObjectForKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testSimpleObjectBindingArrayController +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:nil]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:nil]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testObjectBindingNullPlaceholderOption +{ + var arrayController = [[CPArrayController alloc] init], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [arrayController setContent:menuObjects]; + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:insertsNullPlaceholderOption]; + + [self assert:4 equals:[[self button] numberOfItems]]; + [self assert:0 equals:[[self button] indexOfItemWithTitle:@"Null Placeholder"]]; + [self assert:1 equals:[[self button] indexOfItemWithTitle:@"Martin"]]; + [self assert:2 equals:[[self button] indexOfItemWithTitle:@"Malte"]]; + [self assert:3 equals:[[self button] indexOfItemWithTitle:@"Johan"]]; + + [button unbind:CPContentValuesBinding]; + [button unbind:CPContentBinding]; + [button bind:CPContentValuesBinding toObject: arrayController withKeyPath:@"arrangedObjects.name" options:nil]; + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + + [self assert:3 equals:[[self button] numberOfItems]]; + [self assert:0 equals:[[self button] indexOfItemWithTitle:@"Martin"]]; + [self assert:1 equals:[[self button] indexOfItemWithTitle:@"Malte"]]; + [self assert:2 equals:[[self button] indexOfItemWithTitle:@"Johan"]]; +} + +- (void)testSelectedObjectBindingArrayController +{ + var arrayController = [[CPArrayController alloc] init], + objectController = [[CPObjectController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [testObject setObject:@"I'm a testObject" forKey:@"Who am I"]; + [arrayController setContent:menuObjects]; + [objectController setContent:testObject]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:insertsNullPlaceholderOption]; + [button bind:CPSelectedObjectBinding toObject:objectController withKeyPath:@"selection.xxx" options:nil]; + + [self assert:4 equals:[[self button] numberOfItems]]; + [self assert:0 equals:[[self button] indexOfItemWithTitle:@"Null Placeholder"]]; + [self assert:1 equals:[[self button] indexOfItemWithTitle:@"Martin"]]; + [self assert:2 equals:[[self button] indexOfItemWithTitle:@"Malte"]]; + [self assert:3 equals:[[self button] indexOfItemWithTitle:@"Johan"]]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:martin equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:malte equals:[testObject objectForKey:@"xxx"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:johan equals:[testObject objectForKey:@"xxx"]]; + + [[self button] selectItemWithTitle:@"Null Placeholder"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assertNull:[testObject objectForKey:@"xxx"]]; + + [testObject setObject:martin forKey:@"xxx"]; + [self assert:1 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:malte forKey:@"xxx"]; + [self assert:2 equals:[[self button] indexOfSelectedItem]]; + [testObject setObject:johan forKey:@"xxx"]; + [self assert:3 equals:[[self button] indexOfSelectedItem]]; + + [testObject removeObjectForKey:@"xxx"]; + [self assert:0 equals:[[self button] indexOfSelectedItem]]; +} + +- (void)testContentValuesWithValueTransformer +{ + var arrayController = [[CPArrayController alloc] init], + martin = [CPDictionary dictionaryWithJSObject:{@"name": @"Martin"}], + malte = [CPDictionary dictionaryWithJSObject:{@"name": @"Malte"}], + johan = [CPDictionary dictionaryWithJSObject:{@"name": @"Johan"}], + menuObjects = [martin, malte, johan]; + + [arrayController setContent:menuObjects]; + + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + var options = [CPDictionary dictionary]; + [options setObject:[ContentValuesTransformer new] forKey:CPValueTransformerBindingOption]; + [button bind:CPContentValuesBinding toObject:arrayController withKeyPath:@"arrangedObjects.name" options:options]; + + [self assert:@"Transformed-Malte" equals:[[[self button] itemAtIndex:1] title]]; +} + +- (void)testSelectedIndexBindingWithInsertsNullOption +{ + var arrayController = [[CPArrayController alloc] init], + testObject = [CPMutableDictionary dictionary], + martin = @"Martin", + malte = @"Malte", + johan = @"Johan", + menuObjects = [martin, malte, johan], + insertsNullPlaceholderOption = [CPDictionary dictionaryWithObjects:[YES, @"Null Placeholder"] forKeys:[CPInsertsNullPlaceholderBindingOption, CPNullPlaceholderBindingOption]]; + + [arrayController setContent:menuObjects]; + [button bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:insertsNullPlaceholderOption]; + [button bind:CPSelectedIndexBinding toObject:testObject withKeyPath:@"index" options:nil]; + + [[self button] selectItemWithTitle:@"Martin"]; + [[self button] sendAction:@selector(actionTest:) to:self]; // This has to be done to trigger the reverse set of the binding + [self assert:0 equals:[testObject objectForKey:@"index"]]; + [[self button] selectItemWithTitle:@"Malte"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:1 equals:[testObject objectForKey:@"index"]]; + [[self button] selectItemWithTitle:@"Johan"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:2 equals:[testObject objectForKey:@"index"]]; + + [[self button] selectItemWithTitle:@"Null Placeholder"]; + [[self button] sendAction:@selector(actionTest:) to:self]; + [self assert:-1 equals:[testObject objectForKey:@"index"]]; +} + +- (void)actionTest:(id)sender +{ +} + - (void)testRemoveItemAtIndex_ { button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 28.0) pullsDown:NO]; @@ -231,5 +478,16 @@ [self assert:1 equals:[button indexOfSelectedItem] message:"selection index reduced when a prior item is removed"]; } +@end + + +@implementation ContentValuesTransformer : CPValueTransformer +{ +} + +- (id)transformedValue:(id)aValue +{ + return "Transformed-" + aValue; +} @end diff --git a/Tests/Manual/CPPopUpButtonBindings/AppController.j b/Tests/Manual/CPPopUpButtonBindings/AppController.j new file mode 100644 index 000000000..f90914de8 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/AppController.j @@ -0,0 +1,56 @@ +/* + * AppController.j + * CPPopUpButtonBindings + * + * Created by You on December 2, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import + +@implementation AppController : CPObject +{ + @outlet CPWindow mainWindow; + @outlet CPPopUpButton tagPopUp; + + CPArray people @accessors; +} + ++ (void)initialize +{ + [CPValueTransformer setValueTransformer:[Transformer new] forName:@"Transformer"]; +} + +- (void)awakeFromCib +{ + var array = []; + [array addObject:[CPDictionary dictionaryWithObjectsAndKeys:@"John",@"name",@"Butcher",@"job",@"john@meat.com",@"email", 2, @"tag", @"Resources/Jakabos1.jpg", @"image"]]; + [array addObject:[CPDictionary dictionaryWithObjectsAndKeys:@"Alberto",@"name",@"Seller",@"job",@"alberto@gmail.com",@"email", 0, @"tag", @"Resources/Jakabos2.jpg", @"image"]]; + [array addObject:[CPDictionary dictionaryWithObjectsAndKeys:@"Barack",@"name",@"President",@"job",@"barack@whitehouse.gov",@"email", 1, @"tag", @"Resources/Jakabos4.jpg", @"image"]]; + + [self setPeople:array]; + +// Setup tags for the second popup + var items = [tagPopUp itemArray]; + [items enumerateObjectsUsingBlock:function(item, idx) + { + [item setTag:idx]; + [item setTitle:([item title] + " Tag:" + idx)]; + }]; + + [mainWindow setFullBridge:YES]; + +} + +@end + +@implementation Transformer : CPValueTransformer +{ +} + +- (id)transformedValue:(CPString)aValue +{ + return "transformed " + aValue; +} + +@end \ No newline at end of file diff --git a/Tests/Manual/CPPopUpButtonBindings/CPPopUpButton.j b/Tests/Manual/CPPopUpButtonBindings/CPPopUpButton.j new file mode 120000 index 000000000..1c4925ca5 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/CPPopUpButton.j @@ -0,0 +1 @@ +../../../AppKit/CPPopUpButton.j \ No newline at end of file diff --git a/Tests/Manual/CPPopUpButtonBindings/Info.plist b/Tests/Manual/CPPopUpButtonBindings/Info.plist new file mode 100644 index 000000000..1e7a1ead9 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Info.plist @@ -0,0 +1,12 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPPopUpButtonBindings + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPPopUpButtonBindings/Jakefile b/Tests/Manual/CPPopUpButtonBindings/Jakefile new file mode 100644 index 000000000..94c73db0d --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CPPopUpButtonBindings + * + * Created by You on November 2, 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 ("CPPopUpButtonBindings", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPPopUpButtonBindings.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPPopUpButtonBindings"); + task.setIdentifier("com.yourcompany.CPPopUpButtonBindings"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPPopUpButtonBindings"); + 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", ["CPPopUpButtonBindings"], 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", "CPPopUpButtonBindings", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPPopUpButtonBindings", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPPopUpButtonBindings")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPPopUpButtonBindings"), FILE.join("Build", "Deployment", "CPPopUpButtonBindings")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPPopUpButtonBindings")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPPopUpButtonBindings"), FILE.join("Build", "Desktop", "CPPopUpButtonBindings", "CPPopUpButtonBindings.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPPopUpButtonBindings", "CPPopUpButtonBindings.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPPopUpButtonBindings")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.cib b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.cib new file mode 100644 index 000000000..1ccc6430f --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.cib @@ -0,0 +1,7 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;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;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;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;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;53E;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;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;68E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;83E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;84E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;76E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;92E;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;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;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;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;96E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;97E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;101E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;102E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;104E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;105E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;106E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;108E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;110E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;112E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;113E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;114E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;115E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;116E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;101E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;117E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;118E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;96E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;97E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;101E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;102E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;122E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;123E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;76E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;125E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;126E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;127E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;50E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;129E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;130E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;132E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;133E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;51E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;135E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;106E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;137E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;117E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;139E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;140E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;109E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;102E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;83E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;144E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;145E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;146E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;147E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;148E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;47E;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;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;150E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;151E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;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;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;153E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;155E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;157E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;162E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;166E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;160E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;168E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;155E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;157E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;162E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;166E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;160E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;170E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;155E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;157E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;162E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;162E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;166E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;160E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;171E;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;52E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;172E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;174E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;175E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;178E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;179E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;55E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;56E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;180E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;180E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;180E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;180E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;162E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;162E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;162E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;181E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;149E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;149E;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;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;185E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;187E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;53E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;188E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;149E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;189E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;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;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;185E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;192E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;53E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;193E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;149E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;194E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;195E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;195E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;166E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;196E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;12;$agrid-colorD;K;6;CP$UIDd;3;197E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;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;198E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;199E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;149E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;161E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;162E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;162E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;162E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;162E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;162E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;200E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;197E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;149E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;201E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;203E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;65E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;204E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;205E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;206E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;207E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;209E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;210E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;214E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;215E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;206E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;207E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;216E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;217E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;218E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;219E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;180E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;207E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;220E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;221E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;222E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;180E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;223E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;224E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;225E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;211E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;201E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;162E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;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;64E;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;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;226E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;226E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;179E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;227E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;58E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;228E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;231E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;201E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;149E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;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;67E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;82E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;232E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;233E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;235E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;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;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;155E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;160E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;239E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;242E;K;16;$aimage-positionD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;160E;K;7;$aimageD;K;6;CP$UIDd;3;245E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;243E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;246E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;247E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;239E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;242E;K;16;$aimage-positionD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;160E;K;7;$aimageD;K;6;CP$UIDd;3;249E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;243E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;246E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;247E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;81E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;250E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;233E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;235E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;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;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;155E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;160E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;80E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;251E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;233E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;235E;K;6;$afontD;K;6;CP$UIDd;3;236E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;161E;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;3;201E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;155E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;149E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;162E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;160E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;149E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;252E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;253E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;201E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;149E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;230E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;6;$afontD;K;6;CP$UIDd;3;159E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;149E;K;11;$aalignmentD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;162E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;255E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;201E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;201E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;149E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;161E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;256E;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;77E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;257E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;162E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;201E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;162E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;201E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;162E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;162E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;162E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;201E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;201E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;261E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;45E;E;E;S;8;delegateS;10;emailLabelS;8;jobLabelS;10;mainWindowS;9;nameLabelS;21;ordersArrayControllerS;15;ordersTableViewS;8;tagPopUpS;4;add:S;7;remove:S;24;content: arrangedObjectsS;7;contentS;15;arrangedObjectsD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;24;CPInsertsNullPlaceholderD;K;6;CP$UIDd;3;162E;E;E;S;35;contentValues: arrangedObjects.nameS;13;contentValuesS;20;arrangedObjects.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;24;CPInsertsNullPlaceholderD;K;6;CP$UIDd;3;162E;E;E;S;29;selectedValue: selection.nameS;13;selectedValueS;14;selection.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;26;value: arrangedObjects.tagS;5;valueS;19;arrangedObjects.tagD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;26;selectedTag: selection.tagS;11;selectedTagS;13;selection.tagD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;3;162E;E;E;S;34;contentValues: arrangedObjects.jobS;19;arrangedObjects.jobD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;22;CPValueTransformerNameD;K;6;CP$UIDd;3;262E;E;E;S;29;selectedIndex: selectionIndexS;13;selectedIndexS;14;selectionIndexD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;20;contentArray: peopleS;12;contentArrayS;6;peopleD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;3;162E;E;E;S;20;value: selection.jobS;13;selection.jobD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;22;value: selection.emailS;15;selection.emailD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;21;value: selection.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;26;value: arrangedObjects.jobD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;28;value: arrangedObjects.emailS;21;arrangedObjects.emailD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;27;value: arrangedObjects.nameD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;25;{{335, 278}, {1074, 373}}d;1;7S;6;Windowd;1;0S;21;{{0, 0}, {1074, 373}}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;51E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;E;E;S;6;normalS;22;{{14, 295}, {448, 29}}S;19;{{0, 0}, {448, 29}}d;2;12S;9;textfieldS;19;bezeled+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;263E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;155E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;201E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;201E;E;d;1;2d;1;4T;S;0;d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;264E;E;S;5;EmailS;22;{{14, 327}, {448, 29}}S;3;JobS;22;{{14, 263}, {448, 29}}S;4;NameS;22;{{-1, -1}, {461, 206}}S;20;{{0, 0}, {461, 206}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;181E;E;E;d;2;20S;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;177E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;195E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;195E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;265E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;266E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;3;177E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;267E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;268E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;269E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;266E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;65E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;2;46E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;S;23;{{467, -39}, {15, 228}}S;19;{{0, 0}, {15, 228}}d;1;8d;11;-2147483648S;8;scrollerS;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9382716049382716S;21;{{0, -54}, {482, 15}}S;19;{{0, 0}, {482, 15}}S;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.9938144329896907S;20;{{0, 0}, {461, 189}}S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;165E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;271E;E;d;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;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;E;E;F;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;202E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;53E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;149E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;272E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;273E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;53E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;184E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;274E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;S;4;named;3;101d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;275E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;171E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;279E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;281E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;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;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;d;1;3D;K;10;$classnameS;16;CPSortDescriptorK;8;$classesA;S;16;CPSortDescriptorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;212E;K;22;CPSortDescriptorKeyKeyD;K;6;CP$UIDd;3;204E;K;28;CPSortDescriptorAscendingKeyD;K;6;CP$UIDd;3;162E;K;27;CPSortDescriptorSelectorKeyD;K;6;CP$UIDd;3;282E;E;S;5;emaild;3;150D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;283E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;167E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;284E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;285E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;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;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;S;3;jobd;3;106D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;286E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;169E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;287E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;288E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;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;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;d;2;92f;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;3;208E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;149E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;290E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;291E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;161E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;160E;K;11;$aalignmentD;K;6;CP$UIDd;3;149E;K;15;$acontent-insetD;K;6;CP$UIDd;3;292E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;164E;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;161E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;149E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;163E;E;S;19;{{0, 0}, {461, 23}}S;14;tableHeaderRowS;22;{{551, 23}, {285, 51}}S;19;{{0, 0}, {285, 51}}d;2;33S;110;Binding: CPSelectedIndexBinding +KeyPath: arrangedObjects.selectionIndex +ContentValues Transformer: TransformerS;22;{{852, 32}, {191, 24}}S;19;{{0, 0}, {191, 24}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;158E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;263E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;155E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;162E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;201E;E;d;2;-1S;22;{{423, 204}, {35, 24}}S;18;{{0, 0}, {35, 24}}d;2;36S;6;buttonS;17;selected+borderedd;1;1D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;244E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;293E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;294E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;295E;E;S;15;Gradient Buttond;2;14S;22;{{389, 204}, {35, 24}}D;K;6;$classD;K;6;CP$UIDd;3;244E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;293E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;296E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;297E;E;S;23;{{852, 107}, {191, 24}}S;23;{{852, 184}, {191, 24}}S;22;{{551, 93}, {285, 51}}S;70;Binding: CPSelectedTagBinding +KeyPath: selection.tag +Transformer: NoneS;23;{{551, 161}, {285, 51}}S;73;Binding: CPSelectedValueBinding +KeyPath: selection.name +Transformer: NoneS;13;AppControllerS;12;CPDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;TransformerS;17;Arial, sans-serifD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;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;165E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;298E;E;S;21;{{0, 189}, {461, 17}}S;19;{{0, 0}, {461, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;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;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;243E;E;E;S;22;{{467, 183}, {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;301E;E;E;S;12;columnHeaderS;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;303E;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;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;S;8;compare:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;305E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;307E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;309E;E;E;S;3;TagD;K;6;$classD;K;6;CP$UIDd;3;278E;K;4;nameD;K;6;CP$UIDd;3;302E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;304E;E;S;7;CPImageS;13;CPAddTemplateD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;311E;E;E;S;16;CPRemoveTemplateD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;312E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;243E;E;E;f;3;0.5D;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;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;209E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;209E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;S;4;fontD;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;216E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;216E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;220E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;220E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;300E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;224E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;270E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;224E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;3;280E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;314E;E;d;2;18S;22;{"width":0,"height":0}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.xib b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.xib new file mode 100644 index 000000000..24b533bab --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/Resources/MainMenu.xib @@ -0,0 +1,1434 @@ + + + + 1070 + 11E53 + 2541 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2541 + + + NSArrayController + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{335, 377}, {1074, 373}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 276 + + + + 2304 + + + + 256 + {461, 189} + + + + YES + + + 256 + {461, 17} + + + + + + + + -2147483392 + {{467, 0}, {16, 17}} + + + + + + + name + 101 + 40 + 1000 + + 75628096 + 2048 + Name + + 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 + + + name + YES + compare: + + + + email + 150 + 40 + 1000 + + 75628096 + 2048 + Email + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + job + 106 + 10 + 1000 + + 75628096 + 2048 + Job + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 92 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + Tag + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -566231040 + + + 4 + 15 + 0 + YES + 0 + 1 + + + {{0, 17}, {461, 189}} + + + + + + 4 + + + + -2147483392 + {{467, 17}, {15, 228}} + + + + + _doScroller: + 0.93827160493827155 + + + + -2147483392 + {{0, 245}, {482, 15}} + + + + 1 + + _doScroller: + 0.99381443298969074 + + + + 2304 + + + + {461, 17} + + + + + + 4 + + + + {{-1, 168}, {461, 206}} + + + + 133680 + + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 292 + {{20, 84}, {440, 22}} + + + + YES + + -1804468671 + 272630784 + + + Name + + YES + + 6 + System + textBackgroundColor + + + + 6 + System + textColor + + + + + + + 292 + {{20, 52}, {440, 22}} + + + + YES + + -1804468671 + 272630784 + + + Email + + YES + + + + + + + 292 + {{20, 20}, {440, 22}} + + + + YES + + -1804468671 + 272630784 + + + Job + + YES + + + + + + + 265 + {{851, 315}, {197, 26}} + + + + YES + + -2076049856 + 2048 + + + 109199615 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + -1 + 1 + YES + YES + 2 + + + + + 265 + {{851, 240}, {197, 26}} + + + + _NS:9 + YES + + -2076049856 + 2048 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + -1 + 1 + YES + YES + 2 + + + + + 265 + {{851, 163}, {197, 26}} + + + + _NS:9 + YES + + -2076049856 + 2048 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + -1 + 1 + YES + YES + 2 + + + + + 265 + {{551, 299}, {285, 51}} + + + + _NS:1549 + YES + + 67108864 + 272629760 + QmluZGluZzogQ1BTZWxlY3RlZEluZGV4QmluZGluZwpLZXlQYXRoOiBhcnJhbmdlZE9iamVjdHMuc2Vs +ZWN0aW9uSW5kZXgKQ29udGVudFZhbHVlcyBUcmFuc2Zvcm1lcjogVHJhbnNmb3JtZXI + + _NS:1549 + + + 6 + System + controlColor + + + + + + + + 268 + {{425, 145}, {35, 23}} + + + + _NS:22 + YES + + -2080374784 + 134217728 + Gradient Button + + _NS:22 + + -2033958912 + 162 + + NSImage + NSAddTemplate + + + + 400 + 75 + + + + + 268 + {{391, 145}, {35, 23}} + + + + _NS:22 + YES + + -2080374784 + 134217728 + Gradient Button + + _NS:22 + + -2033958912 + 162 + + NSImage + NSRemoveTemplate + + + + 400 + 75 + + + + + 265 + {{551, 229}, {285, 51}} + + + + _NS:1549 + YES + + 67108864 + 272629760 + QmluZGluZzogQ1BTZWxlY3RlZFRhZ0JpbmRpbmcKS2V5UGF0aDogc2VsZWN0aW9uLnRhZwpUcmFuc2Zv +cm1lcjogTm9uZQ + + _NS:1549 + + + + + + + + 265 + {{551, 161}, {285, 51}} + + + + _NS:1549 + YES + + 67108864 + 272629760 + QmluZGluZzogQ1BTZWxlY3RlZFZhbHVlQmluZGluZwpLZXlQYXRoOiBzZWxlY3Rpb24ubmFtZQpUcmFu +c2Zvcm1lcjogTm9uZQ + + _NS:1549 + + + + + + + {1074, 373} + + + + + {{0, 0}, {1680, 1028}} + {10000000000000, 10000000000000} + YES + + + AppController + + + + name + email + job + tag + + CPDictionary + YES + + YES + YES + YES + YES + + + + + + + delegate + + + + 451 + + + + mainWindow + + + + 464 + + + + ordersTableView + + + + 476 + + + + nameLabel + + + + 488 + + + + emailLabel + + + + 489 + + + + jobLabel + + + + 490 + + + + ordersArrayController + + + + 493 + + + + tagPopUp + + + + 599 + + + + value: arrangedObjects.name + + + + + + value: arrangedObjects.name + value + arrangedObjects.name + 2 + + + 575 + + + + value: arrangedObjects.email + + + + + + value: arrangedObjects.email + value + arrangedObjects.email + 2 + + + 576 + + + + value: arrangedObjects.job + + + + + + value: arrangedObjects.job + value + arrangedObjects.job + 2 + + + 577 + + + + value: selection.name + + + + + + value: selection.name + value + selection.name + 2 + + + 581 + + + + value: selection.email + + + + + + value: selection.email + value + selection.email + 2 + + + 582 + + + + value: selection.job + + + + + + value: selection.job + value + selection.job + 2 + + + 583 + + + + contentArray: people + + + + + + contentArray: people + contentArray + people + + NSValidatesImmediately + + + 2 + + + 578 + + + + add: + + + + 624 + + + + remove: + + + + 625 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + 2 + + + 534 + + + + contentValues: arrangedObjects.name + + + + + + contentValues: arrangedObjects.name + contentValues + arrangedObjects.name + + NSValueTransformerName + Transformer + + + 2 + + + 618 + + + + selectedIndex: selectionIndex + + + + + + selectedIndex: selectionIndex + selectedIndex + selectionIndex + + 2 + + + 619 + + + + contentValues: arrangedObjects.job + + + + + + contentValues: arrangedObjects.job + contentValues + arrangedObjects.job + 2 + + + 630 + + + + selectedTag: selection.tag + + + + + + selectedTag: selection.tag + selectedTag + selection.tag + + NSValidatesImmediately + + + 2 + + + 631 + + + + value: arrangedObjects.tag + + + + + + value: arrangedObjects.tag + value + arrangedObjects.tag + 2 + + + 598 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + + NSInsertsNullPlaceholder + + + 2 + + + 632 + + + + contentValues: arrangedObjects.name + + + + + + contentValues: arrangedObjects.name + contentValues + arrangedObjects.name + + NSInsertsNullPlaceholder + + + + 2 + + + 633 + + + + selectedValue: selection.name + + + + + + selectedValue: selection.name + selectedValue + selection.name + + 2 + + + 634 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + + + 450 + + + + + 467 + + + + + + + + + + + 468 + + + + + 469 + + + + + 470 + + + + + + + + + + + 471 + + + + + 472 + + + + + + + + 473 + + + + + + + + 474 + + + + + 475 + + + + + 480 + + + + + + + + 481 + + + + + 482 + + + + + + + + 483 + + + + + 484 + + + + + + + + 485 + + + + + 486 + + + + + + + + 487 + + + + + 492 + + + + + 528 + + + + + + + + 529 + + + + + + + + 530 + + + + + + 584 + + + + + + + + 585 + + + + + + + + 586 + + + + + + 595 + + + + + + + + 596 + + + + + 600 + + + + + + + + 601 + + + + + + + + 602 + + + + + + 611 + + + + + + + + 612 + + + + + 620 + + + + + + + + 621 + + + + + 622 + + + + + + + + 623 + + + + + 626 + + + + + + + + 627 + + + + + 628 + + + + + + + + 629 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{246, 335}, {728, 373}} + + 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 + + + + + + 634 + + + + + AppController + NSObject + + NSWindow + NSPopUpButton + + + + mainWindow + NSWindow + + + tagPopUp + NSPopUpButton + + + + IBProjectSource + ./Classes/AppController.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {8, 8} + {8, 8} + + + diff --git a/Tests/Manual/CPPopUpButtonBindings/Resources/spinner.gif b/Tests/Manual/CPPopUpButtonBindings/Resources/spinner.gif new file mode 100644 index 000000000..06dbc2bc2 Binary files /dev/null and b/Tests/Manual/CPPopUpButtonBindings/Resources/spinner.gif differ diff --git a/Tests/Manual/CPPopUpButtonBindings/index-debug.html b/Tests/Manual/CPPopUpButtonBindings/index-debug.html new file mode 100644 index 000000000..1d257d406 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/index-debug.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + CPPopUpButtonBindings + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPPopUpButtonBindings/index.html b/Tests/Manual/CPPopUpButtonBindings/index.html new file mode 100644 index 000000000..2114299d9 --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/index.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + CPPopUpButtonBindings + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPPopUpButtonBindings/main.j b/Tests/Manual/CPPopUpButtonBindings/main.j new file mode 100644 index 000000000..28679968f --- /dev/null +++ b/Tests/Manual/CPPopUpButtonBindings/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPPopUpButtonBindings + * + * Created by You on November 2, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +}