From 1acb130be1163910631325ebbcfe48bd267cb825 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sat, 17 Jan 2009 22:09:37 -0800 Subject: [PATCH 001/124] Add preliminary support for Key Value Bindings to Cappuccino. --- AppKit/CPKeyValueBinding.j | 425 +++++++++++++++++++++++++++ Tests/AppKit/CPKeyValueBindingTest.j | 85 ++++++ 2 files changed, 510 insertions(+) create mode 100644 AppKit/CPKeyValueBinding.j create mode 100644 Tests/AppKit/CPKeyValueBindingTest.j diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j new file mode 100644 index 000000000..edcc09980 --- /dev/null +++ b/AppKit/CPKeyValueBinding.j @@ -0,0 +1,425 @@ +/* + * CPKeyValueBinding.j + * AppKit + * + * Created by Ross Boucher 1/13/09 + * Copyright 280 North, Inc. + * + * Adapted from GNUStep + * Released under the LGPL. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +var exposedBindingsMap = [CPDictionary new], + bindingsMap = [CPDictionary new]; + +var CPBindingOperationAnd = 0, + CPBindingOperationOr = 1; + +@implementation CPKeyValueBinding : CPObject +{ + CPDictionary _info; + id _source; +} + ++ (void)exposeBinding:(CPString)aBinding forClass:(Class)aClass +{ + var bindings = [exposedBindingsMap objectForKey:aClass]; + + if (!bindings) + { + bindings = []; + [exposedBindingsMap setObject:bindings forKey:aClass]; + } + + bindings.push(aBinding); +} + ++ (CPArray)exposedBindingsForClass:(Class)aClass +{ + return [[exposedBindingsMap objectForKey:aClass] copy]; +} + ++ (CPKeyValueBinding)getBinding:(CPString)aBinding forObject:(id)anObject +{ + return [[bindingsMap objectForKey:anObject] objectForKey:aBinding]; +} + ++ (CPDictionary)infoForBinding:(CPString)aBinding forObject:(id)anObject +{ + var theBinding = [self getBinding:aBinding forObject:anObject]; + + if (theBinding) + return theBinding._info; + + return nil; +} + ++ (void)unbind:(CPString)aBinding forObject:(id)anObject +{ + var bindings = [bindingsMap objectForKey:anObject]; + + if (!bindings) + return; + + var theBinding = [bindings objectForKey:aBinding]; + + if (!theBinding) + return; + + var infoDictionary = theBinding._info, + observedObject = [infoDictionary objectForKey:CPObservedObjectKey], + keyPath = [infoDictionary objectForKey:CPObservedKeyPathKey]; + + [observedObject removeObserver:theBinding forKeyPath:keyPath]; + [bindings removeObjectForKey:aBinding]; +} + ++ (void)unbindAllForObject:(id)anObject +{ + var bindings = [bindingsMap objectForKey:anObject]; + if (!bindings) + return; + + var allKeys = [bindings allKeys], + count = allKeys.length; + + while (count--) + [anObject unbind:[bindings objectForKey:allKeys[count]]] + + [bindingsMap removeObjectForKey:anObject]; +} + +- (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource +{ + self = [super init]; + + _source = aSource; + _info = [CPDictionary dictionaryWithObjects:[aDestination, aKeyPath] forKeys:[CPObservedObjectKey, CPObservedKeyPathKey]]; + + if (options) + [_info setObject:options forKey:CPOptionsKey]; + + [aDestination addObserver:self forKeyPath:aKeyPath options:CPKeyValueObservingOptionNew context:aBinding]; + + var bindings = [bindingsMap objectForKey:_source]; + if (!bindings) + { + bindings = [CPDictionary new]; + [bindingsMap setObject:bindings forKey:_source]; + } + + [bindings setObject:self forKey:aName]; + [self setValueFor:aBinding]; + + return self; +} + +- (void)setValueFor:(CPString)aBinding +{ + var destination = [_info objectForKey:CPObservedObjectKey], + keyPath = [_info objectForKey:CPObservedKeyPathKey], + options = [_info objectForKey:CPOptionsKey], + newValue = [destination valueForKeyPath:keyPath]; + + newValue = [self transformValue:newValue withOptions:options]; + [_source setValue:newValue forKey:aBinding]; +} + +- (void)reverseSetValueFor:(CPString)aBinding +{ + var destination = [_info objectForKey:CPObservedObjectKey], + keyPath = [_info objectForKey:CPObservedKeyPathKey], + options = [_info objectForKey:CPOptionsKey], + newValue = [_source valueForKeyPath:aBinding]; + + newValue = [self reverseTransformValue:newValue withOptions:options]; + [destination setValue:newValue forKeyPath:keyPath]; +} + +- (void)observeValueForKeyPath:(CPString)aKeyPath ofObject:(id)anObject change:(CPDictionary)changes context:(id)context +{ + if (!changes) + return; + + var options = [_info objectForKey:CPOptionsKey], + newValue = [changes objectForKey:CPKeyValueChangeNewKey]; + + newValue = [self transformValue:newValue withOptions:options]; + + if (![newValue isEqual:[_source valueForKey:context]]) + [_source setValue:newValue forKey:context]; +} + +- (id)transformValue:(id)aValue withOptions:(CPDictionary)options +{ + var valueTransformerName, + valueTransformer, + placeholder; + + switch (aValue || @"") + { + case CPMultipleValuesMarker: return [options objectForKey:CPMultipleValuesPlaceholderBindingOption] || @"Multiple Values"; + + case CPNoSelectionMarker: return [options objectForKey:CPNoSelectionPlaceholderBindingOption] || @"No Selection"; + + case CPNotApplicableMarker: if ([options objectForKey:CPRaisesForNotApplicableKeysBindingOption]) + [CPException raise:CPGenericException reason:@"can't transform non applicable key on: "+_source+" value: "+aValue]; + + return [options objectForKey:CPNotApplicablePlaceholderBindingOption] || @"Not Applicable"; + + case @"": return [options objectForKey:CPNullPlaceholderBindingOption] || @""; + } + + var valueTransformerName = [options objectForKey:CPValueTransformerNameBindingOption], + valueTransformer; + + if (valueTransformerName) + valueTransformer = [CPValueTransformer valueTransformerForName:valueTransformerName]; + else + valueTransformer = [options objectForKey:CPValueTransformerBindingOption]; + + if (valueTransformer) + aValue = [valueTransformer transformedValue:aValue]; + + return aValue; +} + +- (id)reverseTransformValue: (id)value withOptions: (NSDictionary *)options +{ + var valueTransformerName = [options objectForKey:CPValueTransformerNameBindingOption], + valueTransformer; + + if (valueTransformerName) + valueTransformer = [CPValueTransformer valueTransformerForName:valueTransformerName]; + else + valueTransformer = [options objectForKey:CPValueTransformerBindingOption]; + + if (valueTransformer && [[valueTransformer class] allowsReverseTransformation]) + aValue = [valueTransformer transformedValue:aValue]; + + return aValue; +} + +@end + +@implementation CPObject (KeyValueBindingCreation) + ++ (void)exposeBinding:(CPString)aBinding +{ + [CPKeyValueBinding exposeBinding:aBinding forClass:[self class]]; +} + +- (CPArray)exposedBindings +{ + var exposedBindings = [], + theClass = [self class]; + + + while (theClass && theClass !== [CPObject class]) + { + var temp = [CPKeyValueBinding exposedBindingsForClass:theClass]; + + if (temp) + [exposedBindings addObjectsFromArray:temp]; + + theClass = [theClass superclass]; + } + + return exposedBindings; +} + +- (Class)valueClassForBinding:(CPString)binding +{ + return [CPString class]; +} + +- (void)bind:(CPString)aBinding toObject:(id)anObject withKeyPath:(CPString)aKeyPath options:(CPDictionary)options +{ + if (!anObject || !aKeyPath) + return CPLog.error("Invalid object or path on "+self+" for "+aBinding); + + if (![[self exposedBindings] containsObject:aBinding]) + return CPLog.error("No binding exposed on "+self+" for "+aBinding); + + [self unbind:aBinding]; + [[CPKeyValueBinding alloc] initWithBinding:aBinding name:aBinding to:anObject keyPath:aKeyPath options:options from:self]; +} + +- (CPDictionary)infoForBinding:(CPString)aBinding +{ + return [CPKeyValueBinding infoForBinding:aBinding forObject:self]; +} + +- (void)unbind:(CPString)aBinding +{ + [CPKeyValueBinding unbind:aBinding forObject:self]; +} + +@end + +@implementation _CPKeyValueOrBinding : CPKeyValueBinding +{ +} + +- (void)setValueFor:(CPString)aBinding +{ + var bindings = [bindingsMap valueForKey:_source]; + + if (!bindings) + return; + + [_source setValue:resolveMultipleValues(aBinding, bindings, CPBindingOperationOr) forKey:aBinding]; +} + +- (void)observeValueForKeyPath:(CPString)aKeyPath ofObject:(id)anObject change:(CPDictionary)changes context:(id)context +{ + [self setValueFor:context]; +} + +@end + +@implementation _CPKeyValueAndBinding : CPKeyValueBinding +{ +} + +- (void)setValueFor:(CPString)aBinding +{ + var bindings = [bindingsMap objectForKey:_source]; + + if (!bindings) + return; + + [_source setValue:resolveMultipleValues(aBinding, bindings, CPBindingOperationAnd) forKey:aBinding]; +} + +- (void)observeValueForKeyPath:(CPString)aKeyPath ofObject:(id)anObejct change:(CPDictionary)changes context:(id)context +{ + [self setValueFor:context]; +} + +@end + +var resolveMultipleValues = function resolveMultipleValues(/*CPString*/key, /*CPDictionary*/bindings, /*GSBindingOperationKind*/operation) +{ + var bindingName = key, + theBinding, + count = 1; + + while (theBinding = [bindings objectForKey:bindingName]) + { + var infoDictionary = theBinding._info, + object = [infoDictionary objectForKey:CPObservedObjectKey], + keyPath = [infoDictionary objectForKey:CPObservedKeyPathKey], + options = [infoDictionary objectForKey:CPOptionsKey]; + + var value = [theBinding transformValue:[object valueForKeyPath:keyPath] withOptions:options]; + + if (value == operation) + return operation; + + bindingName = [CPString stringWithFormat:@"%@%i", key, ++count]; + } + + return !operation; +} + +var invokeAction = function invokeAction(/*CPString*/targetKey, /*CPString*/argumentKey, /*CPDictionary*/bindings) +{ + var theBinding = [bindings objectForKey:targetKey], + infoDictionary = theBinding._info, + + object = [infoDictionary objectForKey:CPObservedObjectKey], + keyPath = [infoDictionary objectForKey:CPObservedKeyPathKey], + options = [infoDictionary objectForKey:CPOptionsKey], + + target = [object valueForKeyPath:keyPath], + selector = [options objectForKey:CPSelectorNameBindingOption]; + + if (!target || !selector) + return; + + var invocation = [CPInvocation invocationWithMethodSignature:[target methodSignatureForSelector:selector]]; + [invocation setSelector:selector]; + + var bindingName = argumentKey + count = 1; + + while (theBinding = [bindings objectForKey:bindingName]) + { + infoDictionary = theBinding._info; + + keyPath = [infoDictionary objectForKey:CPObserverKeyPathKey]; + object = [[infoDictionary objectForKey:CPObservedObjectKey] valueForKeyPath:keyPath]; + + if (object) + [invocation setArgument:object atIndex:++count]; + + bindingName = [CPString stringWithFormat:@"%@%i", argumentKey, count]; + } + + [invocation invoke]; +} + +// Keys in options dictionary + +// Keys in dictionary returned by infoForBinding +CPObservedObjectKey = @"CPObservedObjectKey"; +CPObservedKeyPathKey = @"CPObservedKeyPathKey"; +CPOptionsKey = @"CPOptionsKey"; + +// special markers +CPMultipleValuesMarker = @"CPMultipleValuesMarker"; +CPNoSelectionMarker = @"CPNoSelectionMarker"; +CPNotApplicableMarker = @"CPNotApplicableMarker"; + +// Binding name constants +CPAlignmentBinding = @"CPAlignmentBinding"; +CPEditableBinding = @"CPEditableBinding"; +CPEnabledBinding = @"CPEnabledBinding"; +CPFontBinding = @"CPFontBinding"; +CPHiddenBinding = @"CPHiddenBinding"; +CPSelectedIndexBinding = @"CPSelectedIndexBinding"; +CPTextColorBinding = @"CPTextColorBinding"; +CPToolTipBinding = @"CPToolTipBinding"; +CPValueBinding = @"objectValue"; + +//Binding options constants +CPAllowsEditingMultipleValuesSelectionBindingOption = @"CPAllowsEditingMultipleValuesSelectionBindingOption"; +CPAllowsNullArgumentBindingOption = @"CPAllowsNullArgumentBindingOption"; +CPConditionallySetsEditableBindingOption = @"CPConditionallySetsEditableBindingOption"; +CPConditionallySetsEnabledBindingOption = @"CPConditionallySetsEnabledBindingOption"; +CPConditionallySetsHiddenBindingOption = @"CPConditionallySetsHiddenBindingOption"; +CPContinuouslyUpdatesValueBindingOption = @"CPContinuouslyUpdatesValueBindingOption"; +CPCreatesSortDescriptorBindingOption = @"CPCreatesSortDescriptorBindingOption"; +CPDeletesObjectsOnRemoveBindingsOption = @"CPDeletesObjectsOnRemoveBindingsOption"; +CPDisplayNameBindingOption = @"CPDisplayNameBindingOption"; +CPDisplayPatternBindingOption = @"CPDisplayPatternBindingOption"; +CPHandlesContentAsCompoundValueBindingOption = @"CPHandlesContentAsCompoundValueBindingOption"; +CPInsertsNullPlaceholderBindingOption = @"CPInsertsNullPlaceholderBindingOption"; +CPInvokesSeparatelyWithArrayObjectsBindingOption = @"CPInvokesSeparatelyWithArrayObjectsBindingOption"; +CPMultipleValuesPlaceholderBindingOption = @"CPMultipleValuesPlaceholderBindingOption"; +CPNoSelectionPlaceholderBindingOption = @"CPNoSelectionPlaceholderBindingOption"; +CPNotApplicablePlaceholderBindingOption = @"CPNotApplicablePlaceholderBindingOption"; +CPNullPlaceholderBindingOption = @"CPNullPlaceholderBindingOption"; +CPPredicateFormatBindingOption = @"CPPredicateFormatBindingOption"; +CPRaisesForNotApplicableKeysBindingOption = @"CPRaisesForNotApplicableKeysBindingOption"; +CPSelectorNameBindingOption = @"CPSelectorNameBindingOption"; +CPSelectsAllWhenSettingContentBindingOption = @"CPSelectsAllWhenSettingContentBindingOption"; +CPValidatesImmediatelyBindingOption = @"CPValidatesImmediatelyBindingOption"; +CPValueTransformerNameBindingOption = @"CPValueTransformerNameBindingOption"; +CPValueTransformerBindingOption = @"CPValueTransformerBindingOption"; + diff --git a/Tests/AppKit/CPKeyValueBindingTest.j b/Tests/AppKit/CPKeyValueBindingTest.j new file mode 100644 index 000000000..dc66c5af8 --- /dev/null +++ b/Tests/AppKit/CPKeyValueBindingTest.j @@ -0,0 +1,85 @@ + +@import "CPKeyValueBinding.j" +@import + +@implementation CPKeyValueBindingTest : OJTestCase +{ + id FOO; +} + +- (void)testExposingBindings +{ + [BindingTester exposeBinding:@"foo"]; + [BindingTester exposeBinding:@"bar"]; + [CPObject exposeBinding:@"zoo"]; + + [self assertTrue:[[[BindingTester new] exposedBindings] isEqual:["foo", "bar", "zoo"]]]; +} + +- (void)testBindTo +{ + var binder = [BindingTester new]; + binder.cheese = "orange"; + + [CPKeyValueBindingTest exposeBinding:@"FOO"]; + + [self bind:"FOO" toObject:binder withKeyPath:"cheese" options:nil]; + + [binder setCheese:@"banana"]; + + [self assertTrue:[self valueForKey:@"FOO"]==="banana" message:"Bound value should have been updated to banana, was "+FOO]; +} + +- (void)testControl +{ + FOO = "bingo"; + + var binder = [BindingTester new]; + binder.cheese = "yellow"; + + var control = [[CPTextField alloc] init]; + [control setStringValue:@"brown"]; + + [CPControl exposeBinding:CPValueBinding]; + [[self class] exposeBinding:@"FOO"]; + + //[control addObserver:self forKeyPath:CPValueBinding options:nil context:"testControl"]; + + [control bind:CPValueBinding toObject:self withKeyPath:@"FOO" options:nil]; + [self bind:@"FOO" toObject:control withKeyPath:CPValueBinding options:nil]; + + [control setStringValue:@"banana"]; + [control setStringValue:@"grapefruit"]; + + [self setValue:@"BAR" forKey:@"FOO"]; + + [self assertTrue: FOO == [control stringValue] message: "should be equal, were: "+FOO+"and: "+[control stringValue]]; + + [control setStringValue:@"pina colada"]; + + [self assertTrue: FOO == [control stringValue] message: "should be equal, were: "+FOO+"and: "+[control stringValue]]; +} + +- (void)observeValueForKeyPath:(CPString)aKeyPath ofObject:(id)anObject change:(CPDictionary)changes context:(id)aContext +{ + CPLog(@"here: "+aKeyPath+" value: "+[anObject valueForKey:aKeyPath]); +} + +@end + +@implementation BindingTester : CPObject +{ + id cheese; +} + +- (void)setCheese:(id)aCheese +{ + cheese = aCheese; +} + +- (id)cheese +{ + return cheese; +} + +@end From b239053810e9191edcd322f84bfcaf66bf732a07 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 22 Jan 2009 20:01:04 -0800 Subject: [PATCH 002/124] First take at CPController, CPObjectController. --- Foundation/CPController.j | 80 +++++ Foundation/CPObjectController.j | 500 ++++++++++++++++++++++++++++++++ 2 files changed, 580 insertions(+) create mode 100644 Foundation/CPController.j create mode 100644 Foundation/CPObjectController.j diff --git a/Foundation/CPController.j b/Foundation/CPController.j new file mode 100644 index 000000000..2271f60b7 --- /dev/null +++ b/Foundation/CPController.j @@ -0,0 +1,80 @@ +// +// CPController.j +// AppKit +// +// Created by Ross Boucher 1/15/09 +// Copyright 280 North +// +// Adapted from GNUStep +// Copyright (C) 2007 Free Software Foundation, Inc +// Released under the LGPL. +// + +var CPControllerDeclaredKeysKey = @"CPControllerDeclaredKeysKey"; + +@implementation CPController : CPObject +{ + CPArray _editors; + CPArray _declaredKeys; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + _editors = []; + _declaredKeys = []; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_declaredKeys forKey:CPControllerDeclaredKeysKey]; +} + +- (id)initWithCoder:(CPCoder)aDecoder +{ + self = [self init]; + + if (self) + _declaredKeys = [aDecoder decodeObjectForKey:CPControllerDeclaredKeysKey] || _declaredKeys; + + return nil; +} + +- (BOOL)isEditing +{ + return [_editors count] > 0; +} + +- (BOOL)commitEditing +{ + for (var i=0, count=_editors.length; i Date: Mon, 26 Jan 2009 17:58:35 -0800 Subject: [PATCH 003/124] In progress work on bindings. --- AppKit/CPController.j | 82 +++++ AppKit/CPKeyValueBinding.j | 27 +- AppKit/CPObjectController.j | 547 +++++++++++++++++++++++++++++++ Foundation/CPArray+KVO.j | 5 +- Foundation/CPKeyValueObserving.j | 2 +- 5 files changed, 648 insertions(+), 15 deletions(-) create mode 100644 AppKit/CPController.j create mode 100644 AppKit/CPObjectController.j diff --git a/AppKit/CPController.j b/AppKit/CPController.j new file mode 100644 index 000000000..a12428d33 --- /dev/null +++ b/AppKit/CPController.j @@ -0,0 +1,82 @@ +// +// CPController.j +// AppKit +// +// Created by Ross Boucher 1/15/09 +// Copyright 280 North +// +// Adapted from GNUStep +// Copyright (C) 2007 Free Software Foundation, Inc +// Released under the LGPL. +// + +@import "CPKeyValueBinding.j" + +var CPControllerDeclaredKeysKey = @"CPControllerDeclaredKeysKey"; + +@implementation CPController : CPObject +{ + CPArray _editors; + CPArray _declaredKeys; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + _editors = []; + _declaredKeys = []; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_declaredKeys forKey:CPControllerDeclaredKeysKey]; +} + +- (id)initWithCoder:(CPCoder)aDecoder +{ + self = [self init]; + + if (self) + _declaredKeys = [aDecoder decodeObjectForKey:CPControllerDeclaredKeysKey] || _declaredKeys; + + return nil; +} + +- (BOOL)isEditing +{ + return [_editors count] > 0; +} + +- (BOOL)commitEditing +{ + for (var i=0, count=_editors.length; i"; +} + +- (id)initWithObjects:(CPArray)objects count:(unsigned)count +{CPLog("initing with objects: "+objects); + if (self = [super init]) + { + _array = [CPArray arrayWithObjects:objects count:count]; + _observationProxies = []; + } + + return self; +} + +-(void)addObserver:(id)anObserver forKeyPath:(CPString)aKeyPath options:(CPKeyValueObservingOptions)options context:(id)context +{ + if (aKeyPath.indexOf("@") === 0) + { + var proxy = [[_CPObservationProxy alloc] initWithKeyPath:aKeyPath observer:anObserver object:self]; + + proxy._options = options; + proxy._context = context; + + [_observationProxies addObject:proxy]; + + var dotIndex = aKeyPath.indexOf("."), + remaining = aKeyPath.substring(dotIndex+1), + indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; + + [_array addObserver:proxy toObjectsAtIndexes:indexes forKeyPath:remaining options:options context:context]; + } + else + { + var indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; + [_array addObserver:anObserver toObjectsAtIndexes:indexes forKeyPath:aKeyPath options:options context:context]; + } +} + +- (void)removeObserver:(id)anObserver forKeyPath:(CPString)aKeyPath +{ + if (aKeyPath.indexOf("@") === 0) + { + var proxy = [[_CPObservationProxy alloc] initWithKeyPath:aKeyPath observer:anObsever object:self], + index = [_observationProxies indexOfObject:proxy]; + + proxy = [_observationProxies objectAtIndex:index]; + + var dotIndex = aKeyPath.indexOf("."), + remaining = aKeyPath.substring(dotIndex+1), + indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; + + [_array removeObserver:proxy fromObjectsAtIndexes:indexes forKeyPath:remaining]; + } + else + { + var indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; + [_array removeObserver:observer fromObjectsAtIndexes:indexes forKeyPath:aKeyPath]; + } +} + +- (void)insertObject:(id)anObject atIndex:(unsigned)anIndex +{ + for (var i=0, count=[_observationProxies count]; i Date: Mon, 26 Jan 2009 18:00:01 -0800 Subject: [PATCH 004/124] Various fixes. --- AppKit/CPControl.j | 16 + Foundation/CPController.j | 80 ----- Foundation/CPObjectController.j | 500 -------------------------------- 3 files changed, 16 insertions(+), 580 deletions(-) delete mode 100644 Foundation/CPController.j delete mode 100644 Foundation/CPObjectController.j diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 23fbf5b1e..6d38c32dc 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -23,6 +23,7 @@ @import "CPFont.j" @import "CPShadow.j" @import "CPView.j" +@import "CPKeyValueBinding.j" #include "Platform/Platform.h" @@ -118,6 +119,19 @@ var CPControlBlackColor = [CPColor blackColor]; CPString _currentBackgroundColorName; } ++ (void)initialize +{ + [self exposeBinding:"value"]; +} + ++ (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey +{ + if (aKey === @"value") + return NO; + + return YES; +} + - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; @@ -478,7 +492,9 @@ var CPControlBlackColor = [CPColor blackColor]; */ - (void)setObjectValue:(id)anObject { + [self willChangeValueForKey:@"value"]; _value = anObject; + [self didChangeValueForKey:@"value"]; } /*! diff --git a/Foundation/CPController.j b/Foundation/CPController.j deleted file mode 100644 index 2271f60b7..000000000 --- a/Foundation/CPController.j +++ /dev/null @@ -1,80 +0,0 @@ -// -// CPController.j -// AppKit -// -// Created by Ross Boucher 1/15/09 -// Copyright 280 North -// -// Adapted from GNUStep -// Copyright (C) 2007 Free Software Foundation, Inc -// Released under the LGPL. -// - -var CPControllerDeclaredKeysKey = @"CPControllerDeclaredKeysKey"; - -@implementation CPController : CPObject -{ - CPArray _editors; - CPArray _declaredKeys; -} - -- (id)init -{ - self = [super init]; - - if (self) - { - _editors = []; - _declaredKeys = []; - } - - return self; -} - -- (void)encodeWithCoder:(CPCoder)aCoder -{ - [aCoder encodeObject:_declaredKeys forKey:CPControllerDeclaredKeysKey]; -} - -- (id)initWithCoder:(CPCoder)aDecoder -{ - self = [self init]; - - if (self) - _declaredKeys = [aDecoder decodeObjectForKey:CPControllerDeclaredKeysKey] || _declaredKeys; - - return nil; -} - -- (BOOL)isEditing -{ - return [_editors count] > 0; -} - -- (BOOL)commitEditing -{ - for (var i=0, count=_editors.length; i Date: Tue, 27 Jan 2009 19:38:25 -0800 Subject: [PATCH 005/124] Some test apps for bindings. --- Tests/AppKit/SimpleBindings1/AppController.j | 99 +++++++++++++++++++ .../AppKit/SimpleBindings1/Frameworks/AppKit | 1 + .../SimpleBindings1/Frameworks/Debug/AppKit | 1 + .../Frameworks/Debug/Foundation | 1 + .../Frameworks/Debug/Objective-J | 1 + .../SimpleBindings1/Frameworks/Foundation | 1 + .../SimpleBindings1/Frameworks/Objective-J | 1 + Tests/AppKit/SimpleBindings1/Info.plist | 12 +++ Tests/AppKit/SimpleBindings1/index-debug.html | 35 +++++++ Tests/AppKit/SimpleBindings1/index.html | 36 +++++++ Tests/AppKit/SimpleBindings1/main.j | 17 ++++ Tests/AppKit/SimpleBindings2/AppController.j | 88 +++++++++++++++++ .../AppKit/SimpleBindings2/Frameworks/AppKit | 1 + .../SimpleBindings2/Frameworks/Debug/AppKit | 1 + .../Frameworks/Debug/Foundation | 1 + .../Frameworks/Debug/Objective-J | 1 + .../SimpleBindings2/Frameworks/Foundation | 1 + .../SimpleBindings2/Frameworks/Objective-J | 1 + Tests/AppKit/SimpleBindings2/Info.plist | 12 +++ Tests/AppKit/SimpleBindings2/index-debug.html | 35 +++++++ Tests/AppKit/SimpleBindings2/index.html | 36 +++++++ Tests/AppKit/SimpleBindings2/main.j | 17 ++++ 22 files changed, 399 insertions(+) create mode 100644 Tests/AppKit/SimpleBindings1/AppController.j create mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/AppKit create mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit create mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation create mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J create mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Foundation create mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Objective-J create mode 100644 Tests/AppKit/SimpleBindings1/Info.plist create mode 100644 Tests/AppKit/SimpleBindings1/index-debug.html create mode 100644 Tests/AppKit/SimpleBindings1/index.html create mode 100644 Tests/AppKit/SimpleBindings1/main.j create mode 100644 Tests/AppKit/SimpleBindings2/AppController.j create mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/AppKit create mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit create mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation create mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J create mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Foundation create mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Objective-J create mode 100644 Tests/AppKit/SimpleBindings2/Info.plist create mode 100644 Tests/AppKit/SimpleBindings2/index-debug.html create mode 100644 Tests/AppKit/SimpleBindings2/index.html create mode 100644 Tests/AppKit/SimpleBindings2/main.j diff --git a/Tests/AppKit/SimpleBindings1/AppController.j b/Tests/AppKit/SimpleBindings1/AppController.j new file mode 100644 index 000000000..5164c1bb3 --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/AppController.j @@ -0,0 +1,99 @@ +/* + * AppController.j + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +@import + + +@implementation AppController : CPObject +{ + CPSlider slider; + CPTextField textField; + + Track track @accessors; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView]; + + textField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; + + [textField setAlignment:CPCenterTextAlignment]; + [textField setStringValue:@"Hello World!"]; + [textField setFont:[CPFont boldSystemFontOfSize:24.0]]; + + [textField sizeToFit]; + + [textField setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; + [textField setFrameOrigin:CGPointMake((CGRectGetWidth([contentView bounds]) - CGRectGetWidth([textField frame])) / 2.0, (CGRectGetHeight([contentView bounds]) - CGRectGetHeight([textField frame])) / 2.0)]; + + [contentView addSubview:textField]; + + var textFrame = [textField frame]; + + + slider = [[CPSlider alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame), CGRectGetMaxY(textFrame)+10, CGRectGetWidth(textFrame), 12)]; + + [slider setTarget:self]; + [slider setAction:@selector(updateVolumeFrom:)]; + [slider setContinuous:NO]; + + [contentView addSubview:slider]; + + var button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame)+25, CGRectGetMaxY(textFrame)+40, 100, 18)]; + + [button setTitle:@"mute"]; + + [button setTarget:self]; + [button setAction:@selector(muteTrack:)]; + + [contentView addSubview:button]; + + track = [[Track alloc] init]; + [track setVolume:5.0]; + + + [theWindow orderFront:self]; + + + // Uncomment the following line to turn on the standard menu bar. + //[CPMenu setMenuBarVisible:YES]; +} + +- (void)updateVolumeFrom:(id)sender +{ + var newVolume = [sender floatValue]; + [track setVolume:newVolume]; + + [self updateUserInterface]; +} + + +- (void)updateUserInterface +{ + [slider setFloatValue:[track volume]]; + [textField setStringValue:sprintf(@"%.4f", [track volume])]; +} + + +- (IBAction)muteTrack:(id)sender +{ + [track setVolume:0.0]; + [self updateUserInterface]; +} + +@end + + +@implementation Track : CPObject +{ + float volume @accessors; + CPString title @accessors; +} + +@end diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/AppKit b/Tests/AppKit/SimpleBindings1/Frameworks/AppKit new file mode 120000 index 000000000..fe0746a80 --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/Frameworks/AppKit @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit new file mode 120000 index 000000000..418997121 --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation new file mode 120000 index 000000000..f9d8a3215 --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J new file mode 120000 index 000000000..7c88c9522 --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Foundation b/Tests/AppKit/SimpleBindings1/Frameworks/Foundation new file mode 120000 index 000000000..2698043eb --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/Frameworks/Foundation @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Objective-J b/Tests/AppKit/SimpleBindings1/Frameworks/Objective-J new file mode 120000 index 000000000..c46828f8c --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/Frameworks/Objective-J @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Info.plist b/Tests/AppKit/SimpleBindings1/Info.plist new file mode 100644 index 000000000..92ab8b53d --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + Hello World + CPPrincipalClass + CPApplication + + diff --git a/Tests/AppKit/SimpleBindings1/index-debug.html b/Tests/AppKit/SimpleBindings1/index-debug.html new file mode 100644 index 000000000..392b37a8f --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/index-debug.html @@ -0,0 +1,35 @@ + + + + + + + Hello World + + + + + + + + +
+
+ +
+
+ + + diff --git a/Tests/AppKit/SimpleBindings1/index.html b/Tests/AppKit/SimpleBindings1/index.html new file mode 100644 index 000000000..fbcf5a9bc --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/index.html @@ -0,0 +1,36 @@ + + + + + + + Hello World + + + + + + + + + +
+
+ +
+
+ + + + diff --git a/Tests/AppKit/SimpleBindings1/main.j b/Tests/AppKit/SimpleBindings1/main.j new file mode 100644 index 000000000..b82bd4e3c --- /dev/null +++ b/Tests/AppKit/SimpleBindings1/main.j @@ -0,0 +1,17 @@ +/* + * main.j + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/AppKit/SimpleBindings2/AppController.j b/Tests/AppKit/SimpleBindings2/AppController.j new file mode 100644 index 000000000..bec89c029 --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/AppController.j @@ -0,0 +1,88 @@ +/* + * AppController.j + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +CPLogRegister(CPLogConsole); + +@import +@import + +@implementation AppController : CPObject +{ + CPSlider slider; + CPTextField textField; + + Track track @accessors; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView]; + + textField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; + + [textField setAlignment:CPCenterTextAlignment]; + [textField setStringValue:@"Hello World!"]; + [textField setFont:[CPFont boldSystemFontOfSize:24.0]]; + + [textField sizeToFit]; + + [textField setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; + [textField setFrameOrigin:CGPointMake((CGRectGetWidth([contentView bounds]) - CGRectGetWidth([textField frame])) / 2.0, (CGRectGetHeight([contentView bounds]) - CGRectGetHeight([textField frame])) / 2.0)]; + + [contentView addSubview:textField]; + + var textFrame = [textField frame]; + + slider = [[CPSlider alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame), CGRectGetMaxY(textFrame)+10, CGRectGetWidth(textFrame), 12)]; + + [slider setContinuous:NO]; + + [contentView addSubview:slider]; + + var button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame)+25, CGRectGetMaxY(textFrame)+40, 100, 18)]; + + [button setTitle:@"mute"]; + + [contentView addSubview:button]; + + + track = [[Track alloc] init]; + [track setVolume:5.0]; + + + //SET UP AN OBJECT CONTROLLER + + var controller = [[CPObjectController alloc] init]; + [controller bind:@"contentObject" toObject:self withKeyPath:@"track" options:nil]; + + [textField bind:@"value" toObject:controller withKeyPath:@"selection.volume" options:nil]; + [slider bind:@"value" toObject:controller withKeyPath:@"selection.volume" options:nil]; + + + + [theWindow orderFront:self]; + + // Uncomment the following line to turn on the standard menu bar. + //[CPMenu setMenuBarVisible:YES]; +} + +- (IBAction)muteTrack:(id)sender +{ + [track setVolume:0.0]; +} + +@end + + +@implementation Track : CPObject +{ + float volume @accessors; + CPString title @accessors; +} + +@end diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/AppKit b/Tests/AppKit/SimpleBindings2/Frameworks/AppKit new file mode 120000 index 000000000..fe0746a80 --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/Frameworks/AppKit @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit new file mode 120000 index 000000000..418997121 --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation new file mode 120000 index 000000000..f9d8a3215 --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J new file mode 120000 index 000000000..7c88c9522 --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Foundation b/Tests/AppKit/SimpleBindings2/Frameworks/Foundation new file mode 120000 index 000000000..2698043eb --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/Frameworks/Foundation @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Objective-J b/Tests/AppKit/SimpleBindings2/Frameworks/Objective-J new file mode 120000 index 000000000..c46828f8c --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/Frameworks/Objective-J @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Info.plist b/Tests/AppKit/SimpleBindings2/Info.plist new file mode 100644 index 000000000..92ab8b53d --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + Hello World + CPPrincipalClass + CPApplication + + diff --git a/Tests/AppKit/SimpleBindings2/index-debug.html b/Tests/AppKit/SimpleBindings2/index-debug.html new file mode 100644 index 000000000..392b37a8f --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/index-debug.html @@ -0,0 +1,35 @@ + + + + + + + Hello World + + + + + + + + +
+
+ +
+
+ + + diff --git a/Tests/AppKit/SimpleBindings2/index.html b/Tests/AppKit/SimpleBindings2/index.html new file mode 100644 index 000000000..fbcf5a9bc --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/index.html @@ -0,0 +1,36 @@ + + + + + + + Hello World + + + + + + + + + +
+
+ +
+
+ + + + diff --git a/Tests/AppKit/SimpleBindings2/main.j b/Tests/AppKit/SimpleBindings2/main.j new file mode 100644 index 000000000..b82bd4e3c --- /dev/null +++ b/Tests/AppKit/SimpleBindings2/main.j @@ -0,0 +1,17 @@ +/* + * main.j + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From c028425f14ab4618a862e945aba9385824729f86 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 9 Feb 2009 17:35:25 -0800 Subject: [PATCH 006/124] More bindings fixes. --- AppKit/CPControl.j | 26 +------ AppKit/CPKeyValueBinding.j | 41 +++++------ AppKit/CPObjectController.j | 72 +++++++++----------- AppKit/CPSlider.j | 4 +- Foundation/CPKeyValueObserving.j | 3 +- Tests/AppKit/SimpleBindings2/AppController.j | 6 +- 6 files changed, 61 insertions(+), 91 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 6d38c32dc..3e4ca4b50 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -121,15 +121,7 @@ var CPControlBlackColor = [CPColor blackColor]; + (void)initialize { - [self exposeBinding:"value"]; -} - -+ (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey -{ - if (aKey === @"value") - return NO; - - return YES; + [self exposeBinding:"objectValue", "value"]; } - (id)initWithFrame:(CGRect)aFrame @@ -492,9 +484,7 @@ var CPControlBlackColor = [CPColor blackColor]; */ - (void)setObjectValue:(id)anObject { - [self willChangeValueForKey:@"value"]; _value = anObject; - [self didChangeValueForKey:@"value"]; } /*! @@ -688,20 +678,6 @@ var CPControlBlackColor = [CPColor blackColor]; [[CPNotificationCenter defaultCenter] postNotificationName:CPControlTextDidEndEditingNotification object:self userInfo:[CPDictionary dictionaryWithObject:[note object] forKey:"CPFieldEditor"]]; } -/* -Ð doubleValue -Ð setDoubleValue: -Ð intValue -Ð setIntValue: -Ð objectValue -Ð setObjectValue: -Ð stringValue -Ð setStringValue: -Ð setNeedsDisplay -Ð attributedStringValue -Ð setAttributedStringValue: -*/ - @end var CPControlValueKey = "CPControlValueKey", diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 85df49326..81aae1d82 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -106,27 +106,31 @@ var CPBindingOperationAnd = 0, - (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource { self = [super init]; - CPLog("creating CPKeyValueBinding with binding: "+aBinding+" name: "+aName+" to: "+aDestination+" keyPath: "+aKeyPath+" from: "+aSource); - _source = aSource; - _info = [CPDictionary dictionaryWithObjects:[aDestination, aKeyPath] forKeys:[CPObservedObjectKey, CPObservedKeyPathKey]]; - if (options) - [_info setObject:options forKey:CPOptionsKey]; - - //_replacementKeyPathForBinding - - [aDestination addObserver:self forKeyPath:aKeyPath options:CPKeyValueObservingOptionNew context:aBinding]; - - var bindings = [bindingsMap objectForKey:[_source hash]]; - if (!bindings) + if (self) { - bindings = [CPDictionary new]; - [bindingsMap setObject:bindings forKey:[_source hash]]; + CPLog("creating CPKeyValueBinding with binding: "+aBinding+" name: "+aName+" to: "+aDestination+" keyPath: "+aKeyPath+" from: "+aSource); + _source = aSource; + _info = [CPDictionary dictionaryWithObjects:[aDestination, aKeyPath] forKeys:[CPObservedObjectKey, CPObservedKeyPathKey]]; + + if (options) + [_info setObject:options forKey:CPOptionsKey]; + + //_replacementKeyPathForBinding + + [aDestination addObserver:self forKeyPath:aKeyPath options:CPKeyValueObservingOptionNew context:aBinding]; + + var bindings = [bindingsMap objectForKey:[_source hash]]; + if (!bindings) + { + bindings = [CPDictionary new]; + [bindingsMap setObject:bindings forKey:[_source hash]]; + } + + [bindings setObject:self forKey:aName]; + [self setValueFor:aBinding]; } - [bindings setObject:self forKey:aName]; - [self setValueFor:aBinding]; - return self; } @@ -138,7 +142,6 @@ var CPBindingOperationAnd = 0, newValue = [destination valueForKeyPath:keyPath]; newValue = [self transformValue:newValue withOptions:options]; - CPLog.trace("Setting value for: "+aBinding+" value: "+newValue); [_source setValue:newValue forKey:aBinding]; } @@ -157,7 +160,7 @@ var CPBindingOperationAnd = 0, { if (!changes) return; - + CPLog.fatal("HERE"); var options = [_info objectForKey:CPOptionsKey], newValue = [changes objectForKey:CPKeyValueChangeNewKey]; diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index 47980737e..b9884b63c 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -79,7 +79,6 @@ - (CPArray)selectedObjects { - CPLog("returning: "+_contentObject); return [[_CPObservableArray alloc] initWithObjects:[_contentObject] count:1]; } @@ -110,6 +109,7 @@ - (void)_selectionWillChange { + [_selection controllerWillChange]; [self willChangeValueForKey:@"selection"]; } @@ -117,7 +117,7 @@ { if (_selection === undefined || _selection === nil) _selection = [[CPControllerSelectionProxy alloc] initWithController:self]; -CPLog("selection did change: "+_selection); + [_selection controllerDidChange]; [self didChangeValueForKey:@"selection"]; } @@ -262,7 +262,6 @@ CPLog("selection did change: "+_selection); @implementation _CPObservableArray : CPMutableArray { - CPArray _array; CPArray _observationProxies; } @@ -280,26 +279,15 @@ CPLog("selection did change: "+_selection); return a; } -- (id)objectAtIndex:(unsigned)anIndex -{ - return [_array objectAtIndex:anIndex]; -} - -- (unsigned)count -{ - return [_array count]; -} - - (CPString)description { - return "<_CPObservableArray: "+[_array description]+" >"; + return "<_CPObservableArray: "+[super description]+" >"; } - (id)initWithObjects:(CPArray)objects count:(unsigned)count -{CPLog("initing with objects: "+objects); - if (self = [super init]) +{ + if (self = [super initWithObjects:objects count:count]) { - _array = [CPArray arrayWithObjects:objects count:count]; _observationProxies = []; } @@ -319,14 +307,14 @@ CPLog("selection did change: "+_selection); var dotIndex = aKeyPath.indexOf("."), remaining = aKeyPath.substring(dotIndex+1), - indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; + indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self count])]; - [_array addObserver:proxy toObjectsAtIndexes:indexes forKeyPath:remaining options:options context:context]; + [self addObserver:proxy toObjectsAtIndexes:indexes forKeyPath:remaining options:options context:context]; } else { - var indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; - [_array addObserver:anObserver toObjectsAtIndexes:indexes forKeyPath:aKeyPath options:options context:context]; + var indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self count])]; + [self addObserver:anObserver toObjectsAtIndexes:indexes forKeyPath:aKeyPath options:options context:context]; } } @@ -341,14 +329,14 @@ CPLog("selection did change: "+_selection); var dotIndex = aKeyPath.indexOf("."), remaining = aKeyPath.substring(dotIndex+1), - indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; + indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self count])]; - [_array removeObserver:proxy fromObjectsAtIndexes:indexes forKeyPath:remaining]; + [self removeObserver:proxy fromObjectsAtIndexes:indexes forKeyPath:remaining]; } else { - var indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [_array count])]; - [_array removeObserver:observer fromObjectsAtIndexes:indexes forKeyPath:aKeyPath]; + var indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self count])]; + [self removeObserver:observer fromObjectsAtIndexes:indexes forKeyPath:aKeyPath]; } } @@ -369,7 +357,7 @@ CPLog("selection did change: "+_selection); [self didChangeValueForKey:keyPath]; } - [_array insertObject:anObject atIndex:anIndex]; + [self insertObject:anObject atIndex:anIndex]; } - (void)removeObjectAtIndex:(unsigned)anIndex @@ -389,7 +377,7 @@ CPLog("selection did change: "+_selection); [self didChangeValueForKey:keyPath]; } - [_array removeObjectAtIndex:anIndex]; + [self removeObjectAtIndex:anIndex]; } - (void)addObject:(id)anObject @@ -404,7 +392,7 @@ CPLog("selection did change: "+_selection); - (void)replaceObjectAtIndex:(unsigned)anIndex withObject:(id)anObject { - var currentObject = [_array objectAtIndex:anIndex]; + var currentObject = [self objectAtIndex:anIndex]; for (var i=0, count=[_observationProxies count]; i Date: Mon, 16 Feb 2009 00:37:50 -0800 Subject: [PATCH 007/124] CPObjectController now works, as do bindings and CPControls. --- AppKit/CPArrayController.j | 428 +++++++++++++++++++ AppKit/CPControl.j | 18 +- AppKit/CPKeyValueBinding.j | 11 +- Foundation/CPArray.j | 29 +- Foundation/CPValueTransformer.j | 176 ++++++++ Tests/AppKit/SimpleBindings2/AppController.j | 13 +- 6 files changed, 662 insertions(+), 13 deletions(-) create mode 100644 AppKit/CPArrayController.j create mode 100644 Foundation/CPValueTransformer.j diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j new file mode 100644 index 000000000..2dfda77f2 --- /dev/null +++ b/AppKit/CPArrayController.j @@ -0,0 +1,428 @@ + +/* + * CPArrayController.j + * AppKit + * + * Adapted from Cocotron, by Johannes Fortmann + * + * Created by Ross Boucher. + * Copyright 2009, 280 North, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import +@import + + +@implementation CPArrayController : CPObjectController +{ + BOOL _avoidsEmptySelection; + BOOL _clearsFilterPredicateOnInsertion; + BOOL _filterRestrictsInsertion; + BOOL _preservesSelection; + BOOL _selectsInsertedObjects; + BOOL _alwaysUsesMultipleValuesMarker; + + id _selectionIndexes; + id _sortDescriptors; + id _filterPredicate; + id _arrangedObjects; +} + ++ (CPSet)keyPathsForValuesAffectingValueForContentArray +{ + return [CPSet setWithObjects:"content"]; +} + ++ (CPSet)keyPathsForValuesAffectingValueForSelection +{ + return [CPSet setWithObjects:"content", "contentArray", "selectionIndexes"]; +} + ++ (CPSet)keyPathsForValuesAffectingValueForSelectionIndex +{ + return [CPSet setWithObjects:"content", "contentArray", "selectionIndexes", "selection"]; +} + ++ (CPSet)keyPathsForValuesAffectingValueForSelectedObjects +{ + return [CPSet setWithObjects:"content", "contentArray", "selectionIndexes", "selection"]; +} + ++ (CPSet)keyPathsForValuesAffectingValueForCanRemove +{ + return [CPSet setWithObjects:"selectionIndexes"]; +} + ++ (CPSet)keyPathsForValuesAffectingValueForCanSelectNext +{ + return [CPSet setWithObjects:"selectionIndexes"]; +} + ++ (CPSet)keyPathsForValuesAffectingValueForCanSelectPrevious +{ + return [CPSet setWithObjects:"selectionIndexes"]; +} + +-(void)prepareContent +{ + [self _setContentArray:[[self newObject]]]; +} + +- (BOOL)preservesSelection +{ + return _preservesSelection; +} + +- (void)setPreservesSelection:(BOOL)value +{ + _preservesSelection = value; +} + +- (void)setContent:(id)value +{ + if(![value isKindOfClass:[CPArray class]]) + value = [value]; + + var oldSelection = nil, + oldSelectionIndexes = [[self selectionIndexes] copy]; + + if ([self preservesSelection]) + oldSelection = [self selectedObjects]; + + //FIXME: mutable copy? + [super setContent:[value copy]]; + + if(_clearsFilterPredicateOnInsertion) + [self setFilterPredicate:nil]; + + [self rearrangeObjects]; + + if (oldSelection) + [self setSelectedObjects:oldSelection]; + else + [self setSelectionIndexes:oldSelectionIndexes]; +} + +- (void)_setContentArray:(id)value +{ + [self setContent:value]; +} + +- (id)contentArray +{ + return [self content]; +} + +- (CPArray)arrangeObjects:(CPArray)objects +{ + var sortedObjects = objects; + + if ([self filterPredicate]) + sortedObjects = [sortedObjects filteredArrayUsingPredicate:[self filterPredicate]]; + if ([self sortDescriptors]) + sortedObjects = [sortedObjects sortedArrayUsingDescriptors:[self sortDescriptors]]; + + return sortedObjects; +} + +- (void)rearrangeObjects +{ + [self _setArrangedObjects:[self arrangeObjects:[self contentArray]]]; +} + +- (void)_setArrangedObjects:(id)value +{ + if (_arrangedObjects === value) + return; + + _arrangedObjects = [[_CPObservableArray alloc] initWithArray:value]; +} + +- (id)arrangedObjects +{ + return _arrangedObjects; +} + + +- (CPArray)sortDescriptors +{ + return _sortDescriptors; +} + +- (void)setSortDescriptors:(CPArray)value +{ + if (_sortDescriptors === value) + return; + + _sortDescriptors = [value copy]; + [self rearrangeObjects]; +} + +- (CPPredicate)filterPredicate +{ + return _filterPredicate; +} + +- (void)setFilterPredicate:(CPPredicate)value +{ + if (_filterPredicate === value) + return; + + _filterPredicate = value; + [self rearrangeObjects]; +} + +- (BOOL)alwaysUsesMultipleValuesMarker +{ + return _alwaysUsesMultipleValuesMarker; +} + +//Selection + +- (unsigned)selectionIndex +{ + return [_selectionIndexes firstIndex]; +} + +- (BOOL)setSelectionIndex:(unsigned)index +{ + return [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; +} + +- (CPIndexSet)selectionIndexes +{ + return _selectionIndexes; +} + +- (BOOL)setSelectionIndexes:(CPIndexSet)indexes +{ + if ([_selectionIndexes isEqual:indexes]) + return NO; + + if(![indexes count] && _avoidsEmptySelection && [[self arrangedObjects] count]) + indexes = [CPIndexSet indexSetWithIndex:0]; + + [indexes removeIndexesInRange:CPMakeRange([[self arrangedObjects] count]+1, CPNotFound)]; + + [self willChangeValueForKey:@"selectionIndexes"]; + [self _selectionWillChange]; + + _selectionIndexes = [indexes copy]; + + [self _selectionDidChange]; + [self didChangeValueForKey:@"selectionIndexes"]; + + return YES; +} + +- (CPArray)selectedObjects +{ + var objects = [_CPObservableArray arrayWithArray:[[self arrangedObjects] objectsAtIndexes:[self selectionIndexes]]]; + + return objects || [_CPObservableArray array]; +} + +- (BOOL)setSelectedObjects:(CPArray)objects +{ + var set = [CPIndexSet indexSet], + count = [objects count], + arrangedObjects = [self arrangedObjects]; + + for (var i=0; i 0 +} + +-(BOOL)canSelectNext +{ + return [[self selectionIndexes] firstIndex] < [[self arrangedObjects] count] -1; +} + +-(void)selectNext:(id)sender +{ + var index = [[self selectionIndexes] firstIndex] + 1 || 0; + + if (index < [[self arrangedObjects] count]) + [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; +} + +-(void)selectPrevious:(id)sender +{ + var index = [[self selectionIndexes] firstIndex] - 1 || [[self arrangedObjects] count] - 1; + + if (index >= 0) + [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; +} + +//Add/Remove + +- (void)addObject:(id)object +{ + if (![self canAdd]) + return; + + [self willChangeValueForKey:@"content"]; + [_content addObject:object]; + [self didChangeValueForKey:@"content"]; + + if (_clearsFilterPredicateOnInsertion) + [self setFilterPredicate:nil]; + + if ([_filterPredicate evaluateWithObject:object]) + { + [self willChangeValueForKey:@"selectionIndexes"]; + var pos = [_arrangedObjects insertObject:object inArraySortedByDescriptors:_sortDescriptors]; + + [_selectionIndexes shiftIndexesStartingAtIndex:pos by:1]; + [self didChangeValueForKey:@"selectionIndexes"]; + } +} + + +- (void)removeObject:(id)object +{ + if (![self canRemove]) + return; + + [self willChangeValueForKey:@"content"]; + [_content removeObject:object]; + [self didChangeValueForKey:@"content"]; + + if ([_filterPredicate evaluateWithObject:object]) + { + [self willChangeValueForKey:@"selectionIndexes"]; + var pos = [_arrangedObjects indexOfObject:object]; + + [_selectionIndexes shiftIndexesStartingAtIndex:pos by:-1]; + [self didChangeValueForKey:@"selectionIndexes"]; + } +} + +-(void)add:(id)sender +{ + if(![self canAdd]) + return; + + [self insert:sender]; +} + +- (void)insert:(id)sender +{ + if(![self canInsert]) + return; + + var newObject = [self automaticallyPreparesContent] ? [self newObject] : [self _defaultNewObject]; + + [self addObject:newObject]; +} + +- (void)remove:(id)sender +{ + [self removeObjects:[[self contentArray] objectsAtIndexes:[self selectionIndexes]]]; +} + +- (void)removeObjectsAtArrangedObjectIndexes:(CPIndexSet)indexes +{ + [self _removeObjects:[[self contentArray] objectsAtIndexes:indexes]]; +} + + +- (void)addObjects:(CPArray)objects +{ + if(![self canAdd]) + return; + + var contentArray = [self contentArray], + count = [objects count]; + + for (var i=0; iCPNotFound if it was not found. */ - (unsigned)indexOfObject:(id)anObject sortedByFunction:(Function)aFunction context:(id)aContext +{ + var result = [self _indexOfObject:anObject sortedByFunction:aFunction context:aContext]; + return result >= 0 ? result : CPNotFound; +} + +- (unsigned)_indexOfObject:(id)anObject sortedByFunction:(Function)aFunction context:(id)aContext { if (!aFunction || anObject === undefined) return CPNotFound; @@ -483,7 +489,7 @@ } } - return CPNotFound; + return -mid-1; } /*! @@ -510,6 +516,27 @@ }]; } +- (unsigned)insertObject:(id)anObject inArraySortedByDescriptors:(CPArray)descriptors +{ + var index = [self _insertObject:anObject sortedByFunction:function(lhs, rhs) + { + var i = 0, + count = [descriptors count], + result = CPOrderedSame; + + while (i < count) + if((result = [descriptors[i++] compareObject:lhs withObject:rhs]) != CPOrderedSame) + return result; + + return result; + } context:nil]; + + if (index < 0) + index = -result-1; + + [self insertObject:anObject atIndex:index]; +} + /*! Returns the last object in the array. If the array is empty, returns nil/ */ diff --git a/Foundation/CPValueTransformer.j b/Foundation/CPValueTransformer.j new file mode 100644 index 000000000..29bfcf6f8 --- /dev/null +++ b/Foundation/CPValueTransformer.j @@ -0,0 +1,176 @@ +/* + * CPKeyValueBinding.j + * Foundation + * + * Created by Ross Boucher 2/15/09 + * Copyright 280 North, Inc. + * + * Adapted from GNUStep + * Released under the LGPL. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import +@import + + +var transformerMap = [CPDictionary dictionary]; + + +@implementation CPValueTransformer : CPObject +{ + +} + ++ (void)setValueTransformer:(CPValueTransformer)transformer forName:(CPString)name +{ + [transformerMap setObject:transformer forKey:name]; +} + ++ (CPValueTransformer)valueTransformerForName:(CPString)name +{ + return [transformerMap objectForKey:name]; +} + ++ (CPArray)valueTransformerNames +{ + return [transformerMap allKeys]; +} + ++ (BOOL)allowsReverseTransformation +{ + return NO; +} + ++ (Class)transformedValueClass +{ + return [CPObject class]; +} + +- (id)reverseTransformedValue:(id)value +{ + if ([[self class] allowsReverseTransformation]) + { + [CPException raise:CPInvalidArgumentException reason:(self+" is not reversible.")]; + } + + return [self transformedValue:value]; +} + +- (id)transformedValue:(id)value +{ + return nil; +} + +@end + +// builtin transformers + +@implementation CPNegateBooleanTransformer + ++ (BOOL)allowsReverseTransformation +{ + return YES; +} + ++ (Class)transformedValueClass +{ + return [CPNumber class]; +} + +- (id)reverseTransformedValue:(id)value +{ + return ![value boolValue]; +} + +- (id)transformedValue:(id)value +{ + return ![value boolValue]; +} + +@end + +@implementation CPIsNilTransformer + ++ (BOOL)allowsReverseTransformation +{ + return NO; +} + ++ (Class)transformedValueClass +{ + return [CPNumber class]; +} + +- (id)transformedValue:(id)value +{ + return value === nil || value === undefined; +} + +@end + +@implementation CPIsNotNilTransformer + ++ (BOOL)allowsReverseTransformation +{ + return NO; +} + ++ (Class)transformedValueClass +{ + return [CPNumber class]; +} + +- (id)transformedValue:(id)value +{ + return value !== nil && value !== undefined; +} + +@end + +@implementation CPUnarchiveFromDataTransformer + ++ (BOOL)allowsReverseTransformation +{ + return YES; +} + ++ (Class)transformedValueClass +{ + return [CPData class]; +} + +- (id)reverseTransformedValue:(id)value +{ + return [CPKeyedArchiver archivedDataWithRootObject:value]; +} + +- (id)transformedValue:(id)value +{ + return [CPKeyedUnarchiver unarchiveObjectWithData:value]; +} + +@end + +CPNegateBooleanTransformerName = @"CPNegateBooleanTransformerName"; +CPIsNilTransformerName = @"CPIsNilTransformerName"; +CPIsNotNilTransformerName = @"CPIsNotNilTransformerName"; +CPUnarchiveFromDataTransformerName = @"CPUnarchiveFromDataTransformerName"; + +[CPValueTransformer setValueTransformer:[CPNegateBooleanTransformer new] forName:CPNegateBooleanTransformerName]; +[CPValueTransformer setValueTransformer:[CPIsNilTransformer new] forName:CPIsNilTransformerName]; +[CPValueTransformer setValueTransformer:[CPIsNotNilTransformer new] forName:CPIsNotNilTransformerName]; +[CPValueTransformer setValueTransformer:[CPUnarchiveFromDataTransformer new] forName:CPUnarchiveFromDataTransformerName]; diff --git a/Tests/AppKit/SimpleBindings2/AppController.j b/Tests/AppKit/SimpleBindings2/AppController.j index df49d1a52..301739ea3 100644 --- a/Tests/AppKit/SimpleBindings2/AppController.j +++ b/Tests/AppKit/SimpleBindings2/AppController.j @@ -40,13 +40,16 @@ CPLogRegister(CPLogConsole); slider = [[CPSlider alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame), CGRectGetMaxY(textFrame)+10, CGRectGetWidth(textFrame), 12)]; - [slider setContinuous:NO]; + [slider setContinuous:YES]; [contentView addSubview:slider]; var button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame)+25, CGRectGetMaxY(textFrame)+40, 100, 18)]; [button setTitle:@"mute"]; + + [button setTarget:self]; + [button setAction:@selector(muteTrack:)]; [contentView addSubview:button]; @@ -60,13 +63,10 @@ CPLogRegister(CPLogConsole); var controller = [[CPObjectController alloc] init]; [controller bind:@"contentObject" toObject:self withKeyPath:@"track" options:nil]; - [textField bind:@"objectValue" toObject:controller withKeyPath:@"selection.volume" options:nil]; - [slider bind:@"objectValue" toObject:controller withKeyPath:@"selection.volume" options:nil]; + [textField bind:CPValueBinding toObject:controller withKeyPath:@"selection.volume" options:nil]; + [slider bind:CPValueBinding toObject:controller withKeyPath:@"selection.volume" options:nil]; [theWindow orderFront:self]; - - // Uncomment the following line to turn on the standard menu bar. - //[CPMenu setMenuBarVisible:YES]; } - (IBAction)muteTrack:(id)sender @@ -74,6 +74,7 @@ CPLogRegister(CPLogConsole); [track setVolume:0.0]; } + @end From 9bbe51fa647c40256a0db637a6a5fda20a91c56c Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 19 Feb 2009 01:29:39 -0800 Subject: [PATCH 008/124] CPArrayController works simply with bindings and arrangedObjects --- AppKit/CPArrayController.j | 64 +++++++++++++++++++++++++++-------- AppKit/CPKeyValueBinding.j | 15 ++++---- AppKit/CPObjectController.j | 11 ++++-- Foundation/CPArray+KVO.j | 21 ++---------- Foundation/CPKeyValueCoding.j | 16 ++++----- 5 files changed, 73 insertions(+), 54 deletions(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 2dfda77f2..c6122214b 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -42,11 +42,24 @@ id _arrangedObjects; } ++ (void)initialize +{ + if (self !== [self class]) + return; + + [[self class] exposeBinding:@"contentArray"]; +} + + (CPSet)keyPathsForValuesAffectingValueForContentArray { return [CPSet setWithObjects:"content"]; } ++ (CPSet)keyPathsForValuesAffectingValueForArrangedObjects +{ + return [CPSet setWithObjects:"content", "contentArray", "filterPredicate", "sortDescriptors"]; +} + + (CPSet)keyPathsForValuesAffectingValueForSelection { return [CPSet setWithObjects:"content", "contentArray", "selectionIndexes"]; @@ -92,6 +105,26 @@ _preservesSelection = value; } +- (BOOL)selectsInsertedObjects +{ + return _selectsInsertedObjects; +} + +- (void)setSelectsInsertedObjects:(BOOL)value +{ + _selectsInsertedObjects = value; +} + +- (BOOL)avoidsEmptySelection +{ + return _avoidsEmptySelection; +} + +- (void)setAvoidsEmptySelection:(BOOL)value +{ + _avoidsEmptySelection = value; +} + - (void)setContent:(id)value { if(![value isKindOfClass:[CPArray class]]) @@ -103,8 +136,8 @@ if ([self preservesSelection]) oldSelection = [self selectedObjects]; - //FIXME: mutable copy? - [super setContent:[value copy]]; + //FIXME: copy? + [super setContent:value]; if(_clearsFilterPredicateOnInsertion) [self setFilterPredicate:nil]; @@ -231,7 +264,7 @@ - (CPArray)selectedObjects { - var objects = [_CPObservableArray arrayWithArray:[[self arrangedObjects] objectsAtIndexes:[self selectionIndexes]]]; + var objects = [[self arrangedObjects] objectsAtIndexes:[self selectionIndexes]]; return objects || [_CPObservableArray array]; } @@ -288,32 +321,33 @@ { if (![self canAdd]) return; - - [self willChangeValueForKey:@"content"]; - [_content addObject:object]; - [self didChangeValueForKey:@"content"]; - - if (_clearsFilterPredicateOnInsertion) + + [self willChangeValueForKey:@"content"]; + [_contentObject addObject:object]; + [self didChangeValueForKey:@"content"]; + + if (_clearsFilterPredicateOnInsertion) [self setFilterPredicate:nil]; - - if ([_filterPredicate evaluateWithObject:object]) - { + + if ([_filterPredicate evaluateWithObject:object]) + { [self willChangeValueForKey:@"selectionIndexes"]; var pos = [_arrangedObjects insertObject:object inArraySortedByDescriptors:_sortDescriptors]; [_selectionIndexes shiftIndexesStartingAtIndex:pos by:1]; [self didChangeValueForKey:@"selectionIndexes"]; - } + } + else + [self rearrangeObjects]; } - - (void)removeObject:(id)object { if (![self canRemove]) return; [self willChangeValueForKey:@"content"]; - [_content removeObject:object]; + [_contentObject removeObject:object]; [self didChangeValueForKey:@"content"]; if ([_filterPredicate evaluateWithObject:object]) diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 89e46b949..70e46e350 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -23,6 +23,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@import +@import +@import + var exposedBindingsMap = [CPDictionary new], bindingsMap = [CPDictionary new]; @@ -109,7 +113,6 @@ var CPBindingOperationAnd = 0, if (self) { - CPLog("creating CPKeyValueBinding with binding: "+aBinding+" name: "+aName+" to: "+aDestination+" keyPath: "+aKeyPath+" from: "+aSource); _source = aSource; _info = [CPDictionary dictionaryWithObjects:[aDestination, aKeyPath] forKeys:[CPObservedObjectKey, CPObservedKeyPathKey]]; @@ -161,13 +164,7 @@ var CPBindingOperationAnd = 0, if (!changes) return; - var options = [_info objectForKey:CPOptionsKey], - newValue = [changes objectForKey:CPKeyValueChangeNewKey]; - - newValue = [self transformValue:newValue withOptions:options]; - - if (![newValue isEqual:[_source valueForKey:context]]) - [_source setValue:newValue forKey:context]; + [self setValueFor:context]; } - (id)transformValue:(id)aValue withOptions:(CPDictionary)options @@ -260,7 +257,7 @@ var CPBindingOperationAnd = 0, return CPLog.error("Invalid object or path on "+self+" for "+aBinding); if (![[self exposedBindings] containsObject:aBinding]) - return CPLog.error("No binding exposed on "+self+" for "+aBinding); + CPLog.warn("No binding exposed on "+self+" for "+aBinding); [self unbind:aBinding]; [[CPKeyValueBinding alloc] initWithBinding:aBinding name:aBinding to:anObject keyPath:aKeyPath options:options from:self]; diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index b9884b63c..23169cbf0 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -19,6 +19,11 @@ [self exposeBinding:"contentObject"]; } ++ (CPSet)keyPathsForValuesAffectingValueForContentObject +{ + return [CPSet setWithObjects:"content"]; +} + + (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey { if (aKey === @"contentObject") @@ -89,7 +94,7 @@ - (void)setObjectClass:(Class)aClass { - _defaultClassName = [aClass name]; + _defaultClassName = [aClass className]; } - (Class)objectClass @@ -134,7 +139,7 @@ - (BOOL)isEditable { - return _isEditable; + return _editable; } - (void)setEditable:(BOOL)isEditable @@ -322,7 +327,7 @@ { if (aKeyPath.indexOf("@") === 0) { - var proxy = [[_CPObservationProxy alloc] initWithKeyPath:aKeyPath observer:anObsever object:self], + var proxy = [[_CPObservationProxy alloc] initWithKeyPath:aKeyPath observer:anObserver object:self], index = [_observationProxies indexOfObject:proxy]; proxy = [_observationProxies objectAtIndex:index]; diff --git a/Foundation/CPArray+KVO.j b/Foundation/CPArray+KVO.j index 40600410b..b5c918c41 100644 --- a/Foundation/CPArray+KVO.j +++ b/Foundation/CPArray+KVO.j @@ -246,7 +246,6 @@ - (id)valueForKey:(CPString)aKey { - if (aKey.indexOf("@") === 0) { if (aKey.indexOf(".") !== -1) @@ -280,7 +279,7 @@ - (id)valueForKeyPath:(CPString)aKeyPath { if (aKeyPath.indexOf("@") === 0) - { + { var dotIndex = aKeyPath.indexOf("."), operator = aKeyPath.substring(1, dotIndex), parameter = aKeyPath.substring(dotIndex+1); @@ -292,21 +291,7 @@ } else { - var newArray = [], - enumerator = [self objectEnumerator], - object; - - while ((object = [enumerator nextObject]) !== nil) - { - var value = [object valueForKeyPath:aKeyPath]; - - if (value === nil || value === undefined) - value = [CPNull null]; - - newArray.push(value); - } - - return newArray; + return [super valueForKeyPath:aKeyPath]; } } @@ -426,7 +411,7 @@ kvoOperators["sum"] = function sumOperator(self, _cmd, param) -(void)addObserver:(id)observer forKeyPath:(CPString)aKeyPath options:(unsigned)options context:(id)context { - CPLog.warn("adding observer to CPArray. observer: "+observer+" keypath: "+aKeyPath+" context: "+context); + //CPLog.warn("adding observer to CPArray. observer: "+observer+" keypath: "+aKeyPath+" context: "+context); if ([isa instanceMethodForSelector:_cmd]==[CPArray instanceMethodForSelector:_cmd]) [CPException raise:CPInvalidArgumentException reason:"Unsupported method on CPArray"]; else diff --git a/Foundation/CPKeyValueCoding.j b/Foundation/CPKeyValueCoding.j index ac1f09385..a6317c873 100644 --- a/Foundation/CPKeyValueCoding.j +++ b/Foundation/CPKeyValueCoding.j @@ -173,17 +173,15 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; - (id)valueForKeyPath:(CPString)aKeyPath { - var keys = aKeyPath.split("."), - - index = 0, - count = keys.length, - - value = self; + var dotIndex = aKeyPath.indexOf("."); - for(; index < count; ++index) - value = [value valueForKey:keys[index]]; + if (dotIndex === CPNotFound) + return [self valueForKey:aKeyPath]; - return value; + var firstPart = aKeyPath.substring(0, dotIndex), + secondPart = aKeyPath.substring(dotIndex+1); + + return [[self valueForKey:firstPart] valueForKeyPath:secondPart]; } - (CPDictionary)dictionaryWithValuesForKeys:(CPArray)keys From 18cf19859259ca8775d5d620f0d50d3aacd81678 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 19 Feb 2009 01:36:40 -0800 Subject: [PATCH 009/124] Beginnings of a simple array controller test app. --- Tests/AppKit/ArrayController1/AppController.j | 177 ++++++++++++++++++ .../AppKit/ArrayController1/Frameworks/AppKit | 1 + .../ArrayController1/Frameworks/Debug/AppKit | 1 + .../Frameworks/Debug/Foundation | 1 + .../Frameworks/Debug/Objective-J | 1 + .../ArrayController1/Frameworks/Foundation | 1 + .../ArrayController1/Frameworks/Objective-J | 1 + Tests/AppKit/ArrayController1/Info.plist | 12 ++ .../AppKit/ArrayController1/index-debug.html | 36 ++++ Tests/AppKit/ArrayController1/index.html | 37 ++++ Tests/AppKit/ArrayController1/main.j | 18 ++ 11 files changed, 286 insertions(+) create mode 100644 Tests/AppKit/ArrayController1/AppController.j create mode 120000 Tests/AppKit/ArrayController1/Frameworks/AppKit create mode 120000 Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit create mode 120000 Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation create mode 120000 Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J create mode 120000 Tests/AppKit/ArrayController1/Frameworks/Foundation create mode 120000 Tests/AppKit/ArrayController1/Frameworks/Objective-J create mode 100644 Tests/AppKit/ArrayController1/Info.plist create mode 100644 Tests/AppKit/ArrayController1/index-debug.html create mode 100644 Tests/AppKit/ArrayController1/index.html create mode 100644 Tests/AppKit/ArrayController1/main.j diff --git a/Tests/AppKit/ArrayController1/AppController.j b/Tests/AppKit/ArrayController1/AppController.j new file mode 100644 index 000000000..e1f0797c2 --- /dev/null +++ b/Tests/AppKit/ArrayController1/AppController.j @@ -0,0 +1,177 @@ +/* + * AppController.j + * ArrayController + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +@import +@import + +CPLogRegister(CPLogConsole); + +@implementation AppController : CPObject +{ + CPArray itemsArray; + + //CPTableView tableView; + //CPTextField selectedNameField; + //CPTextField selectedPriceField; + CPTextField totalCountField; + + CPArrayController arrayController; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView]; + + //create our non ui objects + + itemsArray = [[Item new]]; + + arrayController = [[CPArrayController alloc] init]; + + [arrayController setEditable:YES]; + [arrayController setObjectClass:Item]; + [arrayController setAutomaticallyPreparesContent:YES]; + + [arrayController setSelectsInsertedObjects:YES]; + [arrayController setAvoidsEmptySelection:YES]; + + //create our UI elements + + //tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 400, 200)]; + //[tableView setCenter:[contentView center]]; + + totalCountField = [[CPTextField alloc] initWithFrame:CGRectMake(0, 0, 300, 20)]; + [totalCountField setCenter:[contentView center]]; + + [totalCountField setStringValue:@"HELLO WORLD"]; + + [contentView addSubview:totalCountField]; + + var frame = [totalCountField frame], + button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(frame)+100, CGRectGetMaxY(frame)+10, 100, 18)]; + + [button setTitle:"ADD"]; + [button setTarget:arrayController]; + [button setAction:@selector(add:)]; + + [contentView addSubview:button]; + + button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(frame)+100, CGRectGetMaxY(frame)+38, 100, 18)]; + + [button setTitle:"REMOVE"]; + [button setTarget:arrayController]; + [button setAction:@selector(remove:)]; + + [contentView addSubview:button]; + + //create our bindings + + [self createBindings]; + + //order front window + + [theWindow orderFront:self]; +} + +- (void)createBindings +{ + // bind array controller to self's itemsArray + [arrayController bind:@"contentArray" toObject: self + withKeyPath:@"itemsArray" options:nil]; + + // bind the total field -- no options on this one + [totalCountField bind:CPValueBinding toObject:arrayController + withKeyPath:@"arrangedObjects.@sum.price" options:nil]; + + + //var bindingOptions = [CPDictionary dictionary]; + + // binding options for "name" + //[bindingOptions setObject:@"No Name" forKey:@"NSNullPlaceholder"]; + + // binding for selected "name" field + //[selectedNameField bind: @"value" toObject: arrayController + // withKeyPath:@"selection.name" options:bindingOptions]; + + // binding for "name" column + //var tableColumn = [tableView tableColumnWithIdentifier:@"name"]; + + //[tableColumn bind:@"value" toObject: arrayController + // withKeyPath:@"arrangedObjects.name" options:bindingOptions]; + + + // binding options for "price" + // no need for placeholder as overridden by formatters + //[bindingOptions removeObjectForKey:@"NSNullPlaceholder"]; + + //[bindingOptions setObject:YES + // forKey:CPValidatesImmediatelyBindingOption]; + + // binding for selected "price" field + //[selectedPriceField bind: @"value" toObject: arrayController + // withKeyPath:@"selection.price" options:bindingOptions]; + + + // binding for "price" column + //tableColumn = [tableView tableColumnWithIdentifier:@"price"]; + + //[tableColumn bind:@"value" toObject: arrayController + // withKeyPath:@"arrangedObjects.price" options:bindingOptions]; + + +} + +- (unsigned int)countOfItemsArray +{ + return [itemsArray count]; +} + +- (id)objectInItemsArrayAtIndex:(unsigned int)index +{ + return [itemsArray objectAtIndex:index]; +} + +- (void)insertObject:(id)anObject inItemsArrayAtIndex:(unsigned int)index +{ + [itemsArray insertObject:anObject atIndex:index]; +} + +- (void)removeObjectFromItemsArrayAtIndex:(unsigned int)index +{ + [itemsArray removeObjectAtIndex:index]; +} + +- (void)replaceObjectInItemsArrayAtIndex:(unsigned int)index withObject:(id)anObject +{ + [itemsArray replaceObjectAtIndex:index withObject:anObject]; +} + +@end + +@implementation Item : CPObject +{ + float price @accessors; +} + +- (id)init +{ + self = [super init]; + price = 1.0; + return self; +} + +- (BOOL)validatePrice:(id)value error:({CPError})error +{ + if ([value intValue] >= 0) + return YES; + + return NO; +} + +@end diff --git a/Tests/AppKit/ArrayController1/Frameworks/AppKit b/Tests/AppKit/ArrayController1/Frameworks/AppKit new file mode 120000 index 000000000..fe0746a80 --- /dev/null +++ b/Tests/AppKit/ArrayController1/Frameworks/AppKit @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/AppKit \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit b/Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit new file mode 120000 index 000000000..418997121 --- /dev/null +++ b/Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/AppKit \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation b/Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation new file mode 120000 index 000000000..f9d8a3215 --- /dev/null +++ b/Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/Foundation \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J b/Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J new file mode 120000 index 000000000..7c88c9522 --- /dev/null +++ b/Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Debug/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Foundation b/Tests/AppKit/ArrayController1/Frameworks/Foundation new file mode 120000 index 000000000..2698043eb --- /dev/null +++ b/Tests/AppKit/ArrayController1/Frameworks/Foundation @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/Foundation \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Objective-J b/Tests/AppKit/ArrayController1/Frameworks/Objective-J new file mode 120000 index 000000000..c46828f8c --- /dev/null +++ b/Tests/AppKit/ArrayController1/Frameworks/Objective-J @@ -0,0 +1 @@ +/Users/boucher/Projects/Build/Release/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Info.plist b/Tests/AppKit/ArrayController1/Info.plist new file mode 100644 index 000000000..34268e938 --- /dev/null +++ b/Tests/AppKit/ArrayController1/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + ArrayController + CPPrincipalClass + CPApplication + + diff --git a/Tests/AppKit/ArrayController1/index-debug.html b/Tests/AppKit/ArrayController1/index-debug.html new file mode 100644 index 000000000..070d80375 --- /dev/null +++ b/Tests/AppKit/ArrayController1/index-debug.html @@ -0,0 +1,36 @@ + + + + + + + Hello World + + + + + + + + +
+
+ +
+
+ + + diff --git a/Tests/AppKit/ArrayController1/index.html b/Tests/AppKit/ArrayController1/index.html new file mode 100644 index 000000000..801edfb68 --- /dev/null +++ b/Tests/AppKit/ArrayController1/index.html @@ -0,0 +1,37 @@ + + + + + + + Hello World + + + + + + + + + +
+
+ +
+
+ + + + diff --git a/Tests/AppKit/ArrayController1/main.j b/Tests/AppKit/ArrayController1/main.j new file mode 100644 index 000000000..94bf98cc3 --- /dev/null +++ b/Tests/AppKit/ArrayController1/main.j @@ -0,0 +1,18 @@ +/* + * main.j + * ArrayController + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 119567889377df3683a1b411c4511c2d532bd4cf Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 22 Jul 2009 17:54:53 -0700 Subject: [PATCH 010/124] Removed Framework directories from bindings tests. Reviewed by me. --- Tests/AppKit/ArrayController1/Frameworks/AppKit | 1 - Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit | 1 - Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation | 1 - Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J | 1 - Tests/AppKit/ArrayController1/Frameworks/Foundation | 1 - Tests/AppKit/ArrayController1/Frameworks/Objective-J | 1 - Tests/AppKit/SimpleBindings1/Frameworks/AppKit | 1 - Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit | 1 - Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation | 1 - Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J | 1 - Tests/AppKit/SimpleBindings1/Frameworks/Foundation | 1 - Tests/AppKit/SimpleBindings1/Frameworks/Objective-J | 1 - Tests/AppKit/SimpleBindings2/Frameworks/AppKit | 1 - Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit | 1 - Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation | 1 - Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J | 1 - Tests/AppKit/SimpleBindings2/Frameworks/Foundation | 1 - Tests/AppKit/SimpleBindings2/Frameworks/Objective-J | 1 - 18 files changed, 18 deletions(-) delete mode 120000 Tests/AppKit/ArrayController1/Frameworks/AppKit delete mode 120000 Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit delete mode 120000 Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation delete mode 120000 Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J delete mode 120000 Tests/AppKit/ArrayController1/Frameworks/Foundation delete mode 120000 Tests/AppKit/ArrayController1/Frameworks/Objective-J delete mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/AppKit delete mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit delete mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation delete mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J delete mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Foundation delete mode 120000 Tests/AppKit/SimpleBindings1/Frameworks/Objective-J delete mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/AppKit delete mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit delete mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation delete mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J delete mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Foundation delete mode 120000 Tests/AppKit/SimpleBindings2/Frameworks/Objective-J diff --git a/Tests/AppKit/ArrayController1/Frameworks/AppKit b/Tests/AppKit/ArrayController1/Frameworks/AppKit deleted file mode 120000 index fe0746a80..000000000 --- a/Tests/AppKit/ArrayController1/Frameworks/AppKit +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/AppKit \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit b/Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit deleted file mode 120000 index 418997121..000000000 --- a/Tests/AppKit/ArrayController1/Frameworks/Debug/AppKit +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/AppKit \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation b/Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation deleted file mode 120000 index f9d8a3215..000000000 --- a/Tests/AppKit/ArrayController1/Frameworks/Debug/Foundation +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/Foundation \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J b/Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J deleted file mode 120000 index 7c88c9522..000000000 --- a/Tests/AppKit/ArrayController1/Frameworks/Debug/Objective-J +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Foundation b/Tests/AppKit/ArrayController1/Frameworks/Foundation deleted file mode 120000 index 2698043eb..000000000 --- a/Tests/AppKit/ArrayController1/Frameworks/Foundation +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/Foundation \ No newline at end of file diff --git a/Tests/AppKit/ArrayController1/Frameworks/Objective-J b/Tests/AppKit/ArrayController1/Frameworks/Objective-J deleted file mode 120000 index c46828f8c..000000000 --- a/Tests/AppKit/ArrayController1/Frameworks/Objective-J +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/AppKit b/Tests/AppKit/SimpleBindings1/Frameworks/AppKit deleted file mode 120000 index fe0746a80..000000000 --- a/Tests/AppKit/SimpleBindings1/Frameworks/AppKit +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit deleted file mode 120000 index 418997121..000000000 --- a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/AppKit +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation deleted file mode 120000 index f9d8a3215..000000000 --- a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Foundation +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J b/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J deleted file mode 120000 index 7c88c9522..000000000 --- a/Tests/AppKit/SimpleBindings1/Frameworks/Debug/Objective-J +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Foundation b/Tests/AppKit/SimpleBindings1/Frameworks/Foundation deleted file mode 120000 index 2698043eb..000000000 --- a/Tests/AppKit/SimpleBindings1/Frameworks/Foundation +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings1/Frameworks/Objective-J b/Tests/AppKit/SimpleBindings1/Frameworks/Objective-J deleted file mode 120000 index c46828f8c..000000000 --- a/Tests/AppKit/SimpleBindings1/Frameworks/Objective-J +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/AppKit b/Tests/AppKit/SimpleBindings2/Frameworks/AppKit deleted file mode 120000 index fe0746a80..000000000 --- a/Tests/AppKit/SimpleBindings2/Frameworks/AppKit +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit deleted file mode 120000 index 418997121..000000000 --- a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/AppKit +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/AppKit \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation deleted file mode 120000 index f9d8a3215..000000000 --- a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Foundation +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J b/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J deleted file mode 120000 index 7c88c9522..000000000 --- a/Tests/AppKit/SimpleBindings2/Frameworks/Debug/Objective-J +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Debug/Objective-J \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Foundation b/Tests/AppKit/SimpleBindings2/Frameworks/Foundation deleted file mode 120000 index 2698043eb..000000000 --- a/Tests/AppKit/SimpleBindings2/Frameworks/Foundation +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/Foundation \ No newline at end of file diff --git a/Tests/AppKit/SimpleBindings2/Frameworks/Objective-J b/Tests/AppKit/SimpleBindings2/Frameworks/Objective-J deleted file mode 120000 index c46828f8c..000000000 --- a/Tests/AppKit/SimpleBindings2/Frameworks/Objective-J +++ /dev/null @@ -1 +0,0 @@ -/Users/boucher/Projects/Build/Release/Objective-J \ No newline at end of file From 08ed16c493efe390b881ed996f5d079968061061 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 22 Jul 2009 23:54:38 -0700 Subject: [PATCH 011/124] Made CPObjectController's contentObject binding bidirectional. Reviewed by me. --- AppKit/CPArrayController.j | 27 ++- AppKit/CPController.j | 30 ++- AppKit/CPKeyValueBinding.j | 1 - AppKit/CPObjectController.j | 228 +++++++++++------- Tests/AppKit/ArrayController1/AppController.j | 86 ++++--- Tests/AppKit/ArrayController1/Info.plist | 4 +- .../ArrayController1/Resources/MainMenu.cib | 1 + 7 files changed, 224 insertions(+), 153 deletions(-) create mode 100644 Tests/AppKit/ArrayController1/Resources/MainMenu.cib diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index c6122214b..d4364895e 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -44,10 +44,11 @@ + (void)initialize { - if (self !== [self class]) + if (self !== [CPArrayController class]) return; - [[self class] exposeBinding:@"contentArray"]; + [self exposeBinding:@"contentArray"]; + [self exposeBinding:@"contentSet"]; } + (CPSet)keyPathsForValuesAffectingValueForContentArray @@ -57,22 +58,22 @@ + (CPSet)keyPathsForValuesAffectingValueForArrangedObjects { - return [CPSet setWithObjects:"content", "contentArray", "filterPredicate", "sortDescriptors"]; + return [CPSet setWithObjects:"content", "contentArray", "contentSet", "filterPredicate", "sortDescriptors"]; } + (CPSet)keyPathsForValuesAffectingValueForSelection { - return [CPSet setWithObjects:"content", "contentArray", "selectionIndexes"]; + return [CPSet setWithObjects:"content", "contentArray", "contentSet", "selectionIndexes"]; } + (CPSet)keyPathsForValuesAffectingValueForSelectionIndex { - return [CPSet setWithObjects:"content", "contentArray", "selectionIndexes", "selection"]; + return [CPSet setWithObjects:"content", "contentArray", "contentSet", "selectionIndexes", "selection"]; } + (CPSet)keyPathsForValuesAffectingValueForSelectedObjects { - return [CPSet setWithObjects:"content", "contentArray", "selectionIndexes", "selection"]; + return [CPSet setWithObjects:"content", "contentArray", "contentSet", "selectionIndexes", "selection"]; } + (CPSet)keyPathsForValuesAffectingValueForCanRemove @@ -150,9 +151,14 @@ [self setSelectionIndexes:oldSelectionIndexes]; } -- (void)_setContentArray:(id)value +- (void)_setContentArray:(id)anArray { - [self setContent:value]; + [self setContent:anArray]; +} + +- (void)_setContentSet:(id)aSet +{ + [self setContent:aSet]; } - (id)contentArray @@ -160,6 +166,11 @@ return [self content]; } +- (id)contentSet +{ + return [self content]; +} + - (CPArray)arrangeObjects:(CPArray)objects { var sortedObjects = objects; diff --git a/AppKit/CPController.j b/AppKit/CPController.j index a12428d33..a4edd6660 100644 --- a/AppKit/CPController.j +++ b/AppKit/CPController.j @@ -10,7 +10,6 @@ // Released under the LGPL. // -@import "CPKeyValueBinding.j" var CPControllerDeclaredKeysKey = @"CPControllerDeclaredKeysKey"; @@ -35,15 +34,19 @@ var CPControllerDeclaredKeysKey = @"CPControllerDeclaredKeysKey"; - (void)encodeWithCoder:(CPCoder)aCoder { - [aCoder encodeObject:_declaredKeys forKey:CPControllerDeclaredKeysKey]; + if ([_declaredKeys count] > 0) + [aCoder encodeObject:_declaredKeys forKey:CPControllerDeclaredKeysKey]; } - (id)initWithCoder:(CPCoder)aDecoder { - self = [self init]; + self = [super init]; if (self) - _declaredKeys = [aDecoder decodeObjectForKey:CPControllerDeclaredKeysKey] || _declaredKeys; + { + _editors = []; + _declaredKeys = [aDecoder decodeObjectForKey:CPControllerDeclaredKeysKey] || []; + } return nil; } @@ -55,28 +58,29 @@ var CPControllerDeclaredKeysKey = @"CPControllerDeclaredKeysKey"; - (BOOL)commitEditing { - for (var i=0, count=_editors.length; i + @import "CPController.j" + @implementation CPObjectController : CPController { id _contentObject; id _selection; - - CPString _defaultClassName; - - BOOL _editable; + + Class _objectClass; + + BOOL _isEditable; BOOL _automaticallyPreparesContent; - + CPCountedSet _observedKeys; } + (id)initialize { - [self exposeBinding:"contentObject"]; + [self exposeBinding:@"editable"]; + [self exposeBinding:@"contentObject"]; } + (CPSet)keyPathsForValuesAffectingValueForContentObject @@ -47,39 +51,121 @@ return [CPSet setWithObjects:"editable", "selection"]; } +- (id)initWithContent:(id)aContent +{ + self = [super init]; + + if (self) + { + [self setContent:aContent]; + [self setEditable:YES]; + [self setObjectClass:[CPMutableDictionary class]]; + } + + return self; +} + - (id)content { return _contentObject; } -- (void)setContent:(id)aValue +- (void)setContent:(id)aContent { - [self setContent:aValue usingKVO:YES]; + [self willChangeValueForKey:@"contentObject"]; + [self _selectionWillChange]; + + _contentObject = aContent; + + [self didChangeValueForKey:@"contentObject"]; + [self _selectionDidChange]; } -- (void)setContent:(id)aValue usingKVO:(BOOL)kvo +- (void)_setContentObject:(id)aContent { - if (_contentObject === aValue) - return; - - if (kvo) - { - [self willChangeValueForKey:@"contentObject"]; - [self _selectionWillChange]; - } - - _contentObject = aValue; - - if (kvo) - { - [self didChangeValueForKey:@"contentObject"]; - [self _selectionDidChange]; - } + [self setContent:aContent]; } -- (void)_setContentObject:(id)aValue +- (id)_contentObject { - [self setContent:aValue usingKVO:YES]; + return [self content]; +} + +- (void)setAutomaticallyPreparesContent:(BOOL)shouldAutomaticallyPrepareContent +{ + _automaticallyPreparesContent = shouldAutomaticallyPrepareContent; +} + +- (BOOL)automaticallyPreparesContent +{ + return _automaticallyPreparesContent; +} + +- (void)prepareContent +{ + [self setContent:[self newObject]]; +} + +- (void)setObjectClass:(Class)aClass +{ + _objectClass = aClass; +} + +- (Class)objectClass +{ + return _objectClass; +} + +- (id)newObject +{ + return [[[self objectClass] alloc] init]; +} + +- (void)addObject:(id)anObject +{ + [self setContent:anObject]; + + [[CPKeyValueBinding getBinding:@"contentObject" forObject:self] reverseSetValueFor:@"contentObject"]; +} + +- (void)removeObject:(id)anObject +{ + if ([self content] === anObject) + [self setContent:nil]; + + [[CPKeyValueBinding getBinding:@"contentObject" forObject:self] reverseSetValueFor:@"contentObject"]; +} + +- (void)add:(id)aSender +{ + // FIXME: This should happen on the next run loop? + [self addObject:[self newObject]]; +} + +- (BOOL)canAdd +{ + return [self isEditable]; +} + +- (void)remove:(id)aSender +{ + // FIXME: This should happen on the next run loop? + [self removeObject:[self content]]; +} + +- (BOOL)canRemove +{ + return [self isEditable] && [[self selectedObjects] count]; +} + +- (void)setEditable:(BOOL)shouldBeEditable +{ + _isEditable = shouldBeEditable; +} + +- (BOOL)isEditable +{ + return _isEditable; } - (CPArray)selectedObjects @@ -92,26 +178,6 @@ return _selection; } -- (void)setObjectClass:(Class)aClass -{ - _defaultClassName = [aClass className]; -} - -- (Class)objectClass -{ - return CPClassFromString(_defaultClassName); -} - -- (id)_defaultNewObject -{ - return [[[self objectClass] alloc] init]; -} - -- (id)newObject -{ - return [self _defaultNewObject]; -} - - (void)_selectionWillChange { [_selection controllerWillChange]; @@ -127,36 +193,6 @@ [self didChangeValueForKey:@"selection"]; } -- (BOOL)canAdd -{ - return [self isEditable]; -} - -- (BOOL)canRemove -{ - return [self isEditable] && [[self selectedObjects] count]; -} - -- (BOOL)isEditable -{ - return _editable; -} - -- (void)setEditable:(BOOL)isEditable -{ - _editable = isEditable; -} - -- (BOOL)automaticallyPreparesContent -{ - return _automaticallyPreparesContent; -} - -- (void)setAutomaticallyPreparesContent:(BOOL)aFlag -{ - _automaticallyPreparesContent = aFlag; -} - - (id)observedKeys { return _observedKeys; @@ -174,20 +210,44 @@ [super removeObserver:anObserver forKeyPath:aKeyPath]; } --(id)initWithCoder:(CPCoder)aCoder +@end + +var CPObjectControllerObjectClassNameKey = @"CPObjectControllerObjectClassNameKey", + CPObjectControllerIsEditableKey = @"CPObjectControllerIsEditableKey", + CPObjectControllerAutomaticallyPreparesContentKey = @"CPObjectControllerAutomaticallyPreparesContentKey"; + +@implementation CPObjectController (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder { - if (self = [super init]) + self = [super init]; + + if (self) { - _defaultClassName = [aCoder decodeObjectForKey:@"CPObjectClassName"]; - _editable = [aCoder decodeBoolForKey:@"CPEditable"]; - _automaticallyPreparesContent = [aCoder decodeBoolForKey:@"CPAutomaticallyPreparesContent"]; - + var objectClassName = [aCoder decodeObjectForKey:CPObjectControllerObjectClassNameKey], + objectClass = CPClassFromString(objectClassName); + + // FIXME: Error if objectClass === nil + + [self setObjectClass:objectClass]; + [self setEditable:[aCoder decodeBoolForKey:CPObjectControllerIsEditableKey]]; + [self setAutomaticallyPreparesContent:[aCoder decodeBoolForKey:CPObjectControllerAutomaticallyPreparesContentKey] || NO]; + _observedKeys = [[CPCountedSet alloc] init]; } - + return self; } +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:CPStringFromClass(objectClass) forKey:CPObjectControllerObjectClassNameKey]; + [aCoder encodeObject:[self isEditable] forKey:CPObjectControllerIsEditableKey]; + + if (![self automaticallyPreparesContent]) + [aCoder encodeBOOL:YES forKey:CPObjectControllerAutomaticallyPreparesContentKey]; +} + @end @implementation _CPObservationProxy : CPObject diff --git a/Tests/AppKit/ArrayController1/AppController.j b/Tests/AppKit/ArrayController1/AppController.j index e1f0797c2..991b34ef1 100644 --- a/Tests/AppKit/ArrayController1/AppController.j +++ b/Tests/AppKit/ArrayController1/AppController.j @@ -9,12 +9,15 @@ @import @import + CPLogRegister(CPLogConsole); @implementation AppController : CPObject { - CPArray itemsArray; - +// CPArray itemsArray; + CPSet itemsSet; + CPWindow theWindow; + //CPTableView tableView; //CPTextField selectedNameField; //CPTextField selectedPriceField; @@ -23,14 +26,23 @@ CPLogRegister(CPLogConsole); CPArrayController arrayController; } -- (void)applicationDidFinishLaunching:(CPNotification)aNotification +- (void)awakeFromCib { - var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], - contentView = [theWindow contentView]; + var contentView = [theWindow contentView]; //create our non ui objects - + + /*var objectController = [[CPObjectController alloc] init]; + self.managed = 5; + [objectController bind:@"contentObject" toObject:self withKeyPath:@"managed" options:nil]; + console.log([objectController content]); + console.log("f!: " + [self.managed description]); + [objectController addObject:[CPDictionary dictionary]]; + console.log("f!: " + [self.managed description]); + */ + itemsArray = [[Item new]]; + itemsSet = [[Item new]]; arrayController = [[CPArrayController alloc] init]; @@ -42,59 +54,45 @@ CPLogRegister(CPLogConsole); [arrayController setAvoidsEmptySelection:YES]; //create our UI elements - + //tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 400, 200)]; //[tableView setCenter:[contentView center]]; - - totalCountField = [[CPTextField alloc] initWithFrame:CGRectMake(0, 0, 300, 20)]; - [totalCountField setCenter:[contentView center]]; - - [totalCountField setStringValue:@"HELLO WORLD"]; - - [contentView addSubview:totalCountField]; - - var frame = [totalCountField frame], - button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(frame)+100, CGRectGetMaxY(frame)+10, 100, 18)]; - - [button setTitle:"ADD"]; - [button setTarget:arrayController]; - [button setAction:@selector(add:)]; - - [contentView addSubview:button]; - - button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(frame)+100, CGRectGetMaxY(frame)+38, 100, 18)]; - - [button setTitle:"REMOVE"]; - [button setTarget:arrayController]; - [button setAction:@selector(remove:)]; - - [contentView addSubview:button]; //create our bindings - + [self createBindings]; - + //order front window - + + [theWindow setFullBridge:YES]; [theWindow orderFront:self]; } +- (void)add:(id)aSender +{ + [arrayController add:self]; +} + +- (void)remove:(id)aSender +{ + [arrayController remove:self]; +} + - (void)createBindings { // bind array controller to self's itemsArray - [arrayController bind:@"contentArray" toObject: self - withKeyPath:@"itemsArray" options:nil]; + [arrayController bind:@"contentSet" toObject:self + withKeyPath:@"itemsSet" options:nil]; // bind the total field -- no options on this one [totalCountField bind:CPValueBinding toObject:arrayController withKeyPath:@"arrangedObjects.@sum.price" options:nil]; - - + //var bindingOptions = [CPDictionary dictionary]; - + // binding options for "name" //[bindingOptions setObject:@"No Name" forKey:@"NSNullPlaceholder"]; - + // binding for selected "name" field //[selectedNameField bind: @"value" toObject: arrayController // withKeyPath:@"selection.name" options:bindingOptions]; @@ -123,10 +121,8 @@ CPLogRegister(CPLogConsole); //[tableColumn bind:@"value" toObject: arrayController // withKeyPath:@"arrangedObjects.price" options:bindingOptions]; - - } - +/* - (unsigned int)countOfItemsArray { return [itemsArray count]; @@ -151,7 +147,7 @@ CPLogRegister(CPLogConsole); { [itemsArray replaceObjectAtIndex:index withObject:anObject]; } - +*/ @end @implementation Item : CPObject @@ -162,7 +158,7 @@ CPLogRegister(CPLogConsole); - (id)init { self = [super init]; - price = 1.0; + price = 7.0; return self; } diff --git a/Tests/AppKit/ArrayController1/Info.plist b/Tests/AppKit/ArrayController1/Info.plist index 34268e938..172435c5a 100644 --- a/Tests/AppKit/ArrayController1/Info.plist +++ b/Tests/AppKit/ArrayController1/Info.plist @@ -2,8 +2,8 @@ - CPApplicationDelegateClass - AppController + Main cib file base name + MainMenu.cib CPBundleName ArrayController CPPrincipalClass diff --git a/Tests/AppKit/ArrayController1/Resources/MainMenu.cib b/Tests/AppKit/ArrayController1/Resources/MainMenu.cib new file mode 100644 index 000000000..a26484e59 --- /dev/null +++ b/Tests/AppKit/ArrayController1/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;K;21;CPCibObjectRecordsKeyD;K;6;CP$UIDd;1;4E;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;5E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;6E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;7E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;8E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;2;10E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;11E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;12E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;13E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;15E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;17E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;19E;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;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;33E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;E;E;S;16;IBCocoaFrameworkd;1;2D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;33E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;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;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;54E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;55E;E;D;K;10;$classnameS;15;CibObjectRecordK;8;$classesA;S;15;CibObjectRecordS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;56E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;57E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;59E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;60E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;61E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;62E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;63E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;64E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;46E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;65E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;51E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;46E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;67E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;49E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;46E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;69E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;48E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;57E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;70E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;44E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;43E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;72E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;46E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;57E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;74E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;43E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;57E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;76E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;17E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;57E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;77E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;33E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;35E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;78E;E;S;12;File's OwnerS;11;ApplicationD;K;10;$classnameS;21;_CPCibOutletConnectorK;8;$classesA;S;21;_CPCibOutletConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;10;$classnameS;22;_CPCibControlConnectorK;8;$classesA;S;22;_CPCibControlConnectorS;15;_CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;83E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;84E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;85E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;75E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;46E;K;41;_CPCibWindowTemplateWindowIsFullBridgeKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;87E;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;45E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;90E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;91E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;92E;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;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;95E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;K;6;$afontD;K;6;CP$UIDd;2;98E;K;11;$aalignmentD;K;6;CP$UIDd;2;11E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;99E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;K;16;CPButtonImageKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;101E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;102E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;95E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;K;6;$afontD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;2;11E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;99E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;K;16;CPButtonImageKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;104E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;106E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;95E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;107E;K;12;$atext-colorD;K;6;CP$UIDd;3;109E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;110E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;86E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;86E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;112E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;1;1d;2;-3S;8;CPObjectD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;ArrayD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;51E;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;51E;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;51E;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;10;Text fieldD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;ButtonD;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;6;ObjectD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;E;E;S;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;S;6;WindowD;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;13;CPApplicationS;15;totalCountFieldS;7;remove:S;4;add:S;9;theWindowS;8;CPWindowS;28;{{191.5, 185.5}, {396, 260}}d;2;15F;S;13;AppControllerS;21;{{0, 26}, {396, 260}}S;20;{{0, 0}, {396, 260}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;E;E;d;2;18S;6;normalS;22;{{154, 150}, {98, 24}}S;18;{{0, 0}, {98, 24}}d;2;45S;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;113E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;114E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;86E;E;d;1;0d;1;4S;6;RemoveS;22;{{155, 111}, {98, 24}}D;K;6;$classD;K;6;CP$UIDd;2;97E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;113E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;114E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;86E;E;S;3;AddS;21;{{157, 73}, {96, 25}}S;18;{{0, 0}, {96, 25}}D;K;6;$classD;K;6;CP$UIDd;2;97E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;113E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;114E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;86E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;108E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;115E;E;S;5;Labeld;4;3072D;K;6;$classD;K;6;CP$UIDd;3;108E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;116E;E;S;5;Ariald;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;52E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;2;52E;E;E;f;10;0.66666669E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file From b63e50dacb16fe35444cd911c9cbbe12268d1576 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 20 Sep 2009 19:33:03 -0700 Subject: [PATCH 012/124] Fix for the objectValue/value thing in bindings. Removed unnecessary code in CPControl --- AppKit/CPControl.j | 11 ----------- AppKit/CPKeyValueBinding.j | 14 ++++++++++---- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 21ef0bb49..ae0643715 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -149,17 +149,6 @@ var CPControlBlackColor = [CPColor blackColor]; return self; } -- (void)bind:(CPString)binding toObject:(id)anObject withKeyPath:(CPString)keyPath options:(CPDictionary)options -{ - if ([binding isEqual: CPValueBinding]) - { - [self unbind: binding]; - [[CPKeyValueBinding alloc] initWithBinding: @"objectValue" name:CPValueBinding to:anObject keyPath:keyPath options:options from:self]; - } - else - [super bind:binding toObject:anObject withKeyPath:keyPath options:options]; -} - /*! Sets the receiver's target action @param anAction Sets the action message that gets sent to the target. diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 5eb722778..b145920ab 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -119,8 +119,6 @@ var CPBindingOperationAnd = 0, if (options) [_info setObject:options forKey:CPOptionsKey]; - //_replacementKeyPathForBinding - [aDestination addObserver:self forKeyPath:aKeyPath options:CPKeyValueObservingOptionNew context:aBinding]; var bindings = [bindingsMap objectForKey:[_source hash]]; @@ -259,7 +257,7 @@ var CPBindingOperationAnd = 0, CPLog.warn("No binding exposed on "+self+" for "+aBinding); [self unbind:aBinding]; - [[CPKeyValueBinding alloc] initWithBinding:aBinding name:aBinding to:anObject keyPath:aKeyPath options:options from:self]; + [[CPKeyValueBinding alloc] initWithBinding:[anObject _replacementKeyPathForBinding:aBinding] name:aBinding to:anObject keyPath:aKeyPath options:options from:self]; } - (CPDictionary)infoForBinding:(CPString)aBinding @@ -272,6 +270,14 @@ var CPBindingOperationAnd = 0, [CPKeyValueBinding unbind:aBinding forObject:self]; } +- (id)_replacementKeyPathForBinding:(CPString)binding +{ + if ([binding isEqual:@"value"]) + return @"objectValue"; + + return binding; +} + @end @implementation _CPKeyValueOrBinding : CPKeyValueBinding @@ -398,7 +404,7 @@ CPHiddenBinding = @"CPHiddenBinding"; CPSelectedIndexBinding = @"CPSelectedIndexBinding"; CPTextColorBinding = @"CPTextColorBinding"; CPToolTipBinding = @"CPToolTipBinding"; -CPValueBinding = @"objectValue"; +CPValueBinding = @"value"; //Binding options constants CPAllowsEditingMultipleValuesSelectionBindingOption = @"CPAllowsEditingMultipleValuesSelectionBindingOption"; From 3635d0ec26f4806def72157954d5b209d49d8e76 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 21 Sep 2009 13:27:50 -0700 Subject: [PATCH 013/124] Bindings Checkpoint. --- AppKit/CPControl.j | 8 ++ AppKit/CPKeyValueBinding.j | 8 +- AppKit/CPObjectController.j | 2 +- AppKit/CPTableColumn.j | 39 ++++++++ AppKit/CPTableView.j | 58 +++++++++-- AppKit/_CPCornerView.j | 2 +- Foundation/CPArray.j | 2 +- Tests/AppKit/ArrayController1/AppController.j | 64 +++++++----- Tests/AppKit/SimpleBindings1/AppController.j | 99 ------------------- Tests/AppKit/SimpleBindings1/Info.plist | 12 --- Tests/AppKit/SimpleBindings1/index-debug.html | 35 ------- Tests/AppKit/SimpleBindings1/index.html | 36 ------- Tests/AppKit/SimpleBindings1/main.j | 17 ---- 13 files changed, 142 insertions(+), 240 deletions(-) delete mode 100644 Tests/AppKit/SimpleBindings1/AppController.j delete mode 100644 Tests/AppKit/SimpleBindings1/Info.plist delete mode 100644 Tests/AppKit/SimpleBindings1/index-debug.html delete mode 100644 Tests/AppKit/SimpleBindings1/index.html delete mode 100644 Tests/AppKit/SimpleBindings1/main.j diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index ae0643715..b43925a60 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -574,6 +574,14 @@ BRIDGE(ImageScaling, imageScaling, "image-scaling") return [self hasThemeState:CPThemeStateHighlighted]; } +- (id)_replacementKeyPathForBinding:(CPString)binding +{ + if ([binding isEqual:@"value"]) + return @"objectValue"; + + return binding; +} + @end var CPControlValueKey = "CPControlValueKey", diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index b145920ab..0da4c4b69 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -72,6 +72,11 @@ var CPBindingOperationAnd = 0, return nil; } ++ (CPDictionary)allBindingsForObject:(id)anObject +{ + return [bindingsMap objectForKey:[anObject hash]]; +} + + (void)unbind:(CPString)aBinding forObject:(id)anObject { var bindings = [bindingsMap objectForKey:[anObject hash]]; @@ -272,9 +277,6 @@ var CPBindingOperationAnd = 0, - (id)_replacementKeyPathForBinding:(CPString)binding { - if ([binding isEqual:@"value"]) - return @"objectValue"; - return binding; } diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index 9a1eab1d3..ed3a2eb22 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -401,7 +401,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb else { var indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self count])]; - [self removeObserver:observer fromObjectsAtIndexes:indexes forKeyPath:aKeyPath]; + [self removeObserver:anObserver fromObjectsAtIndexes:indexes forKeyPath:aKeyPath]; } } diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index aaf50090b..7516967d3 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -338,6 +338,45 @@ newDataView.identifier = dataViewUID; @end +@implementation CPTableColumn (Bindings) + +- (void)bind:(CPString)aBinding toObject:(id)anObject withKeyPath:(CPString)aKeyPath options:(CPDictionary)options +{ + [super bind:aBinding toObject:anObject withKeyPath:aKeyPath options:options]; + + if (![aBinding isEqual:@"someListOfExceptedBindings(notAcceptedBindings)"]) + [[self tableView] _establishBindingsIfUnbound:anObject]; +} + +- (void)prepareDataView:(CPView)aDataView forRow:(unsigned)aRow +{ + var bindingsDictionary = [CPKeyValueBinding allBindingsForObject:self], + keys = [bindingsDictionary allKeys]; + + for (var i=0, count = [keys count]; i - - -@implementation AppController : CPObject -{ - CPSlider slider; - CPTextField textField; - - Track track @accessors; -} - -- (void)applicationDidFinishLaunching:(CPNotification)aNotification -{ - var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], - contentView = [theWindow contentView]; - - textField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; - - [textField setAlignment:CPCenterTextAlignment]; - [textField setStringValue:@"Hello World!"]; - [textField setFont:[CPFont boldSystemFontOfSize:24.0]]; - - [textField sizeToFit]; - - [textField setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; - [textField setFrameOrigin:CGPointMake((CGRectGetWidth([contentView bounds]) - CGRectGetWidth([textField frame])) / 2.0, (CGRectGetHeight([contentView bounds]) - CGRectGetHeight([textField frame])) / 2.0)]; - - [contentView addSubview:textField]; - - var textFrame = [textField frame]; - - - slider = [[CPSlider alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame), CGRectGetMaxY(textFrame)+10, CGRectGetWidth(textFrame), 12)]; - - [slider setTarget:self]; - [slider setAction:@selector(updateVolumeFrom:)]; - [slider setContinuous:NO]; - - [contentView addSubview:slider]; - - var button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(textFrame)+25, CGRectGetMaxY(textFrame)+40, 100, 18)]; - - [button setTitle:@"mute"]; - - [button setTarget:self]; - [button setAction:@selector(muteTrack:)]; - - [contentView addSubview:button]; - - track = [[Track alloc] init]; - [track setVolume:5.0]; - - - [theWindow orderFront:self]; - - - // Uncomment the following line to turn on the standard menu bar. - //[CPMenu setMenuBarVisible:YES]; -} - -- (void)updateVolumeFrom:(id)sender -{ - var newVolume = [sender floatValue]; - [track setVolume:newVolume]; - - [self updateUserInterface]; -} - - -- (void)updateUserInterface -{ - [slider setFloatValue:[track volume]]; - [textField setStringValue:sprintf(@"%.4f", [track volume])]; -} - - -- (IBAction)muteTrack:(id)sender -{ - [track setVolume:0.0]; - [self updateUserInterface]; -} - -@end - - -@implementation Track : CPObject -{ - float volume @accessors; - CPString title @accessors; -} - -@end diff --git a/Tests/AppKit/SimpleBindings1/Info.plist b/Tests/AppKit/SimpleBindings1/Info.plist deleted file mode 100644 index 92ab8b53d..000000000 --- a/Tests/AppKit/SimpleBindings1/Info.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - CPApplicationDelegateClass - AppController - CPBundleName - Hello World - CPPrincipalClass - CPApplication - - diff --git a/Tests/AppKit/SimpleBindings1/index-debug.html b/Tests/AppKit/SimpleBindings1/index-debug.html deleted file mode 100644 index 392b37a8f..000000000 --- a/Tests/AppKit/SimpleBindings1/index-debug.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - Hello World - - - - - - - - -
-
- -
-
- - - diff --git a/Tests/AppKit/SimpleBindings1/index.html b/Tests/AppKit/SimpleBindings1/index.html deleted file mode 100644 index fbcf5a9bc..000000000 --- a/Tests/AppKit/SimpleBindings1/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - Hello World - - - - - - - - - -
-
- -
-
- - - - diff --git a/Tests/AppKit/SimpleBindings1/main.j b/Tests/AppKit/SimpleBindings1/main.j deleted file mode 100644 index b82bd4e3c..000000000 --- a/Tests/AppKit/SimpleBindings1/main.j +++ /dev/null @@ -1,17 +0,0 @@ -/* - * main.j - * - * Created by __Me__ on __Date__. - * Copyright 2008 __MyCompanyName__. All rights reserved. - */ - -@import -@import - -@import "AppController.j" - - -function main(args, namedArgs) -{ - CPApplicationMain(args, namedArgs); -} From 3cb3bfc008589ca69a56cb360d2e6901dff0d80b Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 6 Jan 2010 14:27:00 -0300 Subject: [PATCH 014/124] Fixed: CPArrayController selectionIndexes returned nil initially rather than an empty index set. --- AppKit/CPArrayController.j | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index d4364895e..aa90d0eaf 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -91,6 +91,18 @@ return [CPSet setWithObjects:"selectionIndexes"]; } +- (id)init +{ + self = [super init]; + + if (self) + { + _selectionIndexes = [CPIndexSet indexSet]; + } + + return self; +} + -(void)prepareContent { [self _setContentArray:[[self newObject]]]; From 2d93d12cad0666d3472ee8637a81ee17b2f09c5b Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Thu, 15 Apr 2010 10:59:21 +0200 Subject: [PATCH 015/124] Made bindings branch jake buildable --- Foundation/CPValueTransformer.j | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Foundation/CPValueTransformer.j b/Foundation/CPValueTransformer.j index 29bfcf6f8..c23e7ff95 100644 --- a/Foundation/CPValueTransformer.j +++ b/Foundation/CPValueTransformer.j @@ -35,14 +35,14 @@ var transformerMap = [CPDictionary dictionary]; } -+ (void)setValueTransformer:(CPValueTransformer)transformer forName:(CPString)name ++ (void)setValueTransformer:(CPValueTransformer)aTransformer forName:(CPString)aName { - [transformerMap setObject:transformer forKey:name]; + [transformerMap setObject:aTransformer forKey:aName]; } -+ (CPValueTransformer)valueTransformerForName:(CPString)name ++ (CPValueTransformer)valueTransformerForName:(CPString)aName { - return [transformerMap objectForKey:name]; + return [transformerMap objectForKey:aName]; } + (CPArray)valueTransformerNames @@ -60,17 +60,17 @@ var transformerMap = [CPDictionary dictionary]; return [CPObject class]; } -- (id)reverseTransformedValue:(id)value +- (id)reverseTransformedValue:(id)aValue { if ([[self class] allowsReverseTransformation]) { [CPException raise:CPInvalidArgumentException reason:(self+" is not reversible.")]; } - return [self transformedValue:value]; + return [self transformedValue:aValue]; } -- (id)transformedValue:(id)value +- (id)transformedValue:(id)aValue { return nil; } @@ -91,14 +91,14 @@ var transformerMap = [CPDictionary dictionary]; return [CPNumber class]; } -- (id)reverseTransformedValue:(id)value +- (id)reverseTransformedValue:(id)aValue { - return ![value boolValue]; + return ![aValue boolValue]; } -- (id)transformedValue:(id)value +- (id)transformedValue:(id)aValue { - return ![value boolValue]; + return ![aValue boolValue]; } @end @@ -115,9 +115,9 @@ var transformerMap = [CPDictionary dictionary]; return [CPNumber class]; } -- (id)transformedValue:(id)value +- (id)transformedValue:(id)aValue { - return value === nil || value === undefined; + return aValue === nil || aValue === undefined; } @end @@ -134,9 +134,9 @@ var transformerMap = [CPDictionary dictionary]; return [CPNumber class]; } -- (id)transformedValue:(id)value +- (id)transformedValue:(id)aValue { - return value !== nil && value !== undefined; + return aValue !== nil && aValue !== undefined; } @end @@ -153,14 +153,14 @@ var transformerMap = [CPDictionary dictionary]; return [CPData class]; } -- (id)reverseTransformedValue:(id)value +- (id)reverseTransformedValue:(id)aValue { - return [CPKeyedArchiver archivedDataWithRootObject:value]; + return [CPKeyedArchiver archivedDataWithRootObject:aValue]; } -- (id)transformedValue:(id)value +- (id)transformedValue:(id)aValue { - return [CPKeyedUnarchiver unarchiveObjectWithData:value]; + return [CPKeyedUnarchiver unarchiveObjectWithData:aValue]; } @end From 99bc5a018eaacf60ecfe90b0730aa6414f0d1ed8 Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Sun, 9 May 2010 22:41:07 -0400 Subject: [PATCH 016/124] Added segmented control graphics and theme method to support HUD style displays for CPSegmentedControl. --- AppKit/Themes/Aristo/ThemeDescriptors.j | 85 +++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index adc445107..5786c5ee0 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -788,6 +788,91 @@ return [CPColor blackColor]; } ++ (CPPopUpButton)themedSegmentedControl +{ + var segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 24.0)]; + + [segmentedControl setTrackingMode:CPSegmentSwitchTrackingSelectAny]; + [segmentedControl setSegmentCount:3]; + + [segmentedControl setWidth:40.0 forSegment:0]; + [segmentedControl setLabel:@"foo" forSegment:0]; + [segmentedControl setTag:1 forSegment:0]; + + [segmentedControl setWidth:60.0 forSegment:1]; + [segmentedControl setLabel:@"bar" forSegment:1]; + [segmentedControl setTag:2 forSegment:1]; + + [segmentedControl setWidth:35.0 forSegment:2]; + [segmentedControl setLabel:@"1" forSegment:2]; + [segmentedControl setTag:3 forSegment:2]; + + //various colors + var centerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-center.png" size:CGSizeMake(1.0, 24.0)]), + dividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-divider.png" size:CGSizeMake(1.0, 24.0)]), + centerHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]), + dividerHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-divider.png" size:CGSizeMake(1.0, 24.0)]), + leftHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]), + rightHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]), + inactiveCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)]), + inactiveDividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-divider.png" size:CGSizeMake(1.0, 24.0)]), + inactiveLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)]), + inactiveRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)]), + inactiveHighlightedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-center.png" size:CGSizeMake(1.0, 24.0)]), + inactiveHighlightedDividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-divider.png" size:CGSizeMake(1.0, 24.0)]), + inactiveHighlightedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-left.png" size:CGSizeMake(4.0, 24.0)]), + inactiveHighlightedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-right.png" size:CGSizeMake(4.0, 24.0)]), + leftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-left.png" size:CGSizeMake(4.0, 24.0)]), + rightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-right.png" size:CGSizeMake(4.0, 24.0)]), + pushedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-center.png" size:CGSizeMake(1.0, 24.0)]), + pushedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-left.png" size:CGSizeMake(4.0, 24.0)]), + pushedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-right.png" size:CGSizeMake(4.0, 24.0)]); + pushedHighlightedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]), + pushedHighlightedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]), + pushedHighlightedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]); + + [segmentedControl setValue:centerBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateNormal]; + [segmentedControl setValue:inactiveCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateDisabled]; + [segmentedControl setValue:inactiveHighlightedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; + [segmentedControl setValue:centerHighlightedBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateSelected]; + [segmentedControl setValue:pushedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateHighlighted]; + [segmentedControl setValue:pushedHighlightedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; + + [segmentedControl setValue:dividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateNormal]; + [segmentedControl setValue:inactiveDividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateDisabled]; + [segmentedControl setValue:inactiveHighlightedDividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; + [segmentedControl setValue:dividerHighlightedBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateSelected]; + [segmentedControl setValue:dividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateHighlighted]; + + [segmentedControl setValue:rightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateNormal]; + [segmentedControl setValue:inactiveRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateDisabled]; + [segmentedControl setValue:inactiveHighlightedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; + [segmentedControl setValue:rightHighlightedBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateSelected]; + [segmentedControl setValue:pushedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateHighlighted]; + [segmentedControl setValue:pushedHighlightedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; + + [segmentedControl setValue:leftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateNormal]; + [segmentedControl setValue:inactiveLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateDisabled]; + [segmentedControl setValue:inactiveHighlightedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; + [segmentedControl setValue:leftHighlightedBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateSelected]; + [segmentedControl setValue:pushedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateHighlighted]; + [segmentedControl setValue:pushedHighlightedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; + + [segmentedControl setValue:CGInsetMake(0.0, 4.0, 0.0, 4.0) forThemeAttribute:@"content-inset" inState:CPThemeStateNormal]; + + [segmentedControl setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"bezel-inset" inState:CPThemeStateNormal]; + + [segmentedControl setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font"]; + [segmentedControl setValue:[CPColor colorWithCalibratedWhite:255.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; + [segmentedControl setValue:[CPColor colorWithCalibratedWhite:0.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color"]; + [segmentedControl setValue:CGSizeMake(-1.0, -1.0) forThemeAttribute:@"text-shadow-offset"]; + [segmentedControl setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; + + [segmentedControl setValue:1.0 forThemeAttribute:@"divider-thickness"]; + [segmentedControl setValue:24.0 forThemeAttribute:@"default-height"]; + + return segmentedControl; +} + (CPButton)themedButton { var button = [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 20.0)], From 16bf635acad02d32bffd18cde5cfe4b064132a5a Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Sun, 9 May 2010 22:45:03 -0400 Subject: [PATCH 017/124] Added images that I missed because git doesn't do recursive directories. --- .../HUD/segmented-control-bezel-center.png | Bin 0 -> 164 bytes .../segmented-control-bezel-disabled-center.png | Bin 0 -> 139 bytes .../segmented-control-bezel-disabled-divider.png | Bin 0 -> 121 bytes .../segmented-control-bezel-disabled-left.png | Bin 0 -> 227 bytes .../segmented-control-bezel-disabled-right.png | Bin 0 -> 228 bytes .../HUD/segmented-control-bezel-divider.png | Bin 0 -> 119 bytes ...egmented-control-bezel-highlighted-center.png | Bin 0 -> 154 bytes ...control-bezel-highlighted-disabled-center.png | Bin 0 -> 159 bytes ...ontrol-bezel-highlighted-disabled-divider.png | Bin 0 -> 121 bytes ...d-control-bezel-highlighted-disabled-left.png | Bin 0 -> 241 bytes ...rol-bezel-highlighted-disabled-right copy.png | Bin 0 -> 2922 bytes ...-control-bezel-highlighted-disabled-right.png | Bin 0 -> 246 bytes ...gmented-control-bezel-highlighted-divider.png | Bin 0 -> 121 bytes .../segmented-control-bezel-highlighted-left.png | Bin 0 -> 244 bytes ...segmented-control-bezel-highlighted-right.png | Bin 0 -> 246 bytes .../HUD/segmented-control-bezel-left.png | Bin 0 -> 225 bytes .../segmented-control-bezel-pushed-center.png | Bin 0 -> 145 bytes ...d-control-bezel-pushed-highlighted-center.png | Bin 0 -> 145 bytes ...ted-control-bezel-pushed-highlighted-left.png | Bin 0 -> 225 bytes ...ed-control-bezel-pushed-highlighted-right.png | Bin 0 -> 225 bytes .../HUD/segmented-control-bezel-pushed-left.png | Bin 0 -> 225 bytes .../HUD/segmented-control-bezel-pushed-right.png | Bin 0 -> 225 bytes .../HUD/segmented-control-bezel-right.png | Bin 0 -> 227 bytes 23 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-divider.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-right.png diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png new file mode 100644 index 0000000000000000000000000000000000000000..1e82207f01603708d0cb51ce752a7759764dca1d GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6}fr3IEGZ*$~m=B@PGk_b6~3v6PsJYz8)Xn#Y+k%9y+`G zw-w`o=2eT%@I3M6IBCE9ZGmH&kl@C`@}#w{Gj6(tR+fMN%4NWyVWX#ifMJIY&_o7L LS3j3^P6|6H_V+Po~-c73q4qIEGZ*N=iyd@JKK+HttUU_4Tzlv+#t|2fqCOU!TG> lTcS?2!k4j;rGbH&VH%I&#z%8Cp8z#7c)I$ztaD0e0svPAD~bRB literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebec04faefd9d16ea301579c5350d93242623f3 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6-j%#IEGZ*N=isb@L))4`|G1HNsh%>z?g|ef}vw0qo3`~ SnTvtS7(8A5T-G@yGywqn=^)Yo literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..26ddb947c71c44e52c6b08f6bd060165f3792ba0 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6}5W0IEGZ*N=j^C@Ki8kOA>TbP+Yrc(Ij;Rg$0L?96557 zN#)FsA3whQ|M&Owzvt)W*_PG+|M&6#|Nrx4I}TPwI|6H_V+Po~-c6}5S~IEGZ*N=i#e@L))iRQShpBwpg|nKR%1|Nj2|c00fP zx;s0I(}hm2kKZpLAt|}@$B!RhX3m&#CZge##J~Ul`4`=2)cP5@KxT#la|{EU0m}@D z3k-?6R|FIeM`i60$zuz6q|VKK+J6IA!iC!Z-`?I%Wo2#Mt#FcMflte-RjckU^`3r% ck%@<4TUHcDQ^4b=Ko>E1y85}Sb4q9e060cjRR910 literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7955d2d261b73f5708102469fe318fec798537 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;{6nVNhhE&{2N=Qh^U`T5FU!pvtkww{|fsw)Hj99*ORL*ap OA_h-aKbLh*2~7ao{UK!l literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-center.png new file mode 100644 index 0000000000000000000000000000000000000000..920b7280b460c3c0dd3a45f4f89230c9debeea90 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c71?;YIEGZ*O6d*cVo>05N@ZW$x2gEObGEX^4EaaSE(`@d zJ5vN17qbLQR!*F`#O2$g$mkdPCG)s~_pwSaIGfpDf3>`N3eX$|Pgg&ebxsLQ0IbX~ ADF6Tf literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png new file mode 100644 index 0000000000000000000000000000000000000000..15fd9d92946b1dd87a6ff56db2aac316955016e6 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6*+pkIEGZ*O6fhx$)F&>{P@=LTPu%di2nAl5fJ&)!sFb* zsG;~Y=|6H_V+Po~-c6-j%#IEGZ*N=iyd@JL`1`l!&zopr0RIaiPXGV_ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..1a82ba435a3460e5864e6bbbeb484a38cceee71d GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6;1YZaSW-rwWRML7n326%j8*?Tm_G=e(iMd9?Qplza$@B z%)i&KnR8QZnS$Ia$14X|jLt|mF(ibzUya+U5W9SzeSCRr`G#xfPD%)G%Z(P&Tgr0e z46nkjGd!tWOn+?R+ODv5ha8huGClOE{AK#%<^E5*gPdI+Px&0NVA0I)b+XAZme+Fx pE*>)AIW2I=b+S3{9eE}mhTkuIqdS#lt^l3K;OXk;vd$@?2>>RcU5Nky literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png new file mode 100644 index 0000000000000000000000000000000000000000..23587f0959f78991166852335ce5e9da0941cd39 GIT binary patch literal 2922 zcmV-w3zhVVP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0001$NklB@0i>dOd zH}Vxs8)j2PC&-M^-@&Y>_V4Hjq?CFQ=|xpZDLwDE>&biH0aPNg4|6H_V+Po~-c70vK;aSW-rm6Vo{;K7g-s*uM1C|sxTBj?Bc_5c5U`*Crx zwtJsUTGFqtuf+qJ8oi_3+~#+7dQN?M|Nnm;9)~k0PMrAn{=PlmwEqf>Y!f6}(tiGb zFVAe$kl`rk5dQJM{jO>C8Br$;rfgt{)cfndYM}uy(Ad8x4;}g>yoU9}&wuaU&OZI= u)2DvNNt_NdIYL82cY9CQ`^dy1!7$-f@~;}5%R7K>WbkzLb6Mw<&;$TQNN79& literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-divider.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b2c7250c83d12599062f4da99084b4011d41cc GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6-j%#IEGZ*N=isb$Y4ln`|qPLNsh%>z?g|ef??A~#&w3; S(FcLb7(8A5T-G@yGywntav|6H_V+Po~-c6;1PWaSW-rm6Vc@kieEytzgEGWGANZFe5oRT1Q(w{p_hz zr%oR_awJ7XS2>w|%7b5DUyC!J-e3QJhlGUW&VT=YA7@}v(B=8RKxW5*`jW=_|Nj?r zCS?5VU-$HWeHX8)j>9zX|C19mgt@s-f48syU&oxul$hq~>UuH%{=Uvln~OaRjEpuJ r#_THb3|6H_V+Po~-c70vK;aSW-rm6Vc@kiqcC-=T)FgWu@bQT0Fn|Nj2|{CK~d ztZmVg0{zSDEkz0}Lmpr+xirAIuGOBZH@_pUXO@geCx5on*2A literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e9803249705735fe3f956cb319055ab0cbc0887a GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6*YUhIEGZ*N=j^CP*o^nOwx2ySjfaOnU#fQ&CD4yDk2+N z*yZKt-@U)Te&@eGKMx=H^8UX4#Q*>Q7c&}0=yP{4a2Xw7h+t6b4sGaUWj&M6ZTQc_Zqca*#oTE1#kmO;P*o)rri6%H^= XxZrU*&q(Mr&^ZjAu6{1-oD!M<^hZ#q literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-center.png new file mode 100644 index 0000000000000000000000000000000000000000..a5881501aa7bcc4ed7e6af84052dff8832582ad4 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&ZWFIEGZ*N=isb$VdnY4*q@q%kS^`Y-(<9Zft4`B&M_~ rTsX2p^Wb`By<>kK9p!dwU|?o2EoA?G%kR!1pmqjNS3j3^P6|6H_V+Po~-c6&ZWFIEGZ*N=isb$VdnY4*q@q%kS^`Y-(<9Zft4`B&M_~ rTsX2p^Wb`By<>kK9p!dwU|?o2EoA?G%kR!1pmqjNS3j3^P6|6H_V+Po~-c6*YUhIEGZ*N=j*9P*o^nOwx2ySg53{YddrH?AuZ&o~0%x zC4GAE;K7F9pP%zz|NsBLNDJc&SCI$^>bP0l+XkK|Lsqz literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed9302ffafd3541a01782d30633e294e2555fbb GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6*YUhIEGZ*N=i#e$Y4k^RjA`X)RUE!^}n&_eEj}8+h1Q^ zUXGb|e}BEPfsxUtqJn}OhK7cf28@_(qYko1;0N%Jlw9##lgTe~DWM4fEvr(W literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-left.png new file mode 100644 index 0000000000000000000000000000000000000000..3077ebaf054c35820844755815e10c6b1a560506 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6*YUhIEGZ*N=j*9P*o^nOwx2ySg53{YddrH?AuZ&o~0%x zC4GAE;K7F9pP%zz|NsBLNDJc&SCI$^>bP0l+XkK|Lsqz literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-right.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed9302ffafd3541a01782d30633e294e2555fbb GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6*YUhIEGZ*N=i#e$Y4k^RjA`X)RUE!^}n&_eEj}8+h1Q^ zUXGb|e}BEPfsxUtqJn}OhK7cf28@_(qYko1;0N%Jlw9##lgTe~DWM4fEvr(W literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f9cc2fc65defa3c799c252866f0b6dd81333dc0f GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6}5W0IEGZ*N=i#e$Y4k^RjA`X)RUH$_W%Fi-`{^8Zs&J@ ze`n|9)1O{n*JpEcbBnXHv$IxHQ{xv~VAS^i|NmwUy#-!^VjApfCm6&V7zpwUpnTw<2LnV(*j2gkqR;`k%d3j0IuYrM? Z!TeR!giQA}JU|CAc)I$ztaD0e0svmqP}l$f literal 0 HcmV?d00001 From 4020f9c6c2bab4bc29212bffd6399f2169ec87ff Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Sun, 9 May 2010 23:49:52 -0400 Subject: [PATCH 018/124] Adding images for sliders. --- .../Resources/HUD/horizontal-track-center.png | Bin 0 -> 130 bytes .../HUD/horizontal-track-disabled-center.png | Bin 0 -> 129 bytes .../HUD/horizontal-track-disabled-left.png | Bin 0 -> 182 bytes .../HUD/horizontal-track-disabled-right.png | Bin 0 -> 189 bytes .../Resources/HUD/horizontal-track-left.png | Bin 0 -> 185 bytes .../Resources/HUD/horizontal-track-right.png | Bin 0 -> 193 bytes .../Resources/HUD/vertical-track-bottom.png | Bin 0 -> 184 bytes .../Resources/HUD/vertical-track-center.png | Bin 0 -> 126 bytes .../HUD/vertical-track-disabled-bottom.png | Bin 0 -> 184 bytes .../HUD/vertical-track-disabled-center.png | Bin 0 -> 126 bytes .../Resources/HUD/vertical-track-disabled-top.png | Bin 0 -> 211 bytes .../Aristo/Resources/HUD/vertical-track-top.png | Bin 0 -> 204 bytes 12 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/HUD/horizontal-track-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/horizontal-track-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/horizontal-track-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/vertical-track-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/vertical-track-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-top.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/vertical-track-top.png diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-center.png new file mode 100644 index 0000000000000000000000000000000000000000..b565d8e6aaac9d3df1fe9f2ffab4f912ae2ec746 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrF!3HE-TH59VDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MJk>yjv*Ddl7vJ>Z4WP5w5VvBXK?Umx$Zf0?o=;x@0a6b bVv%6*KE}Rk+D?gHpn3*RS3j3^P6DSr z1<%~X^wgl##FWaylc_d9MarHojv*DdlEg$seUqSU=T+3zzt4^I^z@We aIKW`?lx3cB+;nfCat2RVKbLh*2~7Zne8U}fi7AzZCsS>JiXuE+978H@sdPAU9Z=vokf1BJM6AE7y666D@xKQX+GAfO zSj^nuz{e>R7!l@jhcRJMN61ghImOJ$J#&I~6`gywSANH%nBr+cd1-Zyq4Tdr85qCX dn?Ij{nW0%gLV!OnXbI2`22WQ%mvv4FO#qlhJ>&oY literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-disabled-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d752a54ec809e468c65882636680fb8b8a6d5dfd GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c4!3HFg*81KCQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JisC(8978H@@tiW`YETeiOQ`;r5U|bCrGkO|ylBO#J|T%6 zrk&rM79Qi@cTi&U_j@b1mKlCl-1~j@wOvdzS_QP{6qjqVYA)^U5R1s3KWFort*7eu mbQt#8FPQR3;LuM_0|s$MRoR*9CuaezV(@hJb6Mw<&;$US1w!5c literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/HUD/horizontal-track-left.png new file mode 100644 index 0000000000000000000000000000000000000000..05ff0804eeef7537da01fde7f8611f7209b8fe36 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c4!3HFg*81KCQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JilRMT978H@C8eaNPiJ|=CMG7votE~@zGu;*MaDmW{77m1 zp(`zYn_rBPk&#njhrXuf&#vz7*XrC8iiI_PxJO0(vgPML@Bi%FxpV&8^X^Xi_3Nwl h`R)1lBN&-@78U}fi7AzZCsS>JijqBD978H@F@!R#`p+UNDth+s-@hz>{`@)d^XJb7W?fxf zQ(j))w=66y5^_AUiwzr>v~3wM;w=-qTcHu1u9S2g);ey85}Sb4q9e0E(PK&j0`b literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..bdec637443d0bd4476d12e518f1eab328cabd9c6 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1d!3HGVjK4YnDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MNytEjv*DdlEMN4ems5s`uF+!_v5)wl>Ptl@iC)XUEROp z>+52Re|&n%{rl?baM{X=igU(GmoA<9|L5oS?7O>4g&j-6!ooNo|NsC0ri6sVlg1hR h9rlbLof{aK8JyoLKP>N9eGX^~gQu&X%Q~loCIC9{N|XQq literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-center.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-center.png new file mode 100644 index 0000000000000000000000000000000000000000..2fbcce41e702f1f7da4638646e767356d356670a GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1j!3HG7{-t~dQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiWEFu978H@B~6DSr z1<%~X^wgl##FWaylc_d9MNytEjv*Ddk^%z)R&3q6)s|z)e%qQK6Fy&9= z>tlB>`|$L%__NjF>$N_8_+XRn7+(2rwj- hDg5I+BG16Y!w~URCB$22rvT6v22WQ%mvv4FO#rn}NJ#(y literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-center.png new file mode 100644 index 0000000000000000000000000000000000000000..25675211c5931f71b1e4415d97a9c8ed0ecdd646 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1j!3HG7{-t~dQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiWEFu978H@B~6(=J-?u=?4Gi^`uD#V7rW1?{{F6%k;8z& YTae?v=)T);fod5%UHx3vIVCg!08d;e?*IS* literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-top.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-disabled-top.png new file mode 100644 index 0000000000000000000000000000000000000000..12abe0927bdf9ce57dc180f06f7dc1262bff5ed4 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1h!3HF`e}{MjDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MWvoDjv*DdlBP_b{yaG$;R9QesKP$xBhiwgA|j6(cKDkCk{n8E) z6c(P4@Ziy-UxyDL{w$txL|#B%=LE}?mdK II;Vst0A(Lh&;S4c literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/vertical-track-top.png b/AppKit/Themes/Aristo/Resources/HUD/vertical-track-top.png new file mode 100644 index 0000000000000000000000000000000000000000..a27c09e56a6f26ffe8b7ccdce3e021f6ab9d1b94 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1h!3HF`e}{MjDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MR}esjv*DdlBP_bK0PfVVFud~Ifp&W9h+xJNJ@$`Y*Z5$ zzaA#Qd*t+t2BU9AMn=`4At8ATFKz$-|GzzrNoY+_P>_B@lm3#WOXHbD4Vy!Z7`Fa< z^6=r$lP6F96h6YvZDeTpH$5%wAO9l9ng#}DhFgUazg|u``4DI`gQu&X%Q~loCIAJ^ BNbdju literal 0 HcmV?d00001 From 5c2e6c8ed881aca8627bd4f7744b7005b4617c4a Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Mon, 10 May 2010 00:09:51 -0400 Subject: [PATCH 019/124] Matched up the knob images to those in the file and split them into HUD as well. --- .../Aristo/Resources/HUD/knob-highlighted.png | Bin 0 -> 1122 bytes AppKit/Themes/Aristo/Resources/HUD/knob.png | Bin 0 -> 1055 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/knob.png diff --git a/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png b/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..68fa561525fbbc834ce0da4f3faad942dfac48fe GIT binary patch literal 1122 zcmV-o1fBbdP)aCc zrsH~2N+lAkk|@xqNEDC|qTnK;h=-6^u1Vu3&`V8I5Kpnwo9PAn%% z6QTf)<2bexCyt+E&x?CUXVU950XAIe)6vzL`OdlLp8Fl{?XQ;Ml*J)<0)g2(2#dgG z_75!a6jC02J_3ng0QWo+ngl(9E`fo2`*@J!PX9&&`gb~98=g{vhN^nR}MH~>+2|9QZnEw8LzU%K;61}2{U0)k-)@5;i`P-_WS=5BFV;}B-7IeYnwcILbHQqMi5 z-F)cd(_tZ@lVSy7zqaJ4IE&*x8uDI}2c$1)k{?8UT#uf##Fsqn{~0 z|MVl+-z~$~*qCcS`}lUB-{Ax>TD1f=hm0-Fv)$tMv8n4JK@iDL=225O>orgm1!P%< zZnq2NN~O=w^8)?Pk6Xdx5}8NgHooOJ4YER%$Xkz2JO=gJ0SJNsk|e?S_=KCWw>q5; z`Okf&z-UgNR&-t0Kp0sj>%#dA}^{zpsH$x%4YaLJM`q@-nC74XP7E zS5tR$`R%QhY!*yXSBg$Yhrc!pu)MnNTDtdq*@ZL|s)w1OnN%8erh$C6N8Uq)+v5bW zHgf&-PZk%`^~}O=Zic6U`j?in^~f`Ceu>0;$kX#)C@ZS@M zK%Rpr`bbyspp&wcceWwBn1+0%nmM1kbz6$Wsc>x(R8SpVat`Wn9AU@mm=$}iEU=N2*JZGtjNZ`)Hvju~?&>G=qw=f~F}Q;Pk6 z(sQrZ4J?g`Ek%FW#S_WQB+{`f8d&3hokVN^3vCAjNO&ra83tWM@4wDaI5ye669^}a oIg5GOCr*FPaUA%+*53jQ0Ah6@HgJ)rNdN!<07*qoM6N<$f}j=&ZvX%Q literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/knob.png b/AppKit/Themes/Aristo/Resources/HUD/knob.png new file mode 100644 index 0000000000000000000000000000000000000000..410f71ceb894e93146f43064928e2701ff23c970 GIT binary patch literal 1055 zcmV+)1mOFLP)Ne`u>D53?$iU%IFo@l9v78N{D1W}797D0cAqKFrW7bw=FRHfpHMf@iyf>&xh zN}Ke^Zq8=2>8|s(lXTNI{_7719GsG$1EeuGK|#FzzB}i*ayQf@y*LO??P?$ zYTQ6cp?0ZsjaQ9Q>BBX#Pq_Y;4XgSwV_{K)(;Fd}zOMen3X{pSkk#p@uq+DL4Y_msYMSn73fj8T-V-id<_BSj?GVF=avz z$3u^Yhqm?(`10NH{MEDO-H#qLIEjyN;o5EGfUPxa6T_kguHIBTb>{5y#_45~Ew=n| zzE^R=Iy)J2lwt+N47X3qD(6!Ns|TXdXi`DFKvG&#Tr_v*z5~_hPm?|*Eck6SXJu8&ObP@;p}4}+(+$_JT!7D? zK0;CH6sXy<4a}A-MJI|Pu&fR&S=m@3w`qcf!ORidK&qlxAP%BRZV+Hkmm6$0n=)U$ zcrHQj5A}kU)!B*vC^ca2x|ME-q0R$3|aY9}vGF1!jh8f6TDN zb6jgM7)-eKlI2w}HZNZR!FgHLngl)CdwJd&>)7F#qeA%k!_hLvYAs9E4yXcQ85Xao z0;9nI0g`A}XE%t^fv|YJJhVE#z9gR!iZcWptwT>58yX8H6jm~fCO17jy-^O= zY_0ozK5(`=K0La2r->|s6lX|Sa5ErABAv}m4^FsTF2Bd)Q5Yr@)VtkoKe0bUe7n#e zt21eb5-}4QHzsFn*`nnucjV?5lp098YgraF8V#u;2?zlQ_4Y#Bub-cqo9>@=wYR+| zK7R&x=-`J-d0XfKIYjcx=Pz7rE1Xn5IwLbrt7Q$M7zz2j{2!;|TT9D}r%xzoI|UZ@ z96BbQs;~R^t4IU`j%}Dt4~sQOl*ZOWL(z?)N8sHDjw+AV>EnloeHC#?u{WB|$jGQP zSpUHiZSMd*q!(>>?LQ*PQsOT&+0P=@R177cRW*oA%T1&NWOZ%FJ5~+;-~FIR6#TCM Z0{{}O=VnMT&CLJ+002ovPDHLkV1jBJ;tBu& literal 0 HcmV?d00001 From ce4e8dc8b7c82409552c106163303fc191466a06 Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Mon, 10 May 2010 00:23:19 -0400 Subject: [PATCH 020/124] Moved knobs down a pixel. --- .../Aristo/Resources/HUD/knob-highlighted.png | Bin 1122 -> 3822 bytes AppKit/Themes/Aristo/Resources/HUD/knob.png | Bin 1055 -> 3748 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png b/AppKit/Themes/Aristo/Resources/HUD/knob-highlighted.png index 68fa561525fbbc834ce0da4f3faad942dfac48fe..5c4387a55c16f7d4b2ed6a433e9061a4dae1027c 100644 GIT binary patch literal 3822 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000CTNkl{c|)l1)H7=8Xr zx_V7{D^IBL0M9ryaYhr4yCvhazdFCKmHFYL@fV&+pL+ErOe;p!X^_q3@imQje?P~L zK1m1O(9MfK9@qMk8O`kU07py#E#uI{8AEvP1(LM9LHF|aA5OgX;=rQ^4v<~UQ?A)K zjV7&D3#ZYfT(c>bHb@R9>D?JKZ(jN(ZtNYq9(w2o;Oat&DVg`G8^0bsa&UiYSKlKP zR!X?8yR8*gN(>~1Ir3QYu)2Qns62kR;OW5!G37D4RQ}G>@qqzqwvAE>r4)tyGUv~o z<%751;QYC>6!OdMSk1OcB$KG++sEb2I)!FK4|R$OpsMTXsA;tiE2a42vyWL@DKIiJ z!rDrK&p)}aDeh|qsDZ70IuV78%6}B+;&q}%NryT2`tN^(P&U87B|Ip z-N1F6n7BrO6$yQc7J%pbl}e@3ZCO_P@Z+OTP~KR_Fbqu7!<08#i-gg`Qj?dy-&-nKW`FE?EhUPp(Z-x1(`R13Q+1fHhwuf zzqoL1W(HTexXPtocep#3WA?@^?#|_?*PV83W@?gL>0YMi`1qvgOhxco0eDjsZdEfP z8~rEW`gD4FvYeT^f^yw$Ei-k6t5;{r@#o(8N`O}dry2avu;lsx(cN)ksnMzIqH_^bX~`>Z3@ea%uG)*Uo2(zjGwt+#)p@H1)wPE*aTYIdtc9nRk1UqiV2{% zaPiwCmA__AsOm=AcU89*iB_UryR+T<4*fRp?8LNWya*ITdhI|J1Muziyg#JpTi3l1 z6>I;b=RvP4p~jV#Dg!H0krkRmj&wyuIR4j36u!Wdy)GA+Qk51O1`V<1f1ROhne0IY k#zV%O7y8)`o&J9h0Qj;XJT3D4IRF3v07*qoM6N<$g6I)E$^ZZW delta 1101 zcmV-T1hV_?9pVU(B!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o000C8 zNklwI2fj}%^!3LI~fDkQCEGJ46q5zKLIJOffj-O-Ci+_7ZXVU950XAIe)6vzL z`OdlLp8Fl{?XQ;Ml*J)<0)g2(2#dgG_75!a6jC02J_3ng0QWo+ngl(9E`fo2`*@J! zPX9&&`gb~98=g{vhN^nR}MH~>+2|9QZ znGS(bSqemPEqL!^Y~*(^KP@66b~=g7R(^Ow&9S)E`yi zF!hK!X@A_CpT^4%As_EO5D70cXq5hVG7^nKtK9~}FkF;NJMiHL@54K9yy{xI_k8p_ zMODGr*_gpQ3t*WAp6L`C0F35==9A>3pD8~7^ds2cEyLK@m}@`#_;#P);RG;RwFEYY zj4jQx-QxDKsp}y@5Xn#GQBybTHBb}q5;`Okf&z-UgNR&-t0Kp0 zseiHuhIzj%>%XsoPr39fNlgDCn)SMZ>dvXpnWA-kA{e5IN> zpSpEhio~gKZ4p#Z9bIw`Cz03d0Y(+6fQ8HRUr#mu%w98^HO(=N5GVQ?zTjXkbn(hB z(WmDYG2?B5GD>gTQ$>y$b0_Kf2&3o6*CA7i{eRMPuh$JMjfpKqf7rzn$;>3uu|_Kz zSmS@4L~H;HZ3hELcq)z=23KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000BeNklx1>nSCugb9YiOioR6 z<1hb}pDvFcxG;2X0#FCPI&A>F+WUOIEV;lvFZbQ|&?D``543IZ*4J)CiNu(mSMdKc z%{sS}BA1K%+qO{VDd~`9`KoD}9p8U<{^q`y_Nbqq_$E7pT;>uWmwG%E{f9rg{OH3E zHp(tHK_yaf!MvUl5(`nT{_^Y3@4U5t51;^=DL^gDSi5>(dF_SG4fiz0Rh__G5M9>` zMqn<8nueC<{DL^cr$&hz#0LH@XYji%PE^zPk9 znYSDOP1BHN2j23EZs4?7V0Afj8{n25&Sq89&~oDB@j*g!0qX1P3C#sK@x^C(`Gv$H zcG=Mgtji^w%iIb$kfim7VPY71HW7=4@%el>olaC$B``aSrY+@7(*#K>0%U=+0$c(t zYBITyOeTx1*6bLXT3U&Q6|7b(4u^y0<`y(f%jVPRG-@r@eL_BR0|tSIC0csy^~ zPwniYs-~87I!#qgEzflA&dbN+aU$XHM8>hJF;4^Pt-t+a8+^Vtn|&!2OPcK1)kTrp zO)QaMW_BJ;Uy>yf2{Z1$`6G}LI4i()AaQZ{+;H8dhE7ScR2LT)-%V&b6SpT<-Rse4 zl!}5Ytkr+0l`qBQrBI3!zX5P1g%XC=?^jLfEb_^ zbSO{;Y}`;;)wX@-v-_)S>ss9|7j{|3VzFQt23jgbVsVkl+qbTdj(q#+%+%y>z@6m| zUEa7XfKwEx1Zvu!*tVm-VRQTXlF}NxU3P0)DiMu@?@ajr92@)L(nSF}C4kj8-#u)6 zJkbB&T@fe-%7F?|EMpK|Xd4nz%mYzCJ#gp)1K^Vn-&?gS0vMSdE$#|X1UN)tL)bee ziYx;98wcMvOe6n1E_7IAOeF~d_8fzlV!LUAfSJ3uvyROL|KAjFn>41jNm{V6wT)Iu52d0gq6Ni@2OhMZXsL)66+BP`QHv-R zL4Sy%h!=<#DAuD?rQ(T2{3j@aS86;;oAk(T&StaeuJg8&bbr$}{_7719GsG z$1EeuGK|#FzzB}i*ayQf@y*LO??P?$YTQ6cp?0ZsjaQ9Q>BBX#Pq_Y;4XgSwV_{K) z(;Fd}zOMen3X{pSkk#p@uq+DL4Y_ zmsYMSn73fj8Grl4!irpL4p_{YU@>Jv5644~hljTI4*2rj@%+`Z=G~7TG&qTmaN*i* z<$$d?!qd|Y*RNcF&!0X*QRx(@*|H7HmMldliXyPA4lG&OSR%J+ zf`!4%5r5o3s-jpR4x&nK5MWQ28*Db4GGD!TE( zL6V|zMZm{{)oKO3UJrsGfV;DkfDY)D5HpMsb4GE7fMcvQLOARXhr{V9DRCPpDk%jY z&jIe~bUG+5E>RfAMqgha5WgS=W`=8j%&^3BTz_jY7)-eKlI2w}HZNZR!FgHLngl)C zdwJd&>)7F#qeA%k!_hLvYAs9E4yXcQ85Xao0;9nI0g`A}XE%t^fv|YJJhVE#z9gR! ziZcWptwT>58yX8H6jm~fCO17jy-^O=Y_0ozK5(`=K0La2r->|s6lX|Sa5ErA zB7dFDO%G1ETrR)I<53tU6V$uiZa=XCq91$cj(}UOL<%90XanS%I7a!Y%82p zJ~|^aPpf4Oq8JJJy!;=h<6BG1i>FU0Xn#8e7WN!ECY`FU`}eCz1Otw3m`x9hHAs}k z)2-3N{;kJjnqhlhO?aY(T@n$F0`s5Dsr!4hrn06nA^ZFlWIBFR$XFEiQC zBGyz4C7@L`h)l~(qy%JjZO1!S4gTN#phpz^uK)u860PTENHNXL00000NkvXXt^-0~ Ef*(WUp8x;= From aaf5c7581cb9d66cdf8d8e7a64942c758eb29628 Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Mon, 17 May 2010 22:49:25 -0400 Subject: [PATCH 021/124] Moved the non-highlighted version of the knob down one more freaking pixel. --- AppKit/Themes/Aristo/Resources/HUD/knob.png | Bin 3748 -> 3694 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 AppKit/Themes/Aristo/Resources/HUD/knob.png diff --git a/AppKit/Themes/Aristo/Resources/HUD/knob.png b/AppKit/Themes/Aristo/Resources/HUD/knob.png old mode 100644 new mode 100755 index 77fe7f5e0fef267908fff247c4c6595b6a64e055..bad25cf31fa7e7e4272f5afc7f5565aeaaac5ff2 GIT binary patch delta 3674 zcmV-g4yEy=9qt^EBYz4(X+uL$Nkc;*P;zf(X>4Tx0C)kNmUmQB*%pV-y*Itk5+Wca z^cs2zAksTX6$DXM^`x7XQc?|s+008spb1j2M!0f022Sbr4m>%m+S6U)T+0vHeh z4p;%e;bvw8NBBen)cn0YnVG0a#2diz!JCV%YDoJ5ztS`M50QMwW zn;o;hl~n+=Z3aN);jB;ZAOP|O0JPqm^B#t5UXsM(3?~bV?CflF0iSCwE9f`-pMr17 zzlJ&Ynal3`Ry(E_KY=4j6*FZ;<)){mOGM1f3=WsiWc~LL|Kq?pY0b&QES#Uf7x9JY zRZ-}a34er%XuE|xfmo0(WD10T)!}~_HYW!eew}L+XmwuzeT6wtxJd`dZ#@7*BLgIE zKY9Xv>st^p3dp{^Xswa2bB{85{^$B13tWnB;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1 zbf5|}fi5rtEMN^BfHQCd-XH*kfJhJnmIE$G0)J^h1hPRs*Z>MaG1viigKBU9)PZ`? z1WtlBa0XliSHKN$3k-lqKnjMzOE3Z6foTYW@DLTEL8_1zqz{=w)({(72zf(6P&gC= z#Y2gZ5RyRo&?cxDDub$_Lr^{RBXk>%$GT@D&7?Df)BxS@M3%+z6yUFe;(hDAI85YkO^7@Yl06UmLMc-BvcR@ z2gb~6tQGuvWbRvcjdBj{|DY1^&LA*&ECQg$SNrogBQY0yvw1HGfY9d`GJ%1*> zA(P2EWJhusSwLP-t|XrzUnLKcKTwn?CKOLf97RIePB}`sKzTrUL#0v;sBY9)s+hW+ zT2H-1eM)^VN0T#`^Oxhvt&^*fYnAJldnHel*OzyfUoM{~Um<@={-*r60#U(0!Bc^w zuvVc);k3d%g-J!4qLpHZVwz%!Vt<3;HN{aSypn;Ew-QgOKCU1lj+6uALzaG31uZ^TjeO_9OWA2v&vEi!Z2X?Gg29)jFXJJjF0m) z=DE+~&)YVyXDz8V=CRT`Hx#x)t5ZkoxO<(lU- z$Fyi#3$+AVVL5M!`j4}Yh7b~ z$A)U-W3$et-R8BesV(1jzwLcHnq9En7Q0Tn&-M=XBKs!$F$X<|c!#|X_tWYh)GZit(Q)Cp9CDE^WG;+fcyOWA zRoj*0TI>4EP1lX*c7Mce#NF6E+5NctD-TN#kw=Til&6#D8qW(}h?lQdkyo#`lJ{co zYVW5$IzEX$jXo2;cD}29FZf~o0{wRS-SgM*=la+CPXsswtO@7}qy$C;RtG){G6@m| zbp*q~0l~Y1A1~5hBwW-M0z&*lc7;3%H4I%9`g0gAEHtbp?03l#rC8DKn|j zsm*DGwD`2sLM35}uq$0NJtw^{!!)BXL%Pao)$UajqCnA+Oek|%X1kb<{!H~qj3k>S zgINo+YO>yEM`fSNQOptM^yHf4Zp$6X^U3>uHD)z;b$@5RcK(L^!8Pt{4y}dOu3X!> zPIq0wy5aS{>yK?9ZAjVh%SOwMWgFjair&;wpi!{CU}&@N=Eg#~LQ&zpEzVmGY{hI9 zZ0+4-0xS$$Xe-OToc?Y*V;rTcf_b_jRe-RZjXSeas3 zUfIyD;D24M<;?P;^0&KJ?7miETXA3yX^&)&v@)o&y-KfYN7bk5r0RhhkDBJa>U+2C zo!ZCS*T3Iwf71bt1H}hE9uyqBf5`VxYpp?T#bMmxti#XiqUyT8XMbORMD0lNk2S0CmgB9Cz6E{f`d#}k-uAkE<&OWI8v~05`tB~i zd;ebCJ?VYk{m}=h4_-gadN}=P{bTIoq9+PZDxRu8t^L*b*Ji1`^z5M5V9&FNXOD)s zLoff8`L9pI1<$F^D@L?N>PM|d&y4wu-CugK^u_SYjF;2ng}*8Ow)d6MtDk;%`@Lsk z$;9w$(d(H%O5UixIr`T2ZRcd@> zO`9e+H~;R>rAle|i7E>B_Jf0m&UN{G1KYeUf6=hNh-?kAU_7HIB0a7z_^3zQsjT<>94;%zSFm(e>1J+DYCRo`F#GZ zV7-Pb?e_ckpZ)Iplk5+0kcOC%W5)lrp5~?_MOzJ}GnrKjd}GT|x^&?@O;0_huAW{x z_2pOO_B0uKUDrtvL~=JbAH~8IfG=2MWp(6C?h-`Fufc(x%D4>T*iwW#Iy#K;;$MH7 zI<`q>vg8oNPWW#Gf6Rc*A1rb`i>Sg)g+h@E1uo@PNhvaUyfEHiLx6Pe(qt=-FP0C%CMPe~!gyNOk0_&}LtTCbw+$ z1~xb%F&*dnS&C=Yf*{SiH*Z+uw=O4mn4u}J0hnnPABy7MZkpSMH1!(O*FgVoi+u6UV zzM)lc2(Fx-%P0wXZZ`C6a`OJf9oR7G8-R%|Z;OQ-aLVcpIN{ue%>Zv!ZV*l%=Qaj# zDx!b_ScoyFHRQ%(4tL=a)Ch0`K;o!_bh@9dJW%MLB?SgK$4^ sx$(vEDfkgIUP1g@WZlRu7Vk0n7d2hsAi`v*I{*Lx07*qoM6N<$g7C07VE_OC delta 3732 zcmV;F4r}r59HbqPBa?6n6@Lm(X+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHzp+MQEp zR8#2|J@?-9LQ9B%luK_?6$l_wLW_VDktQl32@pz%A)(n7QNa;KMFbnjpojyGj)066 zQ7jCK3fKqaA)=0hqlk*i`{8?|Yu3E?=FR@K*FNX0^PRKL2fzpnmVZbyQ8j=JsX`tR z;Dg7+#^K~HK!FM*Z~zbpvt%K2{UZSY_f59&gh zTmgWD0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v z9w^R97b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6 zB4T3W{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^Kkfn zJUm6Akh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83 z&yop*V%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK z-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9 z003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbO ztb#%)hRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+ zBaR3cnT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0); zU*o*SAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KO zarm5cP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY% zJu%lZ=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk z*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%* zkgNq+Eef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IW zOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}f zWY1>OX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u` z%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx) ziK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt z#^NJzM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<% zN829{oHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^ z=R3SR&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm z&fWCAdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@ z{@mE_+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ug zo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24 zcOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy001CkNK#Dz0D2_=0Dyx4 z0Dt-a004mL004C`008P>0026e000+nl3&F}000BeNklTI62dtdCnixvEAPMMSo;+h@e(vkpT@c&?IDen+ z?5=zK$?ZoQ?``O)_Eq97E5++6C8&f6hQdrvO>^Tf|COIEj~=)%bZ!Dr2fsRP0KD4! ze7-EXz&$Vb-S^NV?ZXeWZSmIEZbXU1n4VYg|1-@xx0525i~HNQQ06J=kY)L*X__71 ze|P@ozL)l>pP%?9JA+*25+Ij)JbxAahd;Xf=)(^-$}TrSB~oy~yq*#g3sJ8A^6Ss< zytRK1pa7aFKrPEyyLw-F?S;(^_cX>;oxofWUDpdnU@nN7hL+~0$6kN?P!He|i@rh@ z8&FhMUfyX+R^o|7HW3QW^Y!sT{olaC$B``aSrY+@7(*#K>0%U=+0$c(tYBITyOeTx1*6bLXT3U&Q6|7b( z4u^y0<`y(f%jVPRG-@k|LgYW6n)BdjRn@pwFM+E4B5qN=8rbUIB{O)bxK?as@` z<8dP4@I=P3t1(Xl>aD;1V;g+FHk*AZ6-%1z*wsam+f6KyU}kn6O<$5F5(zWzzxgAO z5;!Zsbs%wZ_}p;ariM;QvQ!rr7vD{2Iuo}iSKaH;Xq1U@|L+&hpMMzv;sR%dEIJU= zQmNU|k)b0qGcyaJPzX)e3q~juA`l2HjE)Q)1?GSlpcQl|PzG$=P+8Tsedn|Lt8438 z-7Xh)S;k_qU>F8kDn(*(k;&V)u8)p<`{~To=enY*{Mj?D%C-yP8Z4ge(^=VnjH8<+q900{s|MNUMnLSTYkvlB`H From 7519b7ab63d0a3610be44bafa98d891eb978c498 Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Mon, 17 May 2010 23:06:49 -0400 Subject: [PATCH 022/124] Added hud style for circular slider knob thing. --- .../Resources/HUD/slider-circular-bezel.png | Bin 0 -> 1496 bytes .../HUD/slider-circular-disabled-bezel.png | Bin 0 -> 1426 bytes .../HUD/slider-circular-disabled-knob.png | Bin 0 -> 199 bytes .../Resources/HUD/slider-circular-knob.png | Bin 0 -> 199 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 22 ++++++++++++++++++ 5 files changed, 22 insertions(+) create mode 100644 AppKit/Themes/Aristo/Resources/HUD/slider-circular-bezel.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-bezel.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-knob.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/slider-circular-knob.png mode change 100644 => 100755 AppKit/Themes/Aristo/ThemeDescriptors.j diff --git a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-bezel.png b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-bezel.png new file mode 100644 index 0000000000000000000000000000000000000000..69d5c29a98d03e15308bbe7ec3f07b4b6a3d1b66 GIT binary patch literal 1496 zcmV;}1t=RN1V?^Q*kQMwx}>244K4Vsk-QL*u}0L0@xwG8FY zMEE`|Bg9wSbHG;?a@BIr$pS#8W$2!N>DA2^OHqT-XnZiLB15uPTh8+ol%#%DlzeWt z`@GFIa`Mv;-o3)p0fxkgEGOu;LRf?%!0^UfNA~3wS`KGtW!`5g$fvxVY*MS$lwnS1 z9-^7Kc?yTaG(Kr3+vphC9n*hJjE%nY_M5MN!$12N5{p5Umb4{>#6>~>#QrBM>UZw? zqO`Q6s(eEUnayc5JMW@-mzN@u2zmYZ(?ltH9VI0tQMxIG?nyV%JU=rqG)x17Lp^P0 z&ph+}@vr*$F+XF;=qwT;muFw% z2~%nc=`|{9>$nu^?d^W*v!m}d^J88Xg2ay50wHov7#`nupk~KIdrofOQfGGiB?^TW zyc2tQr2~ydO-8+z+B+}Joolf+{P6A9SNUCEe9kDPNAi-OGSap_Q2$BIrcLHqmyd!$ zN#p|ZVYPq{_<~RP1_whcbMo+JPY?rnYOa597jMTpo_RHRD5=>)lvNCOAB_=0vJ@-$wE zT9h0|gEKjiI&d}+ZGlO!EDMAPVks2#Nm9s!&?VADPhqZj4kaR3i?G}28S@AH<$67; zDsjdf1TJPkGKxHi7b4BhI0k%PZ#f@!5~qSaGY5f-hvLu#GO<2<#nCQs{o2q)5AU+! zFgLRV!plNzBg4OfQ|68}G=#`^rscH;_!qE{$O zBZTne+#fwxj%Q?K9!l0G^X=N3%jqI;u;)3(A|WVk9OLG!%}ve4rR5D8ji%USGV#>f znaky($?>rfaIjYh0jKz|5;-Ct+mJX;##HO+=A-s0yN6HYYqs&h7ksvyI`JVmWG)=2 z{}sZMFq9EO<@mGz_sbn^KOehcw})BH9iK_y1HRxBzQG}L#ag(MBjQVlJE{_uiO%-( zR<4|+?K^hAkdc{bFs^c$+`Jq!)6>58bFIfNU%X&t0TT>FJ{Aog(}FXrm{6(ERyDXEmK!#=gV1p@){cs*pF9Jg6dG=22<^=tUxvN3KjZhv@& zd-=2mF*wR)F!C4$+jj1L`2OnJy=iIY481`w1Yu9o%FR!bB(aA;fZyjQr*m%Rx9+Z{ zjXxktLFuwDT yaCQ}K8=|A1YoVNr)0VTrh~!CW>sSh}(agYsh(N;#B6 zdpP)fU(V@T3$(bMWKZ(+{Cdyx{q%XC_s6kpY;3US!Gz}l0t{lIAQm#cEsppDaGV?W zky^N>J5M!byr7g@^0m_e3~}+Jlc%c!0e{e0;;bWGt5vdBk}yjtYxBgEl2_#MaCj{A z!?|y#>9%S>I}%5wLB zSU){=CeYN}+;yrc{KN@Q^MTfP54E=m3)BU1S?1kPUBo~v#6)aT7j>;%5d8rP z(|+Vg=Q}UAv`7nag(aygb}Rnh_K1O4h>6(HATP><$;=3bsQAfer(1$SzZaFDY3fr$ zJb_XfVj?y)pha%XL7NkrP6jBu|3!a?jYdFHDXb{zoq{c?CK+NwgI*dTS4o=}Ze~Wr z?hih!_f&byR2ub|6HIZ64Gm}!NP1>BP5@-}R@c5H2qNzix;D+A0WA_RhV!}s!t0~d z<@D05#OuN|3Irw%u9ZS}-A_2FxOh7nuW$ojn4cJoY)9pq)zb#+y5AAi5Y8Ci&vBNMCSg?&y? zLs}X6cP?Nss<6>Tc1qw)2VU{`13_Pf$5$bWmZB1;i_d;5a$Hu`jrHhkBsvxjMMnR= zIZN$PlyGDLUC!&mC{VgiTTVvOPv}Gk;-8#!2_W= gk#Xb%cqyO#3x9y%-882Fu>b%707*qoM6N<$f^xo`CIA2c literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-knob.png b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-disabled-knob.png new file mode 100644 index 0000000000000000000000000000000000000000..5c0d8bd11bb9c3a7e7ef5b83575ace072bd18e0d GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GnVv3=Ar-fhrc9agBsn?xb6R3z;Lp#`&(DqDUzeNu@afa9 z;zB|}&mKHT`0?>^`>)^M-`|XEVA`~3(ITETYu51Wum7KxkdiVbm1$K4&y{lr&YU^J wu*k7SZNW5OhvIjCet++0bYcGanvsczp}|ezopr03NeaG5`Po literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/slider-circular-knob.png b/AppKit/Themes/Aristo/Resources/HUD/slider-circular-knob.png new file mode 100644 index 0000000000000000000000000000000000000000..050ffefe6e0a36cac2cc477199a63298a8a8226d GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GnVv3=Ar-fhrT{@&a`NnBhYmgZ`275Q+5L5YPbEEk`gE?o ziprBy2M-?n@c20Y{_pSaf8NZ%s^jYFDj5+ODOvab-`N8vPGp>92`Q9WF}HE%%$bZX u%|Cn`bTu7{%l`cS-p}a5{IigOk&R(%gIZ7jkq!x Date: Mon, 24 May 2010 10:09:03 -0700 Subject: [PATCH 023/124] CPDictionary is now KVO compliant. --- Foundation/CPDictionary.j | 4 +- Foundation/CPKeyValueObserving.j | 64 +++++++++++++++++++++++++++++++- Tests/Foundation/CPKVOTest.j | 22 +++++++++++ 3 files changed, 87 insertions(+), 3 deletions(-) diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index f805282f2..0b742c98c 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -316,7 +316,7 @@ */ - (CPArray)allKeys { - return _keys; + return [_keys copy]; } /*! @@ -475,7 +475,7 @@ var index = keysForRemoval.length; while (index--) - self.removeValueForKey(keysForRemoval[index]); + [self removeObjectForKey:keysForRemoval[index]]; } /* diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 9662d5064..5612adaf2 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -226,7 +226,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, var currentClass = _nativeClass, kvoClassName = "$KVO_"+class_getName(_nativeClass), existingKVOClass = objj_lookUpClass(kvoClassName); - + if (existingKVOClass) { _targetObject.isa = existingKVOClass; @@ -247,6 +247,18 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, class_addMethod(kvoClass, method_getName(method), method_getImplementation(method), ""); } + if ([_targetObject isKindOfClass:[CPDictionary class]]) + { + var methodList = _CPKVOModelDictionarySubclass.method_list, + count = methodList.length; + + for (var i=0; i Date: Mon, 24 May 2010 01:49:25 -0700 Subject: [PATCH 024/124] Adding grab/grabbing cursors for Firefox. --- AppKit/CPCursor.j | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/AppKit/CPCursor.j b/AppKit/CPCursor.j index 95b1dc79a..45b3f1ab8 100755 --- a/AppKit/CPCursor.j +++ b/AppKit/CPCursor.j @@ -167,7 +167,9 @@ var currentCursor = nil, { if (CPBrowserIsEngine(CPWebKitBrowserEngine)) return [CPCursor cursorWithCSSString:@"-webkit-grab"]; - else if (CPBrowserIsEngine(CPGeckoBrowserEngine) || CPBrowserIsEngine(CPOperaBrowserEngine)) + else if (CPBrowserIsEngine(CPGeckoBrowserEngine)) + return [CPCursor cursorWithCSSString:@"-moz-grab"]; + else if (CPBrowserIsEngine(CPOperaBrowserEngine)) return [CPCursor cursorWithCSSString:@"move"]; return [CPCursor cursorWithImageNamed:CPStringFromSelector(_cmd)]; // WebKit only. move in FFMac|Opera @@ -177,8 +179,10 @@ var currentCursor = nil, { if (CPBrowserIsEngine(CPWebKitBrowserEngine)) return [CPCursor cursorWithCSSString:@"-webkit-grabbing"]; + else if (CPBrowserIsEngine(CPGeckoBrowserEngine)) + return [CPCursor cursorWithCSSString:@"-moz-grabbing"]; - return [CPCursor cursorWithImageNamed:CPStringFromSelector(_cmd)]; // WebKit only + return [CPCursor cursorWithImageNamed:CPStringFromSelector(_cmd)]; // WebKit || FF } + (CPCursor)disappearingItemCursor From 3c5dab1f3484197f7f2680ff18df9b8b97d20eaa Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 21 May 2010 15:44:52 -0400 Subject: [PATCH 025/124] Implemented CPCoding for CPButton imageDimsWhenDisabled. Fixed a problem where setImageDimsWhenDisabled:NO would not cause a redraw even if the image was previously dimmed. --- AppKit/CPButton.j | 69 +++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 00b898233..57a105bd5 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -74,7 +74,7 @@ CPChangeBackgroundCellMask = CPBackgroundButtonMask; CPButtonStateMixed = CPThemeState("mixed"); -/*! +/*! @ingroup appkit @class CPButton @@ -85,10 +85,10 @@ CPButtonStateMixed = CPThemeState("mixed"); @implementation CPButton : CPControl { BOOL _allowsMixedState; - + CPString _title; CPString _alternateTitle; - + CPImage _image; CPImage _alternateImage; @@ -131,7 +131,7 @@ CPButtonStateMixed = CPThemeState("mixed"); - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; - + if (self) { // Should we instead override the defaults? @@ -139,13 +139,13 @@ CPButtonStateMixed = CPThemeState("mixed"); [self setValue:CPCenterVerticalTextAlignment forThemeAttribute:@"vertical-alignment"]; [self setValue:CPImageLeft forThemeAttribute:@"image-position"]; [self setValue:CPScaleNone forThemeAttribute:@"image-scaling"]; - + _controlSize = CPRegularControlSize; - + // [self setBezelStyle:CPRoundRectBezelStyle]; [self setBordered:YES]; } - + return self; } @@ -248,9 +248,9 @@ CPButtonStateMixed = CPThemeState("mixed"); { if (_title === aTitle) return; - + _title = aTitle; - + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } @@ -264,7 +264,7 @@ CPButtonStateMixed = CPThemeState("mixed"); { if (_alternateTitle === aTitle) return; - + _alternateTitle = aTitle; [self setNeedsLayout]; @@ -280,9 +280,9 @@ CPButtonStateMixed = CPThemeState("mixed"); { if (_image === anImage) return; - + _image = anImage; - + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } @@ -300,9 +300,9 @@ CPButtonStateMixed = CPThemeState("mixed"); { if (_alternateImage === anImage) return; - + _alternateImage = anImage; - + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } @@ -373,13 +373,13 @@ CPButtonStateMixed = CPThemeState("mixed"); [self setShowsStateBy:CPContentsCellMask]; break; - case CPSwitchButton: [CPException raise:CPInvalidArgumentException + case CPSwitchButton: [CPException raise:CPInvalidArgumentException reason:"The CPSwitchButton type is not supported in Cappuccino, use the CPCheckBox class instead."]; - case CPRadioButton: [CPException raise:CPInvalidArgumentException + case CPRadioButton: [CPException raise:CPInvalidArgumentException reason:"The CPRadioButton type is not supported in Cappuccino, use the CPRadio class instead."]; - default: [CPException raise:CPInvalidArgumentException + default: [CPException raise:CPInvalidArgumentException reason:"Unknown button type."]; } @@ -395,7 +395,7 @@ CPButtonStateMixed = CPThemeState("mixed"); _imageDimsWhenDisabled = imageShouldDimWhenDisabled; - if (_imageDimsWhenDisabled) + if ([self hasThemeState:CPThemeStateDisabled]) { [self setNeedsDisplay:YES]; [self setNeedsLayout]; @@ -410,7 +410,7 @@ CPButtonStateMixed = CPThemeState("mixed"); - (BOOL)startTrackingAt:(CGPoint)aPoint { [self highlight:YES]; - + return [super startTrackingAt:aPoint]; } @@ -435,7 +435,7 @@ CPButtonStateMixed = CPThemeState("mixed"); bounds.origin.y += contentInset.top; bounds.size.width -= contentInset.left + contentInset.right; bounds.size.height -= contentInset.top + contentInset.bottom; - + return bounds; } @@ -483,10 +483,10 @@ CPButtonStateMixed = CPThemeState("mixed"); { if (aName === "bezel-view") return [self bezelRectForBounds:[self bounds]]; - + else if (aName === "content-view") return [self contentRectForBounds:[self bounds]]; - + return [super rectForEphemeralSubviewNamed:aName]; } @@ -497,7 +497,7 @@ CPButtonStateMixed = CPThemeState("mixed"); var view = [[CPView alloc] initWithFrame:_CGRectMakeZero()]; [view setHitTests:NO]; - + return view; } else @@ -570,11 +570,12 @@ CPButtonStateMixed = CPThemeState("mixed"); @end -var CPButtonImageKey = @"CPButtonImageKey", - CPButtonAlternateImageKey = @"CPButtonAlternateImageKey", - CPButtonTitleKey = @"CPButtonTitleKey", - CPButtonAlternateTitleKey = @"CPButtonAlternateTitleKey", - CPButtonIsBorderedKey = @"CPButtonIsBorderedKey"; +var CPButtonImageKey = @"CPButtonImageKey", + CPButtonAlternateImageKey = @"CPButtonAlternateImageKey", + CPButtonTitleKey = @"CPButtonTitleKey", + CPButtonAlternateTitleKey = @"CPButtonAlternateTitleKey", + CPButtonIsBorderedKey = @"CPButtonIsBorderedKey", + CPButtonImageDimsWhenDisabledKey = @"CPButtonImageDimsWhenDisabledKey"; @implementation CPButton (CPCoding) @@ -585,21 +586,23 @@ var CPButtonImageKey = @"CPButtonImageKey", - (id)initWithCoder:(CPCoder)aCoder { self = [super initWithCoder:aCoder]; - + if (self) { _controlSize = CPRegularControlSize; [self setImage:[aCoder decodeObjectForKey:CPButtonImageKey]]; [self setAlternateImage:[aCoder decodeObjectForKey:CPButtonAlternateImageKey]]; - + [self setTitle:[aCoder decodeObjectForKey:CPButtonTitleKey]]; [self setAlternateTitle:[aCoder decodeObjectForKey:CPButtonAlternateTitleKey]]; - + + [self setImageDimsWhenDisabled:[aCoder decodeObjectForKey:CPButtonImageDimsWhenDisabledKey]]; + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } - + return self; } @@ -616,6 +619,8 @@ var CPButtonImageKey = @"CPButtonImageKey", [aCoder encodeObject:_title forKey:CPButtonTitleKey]; [aCoder encodeObject:_alternateTitle forKey:CPButtonAlternateTitleKey]; + + [aCoder encodeObject:[self imageDimsWhenDisabled] forKey:CPButtonImageDimsWhenDisabledKey]; } @end From bbbf4390281a2e7ae15d87d4da34ad0abe216dd5 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 20 May 2010 23:12:30 -0400 Subject: [PATCH 026/124] Fixed: contentBounds not var'ed in _verticalScrollerDidScroll. Whitespace cleanup. --- AppKit/CPScrollView.j | 64 +++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 26b837414..051195b66 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -27,7 +27,7 @@ #include "CoreGraphics/CGGeometry.h" -/*! +/*! @ingroup appkit @class CPScrollView @@ -44,12 +44,12 @@ BOOL _hasVerticalScroller; BOOL _hasHorizontalScroller; BOOL _autohidesScrollers; - + CPScroller _verticalScroller; CPScroller _horizontalScroller; - + int _recursionCount; - + float _verticalLineScroll; float _verticalPageScroll; float _horizontalLineScroll; @@ -158,11 +158,11 @@ if (_recursionCount > 5) return; - + ++_recursionCount; var documentView = [self documentView]; - + if (!documentView) { if (_autohidesScrollers) @@ -250,7 +250,7 @@ [_verticalScroller setFloatValue:0.0]; [_verticalScroller setKnobProportion:1.0]; } - + if (shouldShowHorizontalScroller) { [_horizontalScroller setFloatValue:(difference.width <= 0.0) ? 0.0 : scrollPoint.x / difference.width]; @@ -279,13 +279,13 @@ { if (_horizontalScroller === aScroller) return; - + [_horizontalScroller removeFromSuperview]; [_horizontalScroller setTarget:nil]; [_horizontalScroller setAction:nil]; - + _horizontalScroller = aScroller; - + [_horizontalScroller setTarget:self]; [_horizontalScroller setAction:@selector(_horizontalScrollerDidScroll:)]; @@ -339,13 +339,13 @@ { if (_verticalScroller === aScroller) return; - + [_verticalScroller removeFromSuperview]; [_verticalScroller setTarget:nil]; [_verticalScroller setAction:nil]; - + _verticalScroller = aScroller; - + [_verticalScroller setTarget:self]; [_verticalScroller setAction:@selector(_verticalScrollerDidScroll:)]; @@ -403,7 +403,7 @@ return; _autohidesScrollers = autohidesScrollers; - + [self reflectScrolledClipView:_contentView]; } @@ -480,30 +480,30 @@ /* @ignore */ - (void)_verticalScrollerDidScroll:(CPScroller)aScroller { - var value = [aScroller floatValue], - documentFrame = [[_contentView documentView] frame]; + var value = [aScroller floatValue], + documentFrame = [[_contentView documentView] frame], contentBounds = [_contentView bounds]; switch ([_verticalScroller hitPart]) { case CPScrollerDecrementLine: contentBounds.origin.y -= _verticalLineScroll; break; - + case CPScrollerIncrementLine: contentBounds.origin.y += _verticalLineScroll; break; - + case CPScrollerDecrementPage: contentBounds.origin.y -= _CGRectGetHeight(contentBounds) - _verticalPageScroll; break; - + case CPScrollerIncrementPage: contentBounds.origin.y += _CGRectGetHeight(contentBounds) - _verticalPageScroll; break; - + case CPScrollerKnobSlot: case CPScrollerKnob: // We want integral bounds! default: contentBounds.origin.y = ROUND(value * (_CGRectGetHeight(documentFrame) - _CGRectGetHeight(contentBounds))); } - + [_contentView scrollToPoint:contentBounds.origin]; } @@ -513,21 +513,21 @@ var value = [aScroller floatValue], documentFrame = [[self documentView] frame], contentBounds = [_contentView bounds]; - + switch ([_horizontalScroller hitPart]) { case CPScrollerDecrementLine: contentBounds.origin.x -= _horizontalLineScroll; break; - + case CPScrollerIncrementLine: contentBounds.origin.x += _horizontalLineScroll; break; - + case CPScrollerDecrementPage: contentBounds.origin.x -= _CGRectGetWidth(contentBounds) - _horizontalPageScroll; break; - + case CPScrollerIncrementPage: contentBounds.origin.x += _CGRectGetWidth(contentBounds) - _horizontalPageScroll; break; - + case CPScrollerKnobSlot: case CPScrollerKnob: // We want integral bounds! @@ -668,7 +668,7 @@ */ - (void)scrollWheel:(CPEvent)anEvent { - [self _respondToScrollWheelEventWithDeltaX:[anEvent deltaX] * _horizontalLineScroll + [self _respondToScrollWheelEventWithDeltaX:[anEvent deltaX] * _horizontalLineScroll deltaY:[anEvent deltaY] * _verticalLineScroll]; } @@ -771,7 +771,7 @@ var CPScrollViewContentViewKey = "CPScrollViewContentView", _horizontalLineScroll = [aCoder decodeFloatForKey:CPScrollViewHLineScrollKey]; _horizontalPageScroll = [aCoder decodeFloatForKey:CPScrollViewHPageScrollKey]; - + _contentView = [aCoder decodeObjectForKey:CPScrollViewContentViewKey]; _headerClipView = [aCoder decodeObjectForKey:CPScrollViewHeaderClipViewKey]; @@ -793,25 +793,25 @@ var CPScrollViewContentViewKey = "CPScrollViewContentView", // Do to the anything goes nature of decoding, our subviews may not exist yet, so layout at the end of the run loop when we're sure everything is in a correct state. [[CPRunLoop currentRunLoop] performSelector:@selector(reflectScrolledClipView:) target:self argument:_contentView order:0 modes:[CPDefaultRunLoopMode]]; } - + return self; } - (void)encodeWithCoder:(CPCoder)aCoder { [super encodeWithCoder:aCoder]; - + [aCoder encodeObject:_contentView forKey:CPScrollViewContentViewKey]; [aCoder encodeObject:_headerClipView forKey:CPScrollViewHeaderClipViewKey]; [aCoder encodeObject:_verticalScroller forKey:CPScrollViewVScrollerKey]; [aCoder encodeObject:_horizontalScroller forKey:CPScrollViewHScrollerKey]; - + [aCoder encodeFloat:_verticalLineScroll forKey:CPScrollViewVLineScrollKey]; [aCoder encodeFloat:_verticalPageScroll forKey:CPScrollViewVPageScrollKey]; [aCoder encodeFloat:_horizontalLineScroll forKey:CPScrollViewHLineScrollKey]; [aCoder encodeFloat:_horizontalPageScroll forKey:CPScrollViewHPageScrollKey]; - + [aCoder encodeBool:_hasVerticalScroller forKey:CPScrollViewHasVScrollerKey]; [aCoder encodeBool:_hasHorizontalScroller forKey:CPScrollViewHasHScrollerKey]; [aCoder encodeBool:_autohidesScrollers forKey:CPScrollViewAutohidesScrollerKey]; From 28397e672ea4684b737495accc62fa900080d725 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 24 May 2010 11:28:57 -0700 Subject: [PATCH 027/124] fix a misnamed variable. closes #673. --- Objective-J/CFBundle.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Objective-J/CFBundle.js b/Objective-J/CFBundle.js index 7f75d3d1d..8c7044e73 100644 --- a/Objective-J/CFBundle.js +++ b/Objective-J/CFBundle.js @@ -635,9 +635,9 @@ function decompileStaticFile(/*Bundle*/ aBundle, /*String*/ aString, /*String*/ if (CFBundleSupportedSpriteType === CFBundleMHTMLUncachedSpriteType) { - var exclamationIndex = URLString.indexOf("!"), - firstPart = URLString.substring(0, exclamationIndex), - lastPart = URLString.substring(exclamationIndex); + var exclamationIndex = mappedURLString.indexOf("!"), + firstPart = mappedURLString.substring(0, exclamationIndex), + lastPart = mappedURLString.substring(exclamationIndex); mappedURLString = firstPart + "?" + CFCacheBuster + lastPart; } From 3d4a33d3734db6f928cf66c2477de0bb6cb59663 Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Tue, 18 May 2010 21:30:51 -0400 Subject: [PATCH 028/124] Re-preflight on the image assets resulting in 24px tall images in each case. This is done by cutting the top edge close (well into the aliased edge on top.) Added defs for the horizontal and vertical sliders. --- .../HUD/segmented-control-bezel-center.png | Bin 164 -> 140 bytes ...egmented-control-bezel-disabled-center.png | Bin 139 -> 140 bytes ...gmented-control-bezel-disabled-divider.png | Bin 121 -> 124 bytes .../segmented-control-bezel-disabled-left.png | Bin 227 -> 228 bytes ...segmented-control-bezel-disabled-right.png | Bin 228 -> 227 bytes .../HUD/segmented-control-bezel-divider.png | Bin 119 -> 124 bytes ...ented-control-bezel-highlighted-center.png | Bin 154 -> 159 bytes ...trol-bezel-highlighted-disabled-center.png | Bin 159 -> 159 bytes ...rol-bezel-highlighted-disabled-divider.png | Bin 121 -> 124 bytes ...ontrol-bezel-highlighted-disabled-left.png | Bin 241 -> 241 bytes ...ntrol-bezel-highlighted-disabled-right.png | Bin 246 -> 245 bytes ...nted-control-bezel-highlighted-divider.png | Bin 121 -> 124 bytes ...gmented-control-bezel-highlighted-left.png | Bin 244 -> 244 bytes ...mented-control-bezel-highlighted-right.png | Bin 246 -> 251 bytes .../HUD/segmented-control-bezel-left.png | Bin 225 -> 226 bytes .../segmented-control-bezel-pushed-center.png | Bin 145 -> 146 bytes ...ontrol-bezel-pushed-highlighted-center.png | Bin 145 -> 145 bytes ...-control-bezel-pushed-highlighted-left.png | Bin 225 -> 226 bytes ...control-bezel-pushed-highlighted-right.png | Bin 225 -> 226 bytes .../segmented-control-bezel-pushed-left.png | Bin 225 -> 227 bytes .../segmented-control-bezel-pushed-right.png | Bin 225 -> 227 bytes .../HUD/segmented-control-bezel-right.png | Bin 227 -> 227 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 68 ++++++++++++++++++ 23 files changed, 68 insertions(+) diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-center.png index 1e82207f01603708d0cb51ce752a7759764dca1d..455b25deceee2c6fce8de267cb18c212ab91dde1 100644 GIT binary patch delta 74 zcmZ3&*uyx%(^=2c#WAGfR+53S@$d6rUSHQ|Q)5#|`1Sw4y-}kt&wimj%M9v&d}y2~ ecw!P0hXKP;YxBzDY1eKu0D-5gpUXO@geCxx6dq~- delta 98 zcmV-o0G@~ diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-center.png index 0632660c48c85b68af230f10aed608127d8bb13f..a32359e5cf79947de52a72c08b57ae4177354bff 100644 GIT binary patch delta 74 zcmeBX>|vbX>8$7J;uunKE6K>%`1biPudnN~sj(>}{QCdj-l)-+XTQ*%Wd`*>J~U2b eJR!u!VZg9b-rP7k>fdt)An}H(c>7?uF;uunKD=8@7J63SY)X cmIel9hG{&88z0Tpe8K<(p00i_>zopr03qxfs{jB1 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-divider.png index 1ebec04faefd9d16ea301579c5350d93242623f3..a07b15d5c69df4799187593410fd509d623f633f 100644 GIT binary patch delta 56 zcmb=dnc!(G=jq}YQgJIOAtB+$c@`Ck7mfzZhRUD+|Nk$~%p$>%y_@CY(bVGY3_#%N L>gTe~DWM4fZNn8D delta 53 zcmb=aoZx97?djqeQgJIOAtAwoA*t=JkHRE57GnWpCKd^Xj*X0dwl`-kW&i?DS3j3^ HP6e(L_t(|+G1p2V31Z(QOOe!5YS;_V&Y-}5@vjSeENU?{$>C3 z=MMwZzkmPu|NsBb4#W%~zyczGf($SK7J$iO6<}gO1BA6uLx2oxso_#478aJDK!Kky z0cIs7C9cn(KMMgRgcunaSs5-}y2P%ks%i%mhyW@`V1(*t0~}&5kPd(V0{{?EN{cPZ R69)hQ002ovPDHLkV1jh3KL7v# delta 162 zcmV;T0A2s&0pkIXNq>b&L_t(|+G1gV07)P=24WFLAR(=yqLL>dAfUs<#Kgq{B+U5u z`1Jq&{mcI6&mRV+fB*jR|NsA=9f-ktSwI9(kO2n30x(&u0!$2OfUp*72#{edHC)QX z!ou|z^tUC#P#{}XCa`35F;ZaE5oHrm)KQRRqcQR5gR}S2><~G0KTC|-X*z& Qe*gdg07*qoM6N<$f`ZOSa{vGU diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-disabled-right.png index 63cc8bb29dba6abb9ed5834cb77309d1f5ca5c91..9f3a03b7d656c2d96e40a4352a9a31e321f97b5b 100644 GIT binary patch delta 162 zcmV;T0A2s&0pkIXNq>b&L_t(|+F~>_Gu!{~-@k7kK76=x=gyr;EWdvJVqj!sjgD7^ON`4k72PVh>7k~i_0VW1CKv)Yk1jw+K8ZL#K0hIX3!ouCz>3MxY8|px|F1{u>6wzW@RZ01rf6pdP7* Qo&W#<07*qoM6N<$g0FQ&EC2ui delta 163 zcmV;U09^m$0ptOYNq>e(L_t(|+G1v4U`POB86f@)#9tWA%*^)x`}gnLhYugF+_`gS z63ee&zZe)98M*lQ`1F~Wn9Nv!${7Ct{|}N;m)j diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-divider.png index aa7955d2d261b73f5708102469fe318fec798537..6811fc89a0c6c7031ee5e687eb631fa11809bf68 100644 GIT binary patch delta 56 zcmXS~nc!(G=jq}YQgJIODIwvgTe~DWM4fZxIy0 delta 51 zcmb;^pWvw{>FMGaQgJIOAt51yA*t(?&^rhotcGcf%J6aW4}x&J_{|NlYU zf0z;o0z=1tWQqR_3=l5!lgE!48Gy1<009O7VR=NH<6}}A00000NkvXXu0mjf5mYE9 delta 88 zcmbQwIE!(DXP}Lzi(^Q|t(4wCE(Qf2r&RW}eVdBkJ7+6v%#eTN?7~pcvol4IaWPA< sWaY$}OI*G^ij01tUowv?cps|-gR`0a^;gTQr!WA4r>mdKI;Vst0GaY2djJ3c diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png index 15fd9d92946b1dd87a6ff56db2aac316955016e6..06105ca177dc41a5720ceaeb4f201bcb1ce3731f 100644 GIT binary patch delta 86 zcmV-c0IC0<0iOYoP)}lxi%;0k^y}9z2Bv@i|1&WC2NVDPLAn1xtpEQ(+<%x72m(XL se`JaO3=9x1^OMJq8JU5yj{yP<07kh*D_y^)kpKVy07*qoM6N<$f-{{acK`qY delta 86 zcmV-c0IC0<0iOYoP)}ry$q4`;5Ch}dr`oB-XchZNJP;K8gbYK70VpBmQqA3AlwjIH s9^`7$LjK~$x6mszpEkzcS{MQh03ql>sINeAm;e9(07*qoM6N<$f=N*%1poj5 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png index 6ad27c168ddff9d27050a2cdc6084ffee817deaf..513282884fe4d8ebf3ca62d78dc20dde38f4995d 100644 GIT binary patch delta 56 zcmb=dnc!(G=jq}YQgJIODIwv;c@`Ck7mfzZhRUD+|Nk$~%p$>%vzp~{dDH$23_#%N L>gTe~DWM4fZ(kKf delta 53 zcmb=aoZx97?djqeQgJIODIvilfl272LQ|t0i?M()6N>~x!gGdCUjn|{FaUw4tDnm{ Hr-UW|+cgn7 diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png index 1a82ba435a3460e5864e6bbbeb484a38cceee71d..e8bf1b6b0704234c78f835ec52cefcab443c0425 100644 GIT binary patch delta 168 zcmV;Z09XI<0r3HlQGZUc3IZ_& zFa1pX^r?KY)DY2hFJ-ExidhI@J&xnbIlnt04+*s25O+xxy>(A;18w W&rk{{CC4uS0000q5ca1o6K58RF4z-j6A4*(RnS9_m5V zzyvbP8-f5}R7cfbwIE%mzCT}gU3ak7&dC@PwryJyE~Ny-%ncyA%nW4;0{lE)hSUa& zRK^=3HNx_D>1X4oPvwhJLqy}0^H`vwnfHDjV_Z4cY!K1HFd+=f5W+>1Hx1k$0t^8A W=uKORBOKHK00001Bkx^1Q-CNA!&s;ChKbe0000u;#Vwj@d@$2fB*jW_|c;)M~)n3 zV*2f^zMOIk)opNWY{mF3_6{|pR3%*e>d{_o#E4wnBQ0S1s5gl75w?;is)fM`Jx zKv(hqKf0EGXj;fHl&}CgTe~DWM4fZ-ErT delta 53 zcmb=aoZx97?djqeQgJIOAt51yA*t=ZkHRE57GnWpCKd^XO&=N88EQu#WB>wBS3j3^ HP6v9T?dm6Nk(Wo6}MVPax3l9rLN14?lH`t^%}<=?-5Tnvni zTz~)lV*mjb5b+PnfeZXc7x?%8KbioBmjCEl{{5%eP{IOax%58?hBC3RuzdgX_wP55 zCJ<&;R8$oG_U)S}J3EI2BO@al!=+1?1XWd4gMli`fC?HIfgv_90vWuZPzM delta 168 zcmV;Z09XI?0rUZoRDWOwVtXJq0AfBCAmM0ZV_PgMCuhyd%F4^a#KdGIEhA$Gl;HaH z>lXvdzkmO@7#JD3{{H*N00JN_4F8}UxWIpOfq(!1qX}SW`H!yU-+zh?B`iReOaGH# zC=&|{%lAKj|9%5$0%2xFMMcqX-@b{mvvWu=GBUC;T)K2gP$5-SH5jO}45*+1Aiw~@ W!%jl+mxnh10000M2SO5S307*qoM6N<$f}4(3yZ`_I delta 181 zcmV;m080P+0rmlqNq?A0L_t(|+G1p2U}ym1Pe6PDhz~Nx#V7p#{rmUl$B!NzJ#yr5 zFVnAIzkm`9ywWlY%L_t(|+G1p2U{C>q$pQib)=W%HyevS%gO88T?(g5fTz~%j zVPN|A@1My3|Npswm;nS>Km<^b0S3SVFj=euOblp%uoh|vkYOz~T*}14!txy`@C_!w ztfZvG`}y-{NuY!TBO@al!=+1?I8{|ugMk8NKm`qqQ2iW0%o+zW6Cl6V$L_t(|+G1gV03{%H0b(geAfW;TlLZ6>teKdYcv*mi2Ol4w z-QT}|x&Hk5!@%_K-#?N6|NnCVF<37PhyV&QzyMePCW}>oi2)4|)d%IFi@Zjs2QLEAiw~S&`8T}G7`%G O0000BXhi(^Q|t)!sf;NR!J{QjQLrsn46#-_%m(6B*(WtN1Q>W|U`M`y(E ksW^Dz&;S4bqZt_47_`N?gQhE2Tx9?PPgg&ebxsLQ04;bQqW}N^ delta 79 zcmbQlIFWIJr-!kpi(^Q|t)zs6gp7oc;Naiqzx@85&!*<)=EkPBKw?U(!i6InG!L$4 j);sp+(NS)<1_ovZ(?a&|xBTuLVgLe9S3j3^P66jzjNZmiH)6%911!tjcRSaoOQAVhR?+H;|z@c{r?}& brEq|u%$wt{+a|v%1|aZs^>bP0l+XkKBN-c% delta 71 zcmbQpIFWHephH4JLPkPJaPaT*Uw(hjXH#=?b7NCmATgy?;lhy(ng`c2>mB>^=qR^a b0|PUIX(9XfTYh&AF#v(5tDnm{r-UW|I*lC( diff --git a/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png b/AppKit/Themes/Aristo/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png index 3077ebaf054c35820844755815e10c6b1a560506..c81b5aba0efb86c25a72838fca38e4ec8462fa34 100644 GIT binary patch delta 161 zcmV;S0ABy$0pbCWNq>Y%L_t(|+G1p2U~rL^mM-Sz=C%g1d0Cj4n2b0$IPCuX`NQ@9 z|9=LifB*h*0cAj#fsv7sfeFL_$-n>$Oon&?CI&P>6D`ybAjhRFEG*xF0rU+d2*S*Y zii)D&zI_vAXJ?lH3a~L;x^ziURaG?@sIm;Gqk$2q9Ap45G#a3p00ImEUuhnEujZgX P00000NkvXXu0mjf)F?z$ delta 160 zcmV;R0AK&&0pS6VNq>V$L_t(|+G1pY03{%H0b(geAfX~HEj^i=o7)=5=4D}GV)EeN z;IRAi=MUHa|Nj}7{{8zW0+itb>0@MMWMBd@Kr%4E0+S(LfQbPO&_oM01junI3k%D4 zU;ups34$=Ql9Ced*RNkC+1c48fC6j`mo8o6R8>_C2C6Ir>KSMN2rvLt7aRExCzwV6 O0000Y%L_t(|+G12wQ~S@r!0`F&*RMyPK7HED^!xX3hChG)@N#f) z*fB9N88I<3GBQ8`*S~-NxR_wP|NsAkX%-|EL<%r5paGg_p@slCE(HmIFff3=v9Pdw z2b%#5x-TC-d^jX8FMkunZve`asj8|5U%GTjkP)a<3Zw{#zZ!v}10cWv4=ye{V$L_t(|+G1v4U}ykhH6VTu!i;KaYX5b&L_t(|+G1p2U{H~kmY&Sb&20^2^Rh58F?n!saM=C%^M~vI z|Njh3|Ni|G0m^UzF#{tbBLfqN0g{0M7MKk20!$2OfF@d~AwZ5xSy))U0|V$ANDzdX zm6VitzkdBH$d%IFi>R~P)7qJG(0(gm>UmdCP07z0F28XklFH} Q5&!@I07*qoM6N<$f*aREHvj+t delta 160 zcmV;R0AK&(0pS6VNq>V$L_t(|+G1pY03{%H0b(geAfX~HEj^i=o7)=5=4D}GV)EeN z;IRAi=MUHa|Nj}7{{8zW0+itb>0@MMWMBd@Kr%4E0+S(LfQbPO&_oM01junI3k%D4 zU;ups34$=Ql9Ced*RNkC+1c48fC6j`mo8o6R8>_C2C6Ir>KSMN2rvLt7aRExCzwV6 O0000b&L_t(|+G12wQ~S@r!0`F&*RMyPK7E?Y^85F121Z6kUJecp zJ0>P34<;ao0SdVO{re}v1mpex{~t`VAgLfyfQbPO&_oM01junINC1R^0rZW9h2=Zg z3}DcG`S9VxAq546iy-w4K$&lfii&sFu3fv05vWuODEJ46KN|t@4}bsz0KB*?do@Y~ Qg8%>k07*qoM6N<$g7Qj5x&QzG delta 160 zcmV;R0AK&(0pS6VNq>V$L_t(|+G1v4U}ykhH6VTu!i;KaYX5H<0pkIXQGYQrGyDJV-@nfvK72TO=gys6mS4YqF)%VR^78TV*)cIOd9W}5 z!T zJEEYVa1kWg0F)_HRaFhXbm`KmjD0&07*qo IM6N<$f=C!U%>V!Z delta 154 zcmV;L0A>H<0pkIXQGaG&U}ykhH6VTu!i;8SX8-^F`}g_7hYv^Z+_{s>^6S?x21Z6k zUOqlPJ0>P34;G*@hX4QngD5VbN)Z+)2PVh>7k~i_0VW1CKv)Yk1jw+K8ZL#K0hIX0 z!ou<$tO6KxU%q|&c0@rz;UY+~0Vq?Zs;U}%>Cz=mfB*vkHxuewkZDJ(3;+NC07*qo IM6N<$f;?6}UH||9 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index e0112fadb..96c2aada0 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1021,6 +1021,74 @@ return scroller; } ++ (CPSlider)themedHorizontalSlider +{ + var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 24.0)], + trackColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-left.png" size:CGSizeMake(4.0, 5.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-center.png" size:CGSizeMake(1.0, 5.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-right.png" size:CGSizeMake(4.0, 5.0)] + ] + isVertical:NO]], + + trackDisabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-disabled-left.png" size:CGSizeMake(4.0, 5.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-disabled-center.png" size:CGSizeMake(1.0, 5.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-disabled-right.png" size:CGSizeMake(4.0, 5.0)] + ] + isVertical:NO]]; + + [slider setValue:5.0 forThemeAttribute:@"track-width"]; + [slider setValue:trackColor forThemeAttribute:@"track-color"]; + [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled]; + + var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob.png" size:CGSizeMake(23.0, 24.0)]], + knobHighlightedColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-highlighted.png" size:CGSizeMake(23.0, 24.0)]], + knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-disabled.png" size:CGSizeMake(23.0, 24.0)]]; + + [slider setValue:CGSizeMake(23.0, 24.0) forThemeAttribute:@"knob-size"]; + [slider setValue:knobColor forThemeAttribute:@"knob-color"]; + [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateHighlighted]; + [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; + + return slider; +} + ++ (CPSlider)themedVerticalSlider +{ + var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 24.0, 50.0)], + trackColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-top.png" size:CGSizeMake(5.0, 6.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-center.png" size:CGSizeMake(5.0, 1.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-bottom.png" size:CGSizeMake(5.0, 4.0)] + ] + isVertical:YES]], + trackDisabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-disabled-top.png" size:CGSizeMake(5.0, 6.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-disabled-center.png" size:CGSizeMake(5.0, 1.0)], + [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-disabled-bottom.png" size:CGSizeMake(5.0, 4.0)] + ] + isVertical:YES]]; + + [slider setValue:5.0 forThemeAttribute:@"track-width"]; + [slider setValue:trackColor forThemeAttribute:@"track-color" inState:CPThemeStateVertical]; + [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled]; + + var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob.png" size:CGSizeMake(23.0, 24.0)]], + knobHighlightedColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-highlighted.png" size:CGSizeMake(23.0, 24.0)]], + knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-disabled.png" size:CGSizeMake(23.0, 24.0)]]; + + [slider setValue:CGSizeMake(23.0, 24.0) forThemeAttribute:@"knob-size"]; + [slider setValue:knobColor forThemeAttribute:@"knob-color"]; + [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateHighlighted]; + [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; + + return slider; +} + (CPSlider)themedCircularSlider { var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 34.0, 34.0)], From dfcef3ca2d4654bceb637e46efa704d0aab14097 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 21 May 2010 01:39:30 -0400 Subject: [PATCH 029/124] Fixed: [CPPopUpButton itemTitles] didn't work. --- AppKit/CPPopUpButton.j | 77 ++++++++++++++++---------------- Tests/AppKit/CPPopUpButtonTest.j | 23 ++++++++++ 2 files changed, 62 insertions(+), 38 deletions(-) create mode 100644 Tests/AppKit/CPPopUpButtonTest.j diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index 9913e8023..b5ac0e1e1 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -32,7 +32,7 @@ var VISIBLE_MARGIN = 7.0; CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); -/*! +/*! @ingroup appkit @class CPPopUpButton @@ -42,7 +42,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { int _selectedIndex; CPRectEdge _preferredEdge; - + CPMenu _menu; } @@ -60,21 +60,21 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (id)initWithFrame:(CGRect)aFrame pullsDown:(BOOL)shouldPullDown { self = [super initWithFrame:aFrame]; - + if (self) { _selectedIndex = CPNotFound; _preferredEdge = CPMaxYEdge; - + [self setValue:CPImageLeft forThemeAttribute:@"image-position"]; [self setValue:CPLeftTextAlignment forThemeAttribute:@"alignment"]; [self setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; - + [self setMenu:[[CPMenu alloc] initWithTitle:@""]]; [self setPullsDown:shouldPullDown]; } - + return self; } @@ -145,7 +145,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { var index = 0, count = [titles count]; - + for (; index < count; ++index) [self addItemWithTitle:titles[index]]; } @@ -159,11 +159,11 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { var items = [self itemArray], count = [items count]; - + while (count--) if ([items[count] title] == aTitle) [self removeItemAtIndex:count]; - + [_menu insertItemWithTitle:aTitle action:NULL keyEquivalent:nil atIndex:anIndex]; } @@ -173,7 +173,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)removeAllItems { var count = [_menu numberOfItems]; - + while (count--) [_menu removeItemAtIndex:0]; } @@ -206,7 +206,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { if (_selectedIndex < 0 || _selectedIndex > [self numberOfItems] - 1) return nil; - + return [_menu itemAtIndex:_selectedIndex]; } @@ -253,15 +253,15 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { if (_selectedIndex == anIndex) return; - + if (_selectedIndex >= 0 && ![self pullsDown]) [[self selectedItem] setState:CPOffState]; - + _selectedIndex = anIndex; if (_selectedIndex >= 0 && ![self pullsDown]) [[self selectedItem] setState:CPOnState]; - + [self synchronizeTitleAndSelectedItem]; } @@ -310,7 +310,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); return; var defaultCenter = [CPNotificationCenter defaultCenter]; - + if (_menu) { [defaultCenter @@ -330,7 +330,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); } _menu = aMenu; - + if (_menu) { [defaultCenter @@ -338,20 +338,20 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); selector:@selector(menuDidAddItem:) name:CPMenuDidAddItemNotification object:_menu]; - + [defaultCenter addObserver:self selector:@selector(menuDidChangeItem:) name:CPMenuDidChangeItemNotification object:_menu]; - + [defaultCenter addObserver:self selector:@selector(menuDidRemoveItem:) name:CPMenuDidRemoveItemNotification object:_menu]; } - + [self synchronizeTitleAndSelectedItem]; } @@ -396,12 +396,13 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { var titles = [], items = [self itemArray], - index = 0, count = [items count]; - + for (; index < count; ++index) - items.push([items[index] title]); + titles.push([items[index] title]); + + return titles; } /*! @@ -519,14 +520,14 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); else { var index = [self indexOfItemWithTitle:aTitle]; - + if (index < 0) { [self addItemWithTitle:aTitle]; - + index = [self numberOfItems] - 1; } - + [self selectItemAtIndex:index]; } } @@ -554,7 +555,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); if ([self pullsDown]) { var items = [_menu itemArray]; - + if ([items count] > 0) item = items[0]; } @@ -573,22 +574,22 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)menuDidAddItem:(CPNotification)aNotification { var index = [[aNotification userInfo] objectForKey:@"CPMenuItemIndex"]; - + if (_selectedIndex < 0) [self selectItemAtIndex:0]; - + else if (index == _selectedIndex) [self synchronizeTitleAndSelectedItem]; - + else if (index < _selectedIndex) ++_selectedIndex; - + if (index == 0 && [self pullsDown]) { var items = [_menu itemArray]; - + [items[0] setHidden:YES]; - + if (items.length > 0) [items[1] setHidden:NO]; } @@ -613,10 +614,10 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); if ([self pullsDown] && index != 0) return; - + if (![self pullsDown] && index != _selectedIndex) return; - + [self synchronizeTitleAndSelectedItem]; } @@ -627,7 +628,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)menuDidRemoveItem:(CPNotification)aNotification { var numberOfItems = [self numberOfItems]; - + if (numberOfItems <= _selectedIndex && numberOfItems > 0) [self selectItemAtIndex:numberOfItems - 1]; else @@ -737,7 +738,7 @@ var CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey", - (id)initWithCoder:(CPCoder)aCoder { self = [super initWithCoder:aCoder]; - + if (self) { // Nothing is currently selected @@ -746,7 +747,7 @@ var CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey", [self setMenu:[aCoder decodeObjectForKey:CPPopUpButtonMenuKey]]; [self selectItemAtIndex:[aCoder decodeObjectForKey:CPPopUpButtonSelectedIndexKey]]; } - + return self; } @@ -758,7 +759,7 @@ var CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey", - (void)encodeWithCoder:(CPCoder)aCoder { [super encodeWithCoder:aCoder]; - + [aCoder encodeObject:_menu forKey:CPPopUpButtonMenuKey]; [aCoder encodeInt:_selectedIndex forKey:CPPopUpButtonSelectedIndexKey]; } diff --git a/Tests/AppKit/CPPopUpButtonTest.j b/Tests/AppKit/CPPopUpButtonTest.j new file mode 100644 index 000000000..c45085633 --- /dev/null +++ b/Tests/AppKit/CPPopUpButtonTest.j @@ -0,0 +1,23 @@ + +@import +@import + +@implementation CPPopUpButtonTest : OJTestCase +{ + CPPopUpButton button; +} + +- (void)setUp +{ + button = [CPPopUpButton new]; +} + +- (void)testItemTitles +{ + [self assert:[] equals:[button itemTitles]]; + [button addItem:[[CPMenuItem alloc] initWithTitle:"Option A" action:nil keyEquivalent:nil]]; + [button addItem:[[CPMenuItem alloc] initWithTitle:"Option B" action:nil keyEquivalent:nil]]; + [self assert:["Option A", "Option B"] equals:[button itemTitles]]; +} + +@end From 252b2581597e5acea15702a4785d917e5334f546 Mon Sep 17 00:00:00 2001 From: Paul Baumgart Date: Wed, 19 May 2010 02:24:32 -0700 Subject: [PATCH 030/124] fix CFDictionary.containsValue and CFDictionary.countOfValue and add tests to prove it --- Objective-J/CFDictionary.js | 12 ++++++++--- Tests/Objective-J/CFDictionaryTest.j | 31 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 Tests/Objective-J/CFDictionaryTest.j diff --git a/Objective-J/CFDictionary.js b/Objective-J/CFDictionary.js index a9c0ccb74..ea45b6e2b 100644 --- a/Objective-J/CFDictionary.js +++ b/Objective-J/CFDictionary.js @@ -75,8 +75,11 @@ CFDictionary.prototype.containsValue = function(/*id*/ anObject) count = keys.length; for (; index < count; ++index) - if (buckets[keys] === anObject) + { + var thisKey = keys[index]; + if (buckets[thisKey] === anObject) return YES; + } return NO; } @@ -106,8 +109,11 @@ CFDictionary.prototype.countOfValue = function(/*id*/ anObject) countOfValue = 0; for (; index < count; ++index) - if (buckets[keys] === anObject) - return ++countOfValue; + { + var thisKey = keys[index]; + if (buckets[thisKey] === anObject) + ++countOfValue; + } return countOfValue; } diff --git a/Tests/Objective-J/CFDictionaryTest.j b/Tests/Objective-J/CFDictionaryTest.j new file mode 100644 index 000000000..924d209fe --- /dev/null +++ b/Tests/Objective-J/CFDictionaryTest.j @@ -0,0 +1,31 @@ + +@implementation CFDictionaryTest : OJTestCase + +- (void)testContainsValue +{ + var dict = new CFMutableDictionary(); + [self assert:NO equals:dict.containsValue(@"123")]; + [self assert:NO equals:dict.containsValue(@"abc")]; + + dict.setValueForKey(@"abc", @"123"); + [self assert:YES equals:dict.containsValue(@"123")]; + [self assert:NO equals:dict.containsValue(@"abc")]; + + dict.setValueForKey(@"def", @"123"); + [self assert:YES equals:dict.containsValue(@"123")]; + [self assert:NO equals:dict.containsValue(@"abc")]; +} + +- (void)testCountOfValue +{ + var dict = new CFMutableDictionary(); + [self assert:0 equals:dict.countOfValue(@"123")]; + + dict.setValueForKey(@"abc", @"123"); + [self assert:1 equals:dict.countOfValue(@"123")]; + + dict.setValueForKey(@"def", @"123"); + [self assert:2 equals:dict.countOfValue(@"123")]; +} + +@end From fbd23fb2c33c72e0b293b8e64b6a315c6bb5f8b1 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 24 May 2010 15:45:54 -0700 Subject: [PATCH 031/124] Removed unecessary var. Reviewed by me. --- Objective-J/CFDictionary.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Objective-J/CFDictionary.js b/Objective-J/CFDictionary.js index ea45b6e2b..8c10b7fdf 100644 --- a/Objective-J/CFDictionary.js +++ b/Objective-J/CFDictionary.js @@ -75,11 +75,8 @@ CFDictionary.prototype.containsValue = function(/*id*/ anObject) count = keys.length; for (; index < count; ++index) - { - var thisKey = keys[index]; - if (buckets[thisKey] === anObject) + if (buckets[keys[index]] === anObject) return YES; - } return NO; } @@ -109,11 +106,8 @@ CFDictionary.prototype.countOfValue = function(/*id*/ anObject) countOfValue = 0; for (; index < count; ++index) - { - var thisKey = keys[index]; - if (buckets[thisKey] === anObject) + if (buckets[keys[index]] === anObject) ++countOfValue; - } return countOfValue; } From 49ae82d96aa347da5ade963043dcf5295934fb6c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 2 May 2010 01:59:50 -0400 Subject: [PATCH 032/124] Fixed: CPToolbar validateVisibleItems was called validateVisibleToolbarItems. --- AppKit/CPToolbar.j | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index f78f891b6..b45d70211 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -329,7 +329,11 @@ var CPToolbarConfigurationsByIdentifier = nil; return _itemsSortedByVisibilityPriority; } -- (void)validateVisibleToolbarItems +/*! + Validates the visible toolbar items by sending a validate message to + each visible toolbar item. +*/ +- (void)validateVisibleItems { var toolbarItems = [self visibleItems], count = [toolbarItems count]; From f9da7f73b3f3a20512672c428a8989c36920325a Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Mon, 24 May 2010 21:59:37 -0500 Subject: [PATCH 033/124] Added missing pathComponents method to CPURL. --- Foundation/CPURL.j | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Foundation/CPURL.j b/Foundation/CPURL.j index 25dbb7d5a..e6235ab90 100644 --- a/Foundation/CPURL.j +++ b/Foundation/CPURL.j @@ -94,6 +94,11 @@ CPURLCustomIconKey = @"CPURLCustomIconKey"; return [self absoluteURL].path(); } +- (CPArray)pathComponents +{ + return self.pathComponents(); +} + // if absolute, returns the same as path - (CPString)relativePath { From 359a29874b39d9826b79299db8a0ca5cae5ac5ef Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Mon, 24 May 2010 22:44:14 -0500 Subject: [PATCH 034/124] Return a copy instead of the array itself. --- Foundation/CPURL.j | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Foundation/CPURL.j b/Foundation/CPURL.j index e6235ab90..dc240fbaa 100644 --- a/Foundation/CPURL.j +++ b/Foundation/CPURL.j @@ -96,7 +96,8 @@ CPURLCustomIconKey = @"CPURLCustomIconKey"; - (CPArray)pathComponents { - return self.pathComponents(); + var path = self.pathComponents(); + return [path copy]; } // if absolute, returns the same as path From 2a630a7210f6745af2745a75e9fb99ca37945d6a Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Tue, 25 May 2010 20:37:00 +0200 Subject: [PATCH 035/124] made CPDictionary call [super valueForKey:] on keys prefixed with @ --- Foundation/CPKeyValueCoding.j | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Foundation/CPKeyValueCoding.j b/Foundation/CPKeyValueCoding.j index 36ef5b48c..6543d04b6 100644 --- a/Foundation/CPKeyValueCoding.j +++ b/Foundation/CPKeyValueCoding.j @@ -267,7 +267,10 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; - (id)valueForKey:(CPString)aKey { - return [self objectForKey:aKey]; + if ([aKey hasPrefix:@"@"]) + return [super valueForKey:aKey.substr(1)]; + + return [self objectForKey:aKey]; } - (void)setValue:(id)aValue forKey:(CPString)aKey From 6c1a6a20333ef95876a2f9a282aa210b76343f9c Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Tue, 25 May 2010 11:05:07 +0200 Subject: [PATCH 036/124] made _sendPartialString send it's action down the responder chain --- AppKit/CPSearchField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index 50528fb0d..f5fdea74a 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -581,7 +581,7 @@ var CPSearchFieldSearchImage = nil, - (void)_sendPartialString { - [[self target] performSelector:[self action] withObject:self]; + [self _sendAction:self]; } - (void)_searchFieldCancel:(id)sender From 0315ad38f918997aea15960eb6b77b28d61b55da Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Tue, 13 Apr 2010 19:26:08 +0200 Subject: [PATCH 037/124] - fixed CPKeyedUnarchiver decodeBytesForKey attempting to access nil (or undefined) data - improved CPSearchField nib2cib support --- Foundation/CPKeyedUnarchiver.j | 7 +++++-- Tools/nib2cib/NSSearchField.j | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Foundation/CPKeyedUnarchiver.j b/Foundation/CPKeyedUnarchiver.j index 01fd63841..ef7d9c9f0 100644 --- a/Foundation/CPKeyedUnarchiver.j +++ b/Foundation/CPKeyedUnarchiver.j @@ -354,9 +354,12 @@ var CPArrayClass = Ni - (id)decodeBytesForKey:(CPString)aKey { // We get the CPData wrapper, then extract the bytes array - var data = [self decodeObjectForKey:aKey], - objectClass = data.isa; + var data = [self decodeObjectForKey:aKey]; + if (!data) + return nil; + + var objectClass = data.isa; if (objectClass === CPDataClass) return data.bytes; diff --git a/Tools/nib2cib/NSSearchField.j b/Tools/nib2cib/NSSearchField.j index 5e9173712..a68d5ede3 100644 --- a/Tools/nib2cib/NSSearchField.j +++ b/Tools/nib2cib/NSSearchField.j @@ -32,6 +32,12 @@ if (self) { + var cell = [aCoder decodeObjectForKey:@"NSCell"]; + + [self setRecentsAutosaveName:[cell recentsAutosaveName]]; + [self setMaximumRecents:[cell maximumRecents]]; + [self setSendsWholeSearchString:[cell sendsWholeSearchString]]; + [self setSendsSearchStringImmediately:[cell sendsSearchStringImmediately]]; } return self; @@ -59,5 +65,25 @@ @implementation NSSearchFieldCell : NSTextFieldCell { + CPString _recentsAutosaveName @accessors(property=recentsAutosaveName); + int _maximumRecents @accessors(property=maximumRecents); + BOOL _sendsWholeSearchString @accessors(property=sendsWholeSearchString); + BOOL _sendsSearchStringImmediately @accessors(property=sendsSearchStringImmediately); } + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super initWithCoder:aCoder]) + { + _recentsAutosaveName = [aCoder decodeObjectForKey:@"NSRecentsAutosaveName"]; + _maximumRecents = [aCoder decodeIntForKey:@"NSMaximumRecents"]; + _sendsWholeSearchString = [aCoder decodeBoolForKey:@"NSSendsWholeSearchString"] ? YES : NO; + + // These bytes don't seem to be used for anything else but the send immediatly flag + _sendsSearchStringImmediately = [aCoder decodeBytesForKey:@"NSSearchFieldFlags"] ? YES: NO; + } + + return self; +} + @end From 428f5a656de7db6ee3b94d9135b6ffecaf492ee6 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 7 Apr 2010 18:37:12 +0200 Subject: [PATCH 038/124] changed default table view alternating row colors to aristo --- AppKit/CPTableView.j | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index cd6b22c78..8e5985c30 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -244,7 +244,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; _selectionHighlightStyle = CPTableViewSelectionHighlightStyleRegular; [self setUsesAlternatingRowBackgroundColors:NO]; - [self setAlternatingRowBackgroundColors:[[CPColor whiteColor], [CPColor colorWithHexString:@"f5f9fc"]]]; + [self setAlternatingRowBackgroundColors: + [[CPColor whiteColor], [CPColor colorWithRed:245.0 / 255.0 green:249.0 / 255.0 blue:252.0 / 255.0 alpha:1.0]]]; _tableColumns = []; _tableColumnRanges = []; @@ -3413,9 +3414,10 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", _gridColor = [aCoder decodeObjectForKey:CPTableViewGridColorKey] || [CPColor grayColor]; _gridStyleMask = [aCoder decodeIntForKey:CPTableViewGridStyleMaskKey] || CPTableViewGridNone; - _alternatingRowBackgroundColors = [aCoder decodeObjectForKey:CPTableViewAlternatingRowColorsKey]; _usesAlternatingRowBackgroundColors = [aCoder decodeObjectForKey:CPTableViewUsesAlternatingBackgroundKey] - + _alternatingRowBackgroundColors = + [[CPColor whiteColor], [CPColor colorWithRed:245.0 / 255.0 green:249.0 / 255.0 blue:252.0 / 255.0 alpha:1.0]]; + _headerView = [aCoder decodeObjectForKey:CPTableViewHeaderViewKey]; _cornerView = [aCoder decodeObjectForKey:CPTableViewCornerViewKey]; From e65fcdab42c2a277db62ac1d3ab542b117e60b3b Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 7 Apr 2010 18:44:11 +0200 Subject: [PATCH 039/124] - changed default dataview styling to aristo - updated nib2cib support for CPTableColumn --- AppKit/CPTableColumn.j | 13 +++++++++---- Tests/Manual/TableCibTest/Resources/MainMenu.cib | 2 +- Tools/nib2cib/NSTableColumn.j | 8 ++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 14f239484..6c65113b5 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -79,11 +79,16 @@ CPTableColumnUserResizingMask = 1 << 1; [self setHeaderView:header]; var textDataView = [CPTextField new]; - [textDataView setLineBreakMode:CPLineBreakByTruncatingTail]; - [textDataView setValue:[CPColor colorWithHexString:@"333333"] forThemeAttribute:@"text-color"]; - [textDataView setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateSelectedDataView]; - [textDataView setValue:[CPFont boldSystemFontOfSize:12] forThemeAttribute:@"font" inState:CPThemeStateSelectedDataView]; + + [textDataView setValue:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0] + forThemeAttribute:"text-color"]; + + [textDataView setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateSelected]; + [textDataView setLineBreakMode:CPLineBreakByTruncatingTail]; + [textDataView setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateSelected]; [textDataView setValue:CPCenterVerticalTextAlignment forThemeAttribute:@"vertical-alignment"]; + [textDataView setValue:CGInsetMake(0.0, 0.0, 0.0, 5.0) forThemeAttribute:@"content-inset"]; + [self setDataView:textDataView]; } diff --git a/Tests/Manual/TableCibTest/Resources/MainMenu.cib b/Tests/Manual/TableCibTest/Resources/MainMenu.cib index 94613c585..d918dceb7 100644 --- a/Tests/Manual/TableCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;16E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;60E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;61E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;63E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;65E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;67E;K;28;CPTableColumnResizingMaskKeyD;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;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;68E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;69E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;69E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;68E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;35E;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;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;71E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;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;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;73E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;74E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;75E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;78E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;68E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;32E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;29E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;79E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;79E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;79E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;79E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;80E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;80E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;80E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;83E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;84E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;79E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;85E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;86E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;87E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;91E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;26E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;93E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;94E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;95E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;96E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;97E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;98E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;99E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;100E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;101E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;24E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;102E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;103E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;104E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;95E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;26E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;94E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;95E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;107E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;108E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;63E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;109E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;110E;K;28;CPTableColumnResizingMaskKeyD;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;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;78E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;111E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;111E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;78E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;94E;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;112E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;113E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;114E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;80E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;80E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;80E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;80E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;115E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;117E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;1;0E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;80E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;3;118E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;82E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;22E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;119E;E;S;16;Table Column (2)S;12;File's OwnerS;17;Table Header ViewS;12;Content ViewS;33;Bordered Scroll View (Table View)S;16;Table Column (3)S;19;Horizontal ScrollerS;15;Window (Window)S;29;Text Field Cell (Text Cell)-1S;29;Text Field Cell (Text Cell)-2S;27;Text Field Cell (Text Cell)S;17;Vertical ScrollerS;16;Table Column (1)S;29;Table View (Column 1, Two, 3)S;11;ApplicationS;14;App ControllerD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;E;E;S;1;2d;3;154d;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;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;125E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;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;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;12;$atext-colorD;K;6;CP$UIDd;3;130E;K;11;$aalignmentD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;131E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;132E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;136E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;137E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;90E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;135E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;22E;E;S;19;{{0, 0}, {516, 23}}S;6;normalS;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;82E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;77E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;133E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;111E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;134E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;90E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;135E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;35E;E;d;2;10T;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;139E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;140E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;90E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;141E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;S;1;3d;3;188d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;83E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;12;$atext-colorD;K;6;CP$UIDd;3;143E;K;11;$aalignmentD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;131E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;132E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;131E;E;S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}d;1;8S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:d;1;4d;1;0f;18;0.9866156787762906S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9482758620689655S;1;1d;3;101D;K;6;$classD;K;6;CP$UIDd;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;144E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;145E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;12;$atext-colorD;K;6;CP$UIDd;3;146E;K;11;$aalignmentD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;131E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;132E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;131E;E;S;20;{{0, 0}, {516, 290}}d;2;23S;6;{0, 0}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;27E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;116E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;148E;E;E;S;13;AppControllerS;8;delegateS;9;theWindowS;10;dataSourceS;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;150E;E;E;S;3;TwoD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;151E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;152E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;114E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;153E;K;5;stateD;K;6;CP$UIDd;3;154E;K;5;valueD;K;6;CP$UIDd;3;135E;E;S;0;d;4;3072S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;116E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;155E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;3;116E;K;22;CPColorPatternImageKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;158E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;153E;K;5;stateD;K;6;CP$UIDd;3;154E;K;5;valueD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;159E;E;E;S;8;Column 1D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;153E;K;5;stateD;K;6;CP$UIDd;3;154E;K;5;valueD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;92E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;116E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;161E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;162E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;163E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;65E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;164E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;S;5;Ariald;2;11S;10;text-colorS;8;selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;E;E;D;K;10;$classnameS;7;CPImageK;8;$classesA;S;7;CPImageS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;10;CPFilenameD;K;6;CP$UIDd;3;165E;K;6;CPSizeD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;86E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;162E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;163E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;86E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;164E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;109E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;162E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;163E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;109E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;164E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;f;3;0.5D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18S;102;file:/usr/local/narwhal/packages/cappuccino/Frameworks/Debug/AppKit/Resources/tableview-headerview.pngS;7;{1, 23}f;18;0.8941176470588236f;18;0.9058823529411765E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;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;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;35E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;60E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;61E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;62E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;63E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;64E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;35E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;65E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;66E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;68E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;69E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;37E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;69E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;72E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;73E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;74E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;75E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;76E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;78E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;80E;K;28;CPTableColumnResizingMaskKeyD;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;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;81E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;81E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;84E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;85E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;85E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;86E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;87E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;88E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;89E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;89E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;89E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;89E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;90E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;92E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;1;0E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;89E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;2;93E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;95E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;97E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;98E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;75E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;76E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;99E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;100E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;101E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;102E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;103E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;104E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;105E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;106E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;108E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;110E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;37E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;111E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;69E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;112E;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;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;113E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;113E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;84E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;81E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;22E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;33E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;103E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;103E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;103E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;103E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;89E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;89E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;89E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;95E;E;S;15;Window (Window)S;17;Vertical ScrollerS;16;Table Column (2)S;27;Text Field Cell (Text Cell)S;17;Table Header ViewS;11;ApplicationS;29;Text Field Cell (Text Cell)-1S;12;File's OwnerS;29;Table View (Column 1, Two, 3)S;14;App ControllerS;16;Table Column (1)S;16;Table Column (3)S;19;Horizontal ScrollerS;12;Content ViewS;29;Text Field Cell (Text Cell)-2S;33;Bordered Scroll View (Table View)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;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;20E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:d;1;4f;18;0.9482758620689655S;1;2d;3;154d;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;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;125E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;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;79E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;6;$afontD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;131E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;71E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;132E;K;11;$aalignmentD;K;6;CP$UIDd;2;69E;K;15;$acontent-insetD;K;6;CP$UIDd;3;134E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;3;119E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;153E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;26E;E;S;19;{{0, 0}, {516, 23}}S;6;normalD;K;6;$classD;K;6;CP$UIDd;3;119E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;151E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;85E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;29E;E;S;20;{{0, 0}, {516, 290}}d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;32E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;S;13;AppControllerS;1;1d;3;101D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;143E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;6;$afontD;K;6;CP$UIDd;3;144E;K;12;$atext-colorD;K;6;CP$UIDd;3;145E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;71E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;132E;K;11;$aalignmentD;K;6;CP$UIDd;2;69E;K;15;$acontent-insetD;K;6;CP$UIDd;3;146E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;S;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;147E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;101E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;6;$afontD;K;6;CP$UIDd;3;148E;K;12;$atext-colorD;K;6;CP$UIDd;3;149E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;71E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;132E;K;11;$aalignmentD;K;6;CP$UIDd;2;69E;K;15;$acontent-insetD;K;6;CP$UIDd;3;150E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;95E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;8;delegateS;9;theWindowS;10;dataSourceS;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;157E;E;E;S;3;TwoD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;158E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;159E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;160E;K;5;stateD;K;6;CP$UIDd;3;161E;K;5;valueD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;165E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;169E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;E;E;S;8;Column 1D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;160E;K;5;stateD;K;6;CP$UIDd;3;161E;K;5;valueD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;160E;K;5;stateD;K;6;CP$UIDd;3;161E;K;5;valueD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;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;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;78E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;78E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;S;5;Ariald;2;11S;4;fontS;8;selectedD;K;6;$classD;K;6;CP$UIDd;3;126E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;177E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;178E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;89E;E;S;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;138E;K;6;normalD;K;6;CP$UIDd;3;179E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}f;3;0.5D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;99E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;138E;K;6;normalD;K;6;CP$UIDd;3;182E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;105E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;138E;K;6;normalD;K;6;CP$UIDd;3;183E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;f;18;0.8941176470588236f;18;0.9058823529411765D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;110E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tools/nib2cib/NSTableColumn.j b/Tools/nib2cib/NSTableColumn.j index bdafee212..a9606f081 100644 --- a/Tools/nib2cib/NSTableColumn.j +++ b/Tools/nib2cib/NSTableColumn.j @@ -37,7 +37,15 @@ //var dataViewCell = [aCoder decodeObjectForKey:@"NSDataCell"]; _dataView = [[CPTextField alloc] initWithFrame:CPRectMakeZero()]; + + [_dataView setValue:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0] + forThemeAttribute:"text-color"]; + [_dataView setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateSelected]; + [_dataView setLineBreakMode:CPLineBreakByTruncatingTail]; + [_dataView setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateSelected]; + [_dataView setValue:CPCenterVerticalTextAlignment forThemeAttribute:@"vertical-alignment"]; + [_dataView setValue:CGInsetMake(0.0, 0.0, 0.0, 5.0) forThemeAttribute:@"content-inset"]; var headerCell = [aCoder decodeObjectForKey:@"NSHeaderCell"], headerView = [[_CPTableColumnHeaderView alloc] initWithFrame:CPRectMakeZero()]; From 1f97616f3c4bf3a268d9b63ed8b21b942f9dff32 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 7 Apr 2010 18:48:15 +0200 Subject: [PATCH 040/124] override default IB tableview grid colors with aristo's --- Tests/Manual/TableCibTest/Resources/MainMenu.cib | 2 +- Tests/Manual/TableCibTest/Resources/MainMenu.xib | 16 +++++++++------- Tools/nib2cib/NSTableView.j | 5 +++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Tests/Manual/TableCibTest/Resources/MainMenu.cib b/Tests/Manual/TableCibTest/Resources/MainMenu.cib index d918dceb7..7743d2a78 100644 --- a/Tests/Manual/TableCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;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;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;35E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;60E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;61E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;62E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;63E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;64E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;35E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;65E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;66E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;68E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;69E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;37E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;69E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;72E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;73E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;74E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;75E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;76E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;78E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;80E;K;28;CPTableColumnResizingMaskKeyD;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;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;81E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;81E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;84E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;85E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;85E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;86E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;87E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;88E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;89E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;89E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;89E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;89E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;90E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;92E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;1;0E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;89E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;2;93E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;95E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;97E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;98E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;75E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;76E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;99E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;100E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;101E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;102E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;103E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;104E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;105E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;106E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;108E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;110E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;37E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;111E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;71E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;69E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;112E;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;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;113E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;113E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;84E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;81E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;22E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;33E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;103E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;103E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;103E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;103E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;89E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;89E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;89E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;95E;E;S;15;Window (Window)S;17;Vertical ScrollerS;16;Table Column (2)S;27;Text Field Cell (Text Cell)S;17;Table Header ViewS;11;ApplicationS;29;Text Field Cell (Text Cell)-1S;12;File's OwnerS;29;Table View (Column 1, Two, 3)S;14;App ControllerS;16;Table Column (1)S;16;Table Column (3)S;19;Horizontal ScrollerS;12;Content ViewS;29;Text Field Cell (Text Cell)-2S;33;Bordered Scroll View (Table View)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;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;20E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:d;1;4f;18;0.9482758620689655S;1;2d;3;154d;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;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;125E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;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;79E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;6;$afontD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;131E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;71E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;132E;K;11;$aalignmentD;K;6;CP$UIDd;2;69E;K;15;$acontent-insetD;K;6;CP$UIDd;3;134E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;3;119E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;153E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;26E;E;S;19;{{0, 0}, {516, 23}}S;6;normalD;K;6;$classD;K;6;CP$UIDd;3;119E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;151E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;85E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;29E;E;S;20;{{0, 0}, {516, 290}}d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;32E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;S;13;AppControllerS;1;1d;3;101D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;143E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;6;$afontD;K;6;CP$UIDd;3;144E;K;12;$atext-colorD;K;6;CP$UIDd;3;145E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;71E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;132E;K;11;$aalignmentD;K;6;CP$UIDd;2;69E;K;15;$acontent-insetD;K;6;CP$UIDd;3;146E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;S;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;147E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;101E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;6;$afontD;K;6;CP$UIDd;3;148E;K;12;$atext-colorD;K;6;CP$UIDd;3;149E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;71E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;132E;K;11;$aalignmentD;K;6;CP$UIDd;2;69E;K;15;$acontent-insetD;K;6;CP$UIDd;3;150E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;95E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;8;delegateS;9;theWindowS;10;dataSourceS;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;157E;E;E;S;3;TwoD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;158E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;159E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;88E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;160E;K;5;stateD;K;6;CP$UIDd;3;161E;K;5;valueD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;165E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;169E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;E;E;S;8;Column 1D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;160E;K;5;stateD;K;6;CP$UIDd;3;161E;K;5;valueD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;160E;K;5;stateD;K;6;CP$UIDd;3;161E;K;5;valueD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;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;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;78E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;78E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;S;5;Ariald;2;11S;4;fontS;8;selectedD;K;6;$classD;K;6;CP$UIDd;3;126E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;177E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;178E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;89E;E;S;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;138E;K;6;normalD;K;6;CP$UIDd;3;179E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}f;3;0.5D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;99E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;138E;K;6;normalD;K;6;CP$UIDd;3;182E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;105E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;138E;K;6;normalD;K;6;CP$UIDd;3;183E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;f;18;0.8941176470588236f;18;0.9058823529411765D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;110E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;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;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;16E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;63E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;64E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;24E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;65E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;64E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;68E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;69E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;71E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;73E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;75E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;76E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;77E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;78E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;82E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;83E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;20E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;29E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;84E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;85E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;85E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;85E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;87E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;83E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;93E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;24E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;64E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;96E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;97E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;84E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;98E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;99E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;100E;K;28;CPTableColumnResizingMaskKeyD;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;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;102E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;103E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;104E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;85E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;85E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;85E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;85E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;105E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;107E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;108E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;85E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;3;109E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;87E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;110E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;110E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;111E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;112E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;113E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;71E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;114E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;115E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;116E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;117E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;118E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;119E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;120E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;34E;E;S;17;Vertical ScrollerS;16;Table Column (1)S;33;Bordered Scroll View (Table View)S;27;Text Field Cell (Text Cell)S;17;Table Header ViewS;29;Text Field Cell (Text Cell)-1S;12;File's OwnerS;11;ApplicationS;14;App ControllerS;19;Horizontal ScrollerS;16;Table Column (3)S;29;Table View (Column 1, Two, 3)S;12;Content ViewS;16;Table Column (2)S;29;Text Field Cell (Text Cell)-2S;15;Window (Window)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;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;S;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:d;1;4f;18;0.9482758620689655S;1;1d;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;2;72E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;87E;E;E;d;2;36S;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;138E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;139E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;140E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;141E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;142E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;143E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;140E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;26E;E;d;2;10T;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;S;19;{{0, 0}, {516, 23}}S;13;AppControllerS;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;1;3d;3;188d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;72E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;96E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;147E;K;12;$atext-colorD;K;6;CP$UIDd;3;148E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;15;$acontent-insetD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;20;{{0, 0}, {516, 290}}d;2;23S;6;{0, 0}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;30E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;150E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;151E;E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;72E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;154E;K;12;$atext-colorD;K;6;CP$UIDd;3;155E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;15;$acontent-insetD;K;6;CP$UIDd;3;156E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;104E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;166E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;S;0;d;4;3072S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;168E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;169E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;73E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;S;5;Ariald;2;11S;4;fontS;8;selectedD;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;85E;E;S;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;140E;K;6;normalD;K;6;CP$UIDd;3;180E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;99E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;140E;K;6;normalD;K;6;CP$UIDd;3;181E;E;E;f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;114E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;114E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;140E;K;6;normalD;K;6;CP$UIDd;3;184E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;186E;E;f;18;0.8941176470588236f;18;0.9058823529411765D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;93E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/TableCibTest/Resources/MainMenu.xib b/Tests/Manual/TableCibTest/Resources/MainMenu.xib index 01d7aae19..42934a3ea 100644 --- a/Tests/Manual/TableCibTest/Resources/MainMenu.xib +++ b/Tests/Manual/TableCibTest/Resources/MainMenu.xib @@ -2,17 +2,17 @@ 1050 - 10C540 - 740 - 1038.25 - 458.00 + 10D573 + 759 + 1038.29 + 460.00 com.apple.InterfaceBuilder.CocoaPlugin - 740 + 759 YES - + YES @@ -218,9 +218,10 @@ 23 - -694157312 + -157286400 + 3 4 15 0 @@ -531,6 +532,7 @@ 0 + IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx diff --git a/Tools/nib2cib/NSTableView.j b/Tools/nib2cib/NSTableView.j index 955ba7f14..f185ce817 100644 --- a/Tools/nib2cib/NSTableView.j +++ b/Tools/nib2cib/NSTableView.j @@ -54,6 +54,11 @@ _intercellSpacing = CGSizeMake(0.0, 0.0);//CGSizeMake([aCoder decodeFloatForKey:"NSIntercellSpacingWidth"], [aCoder decodeFloatForKey:"NSIntercellSpacingHeight"]); _gridColor = [aCoder decodeObjectForKey:@"NSGridColor"]; + + // Convert xib default to cib default + if ([_gridColor isEqual:[CPColor colorWithRed:127.0 / 255.0 green:127.0 / 255.0 blue:127.0 / 255.0 alpha:1.0]]) + _gridColor = [CPColor colorWithRed:229.0 / 255.0 green:229.0 / 255.0 blue:229.0 / 255.0 alpha:1.0]; + _gridStyleMask = [aCoder decodeIntForKey:@"NSGridStyleMask"]; _usesAlternatingRowBackgroundColors = (flags & 0x00800000) ? YES : NO; From 5479c77ae6fa38e86b101df99d26d713e3f99ed4 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 7 Apr 2010 18:54:40 +0200 Subject: [PATCH 041/124] changed the table header view image height to 23.0 --- AppKit/CPTableHeaderView.j | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index 073db4e72..926914eb4 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -61,13 +61,13 @@ var themeState = [self themeState]; if(themeState & CPThemeStateSelected && themeState & CPThemeStateHighlighted) - [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview-highlighted-pressed.png", CGSizeMake(1.0, 22.0))]]; + [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview-highlighted-pressed.png", CGSizeMake(1.0, 23.0))]]; else if (themeState & CPThemeStateSelected) - [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview-highlighted.png", CGSizeMake(1.0, 22.0))]]; + [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview-highlighted.png", CGSizeMake(1.0, 23.0))]]; else if (themeState & CPThemeStateHighlighted) - [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview-pressed.png", CGSizeMake(1.0, 22.0))]]; + [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview-pressed.png", CGSizeMake(1.0, 23.0))]]; else - [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview.png", CGSizeMake(1.0, 22.0))]]; + [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview.png", CGSizeMake(1.0, 23.0))]]; } - (void)setStringValue:(CPString)string @@ -174,7 +174,7 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal _columnOldWidth = 0.0; - [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview.png", CGSizeMake(1.0, 22.0))]]; + [self setBackgroundColor:[CPColor colorWithPatternImage:CPAppKitImage("tableview-headerview.png", CGSizeMake(1.0, 23.0))]]; } - (id)initWithFrame:(CGRect)aFrame From 00096030982529c8c308bf1c6626928f6380f825 Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Tue, 25 May 2010 14:01:42 -0500 Subject: [PATCH 042/124] removed the border from _CPCornerView (Aristo) Conflicts: Tests/Manual/TableCibTest/Resources/MainMenu.cib --- AppKit/_CPCornerView.j | 14 -------------- Tests/Manual/TableCibTest/Resources/MainMenu.cib | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/AppKit/_CPCornerView.j b/AppKit/_CPCornerView.j index 81c4a86e5..a5e4f9a65 100644 --- a/AppKit/_CPCornerView.j +++ b/AppKit/_CPCornerView.j @@ -20,20 +20,6 @@ return self; } -- (void)drawRect:(CGRect)aRect -{ - var context = [[CPGraphicsContext currentContext] graphicsPort]; - - CGContextSetStrokeColor(context, [CPColor colorWithHexString:@"dce0e2"]); - - var points = [ - CGPointMake(aRect.origin.x, aRect.origin.y + 0.5), - CGPointMake(aRect.origin.x, aRect.origin.y + aRect.size.height) - ]; - - CGContextStrokeLineSegments(context, points, 2); -} - - (id)initWithCoder:(CPCoder)aCoder { self = [super initWithCoder:aCoder]; diff --git a/Tests/Manual/TableCibTest/Resources/MainMenu.cib b/Tests/Manual/TableCibTest/Resources/MainMenu.cib index 7743d2a78..89b2c2de7 100644 --- a/Tests/Manual/TableCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;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;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;16E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;63E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;64E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;24E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;65E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;64E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;68E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;69E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;71E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;73E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;75E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;76E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;77E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;78E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;82E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;83E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;20E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;29E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;84E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;85E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;85E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;85E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;87E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;83E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;91E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;93E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;24E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;64E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;96E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;97E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;84E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;98E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;99E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;100E;K;28;CPTableColumnResizingMaskKeyD;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;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;102E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;103E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;104E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;85E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;85E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;85E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;85E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;105E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;107E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;108E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;85E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;3;109E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;87E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;110E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;110E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;111E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;112E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;113E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;71E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;114E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;115E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;116E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;117E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;118E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;119E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;120E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;34E;E;S;17;Vertical ScrollerS;16;Table Column (1)S;33;Bordered Scroll View (Table View)S;27;Text Field Cell (Text Cell)S;17;Table Header ViewS;29;Text Field Cell (Text Cell)-1S;12;File's OwnerS;11;ApplicationS;14;App ControllerS;19;Horizontal ScrollerS;16;Table Column (3)S;29;Table View (Column 1, Two, 3)S;12;Content ViewS;16;Table Column (2)S;29;Text Field Cell (Text Cell)-2S;15;Window (Window)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;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;28E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;S;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:d;1;4f;18;0.9482758620689655S;1;1d;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;2;72E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;87E;E;E;d;2;36S;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;138E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;139E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;140E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;141E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;142E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;143E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;140E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;26E;E;d;2;10T;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;24E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;S;19;{{0, 0}, {516, 23}}S;13;AppControllerS;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;1;3d;3;188d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;72E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;96E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;147E;K;12;$atext-colorD;K;6;CP$UIDd;3;148E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;15;$acontent-insetD;K;6;CP$UIDd;3;149E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;20;{{0, 0}, {516, 290}}d;2;23S;6;{0, 0}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;30E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;150E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;151E;E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;72E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;154E;K;12;$atext-colorD;K;6;CP$UIDd;3;155E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;15;$acontent-insetD;K;6;CP$UIDd;3;156E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;104E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;166E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;S;0;d;4;3072S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;168E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;169E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;73E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;S;5;Ariald;2;11S;4;fontS;8;selectedD;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;85E;E;S;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;140E;K;6;normalD;K;6;CP$UIDd;3;180E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;99E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;140E;K;6;normalD;K;6;CP$UIDd;3;181E;E;E;f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;114E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;114E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;140E;K;6;normalD;K;6;CP$UIDd;3;184E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;186E;E;f;18;0.8941176470588236f;18;0.9058823529411765D;K;6;$classD;K;6;CP$UIDd;3;106E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;93E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;93E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;29E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;63E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;64E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;36E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;65E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;67E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;68E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;69E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;72E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;74E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;76E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;77E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;78E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;79E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;67E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;36E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;67E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;81E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;83E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;85E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;86E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;87E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;88E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;89E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;90E;K;28;CPTableColumnResizingMaskKeyD;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;91E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;92E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;91E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;93E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;94E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;95E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;96E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;96E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;96E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;96E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;97E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;99E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;100E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;96E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;3;101E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;103E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;105E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;106E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;107E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;108E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;109E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;110E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;111E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;31E;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;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;112E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;113E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;114E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;91E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;82E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;24E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;20E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;87E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;96E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;96E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;96E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;117E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;118E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;72E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;119E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;120E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;S;19;Horizontal ScrollerS;16;Table Column (1)S;11;ApplicationS;17;Vertical ScrollerS;17;Table Header ViewS;12;File's OwnerS;16;Table Column (3)S;29;Table View (Column 1, Two, 3)S;27;Text Field Cell (Text Cell)S;12;Content ViewS;29;Text Field Cell (Text Cell)-1S;14;App ControllerS;29;Text Field Cell (Text Cell)-2S;15;Window (Window)S;33;Bordered Scroll View (Table View)S;16;Table Column (2)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;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}d;1;8S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:d;1;4d;1;0f;18;0.9866156787762906S;1;1d;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;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9482758620689655D;K;6;$classD;K;6;CP$UIDd;3;116E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;151E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;26E;E;S;19;{{0, 0}, {516, 23}}S;6;normalS;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;85E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;139E;K;12;$atext-colorD;K;6;CP$UIDd;3;140E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;15;$acontent-insetD;K;6;CP$UIDd;3;141E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;3;116E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;92E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;29E;E;S;20;{{0, 0}, {516, 290}}d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;27E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;142E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;145E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;146E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;E;E;S;13;AppControllerS;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;103E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;154E;K;12;$atext-colorD;K;6;CP$UIDd;3;155E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;15;$acontent-insetD;K;6;CP$UIDd;3;156E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;95E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;166E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;168E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;74E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;S;5;Ariald;2;11S;4;fontS;8;selectedD;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;96E;E;S;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;143E;K;6;normalD;K;6;CP$UIDd;3;180E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;89E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;143E;K;6;normalD;K;6;CP$UIDd;3;181E;E;E;f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;119E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;119E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;143E;K;6;normalD;K;6;CP$UIDd;3;185E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;187E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;64E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file From 004829ac9e8898a890a493ad15c6269abf94919d Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 7 Apr 2010 19:07:17 +0200 Subject: [PATCH 043/124] table header view nib2cib updates --- AppKit/CPTableHeaderView.j | 2 +- Tests/Manual/TableCibTest/Resources/MainMenu.cib | 2 +- Tools/nib2cib/NSTableColumn.j | 8 +++----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index 926914eb4..55707aee4 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -46,7 +46,7 @@ [_textField setAutoresizingMask:CPViewWidthSizable|CPViewHeightSizable]; [_textField setLineBreakMode:CPLineBreakByTruncatingTail]; - [_textField setTextColor: [CPColor colorWithHexString: @"333333"]]; + [_textField setTextColor:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0]]; [_textField setFont:[CPFont boldSystemFontOfSize:12.0]]; [_textField setAlignment:CPLeftTextAlignment]; [_textField setVerticalAlignment:CPCenterVerticalTextAlignment]; diff --git a/Tests/Manual/TableCibTest/Resources/MainMenu.cib b/Tests/Manual/TableCibTest/Resources/MainMenu.cib index 89b2c2de7..dc807af86 100644 --- a/Tests/Manual/TableCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;29E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;60E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;63E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;64E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;36E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;65E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;67E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;68E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;69E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;72E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;74E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;76E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;77E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;78E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;79E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;67E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;36E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;67E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;81E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;83E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;85E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;86E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;87E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;88E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;89E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;90E;K;28;CPTableColumnResizingMaskKeyD;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;91E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;92E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;91E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;93E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;94E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;95E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;96E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;96E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;96E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;96E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;97E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;99E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;100E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;96E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;3;101E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;103E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;105E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;106E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;107E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;108E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;109E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;110E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;111E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;31E;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;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;112E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;113E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;114E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;91E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;82E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;24E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;20E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;87E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;96E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;96E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;96E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;117E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;118E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;72E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;119E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;120E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;S;19;Horizontal ScrollerS;16;Table Column (1)S;11;ApplicationS;17;Vertical ScrollerS;17;Table Header ViewS;12;File's OwnerS;16;Table Column (3)S;29;Table View (Column 1, Two, 3)S;27;Text Field Cell (Text Cell)S;12;Content ViewS;29;Text Field Cell (Text Cell)-1S;14;App ControllerS;29;Text Field Cell (Text Cell)-2S;15;Window (Window)S;33;Bordered Scroll View (Table View)S;16;Table Column (2)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;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}d;1;8S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:d;1;4d;1;0f;18;0.9866156787762906S;1;1d;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;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9482758620689655D;K;6;$classD;K;6;CP$UIDd;3;116E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;151E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;26E;E;S;19;{{0, 0}, {516, 23}}S;6;normalS;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;85E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;139E;K;12;$atext-colorD;K;6;CP$UIDd;3;140E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;15;$acontent-insetD;K;6;CP$UIDd;3;141E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;3;116E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;92E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;29E;E;S;20;{{0, 0}, {516, 290}}d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;27E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;142E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;145E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;146E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;62E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;E;E;S;13;AppControllerS;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;103E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;154E;K;12;$atext-colorD;K;6;CP$UIDd;3;155E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;66E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;15;$acontent-insetD;K;6;CP$UIDd;3;156E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;95E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;166E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;168E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;164E;K;6;valuesD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;167E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;74E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;74E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;S;5;Ariald;2;11S;4;fontS;8;selectedD;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;96E;E;S;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;143E;K;6;normalD;K;6;CP$UIDd;3;180E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;89E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;143E;K;6;normalD;K;6;CP$UIDd;3;181E;E;E;f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;119E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;119E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;177E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;3;165E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;143E;K;6;normalD;K;6;CP$UIDd;3;185E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;187E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471D;K;6;$classD;K;6;CP$UIDd;2;98E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;64E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;34E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;60E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;61E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;63E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;64E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;66E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;68E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;69E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;72E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;73E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;74E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;75E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;75E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;78E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;79E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;63E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;64E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;80E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;81E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;82E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;83E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;84E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;85E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;86E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;25E;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;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;87E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;32E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;90E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;91E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;92E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;93E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;94E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;95E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;95E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;95E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;95E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;96E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;98E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;99E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;95E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;3;100E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;102E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;30E;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;33E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;105E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;89E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;87E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;36E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;37E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;71E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;71E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;71E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;71E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;95E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;95E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;95E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;3;102E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;108E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;112E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;34E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;113E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;91E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;112E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;117E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;34E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;91E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;112E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;120E;E;S;11;ApplicationS;14;App ControllerS;16;Table Column (1)S;12;File's OwnerS;16;Table Column (3)S;12;Content ViewS;16;Table Column (2)S;29;Text Field Cell (Text Cell)-2S;29;Text Field Cell (Text Cell)-1S;15;Window (Window)S;17;Table Header ViewS;29;Table View (Column 1, Two, 3)S;33;Bordered Scroll View (Table View)S;27;Text Field Cell (Text Cell)S;17;Vertical ScrollerS;19;Horizontal ScrollerD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;20E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;20E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;20E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;13;AppControllerS;1;1d;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;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;91E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;69E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;139E;K;12;$atext-colorD;K;6;CP$UIDd;3;140E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;91E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;15;$acontent-insetD;K;6;CP$UIDd;3;141E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;6;normalS;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;143E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;144E;K;12;$atext-colorD;K;6;CP$UIDd;3;145E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;91E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;15;$acontent-insetD;K;6;CP$UIDd;3;146E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowD;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;148E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;30E;E;S;19;{{0, 0}, {516, 23}}D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;90E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;148E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;S;20;{{0, 0}, {516, 290}}d;1;4d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;23E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;147E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;150E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;151E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;102E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:f;18;0.9482758620689655S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;95E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;165E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;169E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;173E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;66E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;S;17;Arial, sans-serifd;2;12S;4;fontS;8;selectedS;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;148E;K;6;normalD;K;6;CP$UIDd;3;177E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;73E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;148E;K;6;normalD;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;80E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;148E;K;6;normalD;K;6;CP$UIDd;3;179E;E;E;f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;118E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tools/nib2cib/NSTableColumn.j b/Tools/nib2cib/NSTableColumn.j index a9606f081..35b94ab9a 100644 --- a/Tools/nib2cib/NSTableColumn.j +++ b/Tools/nib2cib/NSTableColumn.j @@ -49,11 +49,9 @@ var headerCell = [aCoder decodeObjectForKey:@"NSHeaderCell"], headerView = [[_CPTableColumnHeaderView alloc] initWithFrame:CPRectMakeZero()]; - - [_headerView setStringValue:[headerCell objectValue]]; - [_headerView setFont:[headerCell font]]; - - [self setHeaderView:_headerView]; + + [headerView setStringValue:[headerCell objectValue]]; + [self setHeaderView:headerView]; _width = [aCoder decodeFloatForKey:@"NSWidth"]; _minWidth = [aCoder decodeFloatForKey:@"NSMinWidth"]; From d06d69966be4fc39eb7024e6f632e23ff915dcdb Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 7 Apr 2010 19:09:15 +0200 Subject: [PATCH 044/124] used content inset in stead of frame offset to properly place the table header text --- AppKit/CPTableHeaderView.j | 5 ++++- Tests/Manual/TableCibTest/Resources/MainMenu.cib | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index 55707aee4..eeab68c1f 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -42,10 +42,13 @@ - (void)_init { - _textField = [[_CPImageAndTextView alloc] initWithFrame:CGRectMake(5, 1, CGRectGetWidth([self bounds]) - 10, CGRectGetHeight([self bounds]) - 1)]; + _textField = [[_CPImageAndTextView alloc] initWithFrame: + CGRectMake(0.0, 0.0, CGRectGetWidth([self bounds]), CGRectGetHeight([self bounds]))]; + [_textField setAutoresizingMask:CPViewWidthSizable|CPViewHeightSizable]; [_textField setLineBreakMode:CPLineBreakByTruncatingTail]; + [_textField setContentInset:CGInsetMake(0.0, 0.0, 0.0, 5.0)]; [_textField setTextColor:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0]]; [_textField setFont:[CPFont boldSystemFontOfSize:12.0]]; [_textField setAlignment:CPLeftTextAlignment]; diff --git a/Tests/Manual/TableCibTest/Resources/MainMenu.cib b/Tests/Manual/TableCibTest/Resources/MainMenu.cib index dc807af86..fc34bc7a7 100644 --- a/Tests/Manual/TableCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;34E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;60E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;61E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;63E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;64E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;66E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;68E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;69E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;70E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;71E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;72E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;73E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;74E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;75E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;75E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;78E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;79E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;63E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;64E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;80E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;81E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;82E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;83E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;84E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;85E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;86E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;25E;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;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;87E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;32E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;90E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;91E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;92E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;93E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;94E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;95E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;95E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;95E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;95E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;96E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;98E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;99E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;95E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;3;100E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;102E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;30E;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;33E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;105E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;89E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;87E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;36E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;37E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;71E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;71E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;71E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;71E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;95E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;95E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;95E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;3;102E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;108E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;112E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;34E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;113E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;91E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;112E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;117E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;34E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;91E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;112E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;120E;E;S;11;ApplicationS;14;App ControllerS;16;Table Column (1)S;12;File's OwnerS;16;Table Column (3)S;12;Content ViewS;16;Table Column (2)S;29;Text Field Cell (Text Cell)-2S;29;Text Field Cell (Text Cell)-1S;15;Window (Window)S;17;Table Header ViewS;29;Table View (Column 1, Two, 3)S;33;Bordered Scroll View (Table View)S;27;Text Field Cell (Text Cell)S;17;Vertical ScrollerS;19;Horizontal ScrollerD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;20E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;20E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;20E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;13;AppControllerS;1;1d;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;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;91E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;138E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;69E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;139E;K;12;$atext-colorD;K;6;CP$UIDd;3;140E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;91E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;15;$acontent-insetD;K;6;CP$UIDd;3;141E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;6;normalS;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;143E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;144E;K;12;$atext-colorD;K;6;CP$UIDd;3;145E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;91E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;15;$acontent-insetD;K;6;CP$UIDd;3;146E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowD;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;148E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;30E;E;S;19;{{0, 0}, {516, 23}}D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;90E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;148E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;S;20;{{0, 0}, {516, 290}}d;1;4d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;23E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;147E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;150E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;151E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;102E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:f;18;0.9482758620689655S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;95E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;165E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;169E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;173E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;66E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;S;17;Arial, sans-serifd;2;12S;4;fontS;8;selectedS;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;148E;K;6;normalD;K;6;CP$UIDd;3;177E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;73E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;73E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;148E;K;6;normalD;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;80E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;148E;K;6;normalD;K;6;CP$UIDd;3;179E;E;E;f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;118E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;20E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;24E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;60E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;61E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;63E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;65E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;67E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;68E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;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;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;72E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;72E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;73E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;74E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;75E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;76E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;77E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;77E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;77E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;77E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;78E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;80E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;81E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;77E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;2;82E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;84E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;85E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;86E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;87E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;88E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;89E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;90E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;91E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;92E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;93E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;94E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;95E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;22E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;96E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;97E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;99E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;100E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;33E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;101E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;73E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;100E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;102E;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;24E;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;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;22E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;106E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;107E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;22E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;71E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;103E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;29E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;37E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;87E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;77E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;77E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;77E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;110E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;111E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;63E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;112E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;113E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;117E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;33E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;73E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;100E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;120E;E;S;16;Table Column (1)S;12;Content ViewS;29;Table View (Column 1, Two, 3)S;29;Text Field Cell (Text Cell)-2S;16;Table Column (3)S;15;Window (Window)S;27;Text Field Cell (Text Cell)S;17;Vertical ScrollerS;17;Table Header ViewS;33;Bordered Scroll View (Table View)S;16;Table Column (2)S;29;Text Field Cell (Text Cell)-1S;12;File's OwnerS;11;ApplicationS;14;App ControllerS;19;Horizontal ScrollerD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;27E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;24E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;E;E;S;1;1d;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;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;E;E;S;6;normalD;K;6;$classD;K;6;CP$UIDd;3;109E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;72E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;24E;E;S;20;{{0, 0}, {516, 290}}d;1;4d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;25E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;138E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;141E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;142E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;S;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;85E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;144E;K;12;$atext-colorD;K;6;CP$UIDd;3;145E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;15;$acontent-insetD;K;6;CP$UIDd;3;146E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:f;18;0.9482758620689655D;K;6;$classD;K;6;CP$UIDd;3;109E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;151E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;31E;E;S;19;{{0, 0}, {516, 23}}S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;84E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;154E;K;12;$atext-colorD;K;6;CP$UIDd;3;155E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;15;$acontent-insetD;K;6;CP$UIDd;3;156E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;13;AppControllerS;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;77E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;165E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;169E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;65E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;S;17;Arial, sans-serifd;2;12S;4;fontS;8;selectedS;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;177E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;E;E;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;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;89E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;181E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;182E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;183E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file From 6bd8e96ac0ee214d95e669356d921153bb849945 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Thu, 8 Apr 2010 14:44:40 +0200 Subject: [PATCH 045/124] fixed a bug where the table header would attempt to set content inset on a _CPImageAndTextView --- AppKit/CPTableHeaderView.j | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index eeab68c1f..76f71f426 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -43,12 +43,11 @@ - (void)_init { _textField = [[_CPImageAndTextView alloc] initWithFrame: - CGRectMake(0.0, 0.0, CGRectGetWidth([self bounds]), CGRectGetHeight([self bounds]))]; + CGRectMake(5.0, 0.0, CGRectGetWidth([self bounds]) - 10.0, CGRectGetHeight([self bounds]))]; [_textField setAutoresizingMask:CPViewWidthSizable|CPViewHeightSizable]; [_textField setLineBreakMode:CPLineBreakByTruncatingTail]; - [_textField setContentInset:CGInsetMake(0.0, 0.0, 0.0, 5.0)]; [_textField setTextColor:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0]]; [_textField setFont:[CPFont boldSystemFontOfSize:12.0]]; [_textField setAlignment:CPLeftTextAlignment]; From ca7af88c59018771e87b8eed376c651d8fb2ba84 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Thu, 20 May 2010 18:34:48 +0200 Subject: [PATCH 046/124] - updated tablecolumn nib2cib to support new row selection theme state - nib2cibed the MainMenu.xib in the tablecib example to update it's cib to the changes --- AppKit/CPTableColumn.j | 4 ++-- Tests/Manual/TableCibTest/Resources/MainMenu.cib | 2 +- Tools/nib2cib/NSTableColumn.j | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 6c65113b5..291b1bf75 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -83,9 +83,9 @@ CPTableColumnUserResizingMask = 1 << 1; [textDataView setValue:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0] forThemeAttribute:"text-color"]; - [textDataView setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateSelected]; + [textDataView setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateSelectedDataView]; [textDataView setLineBreakMode:CPLineBreakByTruncatingTail]; - [textDataView setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateSelected]; + [textDataView setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateSelectedDataView]; [textDataView setValue:CPCenterVerticalTextAlignment forThemeAttribute:@"vertical-alignment"]; [textDataView setValue:CGInsetMake(0.0, 0.0, 0.0, 5.0) forThemeAttribute:@"content-inset"]; diff --git a/Tests/Manual/TableCibTest/Resources/MainMenu.cib b/Tests/Manual/TableCibTest/Resources/MainMenu.cib index fc34bc7a7..b13ff6731 100644 --- a/Tests/Manual/TableCibTest/Resources/MainMenu.cib +++ b/Tests/Manual/TableCibTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;20E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;24E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;60E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;61E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;63E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;65E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;67E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;68E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;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;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;72E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;72E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;73E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;74E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;75E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;76E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;77E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;77E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;77E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;77E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;78E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;80E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;81E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;77E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;2;82E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;84E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;31E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;85E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;86E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;87E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;88E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;89E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;90E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;91E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;92E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;93E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;94E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;95E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;22E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;96E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;97E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;99E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;100E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;33E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;101E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;73E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;100E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;102E;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;24E;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;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;22E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;106E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;107E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;22E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;71E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;103E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;29E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;37E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;87E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;87E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;77E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;77E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;77E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;110E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;111E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;63E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;112E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;113E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;117E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;33E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;73E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;100E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;120E;E;S;16;Table Column (1)S;12;Content ViewS;29;Table View (Column 1, Two, 3)S;29;Text Field Cell (Text Cell)-2S;16;Table Column (3)S;15;Window (Window)S;27;Text Field Cell (Text Cell)S;17;Vertical ScrollerS;17;Table Header ViewS;33;Bordered Scroll View (Table View)S;16;Table Column (2)S;29;Text Field Cell (Text Cell)-1S;12;File's OwnerS;11;ApplicationS;14;App ControllerS;19;Horizontal ScrollerD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;121E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;27E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;24E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;36E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;E;E;S;1;1d;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;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;126E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;15;$acontent-insetD;K;6;CP$UIDd;3;135E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;E;E;S;6;normalD;K;6;$classD;K;6;CP$UIDd;3;109E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;72E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;24E;E;S;20;{{0, 0}, {516, 290}}d;1;4d;2;23S;6;{0, 0}F;T;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;25E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;138E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;141E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;142E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;S;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;85E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;144E;K;12;$atext-colorD;K;6;CP$UIDd;3;145E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;15;$acontent-insetD;K;6;CP$UIDd;3;146E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}d;1;8S;17;disabled+verticald;1;0S;27;_verticalScrollerDidScroll:f;18;0.9482758620689655D;K;6;$classD;K;6;CP$UIDd;3;109E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;151E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;31E;E;S;19;{{0, 0}, {516, 23}}S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;84E;E;E;d;2;36D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;S;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;64E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;154E;K;12;$atext-colorD;K;6;CP$UIDd;3;155E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;133E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;15;$acontent-insetD;K;6;CP$UIDd;3;156E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;137E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;136E;E;S;13;AppControllerS;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:f;18;0.9866156787762906S;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;S;8;Column 1D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;77E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;165E;E;d;1;2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;0;d;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;169E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;65E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;S;17;Arial, sans-serifd;2;12S;4;fontS;8;selectedS;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;177E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}f;18;0.8980392156862745D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;E;E;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;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;89E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;181E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;8;selectedD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;182E;E;E;S;19;{{5, 1}, {-10, -1}}S;19;{{0, 0}, {-10, -1}}d;2;18D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;183E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;118E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;60E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;2;61E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;2;62E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;2;63E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;2;64E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;2;66E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;2;68E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;2;69E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;70E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;72E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;76E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;77E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;34E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;31E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;63E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;63E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;63E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;63E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;78E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;78E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;78E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;2;80E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;81E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;82E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;83E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;84E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;85E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;27E;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;26E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;86E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;76E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;89E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;90E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;91E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;92E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;78E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;78E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;78E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;78E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;93E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;95E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;96E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;78E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;2;97E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;80E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;37E;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;101E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;102E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;103E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;89E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;104E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;106E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;107E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;108E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;109E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;110E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;111E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;2;69E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;112E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;113E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;114E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;104E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;23E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;115E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;89E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;104E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;116E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;117E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;118E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;108E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;109E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;119E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;120E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;2;69E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;1;0E;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;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;121E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;121E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;77E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;29E;E;S;14;App ControllerS;12;File's OwnerS;16;Table Column (3)S;33;Bordered Scroll View (Table View)S;15;Window (Window)S;12;Content ViewS;29;Table View (Column 1, Two, 3)S;19;Horizontal ScrollerS;29;Text Field Cell (Text Cell)-2S;29;Text Field Cell (Text Cell)-1S;16;Table Column (1)S;27;Text Field Cell (Text Cell)S;11;ApplicationS;17;Vertical ScrollerS;16;Table Column (2)S;17;Table Header ViewD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;122E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;19E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;25E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;124E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;E;E;S;13;AppControllerS;1;3d;3;188d;2;10d;22;3.4028234663852886e+38D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;2;61E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;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;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;131E;K;12;$atext-colorD;K;6;CP$UIDd;3;132E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;69E;K;11;$aalignmentD;K;6;CP$UIDd;3;104E;K;15;$acontent-insetD;K;6;CP$UIDd;3;134E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;d;1;2S;22;{{20, 20}, {518, 308}}S;20;{{0, 0}, {518, 308}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;80E;E;E;d;2;36S;6;normalD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;137E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;29E;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;142E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;37E;E;T;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;143E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;E;S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;24;{{335, 128}, {558, 348}}d;1;7S;6;WindowS;20;{{0, 0}, {558, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;S;20;{{0, 0}, {516, 290}}d;1;4d;2;23S;6;{0, 0}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;21E;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;145E;E;d;1;3D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;146E;E;E;S;19;{{1, 1}, {516, 15}}S;19;{{0, 0}, {516, 15}}d;1;8S;8;disabledd;1;1S;29;_horizontalScrollerDidScroll:d;1;0f;18;0.9866156787762906S;1;1d;3;101d;2;40d;4;1000D;K;6;$classD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;147E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;148E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;149E;K;12;$atext-colorD;K;6;CP$UIDd;3;150E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;69E;K;11;$aalignmentD;K;6;CP$UIDd;3;104E;K;15;$acontent-insetD;K;6;CP$UIDd;3;151E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;S;22;{{502, 16}, {15, 275}}S;19;{{0, 0}, {15, 275}}S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9482758620689655S;1;2d;3;154D;K;6;$classD;K;6;CP$UIDd;2;65E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;153E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;154E;K;12;$atext-colorD;K;6;CP$UIDd;3;155E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;69E;K;11;$aalignmentD;K;6;CP$UIDd;3;104E;K;15;$acontent-insetD;K;6;CP$UIDd;3;156E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;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;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;135E;E;S;19;{{0, 0}, {516, 23}}S;8;delegateS;9;theWindowS;10;dataSourceS;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;158E;E;E;D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;159E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;160E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;78E;E;S;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;165E;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;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;S;0;d;4;3072S;20;{{1, 1}, {516, 290}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;167E;E;S;21;{{1, 291}, {516, 17}}S;19;{{0, 0}, {516, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;E;E;S;22;{{502, 285}, {16, 23}}S;18;{{0, 0}, {16, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;102E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;E;E;S;8;Column 1D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;E;E;S;3;TwoD;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;161E;K;5;stateD;K;6;CP$UIDd;3;162E;K;5;valueD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;4;nameD;K;6;CP$UIDd;3;163E;K;6;valuesD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;166E;E;D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;66E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;E;S;17;Arial, sans-serifd;2;12S;4;fontS;16;selectedDataViewS;10;text-colorD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;16;selectedDataViewD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;177E;E;E;S;39;{"top":0,"right":0,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;E;E;f;18;0.8980392156862745D;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;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;102E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;110E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;110E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;16;selectedDataViewD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;181E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;119E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;119E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;176E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;10;CP.objectsD;K;16;selectedDataViewD;K;6;CP$UIDd;3;139E;K;6;normalD;K;6;CP$UIDd;3;182E;E;E;S;18;{{5, 0}, {-10, 0}}S;18;{{0, 0}, {-10, 0}}d;2;18D;K;6;$classD;K;6;CP$UIDd;2;94E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;183E;E;f;18;0.9607843137254902f;18;0.9764705882352941f;18;0.9882352941176471D;K;6;$classD;K;6;CP$UIDd;2;94E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;102E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;102E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;102E;E;E;f;3;0.2E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tools/nib2cib/NSTableColumn.j b/Tools/nib2cib/NSTableColumn.j index 35b94ab9a..8af344031 100644 --- a/Tools/nib2cib/NSTableColumn.j +++ b/Tools/nib2cib/NSTableColumn.j @@ -41,9 +41,9 @@ [_dataView setValue:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0] forThemeAttribute:"text-color"]; - [_dataView setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateSelected]; + [_dataView setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateSelectedDataView]; [_dataView setLineBreakMode:CPLineBreakByTruncatingTail]; - [_dataView setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateSelected]; + [_dataView setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateSelectedDataView]; [_dataView setValue:CPCenterVerticalTextAlignment forThemeAttribute:@"vertical-alignment"]; [_dataView setValue:CGInsetMake(0.0, 0.0, 0.0, 5.0) forThemeAttribute:@"content-inset"]; From b32d503d654c02c8c6efc70f3f839543fd71686e Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 19 May 2010 18:51:18 +0200 Subject: [PATCH 047/124] implemented CPTableColumn isHidden nib2cib support --- AppKit/CPTableColumn.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 291b1bf75..903f448e6 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -403,6 +403,7 @@ var CPTableColumnIdentifierKey = @"CPTableColumnIdentifierKey", CPTableColumnResizingMaskKey = @"CPTableColumnResizingMaskKey", CPTableColumnIsHiddenkey = @"CPTableColumnIsHiddenKey", CPSortDescriptorPrototypeKey = @"CPSortDescriptorPrototypeKey"; + CPTableColumnIsHiddenkey = @"CPTableColumnIsHiddenKey"; @implementation CPTableColumn (CPCoding) From eae32703852fa2252b33797897e749840f29f06b Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 25 May 2010 14:09:10 -0700 Subject: [PATCH 048/124] Add bcomm hook to LoadTimeTest --- Tests/Manual/LoadTimeTest/AppController.j | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Tests/Manual/LoadTimeTest/AppController.j b/Tests/Manual/LoadTimeTest/AppController.j index 1638643a2..bdb9a6c30 100644 --- a/Tests/Manual/LoadTimeTest/AppController.j +++ b/Tests/Manual/LoadTimeTest/AppController.j @@ -48,7 +48,16 @@ loadStdev = Math.sqrt(loadStdev / data.length); launchStdev = Math.sqrt(launchStdev / data.length); - + + if (window.parent.BCOMM) { + window.parent.BCOMM.finishTest({ + loadAvg : loadAvg, + launchAvg : launchAvg, + loadStdev : loadStdev, + launchStdev : launchStdev + }); + } + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], contentView = [theWindow contentView]; From 5a77c1979117f10483b81c656b53882bdf988359 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 25 May 2010 16:24:29 -0700 Subject: [PATCH 049/124] Silence tools output during tests (press, flatten, capp gen) --- Tests/Tools/ToolsTest.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index 6705affee..b44cd234b 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -21,13 +21,13 @@ function cleanup() { { var status; - status = OS.system(["capp", "gen", "ToolsTestApp"]); + status = OS.system(["capp", "gen", "ToolsTestApp"].map(OS.enquote).join(" ") + " > /dev/null"); [self assert:status equals:0 message:"capp gen failed"]; - status = OS.system(["press", "-f", "ToolsTestApp", "PressTestApp"]); + status = OS.system(["press", "-f", "ToolsTestApp", "PressTestApp"].map(OS.enquote).join(" ") + " > /dev/null"); [self assert:status equals:0 message:"press failed"]; - status = OS.system(["flatten", "-f", "ToolsTestApp", "FlattenTestApp"]); + status = OS.system(["flatten", "-f", "ToolsTestApp", "FlattenTestApp"].map(OS.enquote).join(" ") + " > /dev/null"); [self assert:status equals:0 message:"flatten failed"]; } From 51c90223fce6bcd50152100a5a1905c1e41daf8e Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 26 May 2010 16:44:55 +0200 Subject: [PATCH 050/124] exposed enabled binding on CPControl and made sure CPControl's bindings are only exposed once --- AppKit/CPControl.j | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index b43925a60..b273c5040 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -133,7 +133,11 @@ var CPControlBlackColor = [CPColor blackColor]; + (void)initialize { - [self exposeBinding:"value"]; + if (self === [CPControl class]) + { + [self exposeBinding:@"value"]; + [self exposeBinding:@"enabled"]; + } } - (id)initWithFrame:(CGRect)aFrame From bc0fa6a62ef8159b5a13c7a2f81483701d6e32bc Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 26 May 2010 16:45:55 +0200 Subject: [PATCH 051/124] made removeObject on _CPKVCArray work properly --- Foundation/CPArray+KVO.j | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Foundation/CPArray+KVO.j b/Foundation/CPArray+KVO.j index d723b7f7e..fa8e1147b 100644 --- a/Foundation/CPArray+KVO.j +++ b/Foundation/CPArray+KVO.j @@ -211,6 +211,11 @@ [self _setRepresentedObject:target]; } +- (void)removeObject:(id)anObject +{ + [self removeObject:anObject inRange:CPMakeRange(0, [self count])]; +} + - (void)removeLastObject { if(_remove) From 3cd44284c4a84a2ceba63cb4c37485f936f0a8cd Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 26 May 2010 16:46:44 +0200 Subject: [PATCH 052/124] - added CPValueTransformer to Foundation.j - made CPValueTransformer import Foundation objects directly - gave the build in transformers CPValueTransformer as superclass --- Foundation/CPValueTransformer.j | 20 ++++++++++---------- Foundation/Foundation.j | 1 + 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Foundation/CPValueTransformer.j b/Foundation/CPValueTransformer.j index 29bfcf6f8..f3440e59c 100644 --- a/Foundation/CPValueTransformer.j +++ b/Foundation/CPValueTransformer.j @@ -23,8 +23,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import -@import +@import "CPObject.j" +@import "CPDictionary.j" var transformerMap = [CPDictionary dictionary]; @@ -79,7 +79,7 @@ var transformerMap = [CPDictionary dictionary]; // builtin transformers -@implementation CPNegateBooleanTransformer +@implementation CPNegateBooleanTransformer : CPValueTransformer + (BOOL)allowsReverseTransformation { @@ -103,7 +103,7 @@ var transformerMap = [CPDictionary dictionary]; @end -@implementation CPIsNilTransformer +@implementation CPIsNilTransformer : CPValueTransformer + (BOOL)allowsReverseTransformation { @@ -122,7 +122,7 @@ var transformerMap = [CPDictionary dictionary]; @end -@implementation CPIsNotNilTransformer +@implementation CPIsNotNilTransformer : CPValueTransformer + (BOOL)allowsReverseTransformation { @@ -141,7 +141,7 @@ var transformerMap = [CPDictionary dictionary]; @end -@implementation CPUnarchiveFromDataTransformer +@implementation CPUnarchiveFromDataTransformer : CPValueTransformer + (BOOL)allowsReverseTransformation { @@ -170,7 +170,7 @@ CPIsNilTransformerName = @"CPIsNilTransformerName"; CPIsNotNilTransformerName = @"CPIsNotNilTransformerName"; CPUnarchiveFromDataTransformerName = @"CPUnarchiveFromDataTransformerName"; -[CPValueTransformer setValueTransformer:[CPNegateBooleanTransformer new] forName:CPNegateBooleanTransformerName]; -[CPValueTransformer setValueTransformer:[CPIsNilTransformer new] forName:CPIsNilTransformerName]; -[CPValueTransformer setValueTransformer:[CPIsNotNilTransformer new] forName:CPIsNotNilTransformerName]; -[CPValueTransformer setValueTransformer:[CPUnarchiveFromDataTransformer new] forName:CPUnarchiveFromDataTransformerName]; +[CPValueTransformer setValueTransformer:[[CPNegateBooleanTransformer alloc] init] forName:CPNegateBooleanTransformerName]; +[CPValueTransformer setValueTransformer:[[CPIsNilTransformer alloc] init] forName:CPIsNilTransformerName]; +[CPValueTransformer setValueTransformer:[[CPIsNotNilTransformer alloc] init] forName:CPIsNotNilTransformerName]; +[CPValueTransformer setValueTransformer:[[CPUnarchiveFromDataTransformer alloc] init] forName:CPUnarchiveFromDataTransformerName]; \ No newline at end of file diff --git a/Foundation/Foundation.j b/Foundation/Foundation.j index 4bf1460e4..f2066ed2f 100755 --- a/Foundation/Foundation.j +++ b/Foundation/Foundation.j @@ -56,6 +56,7 @@ @import "CPURLResponse.j" @import "CPUserSessionManager.j" @import "CPValue.j" +@import "CPValueTransformer.j" /*! @mainpage Cappuccino is distributed under the @ref license "GNU LGPL". From 2a36488db7d09923a1c4dcc0f6d288e7e14faaf2 Mon Sep 17 00:00:00 2001 From: Thomas Ingham Date: Tue, 25 May 2010 23:29:43 -0400 Subject: [PATCH 053/124] Added new artwork and theme style for the button. Matching fonts to segctl. --- .../Resources/HUD/button-bezel-center.png | Bin 141 -> 170 bytes .../HUD/button-bezel-disabled-center.png | Bin 0 -> 170 bytes .../HUD/button-bezel-disabled-left.png | Bin 0 -> 254 bytes .../HUD/button-bezel-disabled-right.png | Bin 0 -> 257 bytes .../HUD/button-bezel-highlighted-center.png | Bin 151 -> 173 bytes .../HUD/button-bezel-highlighted-left.png | Bin 588 -> 256 bytes .../HUD/button-bezel-highlighted-right.png | Bin 566 -> 261 bytes .../Resources/HUD/button-bezel-left.png | Bin 600 -> 259 bytes .../Resources/HUD/button-bezel-right.png | Bin 572 -> 260 bytes .../HUD/default-button-bezel-center.png | Bin 0 -> 185 bytes .../default-button-bezel-disabled-center.png | Bin 0 -> 182 bytes .../default-button-bezel-disabled-left.png | Bin 0 -> 261 bytes .../default-button-bezel-disabled-right.png | Bin 0 -> 271 bytes ...efault-button-bezel-highlighted-center.png | Bin 0 -> 157 bytes .../default-button-bezel-highlighted-left.png | Bin 0 -> 248 bytes ...default-button-bezel-highlighted-right.png | Bin 0 -> 242 bytes .../HUD/default-button-bezel-left.png | Bin 0 -> 282 bytes .../HUD/default-button-bezel-right.png | Bin 0 -> 278 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 93 +++++++++++++++--- 19 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-center.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-right.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-left.png create mode 100644 AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-right.png diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-center.png index 6b3e348c109e897f721c798056e62367d34dd77f..cc9401c7359a8308dbfa20cc26c5e9b397215ad2 100644 GIT binary patch delta 155 zcmeBWT*Wv+yk3HXje&u|`pooOK#H@#BeIx*fm;}a85w5HkpK!RBzpw;GB9K(F));v zF))02#lX;H4&-|?Fg#XeU@$adU=UvOO|DuWsMf&K#WAGfR+53S@$d6rUSHQ|Q)2^y zW&i*GR~Ei;FVdQ&MBb@03&HF AApigX delta 125 zcmZ3**vmLUyiA0Hje&u|hcA2~kdiEMjVKAuPb(=;EJ|f?Ovz75Rq)JBOiv9;O-!jQ zJeg_(RHX0e;uyjao&1BJg~vhQ#Fq5)a&>G9=leKM{N+{uw_wu-!FoZR35+}nVn+hf b1UMOfI!dwseCF~UsFlIf)z4*}Q$iB}PGBfa diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-center.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4ce2152560ba6a15b8f899d68b5aa9efd824bb GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq&N#aB8wRqxP?KOkzv*x380`t zvPY0F14DKa14D@!1H+eB3=B=?K)yEv!(&wj216qT2H`c|m>CEz|NsAgB4yPBJ?&Vo&XYa7;&6|d!LQtNljNb*bwKwpc)I$ztaD0e0svM|SiJxM literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-disabled-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6f14f35d8afb7ef9648ef4887b4e4dfc4c9f816e GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq&N#aB8wRqxP?KOkzv*x380`t zvPY0F14DKa14D@!1H+eB3=B=?K)yEv!(&wj216qT2H`c|Vdzu&V_PQatXDOJovCMI&6Us^z?t=2^?&=wy|*FQsnPy4UC4{gY^W zckW@tA2@lYFZZ@wkk@UmOMC(bOixW2v;`B49#}5<40IBMr>mdKI;Vst04Nw) A;s5{u literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-center.png index 0f35e8c4b0a81e3e34eb23cd0f692519f9eca7c8..be25a32af4d65578f2c8f661829519652488ef79 100644 GIT binary patch delta 158 zcmbQvxR!B(c)bJ%8v_G_^_l6nfD~teM`SSr1Gg{;GcwGYBLNgtNcITwWnjooVqhpS zV_^95ih-fY9LV=(V0f&`z+h;^z#zQln_RU%P_412i(^Q|t)zh9;NR!J{QjQLrsn46 z#-_%`#-_pTxS%sJxGA1JrswC;Zt)(T|Ns9_7iZ#O(2U^fJ-SqHF;G8)r>mdKI;Vst E0CmbOssI20 delta 136 zcmZ3>IGu5Vc)bV*8v_G_4`28~ASGGi8c`CQpH@vJEDS2yRKg}<7bF>ldGOSCvG9oMGT&vYYu$Oo#A}kbI!d}Q&Tg1 diff --git a/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/button-bezel-highlighted-right.png index 809339ae4912c4d3751e73c64d43ce2db2ca7c64..cd709f3192791fd223ad6a42fa54f17d4c9f63b8 100644 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq&N#aB8wRqxP?KOkzv*x380`t zvPY0F14DKa14D@!1H+eB3=B=?K)yEv!(&wj216qT2H`c|m)hfzOa^OBp)6%6N}vD$d8OIX^zVS~?p0paczNom%NLKm<9J^ug0(kVg* z4Ei3geE)mzxzA@d>8ze|DJ;}nOUWkV&fbgZT^tN=mVR6qaPP*9S_4*@jC)oM48TLhvZTC~pvf)9j3p|sIx zd_goui*~p`Zrft9cm`iuB&09-#-5xDv)MeJ z$zPSiA0`|^eL9* ztrPg&53=JCf+aBDN_wQ#*Z literal 600 zcmV-e0;m0nP)tvt5>h;{`m3Z_{WbQj~_dBtf#ZHGnb2tD*z}5!hukXF#Yb`yB^=a zf4{P5(V~1WFE9W0_V$P+OP0j!*|R5c@7}!$Fbuch=+UD_Kn+(@Qc{9u&YT%}TOzynXxD<>$|z4nSAg!7xk{H_-j37B60$H-G+ozuUKOy8@kP4OC!>4TGI^=FFM! zckkYv^Y-?(yK&=&!|&g}O@WdoxG>n3=g*(70(yGFlqpjzflf36N*Lh7AWh;xg-`11 z>qCJWK_+Pv!XQnGfB*jdt*)+a^5n@AU7(;kAq>)_2K2+%h=>Stpubdrg35$2NR#U4 z&z~OwgV`UL3S@zT@`Nx*lL9bOw_Lh(scqlBed0htX+jtr5KEUXE&TA|!VgoAR0Ag++=0(Qv1PjC<6LhPpsv?1*dH&nCZ--vLeq9I* zQBYcA0%ao@M#&mbjaoqLux#0~GGJtH0BXMW9}Qq+La0;aK!F3q_CV|j#C}K_Fc4i6 mvaKM^px{*iVo=i2fMEdm898>)oF9Jx0000gTe~DWM4f D!f08( literal 572 zcmV-C0>k}@P)TsD{``6A%a<>UUcY|r z%fP_E%zy&~B4NL-uCCnU$B*}X{P^+s_wV12U%Pfq7bwn%qGQjVJqdgF?ge8YJ8{X9 zB{A*o?GfJI-u{agEz1A#4$VW0ulckbMAoj-rR-{QrK^ML+51ys%r(`14R|Ni~k^u~=F z4qjefc0d=LJ9FktIM|s$NdtTs7#K!VrcAK}2F`?M&z`LU+Xj@-CWL_+Od1**LV*T6 z0csKlX;LSIA3uJqtFEqY^6%fj-#|@@AWh1IFfb5QbaZs||Ni|8(xe8`Bu@wfBU*OS zq)8sYpnnF_BuxnK+qX~r^5x5|z)0Q#bDlUM91;>D{{H>@Gs~7OD})7v2tEunT?m*O z!h!L05vais7UTlBFwk_~<;#~Vef|3NMrCDXG*E*qEOL3#FgFl$OrAWM?f(7y?!dUY z0!l_e#ai%Wga(*izI324#W!JV1+2gn%x1jHZUVs;vZB10000< KMNUMnLSTYjX#|D< diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-center.png new file mode 100644 index 0000000000000000000000000000000000000000..bc5b3a93be301301e607f293a680e875df0f5df8 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq&N#aB8wRqxP?KOkzv*x380`t zvPY0F14DKa14D@!1H+eB3=B=?K)yEv!(&wj216qT2H`c|XB~)z4*}Q$iB}Bq}rU literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-center.png new file mode 100644 index 0000000000000000000000000000000000000000..8289aed507394b9b1e004d760f64ad9efffcc098 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq&N#aB8wRqxP?KOkzv*x380`t zvPY0F14DKa14D@!1H+eB3=B=?K)yEv!(&wj216qT2H`c|!lO literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-disabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e2c0ac5361485f53c9b1cdbf1c4f8fe810cb15 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq&N#aB8wRqxP?KOkzv*x380`t zvPY0F14DKa14D@!1H+eB3=B=?K)yEv!(&wj216qT2H`c|- zYjO}^UEMDCv7Avk!H843f5D83|ElE^S&i=I^>D{Xl>XFOc}iHJ^zPFTb6?qH9n+Q# zx5KY8c09INlqM$Fd6S2Mb;I)t#`(;}^Bc{NKJWT@|Kj-v%a{LiHCge>vUSyuE7Cu?PO(KQMJX7&)w6G& z_v!vc&J&jXN}ohRUC&wCzN;-c_m!bQXyW4U`*;=C@SHSdV3J^5a-BgwIN9p&3(Xlo P2QqlN`njxgN@xNAn#Wwi literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-center.png new file mode 100644 index 0000000000000000000000000000000000000000..79e37a1a4e450f5f70aa36fe64791e4407800f32 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c71?{bIEGZ*O6fVs$)Lc)Jh|tg&Z5TlJJXCm* zyz2~4mjlb9N#|7bHD7iHxvG2=f8P3&S7%4{Z6+QD7k!R1?muLo1C3(vboFyt=akR{ E0L^|6H_V+Po~-c70vQ=aSW-rwPeCxE+<1Cx5-;9M6~Y2u|9Wll#OLozkk48 za8B(pyB@y3yF2wRIqFMzENItfmttx7T(*7xu0k83iC1m-nv0iTn|0E%dEHj2wl+ou zrHl!a*!R3FCnacxDLb1JNMKvyz&y85}Sb4q9e0J+CqP5=M^ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-highlighted-right.png new file mode 100644 index 0000000000000000000000000000000000000000..da0cb9a8ad2295c8793c217f654f79d97b3ddae8 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6;1JUaSW-rm9%B!=KufS-`{`!{k?s*RgZsdjaz14|Igsh z|NryD13XUjb#|WYVD&I)U{F?877tJr=T>GG`SYKDS%kzwtptX3ta=Pryd7ADcX1tR z6H;_&S@=RrLepI2S#&}`U2rKGQ4FRXHtVTxvOXejT#l9!Vd plnst7ZD{)6@IzXlo{htR;ii*8UcfQd2SE2Rc)I$ztaD0e0sx{1S{eWV literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-left.png b/AppKit/Themes/Aristo/Resources/HUD/default-button-bezel-left.png new file mode 100644 index 0000000000000000000000000000000000000000..dd02f1725b7e861675d7a7d1b16703075d61755d GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq&N#aB8wRqxP?KOkzv*x380`t zvPY0F14DKa14D@!1H+eB3=B=?K)yEv!(&wj216qT2H`c|yax`9GSk)8H+@|^2HtCek;0WPfP3BvZjrJVH|(##e^=HBrTJac*biS znZGUO+E=~#PknnnKH9yGx#8s^4XO8ky?R(YES?(~pKeiMSWv!D((bF(<7@ZIo!(?)$xtom85%m*nS Date: Wed, 26 May 2010 13:17:52 +0300 Subject: [PATCH 054/124] CPCoder typo fixes --- Foundation/CPCoder.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Foundation/CPCoder.j b/Foundation/CPCoder.j index a9cd1bf97..b57cd61f9 100644 --- a/Foundation/CPCoder.j +++ b/Foundation/CPCoder.j @@ -130,7 +130,7 @@ */ -(void)encodeBycopyObject:(id)anObject { - [self encodeObject:object]; + [self encodeObject:anObject]; } /*! @@ -139,7 +139,7 @@ */ -(void)encodeConditionalObject:(id)anObject { - [self encodeObject:object]; + [self encodeObject:anObject]; } @end From 0d848e3d93a7010b462c7f50df1b8b15f80bf1cf Mon Sep 17 00:00:00 2001 From: Stephen Ierodiaconou Date: Wed, 26 May 2010 11:32:35 +0300 Subject: [PATCH 055/124] Add test on self in init of CPAttributedString --- Foundation/CPAttributedString.j | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 82e7f93a7..2449489c8 100644 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -84,11 +84,14 @@ { self = [super init]; - if (!attributes) - attributes = [CPDictionary dictionary]; + if (self) + { + if (!attributes) + attributes = [CPDictionary dictionary]; - _string = ""+aString; - _rangeEntries = [makeRangeEntry(CPMakeRange(0, _string.length), attributes)]; + _string = ""+aString; + _rangeEntries = [makeRangeEntry(CPMakeRange(0, _string.length), attributes)]; + } return self; } From b6a3d2b283a4b0a15e019d13eb02e05468db0346 Mon Sep 17 00:00:00 2001 From: Stephen Ierodiaconou Date: Wed, 26 May 2010 15:41:25 +0300 Subject: [PATCH 056/124] Remove import of deprecated CPLog.j Remove deprecated CPLog.j --- Foundation/CPObjJRuntime.j | 2 -- Foundation/Foundation.j | 1 - 2 files changed, 3 deletions(-) diff --git a/Foundation/CPObjJRuntime.j b/Foundation/CPObjJRuntime.j index 76cfb8f76..3c49daebd 100644 --- a/Foundation/CPObjJRuntime.j +++ b/Foundation/CPObjJRuntime.j @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPLog.j" - function CPStringFromSelector(aSelector) { diff --git a/Foundation/Foundation.j b/Foundation/Foundation.j index 2d4fb3ebb..03709afa5 100755 --- a/Foundation/Foundation.j +++ b/Foundation/Foundation.j @@ -35,7 +35,6 @@ @import "CPKeyedUnarchiver.j" @import "CPKeyValueCoding.j" @import "CPKeyValueObserving.j" -@import "CPLog.j" @import "CPNotification.j" @import "CPNotificationCenter.j" @import "CPNull.j" From b98f0b14272aa6c3f4ab09a6a6b87aae4868acc9 Mon Sep 17 00:00:00 2001 From: Stephen Ierodiaconou Date: Wed, 26 May 2010 15:18:31 +0300 Subject: [PATCH 057/124] Apply style rules to Foundation --- Foundation/CPArray+KVO.j | 112 +++++++++++----------- Foundation/CPArray.j | 10 +- Foundation/CPAttributedString.j | 133 +++++++++++++------------- Foundation/CPBundle.j | 3 +- Foundation/CPCoder.j | 25 +++-- Foundation/CPCountedSet.j | 25 ++--- Foundation/CPData.j | 1 + Foundation/CPDate.j | 10 +- Foundation/CPDictionary.j | 100 +++++++++---------- Foundation/CPEnumerator.j | 7 +- Foundation/CPException.j | 10 +- Foundation/CPFunctionOperation.j | 28 +++--- Foundation/CPIndexSet.j | 13 +-- Foundation/CPInvocation.j | 12 +-- Foundation/CPInvocationOperation.j | 38 ++++---- Foundation/CPJSONPConnection.j | 36 +++---- Foundation/CPKeyValueCoding.j | 97 +++++++++---------- Foundation/CPKeyValueObserving.j | 108 +++++++++++---------- Foundation/CPKeyedArchiver.j | 140 +++++++++++++-------------- Foundation/CPKeyedUnarchiver.j | 6 +- Foundation/CPNotification.j | 6 +- Foundation/CPNotificationCenter.j | 70 +++++++------- Foundation/CPNumber.j | 18 ++-- Foundation/CPObjJRuntime.j | 2 +- Foundation/CPObject.j | 36 +++---- Foundation/CPOperation.j | 65 +++++++------ Foundation/CPOperationQueue.j | 148 +++++++++++++++-------------- Foundation/CPProxy.j | 2 +- Foundation/CPRange.j | 7 +- Foundation/CPRunLoop.j | 92 +++++++++--------- Foundation/CPSet.j | 59 ++++++++---- Foundation/CPSortDescriptor.j | 17 ++-- Foundation/CPString.j | 59 ++++++------ Foundation/CPTimer.j | 63 ++++++------ Foundation/CPURL.j | 25 ++++- Foundation/CPURLConnection.j | 38 ++++---- Foundation/CPURLRequest.j | 10 +- Foundation/CPURLResponse.j | 16 ++-- Foundation/CPUndoManager.j | 100 +++++++++---------- Foundation/CPUserSessionManager.j | 18 ++-- Foundation/CPValue.j | 10 +- Foundation/CPWebDAVManager.j | 21 ++++ 42 files changed, 941 insertions(+), 855 deletions(-) diff --git a/Foundation/CPArray+KVO.j b/Foundation/CPArray+KVO.j index e39536709..03274b748 100644 --- a/Foundation/CPArray+KVO.j +++ b/Foundation/CPArray+KVO.j @@ -23,6 +23,7 @@ @import "CPArray.j" @import "CPNull.j" + @implementation CPObject (CPArrayKVO) - (id)mutableArrayValueForKey:(id)aKey @@ -33,12 +34,12 @@ - (id)mutableArrayValueForKeyPath:(id)aKeyPath { var dotIndex = aKeyPath.indexOf("."); - + if (dotIndex < 0) return [self mutableArrayValueForKey:aKeyPath]; var firstPart = aKeyPath.substring(0, dotIndex), - lastPart = aKeyPath.substring(dotIndex+1); + lastPart = aKeyPath.substring(dotIndex + 1); return [[self valueForKeyPath:firstPart] valueForKeyPath:lastPart]; } @@ -49,34 +50,34 @@ { id _proxyObject; id _key; - + SEL _insertSEL; Function _insert; - + SEL _removeSEL; Function _remove; - + SEL _replaceSEL; Function _replace; - + SEL _insertManySEL; Function _insertMany; - + SEL _removeManySEL; Function _removeMany; - + SEL _replaceManySEL; Function _replaceMany; - + SEL _objectAtIndexSEL; Function _objectAtIndex; - + SEL _countSEL; Function _count; - + SEL _accessSEL; Function _access; - + SEL _setSEL; Function _set; } @@ -96,15 +97,15 @@ return array; } --(id)initWithKey:(id)aKey forProxyObject:(id)anObject +- (id)initWithKey:(id)aKey forProxyObject:(id)anObject { self = [super init]; _key = aKey; _proxyObject = anObject; - + var capitalizedKey = _key.charAt(0).toUpperCase() + _key.substring(1); - + _insertSEL = sel_getName(@"insertObject:in"+capitalizedKey+"AtIndex:"); if ([_proxyObject respondsToSelector:_insertSEL]) _insert = [_proxyObject methodForSelector:_insertSEL]; @@ -112,7 +113,7 @@ _removeSEL = sel_getName(@"removeObjectFrom"+capitalizedKey+"AtIndex:"); if ([_proxyObject respondsToSelector:_removeSEL]) _remove = [_proxyObject methodForSelector:_removeSEL]; - + _replaceSEL = sel_getName(@"replaceObjectFrom"+capitalizedKey+"AtIndex:withObject:"); if ([_proxyObject respondsToSelector:_replaceSEL]) _replace = [_proxyObject methodForSelector:_replaceSEL]; @@ -124,11 +125,11 @@ _removeManySEL = sel_getName(@"removeObjectsFrom"+capitalizedKey+"AtIndexes:"); if ([_proxyObject respondsToSelector:_removeManySEL]) _remove = [_proxyObject methodForSelector:_removeManySEL]; - + _replaceManySEL = sel_getName(@"replaceObjectsFrom"+capitalizedKey+"AtIndexes:withObjects:"); if ([_proxyObject respondsToSelector:_replaceManySEL]) _replace = [_proxyObject methodForSelector:_replaceManySEL]; - + _objectAtIndexSEL = sel_getName(@"objectIn"+capitalizedKey+"AtIndex:"); if ([_proxyObject respondsToSelector:_objectAtIndexSEL]) _objectAtIndex = [_proxyObject methodForSelector:_objectAtIndexSEL]; @@ -150,16 +151,17 @@ - (id)copy { - var theCopy = [], + var i = 0, + theCopy = [], count = [self count]; - for (var i=0; i= 0) { [self[index] addObserver:anObserver forKeyPath:aKeyPath options:options context:context]; @@ -483,7 +483,7 @@ kvoOperators["sum"] = function sumOperator(self, _cmd, param) - (void)removeObserver:(id)anObserver fromObjectsAtIndexes:(CPIndexSet)indexes forKeyPath:(CPString)aKeyPath { var index = [indexes firstIndex]; - + while (index >= 0) { [self[index] removeObserver:anObserver forKeyPath:aKeyPath]; @@ -492,7 +492,7 @@ kvoOperators["sum"] = function sumOperator(self, _cmd, param) } } --(void)addObserver:(id)observer forKeyPath:(CPString)aKeyPath options:(unsigned)options context:(id)context +- (void)addObserver:(id)observer forKeyPath:(CPString)aKeyPath options:(unsigned)options context:(id)context { if ([isa instanceMethodForSelector:_cmd] === [CPArray instanceMethodForSelector:_cmd]) [CPException raise:CPInvalidArgumentException reason:"Unsupported method on CPArray"]; diff --git a/Foundation/CPArray.j b/Foundation/CPArray.j index 4e22b591a..590fd9e83 100755 --- a/Foundation/CPArray.j +++ b/Foundation/CPArray.j @@ -20,11 +20,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@import "CPEnumerator.j" +@import "CPException.j" @import "CPObject.j" @import "CPRange.j" -@import "CPEnumerator.j" @import "CPSortDescriptor.j" -@import "CPException.j" /* @ignore */ @@ -470,7 +470,7 @@ last = mid - 1; else { - while (mid < length - 1 && aFunction(anObject, self[mid+1], aContext) == CPOrderedSame) + while (mid < length - 1 && aFunction(anObject, self[mid + 1], aContext) == CPOrderedSame) mid++; return mid; @@ -894,7 +894,7 @@ @end -@implementation CPArray(CPMutableArray) +@implementation CPArray (CPMutableArray) // Creating arrays /*! @@ -987,7 +987,7 @@ } context:nil]; if (index < 0) - index = -index-1; + index = -index - 1; [self insertObject:anObject atIndex:index]; return index; diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 2449489c8..f61b5c0e1 100644 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -20,12 +20,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" -@import "CPString.j" @import "CPDictionary.j" +@import "CPObject.j" @import "CPRange.j" +@import "CPString.j" -/*! + +/*! @class CPAttributedString @ingroup foundation @brief A mutable character string with attributes. @@ -62,13 +63,13 @@ Creates a new attributed string from an existing attributed string. @param aString is the attributed string to initialise from. @return a new CPAttributedString containing the string \c aString. -*/ +*/ - (id)initWithAttributedString:(CPAttributedString)aString { var string = [self initWithString:"" attributes:nil]; - + [string setAttributedString:aString]; - + return string; } @@ -79,18 +80,18 @@ @param attributes is a dictionary of string attributes. @return a new CPAttributedString containing the string \c aString with associated attributes, \c attributes. -*/ +*/ - (id)initWithString:(CPString)aString attributes:(CPDictionary)attributes { self = [super init]; - + if (self) { if (!attributes) attributes = [CPDictionary dictionary]; _string = ""+aString; - _rangeEntries = [makeRangeEntry(CPMakeRange(0, _string.length), attributes)]; + _rangeEntries = [makeRangeEntry(CPMakeRange(0, _string.length), attributes)]; } return self; @@ -101,7 +102,7 @@ Returns a string containing the receiver's character data without attributes. @return a string of type CPString. -*/ +*/ - (CPString)string { return _string; @@ -111,17 +112,17 @@ Returns a string containing the receiver's character data without attributes. @return a string of type CPString. -*/ +*/ - (CPString)mutableString { return [self string]; -} +} /*! Get the length of the string. @return an unsigned integer equivalent to the number of characters in the string. -*/ +*/ - (unsigned)length { return _string.length; @@ -152,7 +153,7 @@ /*! Returns a dictionary of attributes for the character at a given index. The range in which this character resides in which the attributes are the - same, can be returned if desired. + same, can be returned if desired. @note there is no guarantee that the range returned is in fact the complete range of the particular attributes. To ensure this use \c attributesAtIndex:longestEffectiveRange:inRange: instead. Note @@ -163,10 +164,10 @@ that is set (upon return) to the range over which the attributes are the same as those at index, \c anIndex. If not required pass \c nil. - @return a CPDictionary containing the attributes associated with the + @return a CPDictionary containing the attributes associated with the character at index \c anIndex. Returns \c nil if index is out of bounds. -*/ +*/ - (CPDictionary)attributesAtIndex:(unsigned)anIndex effectiveRange:(CPRangePointer)aRange { //find the range entry that contains anIndex. @@ -181,7 +182,7 @@ aRange.location = matchingRange.range.location; aRange.length = matchingRange.range.length; } - + return matchingRange.attributes; } @@ -202,17 +203,17 @@ to the range over which the attributes apply. @param rangeLimit a range limiting the search for the attributes' applicable range. - @return a CPDictionary containing the attributes associated with the + @return a CPDictionary containing the attributes associated with the character at index \c anIndex. Returns \c nil if index is out of bounds. -*/ +*/ - (CPDictionary)attributesAtIndex:(unsigned)anIndex longestEffectiveRange:(CPRangePointer)aRange inRange:(CPRange)rangeLimit -{ +{ var startingEntryIndex = [self _indexOfEntryWithIndex:anIndex]; if (startingEntryIndex == CPNotFound) return nil; - + if (!aRange) return _rangeEntries[startingEntryIndex].attributes; @@ -220,7 +221,7 @@ { aRange.location = rangeLimit.location; aRange.length = rangeLimit.length; - + return _rangeEntries[startingEntryIndex].attributes; } @@ -260,7 +261,7 @@ else break; } - + aRange.length = MIN(CPMaxRange(currentEntry.range), CPMaxRange(rangeLimit)) - aRange.location; return comparisonDict; @@ -268,7 +269,7 @@ /*! Returns the specified named attribute for the given character index and, if - required, the range over which the attribute applies. + required, the range over which the attribute applies. @note there is no guarantee that the range returned is in fact the complete range of a particular attribute. To ensure this use \c -attribute:atIndex:longestEffectiveRange:inRange: instead but @@ -281,7 +282,7 @@ \c nil. @return the named attribute or \c nil is the attribute does not exist. -*/ +*/ - (id)attribute:(CPString)attribute atIndex:(unsigned)index effectiveRange:(CPRangePointer)aRange { if (!attribute) @@ -323,7 +324,7 @@ { //find the range entry that contains anIndex. var startingEntryIndex = [self _indexOfEntryWithIndex:anIndex]; - + if (startingEntryIndex == CPNotFound || !attribute) return nil; @@ -334,7 +335,7 @@ { aRange.location = rangeLimit.location; aRange.length = rangeLimit.length; - + return [_rangeEntries[startingEntryIndex].attributes objectForKey:attribute]; } @@ -374,7 +375,7 @@ else break; } - + aRange.length = MIN(CPMaxRange(currentEntry.range), CPMaxRange(rangeLimit)) - aRange.location; return comparisonAttribute; @@ -389,10 +390,10 @@ */ - (BOOL)isEqualToAttributedString:(CPAttributedString)aString { - if(!aString) + if (!aString) return NO; - if(_string != [aString string]) + if (_string != [aString string]) return NO; var myRange = CPMakeRange(), @@ -410,7 +411,7 @@ else comparisonAttributes = [aString attributesAtIndex:CPMaxRange(comparisonRange) effectiveRange:comparisonRange]; } - + return YES; } @@ -425,10 +426,10 @@ { if (anObject == self) return YES; - + if ([anObject isKindOfClass:[self class]]) return [self isEqualToAttributedString:anObject]; - + return NO; } @@ -443,7 +444,7 @@ - (CPAttributedString)attributedSubstringFromRange:(CPRange)aRange { if (!aRange || CPMaxRange(aRange) > _string.length || aRange.location < 0) - [CPException raise:CPRangeException + [CPException raise:CPRangeException reason:"tried to get attributedSubstring for an invalid range: "+(aRange?CPStringFromRange(aRange):"nil")]; var newString = [[CPAttributedString alloc] initWithString:_string.substring(aRange.location, CPMaxRange(aRange))], @@ -452,7 +453,7 @@ lastIndex = CPMaxRange(aRange); newString._rangeEntries = []; - + while (currentRangeEntry && CPMaxRange(currentRangeEntry.range) < lastIndex) { var newEntry = copyRangeEntry(currentRangeEntry); @@ -471,10 +472,10 @@ if (currentRangeEntry) { var newRangeEntry = copyRangeEntry(currentRangeEntry); - + newRangeEntry.range.length = CPMaxRange(aRange) - newRangeEntry.range.location; newRangeEntry.range.location -= aRange.location; - + if (newRangeEntry.range.location < 0) { newRangeEntry.range.length += newRangeEntry.range.location; @@ -483,12 +484,12 @@ newString._rangeEntries.push(newRangeEntry); } - + return newString; } //Changing Characters -/*! +/*! Replaces the characters in the receiver with those of the specified string over the range, \c aRange. If the range has a length of 0 then the specified string is inserted at the range location. The new characters @@ -508,10 +509,10 @@ if (!aString) aString = ""; - + var startingIndex = [self _indexOfEntryWithIndex:aRange.location], startingRangeEntry = _rangeEntries[startingIndex], - endingIndex = [self _indexOfEntryWithIndex:MAX(CPMaxRange(aRange)-1, 0)], + endingIndex = [self _indexOfEntryWithIndex:MAX(CPMaxRange(aRange) - 1, 0)], endingRangeEntry = _rangeEntries[endingIndex], additionalLength = aString.length - aRange.length; @@ -530,10 +531,10 @@ } endingIndex = startingIndex + 1; - + while(endingIndex < _rangeEntries.length) _rangeEntries[endingIndex++].range.location+=additionalLength; - + [self endEditing]; } @@ -548,9 +549,9 @@ //Changing Attributes /*! - Sets the attributes of the specified character range. + Sets the attributes of the specified character range. - @note This process removes the attributes already associated with the + @note This process removes the attributes already associated with the character range. If you wish to retain the current attributes use \c -addAttributes:range:. @param aDictionary a CPDictionary of attributes (names and values) to set @@ -579,11 +580,11 @@ } /*! - Add a collection of attributes to the specified character range. + Add a collection of attributes to the specified character range. @note Attributes currently associated with the characters in the range are untouched. To remove all previous attributes when adding use - \c -setAttributes:range:. + \c -setAttributes:range:. @param aDictionary a CPDictionary of attributes (names and values) to add. @param aRange a CPRange indicating the range of characters to add the attributes to. @@ -603,7 +604,7 @@ { var keys = [aDictionary allKeys], count = [keys count]; - + while (count--) [_rangeEntries[current].attributes setObject:[aDictionary objectForKey:keys[count]] forKey:keys[count]]; @@ -706,8 +707,8 @@ { var entryCopy = copyRangeEntry(otherRangeEntries[index++]); entryCopy.range.location += anIndex; - - _rangeEntries.splice(entryIndexOfNextEntry-1+index, 0, entryCopy); + + _rangeEntries.splice(entryIndexOfNextEntry - 1 + index, 0, entryCopy); } //necessary? @@ -727,10 +728,10 @@ - (void)replaceCharactersInRange:(CPRange)aRange withAttributedString:(CPAttributedString)aString { [self beginEditing]; - + [self deleteCharactersInRange:aRange]; [self insertAttributedString:aString atIndex:aRange.location]; - + [self endEditing]; } @@ -742,11 +743,14 @@ - (void)setAttributedString:(CPAttributedString)aString { [self beginEditing]; - + _string = aString._string; _rangeEntries = []; - - for (var i=0, count = aString._rangeEntries.length; i= _rangeEntries.length) - end = _rangeEntries.length -1; + end = _rangeEntries.length - 1; while (current < end) { var a = _rangeEntries[current], - b = _rangeEntries[current+1]; + b = _rangeEntries[current + 1]; if ([a.attributes isEqualToDictionary:b.attributes]) { a.range.length = CPMaxRange(b.range) - a.range.location; - _rangeEntries.splice(current+1, 1); + _rangeEntries.splice(current + 1, 1); end--; } else @@ -824,7 +828,8 @@ CPAttributedString already implements mutable methods and this class only exists for source compatability. */ -@implementation CPMutableAttributedString : CPAttributedString {} +@implementation CPMutableAttributedString : CPAttributedString + @end var isEqual = function isEqual(a, b) @@ -852,11 +857,11 @@ var splitRangeEntry = function splitRangeEntryAtIndex(/*RangeEntry*/aRangeEntry, { var newRangeEntry = copyRangeEntry(aRangeEntry), cachedIndex = CPMaxRange(aRangeEntry.range); - + aRangeEntry.range.length = anIndex - aRangeEntry.range.location; newRangeEntry.range.location = anIndex; newRangeEntry.range.length = cachedIndex - anIndex; newRangeEntry.attributes = [newRangeEntry.attributes copy]; - + return [aRangeEntry, newRangeEntry]; } diff --git a/Foundation/CPBundle.j b/Foundation/CPBundle.j index bef8fdb69..39aae0b29 100644 --- a/Foundation/CPBundle.j +++ b/Foundation/CPBundle.j @@ -20,8 +20,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" @import "CPDictionary.j" +@import "CPObject.j" + /*! @class CPBundle diff --git a/Foundation/CPCoder.j b/Foundation/CPCoder.j index b57cd61f9..0d8bc04da 100644 --- a/Foundation/CPCoder.j +++ b/Foundation/CPCoder.j @@ -20,28 +20,27 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" @import "CPException.j" +@import "CPObject.j" -/*! +/*! @class CPCoder @ingroup foundation @brief Defines methods for use when archiving & restoring (enc/decoding). - Top-level class defining methods for use when archiving (encoding) objects to a byte array - or file, and when restoring (decoding) objects. + Top-level class defining methods for use when archiving (encoding) objects to a byte array + or file, and when restoring (decoding) objects. */ @implementation CPCoder : CPObject { - } /*! Returns a flag indicating whether the receiver supports keyed coding. The default implementation returns \c NO. Subclasses supporting keyed coding must override this to return \c YES. */ --(BOOL)allowsKeyedCoding +- (BOOL)allowsKeyedCoding { return NO; } @@ -53,7 +52,7 @@ @param aType the structure or object type @param anObject the object to be encoded */ --(void)encodeValueOfObjCType:(CPString)aType at:(id)anObject +- (void)encodeValueOfObjCType:(CPString)aType at:(id)anObject { CPInvalidAbstractInvocation(); } @@ -62,7 +61,7 @@ Encodes a data object. Subclasses must override this method. @param aData the object to be encoded. */ --(void)encodeDataObject:(CPData)aData +- (void)encodeDataObject:(CPData)aData { CPInvalidAbstractInvocation(); } @@ -71,7 +70,7 @@ Encodes an object. Subclasses must override this method. @param anObject the object to be encoded */ --(void)encodeObject:(id)anObject +- (void)encodeObject:(id)anObject { // [self encodeValueOfObjCType:@encode(id) at:object]; } @@ -110,7 +109,7 @@ Encodes a property list. Not yet implemented. @param aPropertyList the property list to be encoded */ --(void)encodePropertyList:(id)aPropertyList +- (void)encodePropertyList:(id)aPropertyList { // [self encodeValueOfObjCType:@encode(id) at:&propertyList]; } @@ -119,7 +118,7 @@ Encodes the root object of a group of Obj-J objects. @param rootObject the root object to be encoded. */ --(void)encodeRootObject:(id)anObject +- (void)encodeRootObject:(id)anObject { [self encodeObject:anObject]; } @@ -128,7 +127,7 @@ Encodes an object. @param anObject the object to be encoded. */ --(void)encodeBycopyObject:(id)anObject +- (void)encodeBycopyObject:(id)anObject { [self encodeObject:anObject]; } @@ -137,7 +136,7 @@ Encodes an object. @param anObject the object to be encoded. */ --(void)encodeConditionalObject:(id)anObject +- (void)encodeConditionalObject:(id)anObject { [self encodeObject:anObject]; } diff --git a/Foundation/CPCountedSet.j b/Foundation/CPCountedSet.j index a99b94a98..86b4753af 100644 --- a/Foundation/CPCountedSet.j +++ b/Foundation/CPCountedSet.j @@ -22,7 +22,8 @@ @import "CPSet.j" -/*! + +/*! @class CPCountedSet @ingroup foundation @brief An mutable collection which may contain a specific object @@ -37,11 +38,11 @@ { if (!_counts) _counts = {}; - + [super addObject:anObject]; - + var UID = [anObject UID]; - + if (_counts[UID] === undefined) _counts[UID] = 1; else @@ -52,16 +53,16 @@ { if (!_counts) return; - + var UID = [anObject UID]; - + if (_counts[UID] === undefined) return; - + else { --_counts[UID]; - + if (_counts[UID] === 0) { delete _counts[UID]; @@ -84,17 +85,17 @@ { if (!_counts) _counts = {}; - + var UID = [anObject UID]; - + if (_counts[UID] === undefined) return 0; - + return _counts[UID]; } -/* +/* Eventually we should see what these are supposed to do, and then do that. diff --git a/Foundation/CPData.j b/Foundation/CPData.j index 2d73b5a42..0a75abd36 100644 --- a/Foundation/CPData.j +++ b/Foundation/CPData.j @@ -23,6 +23,7 @@ @import "CPObject.j" @import "CPString.j" + /*! @class CPData @ingroup foundation diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index e4bc13273..6340ef48c 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -24,7 +24,7 @@ @import "CPString.j" -var CPDateReferenceDate = new Date(Date.UTC(2001,1,1,0,0,0,0)); +var CPDateReferenceDate = new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0)); /*! @class CPDate @@ -64,12 +64,12 @@ var CPDateReferenceDate = new Date(Date.UTC(2001,1,1,0,0,0,0)); + (id)distantPast { - return new Date(-10000,1,1,0,0,0,0); + return new Date(-10000, 1, 1, 0, 0, 0, 0); } + (id)distantFuture { - return new Date(10000,1,1,0,0,0,0); + return new Date(10000, 1, 1, 0, 0, 0, 0); } - (id)initWithTimeIntervalSinceNow:(CPTimeInterval)seconds @@ -110,7 +110,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001,1,1,0,0,0,0)); [CPException raise:CPInvalidArgumentException reason:"initWithString: the string must be of YYYY-MM-DD HH:MM:SS ±HHMM format"]; - var date = new Date(d[1], d[2]-1, d[3]), + var date = new Date(d[1], d[2] - 1, d[3]), timeZoneOffset = (Number(d[8]) * 60 + Number(d[9])) * (d[7] === '-' ? -1 : 1); date.setHours(d[4]); @@ -180,7 +180,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001,1,1,0,0,0,0)); var hours = Math.floor(self.getTimezoneOffset() / 60), minutes = self.getTimezoneOffset() - hours * 60; - return [CPString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d +%02d%02d", self.getFullYear(), self.getMonth()+1, self.getDate(), self.getHours(), self.getMinutes(), self.getSeconds(), hours, minutes]; + return [CPString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d +%02d%02d", self.getFullYear(), self.getMonth() + 1, self.getDate(), self.getHours(), self.getMinutes(), self.getSeconds(), hours, minutes]; } - (id)copy diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index 0b742c98c..4fd2d46d8 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -21,9 +21,9 @@ */ @import "CPArray.j" -@import "CPObject.j" @import "CPEnumerator.j" @import "CPException.j" +@import "CPObject.j" /* @ignore */ @@ -36,20 +36,20 @@ - (id)initWithDictionary:(CPDictionary)aDictionary { self = [super init]; - + if (self) { _keyEnumerator = [aDictionary keyEnumerator]; _dictionary = aDictionary; } - + return self; } - (id)nextObject { var key = [_keyEnumerator nextObject]; - + if (!key) return nil; @@ -58,7 +58,7 @@ @end -/*! +/*! @class CPDictionary @ingroup foundation @brief A mutable key-value pair collection. @@ -145,29 +145,33 @@ */ + (id)dictionaryWithJSObject:(JSObject)object recursively:(BOOL)recursively { - var dictionary = [[self alloc] init]; - - for (var key in object) + var key = "", + dictionary = [[self alloc] init]; + + for (key in object) { if (!object.hasOwnProperty(key)) continue; var value = object[key]; - + if (value === null) { [dictionary setObject:[CPNull null] forKey:key]; continue; } - + if (recursively) { if (value.constructor === Object) value = [CPDictionary dictionaryWithJSObject:value recursively:YES]; else if ([value isKindOfClass:CPArray]) { - var newValue = []; - for (var i = 0, count = value.length; i < count; i++) + var newValue = [], + i = 0, + count = value.length; + + for (; i < count; i++) { var thisValue = value[i]; @@ -183,7 +187,7 @@ [dictionary setObject:value forKey:key]; } - + return dictionary; } @@ -193,22 +197,22 @@ @param ... key for the first object and ongoing value-key pairs for more objects. @throws CPInvalidArgumentException if the number of objects and keys is different @return the new CPDictionary - + Assuming that there's no object retaining in Cappuccino, you can create dictionaries same way as with alloc and initWithObjectsAndKeys: var dict = [CPDictionary dictionaryWithObjectsAndKeys: @"value1", @"key1", @"value2", @"key2"]; - + Note, that there's no final nil like in Objective-C/Cocoa. - + @see [CPDictionary initWithObjectsAndKeys:] */ + (id)dictionaryWithObjectsAndKeys:(id)firstObject, ... { arguments[0] = [self alloc]; arguments[1] = @selector(initWithObjectsAndKeys:); - + return objj_msgSend.apply(this, arguments); } @@ -221,10 +225,10 @@ { var key = "", dictionary = [[CPDictionary alloc] init]; - + for (key in aDictionary._buckets) [dictionary setObject:[aDictionary objectForKey:key] forKey:key]; - + return dictionary; } @@ -240,16 +244,16 @@ self = [super init]; if ([objects count] != [keyArray count]) - [CPException raise:CPInvalidArgumentException reason:"Counts are different.("+[objects count]+"!="+[keyArray count]+")"]; + [CPException raise:CPInvalidArgumentException reason:"Counts are different.(" + [objects count] + "!=" + [keyArray count] + ")"]; if (self) { var i = [keyArray count]; - + while (i--) [self setObject:objects[i] forKey:keyArray[i]]; } - + return self; } @@ -259,29 +263,29 @@ @param ... key for the first object and ongoing value-key pairs for more objects. @throws CPInvalidArgumentException if the number of objects and keys is different @return the new CPDictionary - + You can create dictionaries this way: var dict = [[CPDictionary alloc] initWithObjectsAndKeys: @"value1", @"key1", @"value2", @"key2"]; - + Note, that there's no final nil like in Objective-C/Cocoa. */ - (id)initWithObjectsAndKeys:(id)firstObject, ... { var argCount = arguments.length; - + if (argCount % 2 !== 0) [CPException raise:CPInvalidArgumentException reason:"Key-value count is mismatched. (" + argCount + " arguments passed)"]; self = [super init]; - + if (self) { // The arguments array contains self and _cmd, so the first object is at position 2. var index = 2; - - for(; index < argCount; index += 2) + + for (; index < argCount; index += 2) { var value = arguments[index]; @@ -326,7 +330,7 @@ { var index = _keys.length, values = []; - + while (index--) values.push(self.valueForKey(_keys[index])); @@ -350,7 +354,7 @@ } /*! - Compare the receiver to this dictionary, and return whether or not they are equal. + Compare the receiver to this dictionary, and return whether or not they are equal. */ - (BOOL)isEqualToDictionary:(CPDictionary)aDictionary { @@ -372,10 +376,10 @@ if (lhsObject === rhsObject) continue; - + if (lhsObject && lhsObject.isa && rhsObject && rhsObject.isa && [lhsObject respondsToSelector:@selector(isEqual:)] && [lhsObject isEqual:rhsObject]) continue; - + return NO; } @@ -399,9 +403,9 @@ var i= 0, keys= CPArray.array(), count= this.count(); - - while((i= this._objects.indexOfObjectInRage(0, count-i))!=CPNotFound) keys.addObject(this._keys[i]); - + + while ((i= this._objects.indexOfObjectInRage(0, count-i))!=CPNotFound) keys.addObject(this._keys[i]); + return keys; } @@ -412,7 +416,7 @@ { return aSelector.apply(dictionary.objectForKey(this), [dictionary.objectForKey(rhs)]); }; - + return this._keys.sortedArrayUsingSelector(objectSelector); } */ @@ -424,7 +428,7 @@ - (id)objectForKey:(CPString)aKey { var object = _buckets[aKey]; - + return (object === undefined) ? nil : object; } /* @@ -432,20 +436,20 @@ { var i= keys.length, objects= CPArray.array(); - - while(i--) + + while (i--) { var object= this.objectForKey(keys[i]); objects.addObject(object==nil?aNotFoundMarker:object); } - + return objects; } - + Instance.valueForKey(aKey) { - if(aKey.length && aKey[0]=="@") return this.objectForKey(aKey.substr(1)); - + if (aKey.length && aKey[0]=="@") return this.objectForKey(aKey.substr(1)); + return base.valueForKey(aKey); } */ @@ -483,11 +487,11 @@ { this._keys= CPArray.arrayWithArray(aDictionary.allKeys()); this._objects= CPArray.arrayWithArray(aDictionary.allValues()); - + this._dictionary= { }; - + var i= this._keys.count(); - while(i--) this._dictionary[this._keys[i]]= { object: this._objects[i], index: i }; + while (i--) this._dictionary[this._keys[i]]= { object: this._objects[i], index: i }; } */ /*! @@ -507,10 +511,10 @@ { if (!aDictionary) return; - + var keys = [aDictionary allKeys], index = [keys count]; - + while (index--) { var key = keys[index]; diff --git a/Foundation/CPEnumerator.j b/Foundation/CPEnumerator.j index 51d25b92a..50efcb571 100755 --- a/Foundation/CPEnumerator.j +++ b/Foundation/CPEnumerator.j @@ -22,15 +22,12 @@ @import "CPObject.j" -/*! - -*/ -/*! +/*! @class CPEnumerator @ingroup foundation @brief Defines an interface for enumerators. - + CPEnumerator is a superclass (with useless method bodies) that defines an interface for subclasses to follow. The purpose of an enumerator is to be a convenient system for traversing over the elements diff --git a/Foundation/CPException.j b/Foundation/CPException.j index 28abb60ec..770c6ad63 100755 --- a/Foundation/CPException.j +++ b/Foundation/CPException.j @@ -30,7 +30,7 @@ CPUnsupportedMethodException = "CPUnsupportedMethodException"; CPRangeException = "CPRangeException"; CPInternalInconsistencyException = "CPInternalInconsistencyException"; -/*! +/*! @class CPException @ingroup foundation @brief Used to implement exception handling (creating & raising). @@ -40,7 +40,7 @@ CPInternalInconsistencyException = "CPInternalInconsistencyException"; // some code here... if (input == nil) [CPException raise:"MyException" reason:"You didn't do something right."]; - + // code that gets executed if no exception was raised */ @@ -96,7 +96,7 @@ if (input == nil) message = aReason; _userInfo = aUserInfo; } - + return self; } @@ -165,14 +165,14 @@ var CPExceptionNameKey = "CPExceptionNameKey", - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) { name = [aCoder decodeObjectForKey:CPExceptionNameKey]; message = [aCoder decodeObjectForKey:CPExceptionReasonKey]; _userInfo = [aCoder decodeObjectForKey:CPExceptionUserInfoKey]; } - + return self; } diff --git a/Foundation/CPFunctionOperation.j b/Foundation/CPFunctionOperation.j index 795058737..f9f98c911 100644 --- a/Foundation/CPFunctionOperation.j +++ b/Foundation/CPFunctionOperation.j @@ -23,22 +23,24 @@ @import "CPOperation.j" -/*! +/*! @class CPFunctionOperation @brief Represents an operation using a JavaScript function that can be run in an CPOperationQueue */ -@implementation CPFunctionOperation : CPOperation +@implementation CPFunctionOperation : CPOperation { CPArray _functions; } -- (void)main +- (void)main { - if (_functions && [_functions count] > 0) + if (_functions && [_functions count] > 0) { - var i = 0; - for (i = 0; i < [_functions count]; i++) + var i = 0, + count = [_functions count]; + + for (; i < count; i++) { var func = [_functions objectAtIndex:i]; func(); @@ -46,9 +48,9 @@ } } -- (id)init +- (id)init { - if (self = [super init]) + if (self = [super init]) { _functions = []; } @@ -58,7 +60,7 @@ /*! Adds the specified JS function to the receiver’s list of functions to perform. */ -- (void)addExecutionFunction:(JSObject)jsFunction +- (void)addExecutionFunction:(JSObject)jsFunction { [_functions addObject:jsFunction]; } @@ -66,7 +68,7 @@ /*! Returns an array containing the functions associated with the receiver. */ -- (CPArray)executionFunctions +- (CPArray)executionFunctions { return _functions; } @@ -74,12 +76,12 @@ /*! Creates and returns an NSFunctionOperation object and adds the specified function to it. */ -+ (id)functionOperationWithFunction:(JSObject)jsFunction ++ (id)functionOperationWithFunction:(JSObject)jsFunction { functionOp = [[CPFunctionOperation alloc] init]; [functionOp addExecutionFunction:jsFunction]; - + return functionOp; } -@end \ No newline at end of file +@end diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index 60e6736e9..266c7273e 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -20,14 +20,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPRange.j" @import "CPObject.j" +@import "CPRange.j" + #define _CPMaxRange(aRange) ((aRange).location + (aRange).length) #define _CPMakeRange(aLocation, aLength) { location:(aLocation), length:aLength } #define _CPMakeRangeCopy(aRange) { location:(aRange).location, length:(aRange).length } -/*! +/*! @class CPIndexSet @ingroup foundation @brief A collection of unique integers. @@ -179,7 +180,7 @@ return NO; // If we have less total indexes than aRange, we can't possibly contain aRange. - if(_count < aRange.length) + if (_count < aRange.length) return NO; // Search for first location @@ -203,7 +204,7 @@ { var otherCount = anIndexSet._count; - if(otherCount <= 0) + if (otherCount <= 0) return YES; // If we have less total indexes than anIndexSet, we can't possibly contain aRange. @@ -692,7 +693,7 @@ var i = _ranges.length - 1, shifted = CPMakeRange(CPNotFound, 0); - for(; i >= 0; --i) + for (; i >= 0; --i) { var range = _ranges[i], maximum = CPMaxRange(range); @@ -700,7 +701,7 @@ if (anIndex > maximum) break; - // If our index is within our range, but not the first index, + // If our index is within our range, but not the first index, // then this range will be split. if (anIndex > range.location && anIndex < maximum) { diff --git a/Foundation/CPInvocation.j b/Foundation/CPInvocation.j index 19e8c2cb1..da66a2a68 100644 --- a/Foundation/CPInvocation.j +++ b/Foundation/CPInvocation.j @@ -20,11 +20,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" @import "CPException.j" +@import "CPObject.j" -/*! +/*! @class CPInvocation @ingroup foundation @brief An object representation of a message. @@ -57,13 +57,13 @@ - (id)initWithMethodSignature:(CPMethodSignature)aMethodSignature { self = [super init]; - + if (self) { _arguments = []; _methodSignature = aMethodSignature; } - + return self; } @@ -174,13 +174,13 @@ var CPInvocationArguments = @"CPInvocationArguments", - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) { _returnValue = [aCoder decodeObjectForKey:CPInvocationReturnValue]; _arguments = [aCoder decodeObjectForKey:CPInvocationArguments]; } - + return self; } diff --git a/Foundation/CPInvocationOperation.j b/Foundation/CPInvocationOperation.j index e98fc6c49..0c1bdfda6 100644 --- a/Foundation/CPInvocationOperation.j +++ b/Foundation/CPInvocationOperation.j @@ -19,32 +19,32 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import -@import +@import "CPInvocation.j" +@import "CPObject.j" @import "CPOperation.j" -/*! +/*! @class CPInvocationOperation @brief Represents an operation using an invocation that can be run in an CPOperationQueue */ -@implementation CPInvocationOperation : CPOperation +@implementation CPInvocationOperation : CPOperation { CPInvocation _invocation; } -- (void)main +- (void)main { - if (_invocation) + if (_invocation) { [_invocation invoke]; } } -- (id)init +- (id)init { - if (self = [super init]) + if (self = [super init]) { _invocation = nil; } @@ -55,13 +55,13 @@ Returns a CPInvocationOperation object initialized with the specified invocation object. @param inv the invocation */ -- (id)initWithInvocation:(CPInvocation)inv +- (id)initWithInvocation:(CPInvocation)inv { - if (self = [self init]) + if (self = [self init]) { _invocation = inv; } - + return self; } @@ -71,20 +71,20 @@ @param sel the selector that should be called on the target @param arg the arguments */ -- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg +- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg { var inv = [[CPInvocation alloc] initWithMethodSignature:nil]; [inv setTarget:target]; [inv setSelector:sel]; [inv setArgument:arg atIndex:2]; - + return [self initWithInvocation:inv]; } /*! Returns the receiver’s invocation object. */ -- (CPInvocation)invocation +- (CPInvocation)invocation { return _invocation; } @@ -92,16 +92,14 @@ /*! Returns the result of the invocation or method. */ -- (id)result +- (id)result { - if ([self isFinished] && _invocation) + if ([self isFinished] && _invocation) { return [_invocation returnValue]; } - + return nil; } - - -@end \ No newline at end of file +@end diff --git a/Foundation/CPJSONPConnection.j b/Foundation/CPJSONPConnection.j index 031ef7eb2..c95a362c5 100644 --- a/Foundation/CPJSONPConnection.j +++ b/Foundation/CPJSONPConnection.j @@ -19,15 +19,15 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - -@import + +@import "CPObject.j" CPJSONPConnectionCallbacks = {}; CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; -/*! +/*! @ingroup foundation @brief Allows cross domain connections using JSONP protocol. @@ -43,13 +43,13 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; { CPURLRequest _request; id _delegate; - + CPString _callbackParameter; DOMElement _scriptTag; } /*! @deprecated */ -+ (CPJSONPConnection)sendRequest:(CPURLRequest)aRequest callback:(CPString)callbackParameter delegate:(id)aDelegate ++ (CPJSONPConnection)sendRequest:(CPURLRequest)aRequest callback:(CPString)callbackParameter delegate:(id)aDelegate { return [self connectionWithRequest:aRequest callback:callbackParameter delegate:aDelegate]; } @@ -59,7 +59,7 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; return [[[self class] alloc] initWithRequest:aRequest callback:callbackParameter delegate:aDelegate startImmediately:YES]; } -- (id)initWithRequest:(CPURLRequest)aRequest callback:(CPString)aString delegate:(id)aDelegate +- (id)initWithRequest:(CPURLRequest)aRequest callback:(CPString)aString delegate:(id)aDelegate { return [self initWithRequest:aRequest callback:aString delegate:aDelegate startImmediately: NO]; } @@ -67,18 +67,18 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; - (id)initWithRequest:(CPURLRequest)aRequest callback:(CPString)aString delegate:(id)aDelegate startImmediately:(BOOL)shouldStartImmediately { self = [super init]; - + _request = aRequest; _delegate = aDelegate; - + _callbackParameter = aString; - + if (!_callbackParameter && [[_request URL] absoluteString].indexOf(CPJSONPCallbackReplacementString) < 0) [CPException raise:CPInvalidArgumentException reason:@"JSONP source specified without callback parameter or CPJSONPCallbackReplacementString in URL."]; - if(shouldStartImmediately) + if (shouldStartImmediately) [self start]; - + return self; } @@ -93,9 +93,9 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; if ([_delegate respondsToSelector:@selector(connectionDidFinishLoading:)]) [_delegate connectionDidFinishLoading:self]; - + [self removeScriptTag]; - + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; }; @@ -113,12 +113,12 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; } else return; - + _scriptTag = document.createElement("script"); _scriptTag.setAttribute("type", "text/javascript"); _scriptTag.setAttribute("charset", "utf-8"); _scriptTag.setAttribute("src", source); - + head.appendChild(_scriptTag); } catch (exception) @@ -133,12 +133,12 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}"; - (void)removeScriptTag { var head = document.getElementsByTagName("head").item(0); - + if(_scriptTag && _scriptTag.parentNode == head) head.removeChild(_scriptTag); - CPJSONPConnectionCallbacks["callback"+[self UID]] = nil; - delete CPJSONPConnectionCallbacks["callback"+[self UID]]; + CPJSONPConnectionCallbacks["callback" + [self UID]] = nil; + delete CPJSONPConnectionCallbacks["callback" + [self UID]]; } - (void)cancel diff --git a/Foundation/CPKeyValueCoding.j b/Foundation/CPKeyValueCoding.j index 6543d04b6..104a6931f 100644 --- a/Foundation/CPKeyValueCoding.j +++ b/Foundation/CPKeyValueCoding.j @@ -25,6 +25,7 @@ @import "CPNull.j" @import "CPObject.j" + var CPObjectAccessorsForClass = nil, CPObjectModifiersForClass = nil; @@ -44,41 +45,41 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; { if (!CPObjectAccessorsForClass) CPObjectAccessorsForClass = [CPDictionary dictionary]; - + var UID = [isa UID], selector = nil, accessors = [CPObjectAccessorsForClass objectForKey:UID]; - + if (accessors) { selector = [accessors objectForKey:aKey]; - + if (selector) return selector === [CPNull null] ? nil : selector; } else { accessors = [CPDictionary dictionary]; - + [CPObjectAccessorsForClass setObject:accessors forKey:UID]; } var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substr(1); - - if ([self instancesRespondToSelector:selector = CPSelectorFromString("get" + capitalizedKey)] || - [self instancesRespondToSelector:selector = CPSelectorFromString(aKey)] || - [self instancesRespondToSelector:selector = CPSelectorFromString("is" + capitalizedKey)] || - [self instancesRespondToSelector:selector = CPSelectorFromString("_get" + capitalizedKey)] || - [self instancesRespondToSelector:selector = CPSelectorFromString("_" + aKey)] || + + if ([self instancesRespondToSelector:selector = CPSelectorFromString("get" + capitalizedKey)] || + [self instancesRespondToSelector:selector = CPSelectorFromString(aKey)] || + [self instancesRespondToSelector:selector = CPSelectorFromString("is" + capitalizedKey)] || + [self instancesRespondToSelector:selector = CPSelectorFromString("_get" + capitalizedKey)] || + [self instancesRespondToSelector:selector = CPSelectorFromString("_" + aKey)] || [self instancesRespondToSelector:selector = CPSelectorFromString("_is" + capitalizedKey)]) { [accessors setObject:selector forKey:aKey]; - + return selector; } - + [accessors setObject:[CPNull null] forKey:aKey]; - + return nil; } @@ -87,25 +88,25 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; { if (!CPObjectModifiersForClass) CPObjectModifiersForClass = [CPDictionary dictionary]; - + var UID = [isa UID], selector = nil, modifiers = [CPObjectModifiersForClass objectForKey:UID]; - + if (modifiers) { selector = [modifiers objectForKey:aKey]; - + if (selector) return selector === [CPNull null] ? nil : selector; } else { modifiers = [CPDictionary dictionary]; - + [CPObjectModifiersForClass setObject:modifiers forKey:UID]; } - + if (selector) return selector === [CPNull null] ? nil : selector; @@ -115,12 +116,12 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; [self instancesRespondToSelector:selector = CPSelectorFromString("_set" + capitalizedKey)]) { [modifiers setObject:selector forKey:aKey]; - + return selector; } - + [modifiers setObject:[CPNull null] forKey:aKey]; - + return nil; } @@ -128,30 +129,30 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; - (CPString)_ivarForKey:(CPString)aKey { var ivar = '_' + aKey; - + if (typeof self[ivar] != "undefined") return ivar; var isKey = "is" + aKey.charAt(0).toUpperCase() + aKey.substr(1); - ivar = '_' + isKey; - + ivar = '_' + isKey; + if (typeof self[ivar] != "undefined") return ivar; - + ivar = aKey; - + if (typeof self[ivar] != "undefined") return ivar; - + ivar = isKey; - + if (typeof self[ivar] != "undefined") return ivar; return nil; } - + - (id)valueForKey:(CPString)aKey { var theClass = [self class], @@ -159,18 +160,18 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; if (selector) return objj_msgSend(self, selector); - - if([theClass accessInstanceVariablesDirectly]) + + if ([theClass accessInstanceVariablesDirectly]) { var ivar = [self _ivarForKey:aKey]; - + if (ivar) return self[ivar]; } - + return [self valueForUndefinedKey:aKey]; } - + - (id)valueForKeyPath:(CPString)aKeyPath { var firstDotIndex = aKeyPath.indexOf("."); @@ -179,7 +180,7 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; return [self valueForKey:aKeyPath]; var firstKeyComponent = aKeyPath.substring(0, firstDotIndex), - remainingKeyPath = aKeyPath.substring(firstDotIndex+1), + remainingKeyPath = aKeyPath.substring(firstDotIndex + 1), value = [self valueForKey:firstKeyComponent]; return [value valueForKeyPath:remainingKeyPath]; @@ -190,7 +191,7 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; var index = 0, count = keys.length, dictionary = [CPDictionary dictionary]; - + for (; index < count; ++index) { var key = keys[index], @@ -201,7 +202,7 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; else [dictionary setObject:value forKey:key]; } - + return dictionary; } @@ -211,7 +212,7 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; reason:[self description] + " is not key value coding-compliant for the key " + aKey userInfo:[CPDictionary dictionaryWithObjects:[self, aKey] forKeys:[CPTargetObjectUserInfoKey, CPUnknownUserInfoKey]]] raise]; } - + - (void)setValue:(id)aValue forKeyPath:(CPString)aKeyPath { if (!aKeyPath) aKeyPath = "self"; @@ -221,12 +222,12 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; count = keys.length - 1, owner = self; - for(; i < count; ++i) + for (; i < count; ++i) owner = [owner valueForKey:keys[i]]; - + [owner setValue:aValue forKey:keys[i]]; } - + - (void)setValue:(id)aValue forKey:(CPString)aKey { var theClass = [self class], @@ -234,26 +235,26 @@ CPUnknownUserInfoKey = @"CPUnknownUserInfoKey"; if (selector) return objj_msgSend(self, selector, aValue); - - if([theClass accessInstanceVariablesDirectly]) + + if ([theClass accessInstanceVariablesDirectly]) { var ivar = [self _ivarForKey:aKey]; - + if (ivar) { [self willChangeValueForKey:aKey]; - + self[ivar] = aValue; - + [self didChangeValueForKey:aKey]; return; } } - + [self setValue:aValue forUndefinedKey:aKey]; } - + - (void)setValue:(id)aValue forUndefinedKey:(CPString)aKey { [[CPException exceptionWithName:CPUndefinedKeyException diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 5612adaf2..a1a556d3d 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -224,7 +224,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, - (void)_replaceClass { var currentClass = _nativeClass, - kvoClassName = "$KVO_"+class_getName(_nativeClass), + kvoClassName = "$KVO_" + class_getName(_nativeClass), existingKVOClass = objj_lookUpClass(kvoClassName); if (existingKVOClass) @@ -232,16 +232,17 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, _targetObject.isa = existingKVOClass; return; } - + var kvoClass = objj_allocateClassPair(currentClass, kvoClassName); - + objj_registerClassPair(kvoClass); - + //copy in the methods from our model subclass var methodList = _CPKVOModelSubclass.method_list, - count = methodList.length; + count = methodList.length, + i = 0; - for (var i=0; i O(N^2)), so to avoid it, - // we keep track of whether observers are added or removed, and only do our + // we keep track of whether observers are added or removed, and only do our // rigorous testing in those cases. var observerRemovalCount = _observerRemovalCount, object = [aNotification object], @@ -286,18 +286,18 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ { var currentObservers = observers, count = observers.length; - + while (count--) { var observer = observers[count]; - - // if there wasn't removal of an observer during this posting, or there - // was but we are still in the observer list... + + // if there wasn't removal of an observer during this posting, or there + // was but we are still in the observer list... if ((observerRemovalCount === _observerRemovalCount) || [currentObservers indexOfObjectIdenticalTo:observer] !== CPNotFound) [observer postNotification:aNotification]; } } - + // Now do the same for the nil object observers... observers = [[_objectObservers objectForKey:[[CPNull null] UID]] copy]; @@ -312,8 +312,8 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ { var observer = observers[count]; - // if there wasn't removal of an observer during this posting, or there - // was but we are still in the observer list... + // if there wasn't removal of an observer during this posting, or there + // was but we are still in the observer list... if ((observerRemovalCount === _observerRemovalCount) || [currentObservers indexOfObjectIdenticalTo:observer] !== CPNotFound) [observer postNotification:aNotification]; } @@ -349,7 +349,7 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ return _observer; } --(void)postNotification:(CPNotification)aNotification +- (void)postNotification:(CPNotification)aNotification { [_observer performSelector:_selector withObject:aNotification]; } diff --git a/Foundation/CPNumber.j b/Foundation/CPNumber.j index 8712b2ac2..a0bbef39e 100644 --- a/Foundation/CPNumber.j +++ b/Foundation/CPNumber.j @@ -27,15 +27,15 @@ var __placeholder = new Number(), CPNumberUIDs = new CFMutableDictionary(); -/*! +/*! @class CPNumber @ingroup foundation @brief A bridged object to native Javascript numbers. This class primarily exists for source compatability. The JavaScript \c Number type can be changed on the fly based on context, - so there is no need to call any of these methods. - + so there is no need to call any of these methods. + In other words, native JavaScript numbers are bridged to CPNumber, so you can use them interchangeably (including operators and methods). */ @@ -93,7 +93,7 @@ var __placeholder = new Number(), { if (aChar.charCodeAt) return aChar.charCodeAt(0); - + return aChar; } @@ -126,7 +126,7 @@ var __placeholder = new Number(), { if (aChar.charCodeAt) return aChar.charCodeAt(0); - + return aChar; } @@ -164,7 +164,7 @@ var __placeholder = new Number(), { if (aChar.charCodeAt) return aChar.charCodeAt(0); - + return aChar; } @@ -223,7 +223,7 @@ FIXME: Do we need this? - (CPString)descriptionWithLocale:(CPDictionary)aDictionary { if (!aDictionary) return toString(); - + throw new Error("descriptionWithLocale: NOT YET IMPLEMENTED"); } @@ -273,7 +273,7 @@ FIXME: Do we need this? return toString(); } -- (unsigned char)unsignedCharValue +- (unsigned char)unsignedCharValue { return String.fromCharCode(self); } @@ -306,7 +306,7 @@ FIXME: Do we need this? { if (self > aNumber) return CPOrderedDescending; else if (self < aNumber) return CPOrderedAscending; - + return CPOrderedSame; } diff --git a/Foundation/CPObjJRuntime.j b/Foundation/CPObjJRuntime.j index 3c49daebd..019888d19 100644 --- a/Foundation/CPObjJRuntime.j +++ b/Foundation/CPObjJRuntime.j @@ -42,7 +42,7 @@ function CPStringFromClass(aClass) } CPOrderedAscending = -1; -CPOrderedSame = 0; +CPOrderedSame = 0; CPOrderedDescending = 1; CPNotFound = -1; diff --git a/Foundation/CPObject.j b/Foundation/CPObject.j index b6c276ee6..fece4e8f6 100644 --- a/Foundation/CPObject.j +++ b/Foundation/CPObject.j @@ -24,27 +24,27 @@ @class CPObject @ingroup foundation @brief The root class from which most classes are subclassed. - + CPObject is the root class for most Cappuccino classes. Like in Objective-C, you have to declare parent class explicitly in Objective-J, so your custom classes should almost always subclass CPObject or one of its children. - + CPObject provides facilities for class allocation and initialization, querying runtime about parent classes and available selectors, using KVC (key-value coding). - + When you subclass CPObject, most of the time you override one selector - init. It is called for default initialization of custom object. You must call parent class init in your overriden code:
- (id)init
 {
     self = [super init];
-    if(self) {
+    if (self) {
         ... provide default initialization code for your object ...
     }
     return self;
 }
- + One more useful thing to override is description(). This selector is used to provide developer-readable information about object. description selector is often used with CPLog debugging: @@ -58,7 +58,7 @@ CPLog(@"Got some class: %@", inst); would output: \c Got \c some \c class: \c - + @todo document KVC usage. */ @implementation CPObject @@ -164,11 +164,11 @@ CPLog(@"Got some class: %@", inst); + (BOOL)isSubclassOfClass:(Class)aClass { var theClass = self; - - for(; theClass; theClass = theClass.super_class) - if(theClass === aClass) + + for (; theClass; theClass = theClass.super_class) + if (theClass === aClass) return YES; - + return NO; } @@ -332,25 +332,25 @@ CPLog(@"Got some class: %@", inst); - (void)forward:(SEL)aSelector :(marg_list)args { var signature = [self methodSignatureForSelector:aSelector]; - + if (signature) { invocation = [CPInvocation invocationWithMethodSignature:signature]; - + [invocation setTarget:self]; [invocation setSelector:aSelector]; - + var index = 2, count = args.length; - + for (; index < count; ++index) [invocation setArgument:args[index] atIndex:index]; - + [self forwardInvocation:invocation]; - + return [invocation returnValue]; } - + [self doesNotRecognizeSelector:aSelector]; } @@ -436,7 +436,7 @@ CPLog(@"Got some class: %@", inst); + (id)setVersion:(int)aVersion { version = aVersion; - + return self; } diff --git a/Foundation/CPOperation.j b/Foundation/CPOperation.j index e24617ae7..710dc5961 100644 --- a/Foundation/CPOperation.j +++ b/Foundation/CPOperation.j @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import +@import "CPObject.j" /*! Operations receive very low priority for execution. @@ -57,13 +57,13 @@ CPOperationQueuePriorityHigh = 4; CPOperationQueuePriorityVeryHigh = 8; -/*! +/*! @class CPOperation @brief Represents an operation that can be run in an CPOperationQueue It should be subclassed an the subclass should implement its own main method to do the actual work. */ -@implementation CPOperation : CPObject +@implementation CPOperation : CPObject { CPArray operations; BOOL _cancelled; @@ -75,15 +75,14 @@ CPOperationQueuePriorityVeryHigh = 8; CPArray _dependencies; } - -- (void)main +- (void)main { // should be overridden in child class } -- (id)init +- (id)init { - if (self = [super init]) + if (self = [super init]) { _cancelled = NO; _executing = NO; @@ -98,15 +97,15 @@ CPOperationQueuePriorityVeryHigh = 8; /*! Starts the operation (runs the main method), sets all the status flags and runs the completion function if it's set */ -- (void)start +- (void)start { - if (!_cancelled) + if (!_cancelled) { [self willChangeValueForKey:@"isExecuting"]; _executing = YES; [self didChangeValueForKey:@"isExecuting"]; [self main]; - if (_completionFunction) + if (_completionFunction) { _completionFunction(); } @@ -123,7 +122,7 @@ CPOperationQueuePriorityVeryHigh = 8; Indicates if this operation has been cancelled @return if this operation has been cancelled */ -- (BOOL)isCancelled +- (BOOL)isCancelled { return _cancelled; } @@ -132,7 +131,7 @@ CPOperationQueuePriorityVeryHigh = 8; Indicates if this operation is currently executing @return if this operation is currently executing */ -- (BOOL)isExecuting +- (BOOL)isExecuting { return _executing; } @@ -141,7 +140,7 @@ CPOperationQueuePriorityVeryHigh = 8; Indicates if this operation has finished running @return if this operation has finished running */ -- (BOOL)isFinished +- (BOOL)isFinished { return _finished; } @@ -150,7 +149,7 @@ CPOperationQueuePriorityVeryHigh = 8; Just added for Cocoa compatibility @return always false */ -- (BOOL)isConcurrent +- (BOOL)isConcurrent { return NO; } @@ -159,8 +158,8 @@ CPOperationQueuePriorityVeryHigh = 8; Indicates if this operation is ready to be executed. Takes the "isFinished" state of dependent operations into account @return if this operation is ready to run */ -- (BOOL)isReady -{ +- (BOOL)isReady +{ return _ready; } @@ -168,7 +167,7 @@ CPOperationQueuePriorityVeryHigh = 8; The JS function that should be run after the main method @return JS function */ -- (JSObject)completionFunction +- (JSObject)completionFunction { return _completionFunction; } @@ -176,7 +175,7 @@ CPOperationQueuePriorityVeryHigh = 8; /*! Sets the JS function that should be run after the main method */ -- (void)setCompletionFunction:(JSObject)aJavaScriptFunction +- (void)setCompletionFunction:(JSObject)aJavaScriptFunction { _completionFunction = aJavaScriptFunction; } @@ -185,7 +184,7 @@ CPOperationQueuePriorityVeryHigh = 8; Makes the receiver dependent on the completion of the specified operation. @param anOperation the operation that the receiver should depend on */ -- (void)addDependency:(CPOperation)anOperation +- (void)addDependency:(CPOperation)anOperation { [self willChangeValueForKey:@"dependencies"]; [anOperation addObserver:self @@ -201,12 +200,12 @@ CPOperationQueuePriorityVeryHigh = 8; Removes the receiver’s dependence on the specified operation. @param anOperation the operation that the receiver should no longer depend on */ -- (void)removeDependency:(CPOperation)anOperation +- (void)removeDependency:(CPOperation)anOperation { [self willChangeValueForKey:@"dependencies"]; [_dependencies removeObject:anOperation]; [anOperation removeObserver:self - forKeyPath:@"isFinished"]; + forKeyPath:@"isFinished"]; [self didChangeValueForKey:@"dependencies"]; [self _updateIsReadyState]; } @@ -215,7 +214,7 @@ CPOperationQueuePriorityVeryHigh = 8; The operations that the receiver depends on @return array of operations */ -- (CPArray)dependencies +- (CPArray)dependencies { return _dependencies; } @@ -223,14 +222,14 @@ CPOperationQueuePriorityVeryHigh = 8; /*! Just added for Cocoa compatibility, doesn't do anything */ -- (void)waitUntilFinished +- (void)waitUntilFinished { } /*! Advises the operation object that it should stop executing its task. */ -- (void)cancel +- (void)cancel { [self willChangeValueForKey:@"isCancelled"]; _cancelled = YES; @@ -241,7 +240,7 @@ CPOperationQueuePriorityVeryHigh = 8; Sets the priority of the operation when used in an operation queue. @param priority the priority */ -- (void)setQueuePriority:(int)priority +- (void)setQueuePriority:(int)priority { _queuePriority = priority; } @@ -250,7 +249,7 @@ CPOperationQueuePriorityVeryHigh = 8; The priority of the operation when used in an operation queue. @return the priority */ -- (int)queuePriority +- (int)queuePriority { return _queuePriority; } @@ -261,28 +260,28 @@ CPOperationQueuePriorityVeryHigh = 8; change:(CPDictionary)change context:(void)context { - if (keyPath == @"isFinished") + if (keyPath == @"isFinished") { [self _updateIsReadyState]; } } -- (void)_updateIsReadyState +- (void)_updateIsReadyState { var newReady = YES; - if (_dependencies && [_dependencies count] > 0) + if (_dependencies && [_dependencies count] > 0) { var i = 0; - for (i = 0; i < [_dependencies count]; i++) + for (i = 0; i < [_dependencies count]; i++) { - if (![[_dependencies objectAtIndex:i] isFinished]) + if (![[_dependencies objectAtIndex:i] isFinished]) { newReady = NO; } } } - - if (newReady != _ready) + + if (newReady != _ready) { [self willChangeValueForKey:@"isReady"]; _ready = newReady; diff --git a/Foundation/CPOperationQueue.j b/Foundation/CPOperationQueue.j index ac4e4842b..b849cdd43 100644 --- a/Foundation/CPOperationQueue.j +++ b/Foundation/CPOperationQueue.j @@ -19,29 +19,29 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import -@import "CPOperation.j" -@import "CPInvocationOperation.j" @import "CPFunctionOperation.j" +@import "CPInvocationOperation.j" +@import "CPObject.j" +@import "CPOperation.j" // the global queue (mainQueue) var cpOperationMainQueue = nil; -/*! +/*! @class CPOperationQueue @brief Represents an operation queue that can run CPOperations */ -@implementation CPOperationQueue : CPObject +@implementation CPOperationQueue : CPObject { CPArray _operations; BOOL _suspended; CPString _name @accessors(property=name); - CPTimer _timer; + CPTimer _timer; } -- (id)init +- (id)init { - if (self = [super init]) + if (self = [super init]) { _operations = [[CPArray alloc] init]; _suspended = NO; @@ -55,35 +55,37 @@ var cpOperationMainQueue = nil; return self; } -- (void)_runNextOpsInQueue +- (void)_runNextOpsInQueue { - if (!_suspended && [self operationCount] > 0) + if (!_suspended && [self operationCount] > 0) { - var i = 0; - for (i = 0; i < [_operations count]; i++) + var i = 0, + count = [_operations count]; + + for (; i < count; i++) { var op = [_operations objectAtIndex:i]; - if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting]) + if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting]) { [op start]; - } + } } } } -- (void)_enableTimer:(BOOL)enable +- (void)_enableTimer:(BOOL)enable { - if (!enable) + if (!enable) { - if (_timer) + if (_timer) { [_timer invalidate]; _timer = nil; } - } - else + } + else { - if (!_timer) + if (!_timer) { _timer = [CPTimer scheduledTimerWithTimeInterval:0.01 target:self @@ -98,7 +100,7 @@ var cpOperationMainQueue = nil; Adds the specified operation object to the receiver. @param anOperation the operation that should be scheduled for execution */ -- (void)addOperation:(CPOperation)anOperation +- (void)addOperation:(CPOperation)anOperation { [self willChangeValueForKey:@"operations"]; [self willChangeValueForKey:@"operationCount"]; @@ -112,70 +114,72 @@ var cpOperationMainQueue = nil; Adds the specified array of operations to the queue. @param ops The array of CPOperation objects that you want to add to the receiver. @param wait If YES, the method only returns once all of the specified operations finish executing. If NO, the operations are added to the queue and control returns immediately to the caller. -*/ -- (void)addOperations:(CPArray)ops waitUntilFinished:(BOOL)wait +*/ +- (void)addOperations:(CPArray)ops waitUntilFinished:(BOOL)wait { - if (ops) + if (ops) { - if (wait) + if (wait) { [self _sortOpsByPriority:ops]; [self _runOpsSynchronously:ops]; - } - + } + [_operations addObjectsFromArray:ops]; [self _sortOpsByPriority:_operations]; - } + } } /*! Wraps the given js function in a CPOperation and adds it to the queue @param aFunction the JS function to add */ -- (void)addOperationWithFunction:(JSObject)aFunction +- (void)addOperationWithFunction:(JSObject)aFunction { [self addOperation:[CPFunctionOperation functionOperationWithFunction:aFunction]]; } -- (CPArray)operations +- (CPArray)operations { return _operations; } -- (int)operationCount +- (int)operationCount { - if (_operations) + if (_operations) { return [_operations count]; } - + return 0; } /*! Cancels all queued and executing operations. */ -- (void)cancelAllOperations +- (void)cancelAllOperations { - if (_operations) + if (_operations) { - var i = 0; - for (i = 0; i < [_operations count]; i++) - { - [[_operations objectAtIndex:i] cancel]; - } + var i = 0, + count = [_operations count]; + + for (; i < count; i++) + { + [[_operations objectAtIndex:i] cancel]; + } } } /*! Blocks until all of the receiver’s queued and executing operations finish executing. */ -- (void)waitUntilAllOperationsAreFinished +- (void)waitUntilAllOperationsAreFinished { // lets first stop the timer so it won't interfere [self _enableTimer:NO]; [self _runOpsSynchronously:_operations]; - if (!_suspended) + if (!_suspended) { [self _enableTimer:YES]; } @@ -186,7 +190,7 @@ var cpOperationMainQueue = nil; Returns the maximum number of concurrent operations that the receiver can execute. Always returns 1 because JS doesn't have threads */ -- (int)maxConcurrentOperationCount +- (int)maxConcurrentOperationCount { return 1; } @@ -195,7 +199,7 @@ var cpOperationMainQueue = nil; Modifies the execution of pending operations @param suspend if YES, queue execution is suspended. If NO, it is resumed */ -- (void)setSuspended:(BOOL)suspend +- (void)setSuspended:(BOOL)suspend { _suspended = suspend; [self _enableTimer:!suspend]; @@ -204,62 +208,64 @@ var cpOperationMainQueue = nil; /*! Returns a Boolean value indicating whether the receiver is scheduling queued operations for execution. */ -- (BOOL)isSuspended +- (BOOL)isSuspended { return _suspended; } -- (void)_sortOpsByPriority:(CPArray)someOps +- (void)_sortOpsByPriority:(CPArray)someOps { - if (someOps) + if (someOps) { - [someOps sortUsingFunction:function(lhs, rhs) + [someOps sortUsingFunction:function(lhs, rhs) { - if ([lhs queuePriority] < [rhs queuePriority]) + if ([lhs queuePriority] < [rhs queuePriority]) { return 1; - } - else + } + else { - if ([lhs queuePriority] > [rhs queuePriority]) + if ([lhs queuePriority] > [rhs queuePriority]) { return -1; - } - else + } + else { return 0; } } - } + } context:nil]; } } -- (void)_runOpsSynchronously:(CPArray)ops +- (void)_runOpsSynchronously:(CPArray)ops { - if (ops) + if (ops) { var keepGoing = YES; - while (keepGoing) + while (keepGoing) { - var i = 0; + var i = 0, + count = [ops count]; + keepGoing = NO; - + // start the ones that are ready - for (i = 0; i < [ops count]; i++) + for (; i < count; i++) { var op = [ops objectAtIndex:i]; - if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting]) + if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting]) { [op start]; - } + } } - + // make sure they are all done - for (i = 0; i < [ops count]; i++) + for (i = 0; i < count; i++) { var op = [ops objectAtIndex:i]; - if (![op isFinished] && ![op isCancelled]) + if (![op isFinished] && ![op isCancelled]) { keepGoing = YES; } @@ -271,23 +277,23 @@ var cpOperationMainQueue = nil; /*! Convenience method for one system wide singelton queue. Returns the same queue as currentQueue. */ -+ (CPOperationQueue)mainQueue ++ (CPOperationQueue)mainQueue { - if (!cpOperationMainQueue) + if (!cpOperationMainQueue) { cpOperationMainQueue = [[CPOperationQueue alloc] init]; [cpOperationMainQueue setName:@"main"]; } - + return cpOperationMainQueue; } /*! Convenience method for one system wide singelton queue. Returns the same queue as mainQueue. */ -+ (CPOperationQueue)currentQueue ++ (CPOperationQueue)currentQueue { return [CPOperationQueue mainQueue]; } -@end \ No newline at end of file +@end diff --git a/Foundation/CPProxy.j b/Foundation/CPProxy.j index 2d5fba736..2b4054c83 100644 --- a/Foundation/CPProxy.j +++ b/Foundation/CPProxy.j @@ -133,7 +133,7 @@ return [invocation returnValue]; } --(BOOL)isMemberOfClass:(Class)aClass +- (BOOL)isMemberOfClass:(Class)aClass { var signature = [self methodSignatureForSelector:_cmd], invocation = [CPInvocation invocationWithMethodSignature:signature]; diff --git a/Foundation/CPRange.j b/Foundation/CPRange.j index 6a0b1b5ce..b91a878d3 100755 --- a/Foundation/CPRange.j +++ b/Foundation/CPRange.j @@ -105,7 +105,7 @@ function CPLocationInRange(aLocation, aRange) } /*! - Creates a new range with the minimum \c location and a \c length + Creates a new range with the minimum \c location and a \c length that extends to the maximum \c length. @param lhsRange the first CPRange @param rhsRange the second CPRange @@ -129,7 +129,7 @@ function CPIntersectionRange(lhsRange, rhsRange) { if(CPMaxRange(lhsRange) < rhsRange.location || CPMaxRange(rhsRange) < lhsRange.location) return CPMakeRange(0, 0); - + var location = MAX(lhsRange.location, rhsRange.location); return CPMakeRange(location, MIN(CPMaxRange(lhsRange), CPMaxRange(rhsRange)) - location); } @@ -166,10 +166,11 @@ function CPStringFromRange(aRange) function CPRangeFromString(aString) { var comma = aString.indexOf(','); - + return { location:parseInt(aString.substr(1, comma - 1)), length:parseInt(aString.substring(comma + 1, aString.length)) }; } /*! @} */ + diff --git a/Foundation/CPRunLoop.j b/Foundation/CPRunLoop.j index 95ea272bd..89ad9337a 100644 --- a/Foundation/CPRunLoop.j +++ b/Foundation/CPRunLoop.j @@ -20,8 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" @import "CPArray.j" +@import "CPObject.j" @import "CPString.j" /*! @@ -53,7 +53,7 @@ var _CPRunLoopPerformPool = [], { if (!aPerform || _CPRunLoopPerformPool.length >= _CPRunLoopPerformPoolCapacity) return; - + _CPRunLoopPerformPool.push(aPerform); } @@ -62,24 +62,24 @@ var _CPRunLoopPerformPool = [], if (_CPRunLoopPerformPool.length) { var perform = _CPRunLoopPerformPool.pop(); - + perform._target = aTarget; perform._selector = aSelector; perform._argument = anArgument; perform._order = anOrder; perform._runLoopModes = modes; perform._isValid = YES; - + return perform; } - + return [[self alloc] initWithSelector:aSelector target:aTarget argument:anArgument order:anOrder modes:modes]; } - (id)initWithSelector:(SEL)aSelector target:(SEL)aTarget argument:(id)anArgument order:(unsigned)anOrder modes:(CPArray)modes { self = [super init]; - + if (self) { _selector = aSelector; @@ -89,7 +89,7 @@ var _CPRunLoopPerformPool = [], _runLoopModes = modes; _isValid = YES; } - + return self; } @@ -117,14 +117,14 @@ var _CPRunLoopPerformPool = [], { if (!_isValid) return YES; - + if ([_runLoopModes containsObject:aRunLoopMode]) { [_target performSelector:_selector withObject:_argument]; - + return YES; } - + return NO; } @@ -174,16 +174,16 @@ var CPRunLoopLastNativeRunLoop = 0; - (id)init { self = [super init]; - + if (self) { _orderedPerforms = []; - + _timersForModes = {}; _nativeTimersForModes = {}; _nextTimerFireDatesForModes = {}; } - + return self; } @@ -220,7 +220,7 @@ var CPRunLoopLastNativeRunLoop = 0; while (count--) if (anOrder < [_orderedPerforms[count] order]) break; - + _orderedPerforms.splice(count + 1, 0, perform); } @@ -233,11 +233,11 @@ var CPRunLoopLastNativeRunLoop = 0; - (void)cancelPerformSelector:(SEL)aSelector target:(id)aTarget argument:(id)anArgument { var count = _orderedPerforms.length; - + while (count--) { var perform = _orderedPerforms[count]; - + if ([perform selector] === aSelector && [perform target] == aTarget && [perform argument] == anArgument) [_orderedPerforms[count] invalidate]; } @@ -261,12 +261,12 @@ var CPRunLoopLastNativeRunLoop = 0; _timersForModes[aMode].push(aTimer); else _timersForModes[aMode] = [aTimer]; - + _didAddTimer = YES; - + if (!aTimer._lastNativeRunLoopsForModes) aTimer._lastNativeRunLoopsForModes = {}; - + aTimer._lastNativeRunLoopsForModes[aMode] = CPRunLoopLastNativeRunLoop; @@ -305,96 +305,96 @@ var CPRunLoopLastNativeRunLoop = 0; var now = _effectiveDate ? [_effectiveDate laterDate:[CPDate date]] : [CPDate date], nextFireDate = nil, nextTimerFireDate = _nextTimerFireDatesForModes[aMode]; - + // Perform Timers if necessary if (_didAddTimer || nextTimerFireDate && nextTimerFireDate <= now) { _didAddTimer = NO; - + // Cancel existing window.setTimeout if (_nativeTimersForModes[aMode] !== nil) { window.clearNativeTimeout(_nativeTimersForModes[aMode]); - + _nativeTimersForModes[aMode] = nil; } - + // Empty timers to avoid catastrophe if a timer is added during a timer fire. var timers = _timersForModes[aMode], index = timers.length; - + _timersForModes[aMode] = nil; - - // Loop through timers looking for ones that had fired + + // Loop through timers looking for ones that had fired while (index--) { var timer = timers[index]; - + if (timer._lastNativeRunLoopsForModes[aMode] < CPRunLoopLastNativeRunLoop && timer._isValid && timer._fireDate <= now) [timer fire]; - + // Timer may or may not still be valid if (timer._isValid) nextFireDate = (nextFireDate === nil) ? timer._fireDate : [nextFireDate earlierDate:timer._fireDate]; - + else { // FIXME: Is there an issue with reseting the fire date in -fire? or adding it back to the run loop?... timer._lastNativeRunLoopsForModes[aMode] = 0; - + timers.splice(index, 1); } } - + // Timers may have been added during the firing of timers - // They do NOT get a shot at firing, because they certainly + // They do NOT get a shot at firing, because they certainly // haven't gone through one native timer. var newTimers = _timersForModes[aMode]; - + if (newTimers && newTimers.length) { index = newTimers.length; - + while (index--) { var timer = newTimers[index]; - + if ([timer isValid]) nextFireDate = (nextFireDate === nil) ? timer._fireDate : [nextFireDate earlierDate:timer._fireDate]; else newTimers.splice(index, 1); } - + _timersForModes[aMode] = newTimers.concat(timers); } else _timersForModes[aMode] = timers; - + _nextTimerFireDatesForModes[aMode] = nextFireDate; - + //initiate a new window.setTimeout if there are any timers if (_nextTimerFireDatesForModes[aMode] !== nil) _nativeTimersForModes[aMode] = window.setNativeTimeout(function() { _effectiveDate = nextFireDate; _nativeTimersForModes[aMode] = nil; ++CPRunLoopLastNativeRunLoop; [self limitDateForMode:aMode]; _effectiveDate = nil; }, MAX(0, [nextFireDate timeIntervalSinceNow] * 1000)); } - + // Run loop performers var performs = _orderedPerforms, index = performs.length; - + _orderedPerforms = []; - + while (index--) { var perform = performs[index]; - + if ([perform fireInMode:CPDefaultRunLoopMode]) { [_CPRunLoopPerform _poolPerform:perform]; - + performs.splice(index, 1); } } - + if (_orderedPerforms.length) { _orderedPerforms = _orderedPerforms.concat(performs); @@ -402,9 +402,9 @@ var CPRunLoopLastNativeRunLoop = 0; } else _orderedPerforms = performs; - + _runLoopLock = NO; - + return nextFireDate; } diff --git a/Foundation/CPSet.j b/Foundation/CPSet.j index ad596c0fd..0a1e5f821 100644 --- a/Foundation/CPSet.j +++ b/Foundation/CPSet.j @@ -24,10 +24,10 @@ * TODO: Needs to implement CPCoding, CPCopying. */ -@import "CPObject.j" @import "CPArray.j" -@import "CPNumber.j" @import "CPEnumerator.j" +@import "CPNumber.j" +@import "CPObject.j" /*! @class CPSet @@ -87,7 +87,7 @@ argLength = arguments.length, i = 2; - for(; i < argLength && ((argument = arguments[i]) !== nil); ++i) + for (; i < argLength && ((argument = arguments[i]) !== nil); ++i) [set addObject:argument]; return set; @@ -155,7 +155,7 @@ var argLength = arguments.length, i = 2; - for(; i < argLength && (argument = arguments[i]) != nil; ++i) + for (; i < argLength && (argument = arguments[i]) != nil; ++i) [self addObject:argument]; } @@ -180,9 +180,10 @@ if (!aSet) return self; - var contents = aSet._contents; + var contents = aSet._contents, + property; - for (var property in contents) + for (property in contents) { if (contents.hasOwnProperty(property)) { @@ -201,9 +202,10 @@ */ - (CPArray)allObjects { - var array = []; + var array = [], + property; - for (var property in _contents) + for (property in _contents) { if (_contents.hasOwnProperty(property)) array.push(_contents[property]); @@ -217,7 +219,9 @@ */ - (id)anyObject { - for (var property in _contents) + var property; + + for (property in _contents) { if (_contents.hasOwnProperty(property)) return _contents[property]; @@ -288,8 +292,11 @@ */ - (BOOL)isSubsetOfSet:(CPSet)set { - var items = [self allObjects]; - for (var i = 0; i < items.length; i++) + var items = [self allObjects], + i = 0, + count = items.length; + + for (; i < count; i++) { // If at least one item is not in both sets, self isn't a subset if (![set containsObject:items[i]]) @@ -315,8 +322,11 @@ */ - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument { - var items = [self allObjects]; - for (var i = 0; i < items.length; i++) + var items = [self allObjects], + i = 0, + count = items.length; + + for (; i < count; i++) { [items[i] performSelector:aSelector withObject:argument]; } @@ -432,8 +442,11 @@ */ - (void)intersectSet:(CPSet)set { - var items = [self allObjects]; - for (var i = 0, count = items.length; i < count; i++) + var items = [self allObjects], + i = 0, + count = items.length; + + for (; i < count; i++) { if (![set containsObject:items[i]]) [self removeObject:items[i]]; @@ -446,8 +459,11 @@ */ - (void)minusSet:(CPSet)set { - var items = [set allObjects]; - for (var i = 0; i < items.length; i++) + var items = [set allObjects], + i = 0, + count = items.length; + + for (; i < count; i++) { if ([self containsObject:items[i]]) [self removeObject:items[i]]; @@ -460,8 +476,11 @@ */ - (void)unionSet:(CPSet)set { - var items = [set allObjects]; - for (var i = 0, count = items.length; i < count; i++) + var items = [set allObjects], + i = 0, + count = items.length; + + for (; i < count; i++) { [self addObject:items[i]]; } @@ -514,5 +533,5 @@ var CPSetObjectsKey = @"CPSetObjectsKey"; */ @implementation CPMutableSet : CPSet -@end +@end diff --git a/Foundation/CPSortDescriptor.j b/Foundation/CPSortDescriptor.j index c7d29f16a..8c246bd4c 100755 --- a/Foundation/CPSortDescriptor.j +++ b/Foundation/CPSortDescriptor.j @@ -43,7 +43,7 @@ CPOrderedSame = 0; */ CPOrderedDescending = 1; -/*! +/*! @class CPSortDescriptor @ingroup foundation @brief Holds attributes necessary to describe how to sort a set of objects. @@ -85,20 +85,20 @@ CPOrderedDescending = 1; Initializes the sort descriptor @param aKey the property key path to sort @param isAscending the sort order - @param aSelector this method gets called to compare objects. The method will take one argument + @param aSelector this method gets called to compare objects. The method will take one argument (the object to compare against itself, and must return a CPComparisonResult. */ - (id)initWithKey:(CPString)aKey ascending:(BOOL)isAscending selector:(SEL)aSelector { self = [super init]; - + if (self) { _key = aKey; _ascending = isAscending; _selector = aSelector; } - + return self; } @@ -150,9 +150,9 @@ CPOrderedDescending = 1; @end -var CPSortDescriptorKeyKey = @"CPSortDescriptorKeyKey", // Don't you just love naming schemes ;) - CPSortDescriptorAscendingKey = @"CPSortDescriptorAscendingKey", - CPSortDescriptorSelectorKey = @"CPSortDescriptorSelectorKey"; +var CPSortDescriptorKeyKey = @"CPSortDescriptorKeyKey", // Don't you just love naming schemes ;) + CPSortDescriptorAscendingKey = @"CPSortDescriptorAscendingKey", + CPSortDescriptorSelectorKey = @"CPSortDescriptorSelectorKey"; @implementation CPSortDescriptor (CPCoding) @@ -164,7 +164,7 @@ var CPSortDescriptorKeyKey = @"CPSortDescriptorKeyKey", // Don't you just love n _ascending = [aCoder decodeBoolForKey:CPSortDescriptorAscendingKey]; _selector = CPSelectorFromString([aCoder decodeObjectForKey:CPSortDescriptorSelectorKey]); } - + return self; } @@ -176,4 +176,3 @@ var CPSortDescriptorKeyKey = @"CPSortDescriptorKeyKey", // Don't you just love n } @end - diff --git a/Foundation/CPString.j b/Foundation/CPString.j index 51154a43c..abbe70c2d 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -20,8 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" @import "CPException.j" +@import "CPObject.j" @import "CPSortDescriptor.j" @import "CPValue.j" @@ -65,7 +65,7 @@ var CPStringRegexSpecialCharacters = [ CPStringRegexEscapeExpression = new RegExp("(\\" + CPStringRegexSpecialCharacters.join("|\\") + ")", 'g'), CPStringRegexTrimWhitespace = new RegExp("(^\\s+|\\s+$)", 'g'); -/*! +/*! @class CPString @ingroup foundation @brief An immutable string (collection of characters). @@ -103,7 +103,7 @@ var CPStringRegexSpecialCharacters = [ + (id)stringWithHash:(unsigned)aHash { var hashString = parseInt(aHash, 10).toString(16); - return "000000".substring(0, MAX(6-hashString.length, 0)) + hashString; + return "000000".substring(0, MAX(6 - hashString.length, 0)) + hashString; } /*! @@ -147,7 +147,7 @@ var CPStringRegexSpecialCharacters = [ } /*! - Creates a new string using C printf-style formatting. First argument should be a constant format string, + Creates a new string using C printf-style formatting. First argument should be a constant format string, like ' "float val = %f" ', remaining arguments should be the variables to print the values of, comma-separated. @param format the format to be used, printf-style @return the initialized CPString @@ -238,8 +238,8 @@ var CPStringRegexSpecialCharacters = [ while ((difference -= substring.length) >= 0) string += substring; - - if (-difference < substring.length) + + if (-difference < substring.length) string += substring.substring(0, -difference); return string; @@ -329,7 +329,7 @@ var CPStringRegexSpecialCharacters = [ /*! Finds the range of characters in the receiver - where the specified string exists in the given range + where the specified string exists in the given range of the receiver.The search is subject to the options specified in the specified mask which can be a combination of:
@@ -374,7 +374,7 @@ var CPStringRegexSpecialCharacters = [
 }
 
 /*!
-    Returns a new string in which all occurrences of a target string in the reciever are replaced by 
+    Returns a new string in which all occurrences of a target string in the reciever are replaced by
     another given string.
     @param target The string to replace.
     @param replacement the string with which to replace the \c target
@@ -403,7 +403,7 @@ var CPStringRegexSpecialCharacters = [
         regExp;
 
     if (options & CPCaseInsensitiveSearch)
-        regExp = new RegExp(target, "gi"); 
+        regExp = new RegExp(target, "gi");
     else
         regExp = new RegExp(target, "g");
 
@@ -411,7 +411,7 @@ var CPStringRegexSpecialCharacters = [
 }
 
 /*
-   Returns a new string in which the characters in a specified range of the receiver 
+   Returns a new string in which the characters in a specified range of the receiver
    are replaced by a given string.
    @param range A range of characters in the receiver.
    @param replacement The string with which to replace the characters in \c range.
@@ -442,7 +442,6 @@ var CPStringRegexSpecialCharacters = [
     return [self compare:aString options:nil];
 }
 
-
 /*
     Compares the receiver to the specified string.
     @param aString the string with which to compare
@@ -463,18 +462,18 @@ var CPStringRegexSpecialCharacters = [
 {
     var lhs = self,
         rhs = aString;
-    
+
     if (aMask & CPCaseInsensitiveSearch)
     {
         lhs = lhs.toLowerCase();
         rhs = rhs.toLowerCase();
     }
-    
+
     if (lhs < rhs)
         return CPOrderedAscending;
     else if (lhs > rhs)
         return CPOrderedDescending;
-    
+
     return CPOrderedSame;
 }
 
@@ -559,7 +558,7 @@ var CPStringRegexSpecialCharacters = [
         lhs = self,
         rhs = aString,
         min = MIN([lhs length], [rhs length]);
-    
+
     if (aMask & CPCaseInsensitiveSearch)
     {
         lhs = [lhs lowercaseString];
@@ -580,10 +579,13 @@ var CPStringRegexSpecialCharacters = [
 */
 - (CPString)capitalizedString
 {
-    var parts = self.split(/\b/g); // split on word boundaries
-    for (var i = 0; i < parts.length; i++)
+    var parts = self.split(/\b/g), // split on word boundaries
+        i = 0,
+        count = parts.length;
+
+    for (; i < count; i++)
     {
-        if (i == 0 || (/\s$/).test(parts[i-1])) // only capitalize if previous token was whitespace
+        if (i == 0 || (/\s$/).test(parts[i - 1])) // only capitalize if previous token was whitespace
             parts[i] = parts[i].substring(0, 1).toUpperCase() + parts[i].substring(1).toLowerCase();
         else
             parts[i] = parts[i].toLowerCase();
@@ -615,8 +617,8 @@ var CPStringRegexSpecialCharacters = [
     return parseFloat(self, 10);
 }
 /*!
-    Returns \c YES on encountering one of "Y", "y", "T", "t", or 
-    a digit 1-9. Returns \c NO otherwise. This method skips the initial 
+    Returns \c YES on encountering one of "Y", "y", "T", "t", or
+    a digit 1-9. Returns \c NO otherwise. This method skips the initial
     whitespace characters, +,- followed by Zeroes.
 */
 
@@ -678,7 +680,7 @@ var CPStringRegexSpecialCharacters = [
 - (CPString)lastPathComponent
 {
     var components = [self pathComponents];
-    return components[components.length -1];
+    return components[components.length - 1];
 }
 
 /*!
@@ -690,12 +692,12 @@ var CPStringRegexSpecialCharacters = [
 {
     var path = self,
         start = length - 1;
-    
+
     while (path.charAt(start) === '/')
         start--;
-    
+
     path = path.substr(0, path.lastIndexOf('/', start));
-    
+
     if (path === "" && charAt(0) === '/')
         return '/';
 
@@ -758,11 +760,12 @@ var CPStringRegexSpecialCharacters = [
 */
 + (CPString)UUID
 {
-    var g = @"";
-    
-    for(var i = 0; i < 32; i++)
+    var g = @"",
+        i = 0;
+
+    for (; i < 32; i++)
         g += FLOOR(RAND() * 0xF).toString(0xF);
-    
+
     return g;
 }
 
diff --git a/Foundation/CPTimer.j b/Foundation/CPTimer.j
index e1ec83ce5..6e14ba46a 100644
--- a/Foundation/CPTimer.j
+++ b/Foundation/CPTimer.j
@@ -20,13 +20,14 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-@import "CPObject.j"
-@import "CPInvocation.j"
 @import "CPDate.j"
+@import "CPInvocation.j"
+@import "CPObject.j"
 @import "CPRunLoop.j"
 
+
 /*!
-    @class CPTimer 
+    @class CPTimer
     @ingroup foundation
 
     @brief A timer object that can send a message after the given time interval.
@@ -36,7 +37,7 @@
     CPTimeInterval      _timeInterval;
     CPInvocation        _invocation;
     Function            _callback;
-    
+
     BOOL                _repeats;
     BOOL                _isValid;
     CPDate              _fireDate;
@@ -46,13 +47,13 @@
 /*!
     Returns a new NSTimer object and adds it to the current NSRunLoop object in the default mode.
 */
-+ (CPTimer)scheduledTimerWithTimeInterval:(CPTimeInterval)seconds invocation:(CPInvocation)anInvocation repeats:(BOOL)shouldRepeat 
++ (CPTimer)scheduledTimerWithTimeInterval:(CPTimeInterval)seconds invocation:(CPInvocation)anInvocation repeats:(BOOL)shouldRepeat
 {
     var timer = [[self alloc] initWithFireDate:[CPDate dateWithTimeIntervalSinceNow:seconds] interval:seconds invocation:anInvocation repeats:shouldRepeat];
 
     //add to the runloop
     [[CPRunLoop currentRunLoop] addTimer:timer forMode:CPDefaultRunLoopMode];
-    
+
     return timer;
 }
 
@@ -65,27 +66,27 @@
 
     //add to the runloop
     [[CPRunLoop currentRunLoop] addTimer:timer forMode:CPDefaultRunLoopMode];
-        
+
     return timer;
 }
 
 /*!
     Returns a new NSTimer object and adds it to the current NSRunLoop object in the default mode.
 */
-+ (CPTimer)scheduledTimerWithTimeInterval:(CPTimeInterval)seconds callback:(Function)aFunction repeats:(BOOL)shouldRepeat 
++ (CPTimer)scheduledTimerWithTimeInterval:(CPTimeInterval)seconds callback:(Function)aFunction repeats:(BOOL)shouldRepeat
 {
     var timer = [[self alloc] initWithFireDate:[CPDate dateWithTimeIntervalSinceNow:seconds] interval:seconds callback:aFunction repeats:shouldRepeat];
 
     //add to the runloop
     [[CPRunLoop currentRunLoop] addTimer:timer forMode:CPDefaultRunLoopMode];
-    
+
     return timer;
 }
 
 /*!
     Returns a new NSTimer that, when added to a run loop, will fire after seconds.
 */
-+ (CPTimer)timerWithTimeInterval:(CPTimeInterval)seconds invocation:(CPInvocation)anInvocation repeats:(BOOL)shouldRepeat 
++ (CPTimer)timerWithTimeInterval:(CPTimeInterval)seconds invocation:(CPInvocation)anInvocation repeats:(BOOL)shouldRepeat
 {
     return [[self alloc] initWithFireDate:[CPDate dateWithTimeIntervalSinceNow:seconds] interval:seconds invocation:anInvocation repeats:shouldRepeat];
 }
@@ -101,7 +102,7 @@
 /*!
     Returns a new NSTimer that, when added to a run loop, will fire after seconds.
 */
-+ (CPTimer)timerWithTimeInterval:(CPTimeInterval)seconds callback:(Function)aFunction repeats:(BOOL)shouldRepeat 
++ (CPTimer)timerWithTimeInterval:(CPTimeInterval)seconds callback:(Function)aFunction repeats:(BOOL)shouldRepeat
 {
     return [[self alloc] initWithFireDate:[CPDate dateWithTimeIntervalSinceNow:seconds] interval:seconds callback:aFunction repeats:shouldRepeat];
 }
@@ -112,8 +113,8 @@
 - (id)initWithFireDate:(CPDate)aDate interval:(CPTimeInterval)seconds invocation:(CPInvocation)anInvocation repeats:(BOOL)shouldRepeat
 {
     self = [super init];
-    
-    if (self) 
+
+    if (self)
     {
         _timeInterval = seconds;
         _invocation = anInvocation;
@@ -121,7 +122,7 @@
         _isValid = YES;
         _fireDate = aDate;
     }
-    
+
     return self;
 }
 
@@ -131,16 +132,16 @@
 - (id)initWithFireDate:(CPDate)aDate interval:(CPTimeInterval)seconds target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)shouldRepeat
 {
     var invocation = [CPInvocation invocationWithMethodSignature:1];
-    
+
     [invocation setTarget:aTarget];
     [invocation setSelector:aSelector];
     [invocation setArgument:self atIndex:2];
-    
+
     self = [self initWithFireDate:aDate interval:seconds invocation:invocation repeats:shouldRepeat];
 
     if (self)
         _userInfo = userInfo;
-        
+
     return self;
 }
 
@@ -150,8 +151,8 @@
 - (id)initWithFireDate:(CPDate)aDate interval:(CPTimeInterval)seconds callback:(Function)aFunction repeats:(BOOL)shouldRepeat
 {
     self = [super init];
-    
-    if (self) 
+
+    if (self)
     {
         _timeInterval = seconds;
         _callback = aFunction;
@@ -159,14 +160,14 @@
         _isValid = YES;
         _fireDate = aDate;
     }
-    
+
     return self;
 }
 
 /*!
     Returns the receiver’s time interval.
 */
-- (CPTimeInterval)timeInterval 
+- (CPTimeInterval)timeInterval
 {
    return _timeInterval;
 }
@@ -174,15 +175,15 @@
 /*!
     Returns the date at which the receiver will fire.
 */
-- (CPDate)fireDate 
+- (CPDate)fireDate
 {
-   return _fireDate;  
+   return _fireDate;
 }
 
 /*!
     Resets the receiver to fire next at a given date.
 */
-- (void)setFireDate:(CPDate)aDate 
+- (void)setFireDate:(CPDate)aDate
 {
     _fireDate = aDate;
 }
@@ -205,7 +206,7 @@
 
     if (_repeats)
         _fireDate = [CPDate dateWithTimeIntervalSinceNow:_timeInterval];
-    
+
     else
         [self invalidate];
 }
@@ -213,7 +214,7 @@
 /*!
     Returns a Boolean value that indicates whether the receiver is currently valid.
 */
-- (BOOL)isValid 
+- (BOOL)isValid
 {
    return _isValid;
 }
@@ -221,7 +222,7 @@
 /*!
     Stops the receiver from ever firing again and requests its removal from its NSRunLoop object.
 */
-- (void)invalidate 
+- (void)invalidate
 {
    _isValid = NO;
    _userInfo = nil;
@@ -246,14 +247,14 @@ var _CPTimerBridgeTimer = function(codeOrFunction, aDelay, shouldRepeat, functio
 {
     var timeoutID = CPTimersTimeoutID++,
         theFunction = nil;
-        
+
     if (typeof codeOrFunction === "string")
         theFunction = function() { new Function(codeOrFunction)(); if (!shouldRepeat) CPTimersForTimeoutIDs[timeoutID] = nil; }
     else
     {
         if (!functionArgs)
             functionArgs = [];
-        
+
         theFunction = function() { codeOrFunction.apply(window, functionArgs); if (!shouldRepeat) CPTimersForTimeoutIDs[timeoutID] = nil; }
     }
 
@@ -270,10 +271,10 @@ window.setTimeout = function(codeOrFunction, aDelay)
 window.clearTimeout = function(aTimeoutID)
 {
     var timer = CPTimersForTimeoutIDs[aTimeoutID];
-    
+
     if (timer)
         [timer invalidate];
-        
+
     CPTimersForTimeoutIDs[aTimeoutID] = nil;
 }
 
diff --git a/Foundation/CPURL.j b/Foundation/CPURL.j
index dc240fbaa..1486baad3 100644
--- a/Foundation/CPURL.j
+++ b/Foundation/CPURL.j
@@ -1,5 +1,26 @@
+/*
+ * CPURL.j
+ * Foundation
+ *
+ * Created by Francisco Tolmasky.
+ * Copyright 2008, 280 North, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
 
-@import 
+@import "CPObject.j"
 
 CPURLNameKey                        = @"CPURLNameKey";
 CPURLLocalizedNameKey               = @"CPURLLocalizedNameKey";
@@ -44,7 +65,7 @@ CPURLCustomIconKey                  = @"CPURLCustomIconKey";
 - (id)initWithScheme:(CPString)aScheme host:(CPString)aHost path:(CPString)aPath
 {
     var URLString = (aScheme ? aScheme + ":" : "") + (aHost ? aHost + "//" : "") + (aPath || "");
-    
+
     return [self initWithString:URLString];
 }
 
diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j
index 368173e34..d6f260226 100644
--- a/Foundation/CPURLConnection.j
+++ b/Foundation/CPURLConnection.j
@@ -31,45 +31,45 @@ var CPURLConnectionDelegate = nil;
 /*!
     @class CPURLConnection
     @ingroup foundation
-    @brief Provides loading of a URL request. 
+    @brief Provides loading of a URL request.
 
     An interface to downloading content at a specified URL. Using one of the
     class methods, you can obtain the data.
-    
+
     @delegate -(void)connection:(CPURLConnection)connection didFailWithError:(id)error;
     Called when the connection encounters an error.
     @param connection the connection that had an error
     @param error the error, which is either a javascript DOMException or an http
     status code (javascript number/CPNumber)
-    
+
     @delegate -(void)connection:(CPURLConnection)connection didReceiveResponse:(CPHTTPURLResponse)response;
     Called when the connection receives a response.
     @param connection the connection that received a response
     @param response the received response
-    
+
     @delegate -(void)connection:(CPURLConnection)connection didReceiveData:(CPString)data;
     Called when the connection has received data.
     @param connection the connection that received data
     @param data the received data
-    
+
     @delegate -(void)connectionDidFinishLoading:(CPURLConnection)connection;
     Called when the URL has finished loading.
     @param connection the connection that finished loading
-    
+
     Class Delegate Method:
-    
+
     @delegate -(void)connectionDidReceiveAuthenticationChallenge:(id)connection
     The class delegate allows you to set global behavior for when authentication challenges (401 status codes) are returned.
-    
+
     The recommended way to handle this method is to store a reference to the connection, and then use whatever
-    method you have to authenticate yourself.  Once you've authenticated yourself, you should cancel 
+    method you have to authenticate yourself.  Once you've authenticated yourself, you should cancel
     and then start the connection:
-    
+
 
 [connection cancel];
 [connection start];
 
- + @param connection the connection that received the authentication challenge. */ @implementation CPURLConnection : CPObject @@ -116,7 +116,7 @@ var CPURLConnectionDelegate = nil; catch (anException) { } - + return nil; } @@ -141,13 +141,13 @@ var CPURLConnectionDelegate = nil; - (id)initWithRequest:(CPURLRequest)aRequest delegate:(id)aDelegate startImmediately:(BOOL)shouldStartImmediately { self = [super init]; - + if (self) { _request = aRequest; _delegate = aDelegate; _isCanceled = NO; - + var URL = [_request URL], scheme = [URL scheme]; @@ -187,7 +187,7 @@ var CPURLConnectionDelegate = nil; _isCanceled = NO; try - { + { _HTTPRequest.open([_request HTTPMethod], [[_request URL] absoluteString], YES); _HTTPRequest.onreadystatechange = function() { [self _readyStateDidChange]; } @@ -214,7 +214,7 @@ var CPURLConnectionDelegate = nil; - (void)cancel { _isCanceled = YES; - + try { _HTTPRequest.abort(); @@ -240,10 +240,10 @@ var CPURLConnectionDelegate = nil; if (statusCode === 401 && [CPURLConnectionDelegate respondsToSelector:@selector(connectionDidReceiveAuthenticationChallenge:)]) [CPURLConnectionDelegate connectionDidReceiveAuthenticationChallenge:self]; - else + else { if ([_delegate respondsToSelector:@selector(connection:didReceiveResponse:)]) - { + { if (_isLocalFileConnection) [_delegate connection:self didReceiveResponse:[[CPURLResponse alloc] initWithURL:URL]]; else @@ -290,4 +290,4 @@ var CPURLConnectionDelegate = nil; return [self _HTTPRequest]; } -@end \ No newline at end of file +@end diff --git a/Foundation/CPURLRequest.j b/Foundation/CPURLRequest.j index b18b9bd81..28b4e4dc4 100644 --- a/Foundation/CPURLRequest.j +++ b/Foundation/CPURLRequest.j @@ -23,7 +23,7 @@ @import "CPObject.j" -/*! +/*! @class CPURLRequest @ingroup foundation @brief Contains data obtained during a request made with CPURLConnection. @@ -34,7 +34,7 @@ @implementation CPURLRequest : CPObject { CPURL _URL; - + // FIXME: this should be CPData CPString _HTTPBody; CPString _HTTPMethod; @@ -59,7 +59,7 @@ - (id)initWithURL:(CPURL)aURL { self = [super init]; - + if (self) { [self setURL:aURL]; @@ -67,12 +67,12 @@ _HTTPBody = @""; _HTTPMethod = @"GET"; _HTTPHeaderFields = [CPDictionary dictionary]; - + [self setValue:"Thu, 01 Jan 1970 00:00:00 GMT" forHTTPHeaderField:"If-Modified-Since"]; [self setValue:"no-cache" forHTTPHeaderField:"Cache-Control"]; [self setValue:"XMLHttpRequest" forHTTPHeaderField:"X-Requested-With"]; } - + return self; } diff --git a/Foundation/CPURLResponse.j b/Foundation/CPURLResponse.j index ed524d940..6d0c0bf5e 100644 --- a/Foundation/CPURLResponse.j +++ b/Foundation/CPURLResponse.j @@ -44,10 +44,10 @@ - (id)initWithURL:(CPURL)aURL { self = [super init]; - + if (self) _URL = aURL; - + return self; } @@ -57,13 +57,13 @@ } /* Creating a Response -initWithURL:MIMEType:expectedContentLength:textEncodingName: +initWithURL:MIMEType:expectedContentLength:textEncodingName: Getting the Response Properties -expectedContentLength -suggestedFilename -MIMEType -textEncodingName -URL +expectedContentLength +suggestedFilename +MIMEType +textEncodingName +URL */ @end diff --git a/Foundation/CPUndoManager.j b/Foundation/CPUndoManager.j index 94b9f6516..f07247589 100644 --- a/Foundation/CPUndoManager.j +++ b/Foundation/CPUndoManager.j @@ -20,15 +20,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" @import "CPInvocation.j" +@import "CPObject.j" @import "CPProxy.j" var CPUndoManagerNormal = 0, CPUndoManagerUndoing = 1, CPUndoManagerRedoing = 2; - + CPUndoManagerCheckpointNotification = @"CPUndoManagerCheckpointNotification"; CPUndoManagerDidOpenUndoGroupNotification = @"CPUndoManagerDidOpenUndoGroupNotification"; CPUndoManagerDidRedoChangeNotification = @"CPUndoManagerDidRedoChangeNotification"; @@ -53,7 +53,7 @@ var _CPUndoGroupingPool = [], { if (!anUndoGrouping || _CPUndoGroupingPool.length >= _CPUndoGroupingPoolCapacity) return; - + _CPUndoGroupingPool.push(anUndoGrouping); } @@ -62,28 +62,28 @@ var _CPUndoGroupingPool = [], if (_CPUndoGroupingPool.length) { var grouping = _CPUndoGroupingPool.pop(); - + grouping._parent = anUndoGrouping; - + if (grouping._invocations.length) grouping._invocations = []; - + return grouping; } - + return [[self alloc] initWithParent:anUndoGrouping]; } - (id)initWithParent:(_CPUndoGrouping)anUndoGrouping { self = [super init]; - + if (self) { _parent = anUndoGrouping; _invocations = []; } - + return self; } @@ -134,13 +134,13 @@ var _CPUndoGroupingParentKey = @"_CPUndoGroupingParentKey", - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) { _parent = [aCoder decodeObjectForKey:_CPUndoGroupingParentKey]; _invocations = [aCoder decodeObjectForKey:_CPUndoGroupingInvocationsKey]; } - + return self; } @@ -152,7 +152,7 @@ var _CPUndoGroupingParentKey = @"_CPUndoGroupingParentKey", @end -/*! +/*! @class CPUndoManager @ingroup foundation @brief A general mechanism for user action "undo". @@ -193,21 +193,21 @@ var _CPUndoGroupingParentKey = @"_CPUndoGroupingParentKey", - (id)init { self = [super init]; - + if (self) { _redoStack = []; _undoStack = []; - + _state = CPUndoManagerNormal; - + [self setRunLoopModes:[CPDefaultRunLoopMode]]; [self setGroupsByEvent:YES]; _undoManagerProxy = [_CPUndoManagerProxy alloc]; _undoManagerProxy._undoManager = self; } - + return self; } @@ -258,7 +258,7 @@ var _CPUndoGroupingParentKey = @"_CPUndoGroupingParentKey", - (id)prepareWithInvocationTarget:(id)aTarget { _preparedTarget = aTarget; - + return _undoManagerProxy; } @@ -270,7 +270,7 @@ var _CPUndoGroupingParentKey = @"_CPUndoGroupingParentKey", { if ([_preparedTarget respondsToSelector:aSelector]) return 1; - + return nil;//[_preparedTarget methodSignatureForSelector:selector]; } @@ -337,7 +337,7 @@ if (_currentGroup == nil) Performs an undo on the last undo group. */ - (void)undoNestedGroup -{ +{ if ([_undoStack count] <= 0) return; @@ -373,7 +373,7 @@ if (_currentGroup == nil) // Don't do anything if we have no redos. if ([_redoStack count] <= 0) return; - + /* if (_state == NSUndoManagerUndoing) [NSException raise:NSInternalInconsistencyException format:@"redo called while undoing"]; @@ -386,19 +386,19 @@ if (_currentGroup == nil) [defaultCenter postNotificationName:CPUndoManagerWillRedoChangeNotification object:self]; - + var oldUndoGrouping = _currentGrouping, undoGrouping = _redoStack.pop(); - + _currentGrouping = nil; _state = CPUndoManagerRedoing; [self _beginUndoGrouping]; [undoGrouping invoke]; [self endUndoGrouping]; - + [_CPUndoGrouping _poolUndoGrouping:undoGrouping]; - + _currentGrouping = oldUndoGrouping; _state = CPUndoManagerNormal; @@ -452,31 +452,31 @@ if (_currentGroup == nil) object:self]; var parent = [_currentGrouping parent]; - + if (!parent && [_currentGrouping invocations].length > 0) { [defaultCenter postNotificationName:CPUndoManagerWillCloseUndoGroupNotification object:self]; - + // Put this group on the redo stack if we are currently undoing, otherwise // put it on the undo stack. That way, "undos" become "redos". var stack = _state === CPUndoManagerUndoing ? _redoStack : _undoStack; - + stack.push(_currentGrouping); - + if (_levelsOfUndo > 0 && stack.length > _levelsOfUndo) - stack.splice(0, 1); + stack.splice(0, 1); } - + // Nested Undo Grouping else { [parent addInvocationsFromArray:[_currentGrouping invocations]]; - + [_CPUndoGrouping _poolUndoGrouping:_currentGrouping]; } - + _currentGrouping = parent; } @@ -491,7 +491,7 @@ if (_currentGroup == nil) if (_disableCount <= 0) [CPException raise:CPInternalInconsistencyException reason:"enableUndoRegistration. There are no disable messages in effect right now."]; - + _disableCount--; } @@ -527,10 +527,10 @@ if (_currentGroup == nil) { var grouping = _currentGrouping, level = _currentGrouping != nil; - + while (grouping = [grouping parent]) ++level; - + return level; } @@ -586,27 +586,27 @@ if (_currentGroup == nil) - (void)removeAllActionsWithTarget:(id)aTarget { [_currentGrouping removeInvocationsWithTarget:aTarget]; - + var index = _redoStack.length; - + while (index--) { var grouping = _redoStack[index]; - + [grouping removeInvocationsWithTarget:aTarget]; - + if (![grouping invocations].length) _redoStack.splice(index, 1); } index = _undoStack.length; - + while (index--) { var grouping = _undoStack[index]; - + [grouping removeInvocationsWithTarget:aTarget]; - + if (![grouping invocations].length) _undoStack.splice(index, 1); } @@ -739,7 +739,7 @@ var CPUndoManagerRedoStackKey = @"CPUndoManagerRedoStackKey", CPUndoManagerLevelsOfUndoKey = @"CPUndoManagerLevelsOfUndoKey"; CPUndoManagerActionNameKey = @"CPUndoManagerActionNameKey"; CPUndoManagerCurrentGroupingKey = @"CPUndoManagerCurrentGroupingKey"; - + CPUndoManagerRunLoopModesKey = @"CPUndoManagerRunLoopModesKey"; CPUndoManagerGroupsByEventKey = @"CPUndoManagerGroupsByEventKey"; @@ -748,22 +748,22 @@ var CPUndoManagerRedoStackKey = @"CPUndoManagerRedoStackKey", - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) { _redoStack = [aCoder decodeObjectForKey:CPUndoManagerRedoStackKey]; _undoStack = [aCoder decodeObjectForKey:CPUndoManagerUndoStackKey]; - + _levelsOfUndo = [aCoder decodeObjectForKey:CPUndoManagerLevelsOfUndoKey]; _actionName = [aCoder decodeObjectForKey:CPUndoManagerActionNameKey]; _currentGrouping = [aCoder decodeObjectForKey:CPUndoManagerCurrentGroupingKey]; - + _state = CPUndoManagerNormal; - + [self setRunLoopModes:[aCoder decodeObjectForKey:CPUndoManagerRunLoopModesKey]]; [self setGroupsByEvent:[aCoder decodeBoolForKey:CPUndoManagerGroupsByEventKey]]; } - + return self; } @@ -771,10 +771,10 @@ var CPUndoManagerRedoStackKey = @"CPUndoManagerRedoStackKey", { [aCoder encodeObject:_redoStack forKey:CPUndoManagerRedoStackKey]; [aCoder encodeObject:_undoStack forKey:CPUndoManagerUndoStackKey]; - + [aCoder encodeInt:_levelsOfUndo forKey:CPUndoManagerLevelsOfUndoKey]; [aCoder encodeObject:_actionName forKey:CPUndoManagerActionNameKey]; - + [aCoder encodeObject:_currentGrouping forKey:CPUndoManagerCurrentGroupingKey]; [aCoder encodeObject:_runLoopModes forKey:CPUndoManagerRunLoopModesKey]; diff --git a/Foundation/CPUserSessionManager.j b/Foundation/CPUserSessionManager.j index b15d1e916..5feca31ff 100644 --- a/Foundation/CPUserSessionManager.j +++ b/Foundation/CPUserSessionManager.j @@ -20,8 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import -@import +@import "CPObject.j" +@import "CPString.j" CPUserSessionUndeterminedStatus = 0; @@ -36,7 +36,7 @@ var CPDefaultUserSessionManager = nil; @implementation CPUserSessionManager : CPObject { CPUserSessionStatus _status; - + CPString _userIdentifier; } @@ -51,10 +51,10 @@ var CPDefaultUserSessionManager = nil; - (id)init { self = [super init]; - + if (self) _status = CPUserSessionUndeterminedStatus; - + return self; } @@ -67,9 +67,9 @@ var CPDefaultUserSessionManager = nil; { if (_status == aStatus) return; - + _status = aStatus; - + [[CPNotificationCenter defaultCenter] postNotificationName:CPUserSessionManagerStatusDidChangeNotification object:self]; @@ -87,9 +87,9 @@ var CPDefaultUserSessionManager = nil; { if (_userIdentifier == anIdentifier) return; - + _userIdentifier = anIdentifier; - + [[CPNotificationCenter defaultCenter] postNotificationName:CPUserSessionManagerUserIdentifierDidChangeNotification object:self]; diff --git a/Foundation/CPValue.j b/Foundation/CPValue.j index 1c6de7a92..70ea751ad 100644 --- a/Foundation/CPValue.j +++ b/Foundation/CPValue.j @@ -20,11 +20,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import "CPObject.j" @import "CPCoder.j" +@import "CPObject.j" -/*! +/*! @class CPValue @ingroup foundation @brief A generic "value". Can be subclassed to hold specific data types. @@ -54,10 +54,10 @@ - (id)initWithJSObject:(JSObject)aJSObject { self = [super init]; - + if (self) _JSObject = aJSObject; - + return self; } @@ -83,7 +83,7 @@ var CPValueValueKey = @"CPValueValueKey"; - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) _JSObject = JSON.parse([aCoder decodeObjectForKey:CPValueValueKey]); diff --git a/Foundation/CPWebDAVManager.j b/Foundation/CPWebDAVManager.j index fb17b72a2..6b821fb08 100644 --- a/Foundation/CPWebDAVManager.j +++ b/Foundation/CPWebDAVManager.j @@ -1,3 +1,24 @@ +/* + * CPWebDAVManager.j + * Foundation + * + * Created by Francisco Tolmasky. + * Copyright 2008, 280 North, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ var setURLResourceValuesForKeysFromProperties = function(aURL, keys, properties) { From 0062caafdf831dec26194c0891440e1b27f4958a Mon Sep 17 00:00:00 2001 From: cacaodev Date: Wed, 26 May 2010 17:47:01 +0200 Subject: [PATCH 058/124] CPObject -implementsSelector: --- Foundation/CPObject.j | 17 +++++++++++++ Tests/Foundation/CPObjectTest.j | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 Tests/Foundation/CPObjectTest.j diff --git a/Foundation/CPObject.j b/Foundation/CPObject.j index fece4e8f6..c518f4f70 100644 --- a/Foundation/CPObject.j +++ b/Foundation/CPObject.j @@ -231,6 +231,23 @@ CPLog(@"Got some class: %@", inst); return !!class_getInstanceMethod(isa, aSelector); } +/*! + Tests whether the receiver implements to the provided selector regardless of inheritance. + @param aSelector the selector for which to test the receiver + @return \c YES if the receiver implements the selector +*/ +- (BOOL)implementsSelector:(SEL)aSelector +{ + var methods = class_copyMethodList(isa), + count = methods.length; + + while (count--) + if (method_getName(methods[count]) === aSelector) + return YES; + + return NO; +} + // Obtaining method information /*! diff --git a/Tests/Foundation/CPObjectTest.j b/Tests/Foundation/CPObjectTest.j new file mode 100644 index 000000000..729e01c9e --- /dev/null +++ b/Tests/Foundation/CPObjectTest.j @@ -0,0 +1,45 @@ +@import + +@implementation CPObjectTest : OJTestCase +{ +} + +- (void)testImplementsSelector +{ + var receiver = [[Receiver alloc] init]; + + [self assertTrue:[receiver implementsSelector:@selector(implementedInReceiverAndSuper)]]; + [self assertTrue:[receiver implementsSelector:@selector(implementedInReceiverOnly)]]; + + [self assertFalse:[receiver implementsSelector:@selector(implementedInSuperOnly)]]; + [self assertFalse:[receiver implementsSelector:@selector(notImplementedInSuperNorReceiver)]]; + +} + +@end + +@implementation SuperReceiver : CPObject +{ +} + +- (void)implementedInReceiverAndSuper +{ +} + +- (void)implementedInSuperOnly +{ +} +@end + +@implementation Receiver : SuperReceiver +{ +} + +- (void)implementedInReceiverAndSuper +{ +} + +- (void)implementedInReceiverOnly +{ +} +@end From ed9c6d79590d23f82d2d399480a499e80c49676b Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 20 Nov 2009 23:31:36 -0300 Subject: [PATCH 059/124] Added reverse sort tests for CPArray insertObject:inArraySortedByDescriptors:. --- Tests/Foundation/CPArrayTest.j | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j index 75cc9cf01..ebd2b1e78 100644 --- a/Tests/Foundation/CPArrayTest.j +++ b/Tests/Foundation/CPArrayTest.j @@ -207,6 +207,33 @@ array = []; [array insertObject: 3 inArraySortedByDescriptors:descriptors]; [self assert:[3] equals:array]; + + descriptors = [[[CPSortDescriptor alloc] initWithKey:@"intValue" ascending:NO]]; + + array = [5, 3, 1]; + [array insertObject: 0 inArraySortedByDescriptors:descriptors]; + [self assert:[5, 3, 1, 0] equals:array]; + + array = [5, 3, 1]; + [array insertObject: 2 inArraySortedByDescriptors:descriptors]; + [self assert:[5, 3, 2, 1] equals:array]; + + array = [5, 3, 1]; + [array insertObject: 1 inArraySortedByDescriptors:descriptors]; + [self assert:[5, 3, 1, 1] equals:array]; + + array = [5, 3, 1]; + [array insertObject: 6 inArraySortedByDescriptors:descriptors]; + [self assert:[6, 5, 3, 1] equals:array]; + + array = [5, 3, 1]; + [array insertObject: 3 inArraySortedByDescriptors:descriptors]; + [self assert:[5, 3, 3, 1] equals:array]; + + array = []; + [array insertObject: 3 inArraySortedByDescriptors:descriptors]; + [self assert:[3] equals:array]; + } - (void)testInitWithArrayCopyItems From 573444e640a9e87c463f76efb0b196cc85d148da Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 10 Dec 2009 13:49:36 +0100 Subject: [PATCH 060/124] Removed a bindings console.log statement incompatible with browsers without a debug console. --- AppKit/CPTableColumn.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index b1720cf56..ff1b1152f 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -416,7 +416,7 @@ CPTableColumnUserResizingMask = 1 << 1; bindingInfo = [bindingsDictionary objectForKey:bindingName]._info, destination = [bindingInfo objectForKey:CPObservedObjectKey], keyPath = [bindingInfo objectForKey:CPObservedKeyPathKey]; - console.log(bindingName+" : "+keyPath+" : "+aRow+" : "+[[destination valueForKeyPath:keyPath] objectAtIndex:aRow]); + // console.log(bindingName+" : "+keyPath+" : "+aRow+" : "+[[destination valueForKeyPath:keyPath] objectAtIndex:aRow]); [aDataView setValue:[[destination valueForKeyPath:keyPath] objectAtIndex:aRow] forKey:bindingPath]; } } From 341a42bddd54eb1fefcd7afa91b2e8df854f7835 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 30 Jan 2010 18:31:51 -0300 Subject: [PATCH 061/124] DataSource delegate method tableView:objectValueForTableColumn:row is optional if bindings are used to provide data for the table view. --- AppKit/CPTableView.j | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 88fe5d5cb..706162f16 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -35,8 +35,9 @@ CPTableViewSelectionIsChangingNotification = @"CPTableViewSelectionIsChangingNo #include "CoreGraphics/CGGeometry.h" -var CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, - +var CPTableViewDataSource_numberOfRowsInTableView_ = 1 << 0, + CPTableViewDataSource_tableView_objectValueForTableColumn_row_ = 1 << 1, + CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ = 1 << 2, CPTableViewDataSource_tableView_acceptDrop_row_dropOperation_ = 1 << 3, CPTableViewDataSource_tableView_namesOfPromisedFilesDroppedAtDestination_forDraggedRowsWithIndexes_ = 1 << 4, CPTableViewDataSource_tableView_validateDrop_proposedRow_proposedDropOperation_ = 1 << 5, @@ -355,11 +356,17 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; if (!_dataSource) return; - if (![_dataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) + var hasContentBinding = !![self infoForBinding:@"content"]; + + if ([_dataSource respondsToSelector:@selector(numberOfRowsInTableView:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_numberOfRowsInTableView_; + else if (!hasContentBinding) [CPException raise:CPInternalInconsistencyException reason:[aDataSource description] + " does not implement numberOfRowsInTableView:."]; - if (![_dataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) + if ([_dataSource respondsToSelector:@selector(tableView:objectValueForTableColumn:row:)]) + _implementedDataSourceMethods |= CPTableViewDataSource_tableView_objectValueForTableColumn_row_; + else if (!hasContentBinding) [CPException raise:CPInternalInconsistencyException reason:[aDataSource description] + " does not implement tableView:objectValueForTableColumn:row:"]; @@ -2131,7 +2138,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; var objectValue = tableColumnObjectValues[aRowIndex]; - if (objectValue === undefined) + // tableView:objectValueForTableColumn:row: is optional if content bindings are in place. + if (objectValue === undefined && (_implementedDataSourceMethods & CPTableViewDataSource_tableView_objectValueForTableColumn_row_)) { objectValue = [_dataSource tableView:self objectValueForTableColumn:aTableColumn row:aRowIndex]; tableColumnObjectValues[aRowIndex] = objectValue; From e3a07845d4fd4aff15dc9b2e7368b79c3831a222 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 2 Feb 2010 13:27:14 -0300 Subject: [PATCH 062/124] Implemented CPTableView clickedRow for use in double-action. --- AppKit/CPTableView.j | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 706162f16..577050d13 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -197,6 +197,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; _CPTableDrawView _tableDrawView; SEL _doubleAction; + CPInteger _clickedRow; unsigned _columnAutoResizingStyle; int _lastTrackedRowIndex; @@ -451,8 +452,16 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; /* * - clickedColumn - * - clickedRow */ + +/*! + Returns the index of the the row the user clicked to trigger an action, or -1 if no row was clicked. +*/ +- (CPInteger)clickedRow +{ + return _clickedRow; +} + //Configuring Behavior - (void)setAllowsColumnReordering:(BOOL)shouldAllowColumnReordering @@ -2961,7 +2970,10 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; //double click actions if([[CPApp currentEvent] clickCount] === 2 && _doubleAction && _target) + { + _clickedRow = [self rowAtPoint:aPoint]; [self sendAction:_doubleAction to:_target]; + } } /* From 396d4218f02e856ec93a9851299a99a2b5cf16ff Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 13 Feb 2010 16:18:55 -0300 Subject: [PATCH 063/124] Fixed: CPArrayController keys ContentArray, ArrangedObjects, Selection, SelectionIndex, SelectedObjects, CanRemove and CanSelectNext could not be observed properly because their dependency declarations had a repeated typo. --- AppKit/CPArrayController.j | 48 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index aa90d0eaf..85ac092ab 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -35,7 +35,7 @@ BOOL _preservesSelection; BOOL _selectsInsertedObjects; BOOL _alwaysUsesMultipleValuesMarker; - + id _selectionIndexes; id _sortDescriptors; id _filterPredicate; @@ -51,42 +51,42 @@ [self exposeBinding:@"contentSet"]; } -+ (CPSet)keyPathsForValuesAffectingValueForContentArray ++ (CPSet)keyPathsForValuesAffectingContentArray { return [CPSet setWithObjects:"content"]; } -+ (CPSet)keyPathsForValuesAffectingValueForArrangedObjects ++ (CPSet)keyPathsForValuesAffectingArrangedObjects { return [CPSet setWithObjects:"content", "contentArray", "contentSet", "filterPredicate", "sortDescriptors"]; } -+ (CPSet)keyPathsForValuesAffectingValueForSelection ++ (CPSet)keyPathsForValuesAffectingSelection { return [CPSet setWithObjects:"content", "contentArray", "contentSet", "selectionIndexes"]; } -+ (CPSet)keyPathsForValuesAffectingValueForSelectionIndex ++ (CPSet)keyPathsForValuesAffectingSelectionIndex { return [CPSet setWithObjects:"content", "contentArray", "contentSet", "selectionIndexes", "selection"]; } -+ (CPSet)keyPathsForValuesAffectingValueForSelectedObjects ++ (CPSet)keyPathsForValuesAffectingSelectedObjects { return [CPSet setWithObjects:"content", "contentArray", "contentSet", "selectionIndexes", "selection"]; } -+ (CPSet)keyPathsForValuesAffectingValueForCanRemove ++ (CPSet)keyPathsForValuesAffectingCanRemove { return [CPSet setWithObjects:"selectionIndexes"]; } -+ (CPSet)keyPathsForValuesAffectingValueForCanSelectNext ++ (CPSet)keyPathsForValuesAffectingCanSelectNext { return [CPSet setWithObjects:"selectionIndexes"]; } -+ (CPSet)keyPathsForValuesAffectingValueForCanSelectPrevious ++ (CPSet)keyPathsForValuesAffectingCanSelectPrevious { return [CPSet setWithObjects:"selectionIndexes"]; } @@ -94,12 +94,12 @@ - (id)init { self = [super init]; - + if (self) { _selectionIndexes = [CPIndexSet indexSet]; } - + return self; } @@ -173,7 +173,7 @@ [self setContent:aSet]; } -- (id)contentArray +- (id)contentArray { return [self content]; } @@ -200,7 +200,7 @@ [self _setArrangedObjects:[self arrangeObjects:[self contentArray]]]; } -- (void)_setArrangedObjects:(id)value +- (void)_setArrangedObjects:(id)value { if (_arrangedObjects === value) return; @@ -214,12 +214,12 @@ } -- (CPArray)sortDescriptors +- (CPArray)sortDescriptors { return _sortDescriptors; } -- (void)setSortDescriptors:(CPArray)value +- (void)setSortDescriptors:(CPArray)value { if (_sortDescriptors === value) return; @@ -228,12 +228,12 @@ [self rearrangeObjects]; } -- (CPPredicate)filterPredicate +- (CPPredicate)filterPredicate { return _filterPredicate; } -- (void)setFilterPredicate:(CPPredicate)value +- (void)setFilterPredicate:(CPPredicate)value { if (_filterPredicate === value) return; @@ -254,17 +254,17 @@ return [_selectionIndexes firstIndex]; } -- (BOOL)setSelectionIndex:(unsigned)index +- (BOOL)setSelectionIndex:(unsigned)index { return [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; } -- (CPIndexSet)selectionIndexes +- (CPIndexSet)selectionIndexes { return _selectionIndexes; } -- (BOOL)setSelectionIndexes:(CPIndexSet)indexes +- (BOOL)setSelectionIndexes:(CPIndexSet)indexes { if ([_selectionIndexes isEqual:indexes]) return NO; @@ -301,7 +301,7 @@ for (var i=0; i Date: Sat, 13 Feb 2010 19:17:38 -0300 Subject: [PATCH 064/124] Fixed: CPArray insertObject:inArraySortedByDescriptors: did not return the index into which the object was inserted. This would have broken CPArrayController's addObject code. --- Foundation/CPArray.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Foundation/CPArray.j b/Foundation/CPArray.j index e10f8e8b0..70d33f9db 100755 --- a/Foundation/CPArray.j +++ b/Foundation/CPArray.j @@ -524,6 +524,7 @@ index = -result-1; [self insertObject:anObject atIndex:index]; + return index; } /*! From f7e2e9c2ee0a8e560fa1154646f52b6e72b1969d Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 13 Feb 2010 19:20:21 -0300 Subject: [PATCH 065/124] Fixed: the _CPObservableArray init method used by CPArrayController did not properly initialize _observationProxies. Fixed: _CPObservableArray's insertObject:atIndex: caused an infinite loop. --- AppKit/CPObjectController.j | 54 ++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index ed3a2eb22..7c30059a7 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -4,7 +4,7 @@ @import "CPController.j" -@implementation CPObjectController : CPController +@implementation CPObjectController : CPController { id _contentObject; id _selection; @@ -255,7 +255,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb id _keyPath; id _observer; id _object; - + BOOL _notifyObject; id _context; @@ -306,7 +306,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb if (anObject._observer === _observer && [anObject._keyPath isEqual:_keyPath] && [anObject._object isEqual:_object]) return YES; } - + return NO; } @@ -314,7 +314,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb { if (_notifyObject) [_object observeValueForKeyPath:_keyPath ofObject:_object change:change context:context]; - + [_observer observeValueForKeyPath:_keyPath ofObject:_object change:change context:context]; } @@ -334,7 +334,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb { var a = []; a.isa = self; - + var ivars = class_copyIvarList(self), count = ivars.length; @@ -349,6 +349,16 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb return "<_CPObservableArray: "+[super description]+" >"; } +- (id)initWithArray:(CPArray)anArray +{ + if (self = [super initWithArray:anArray]) + { + _observationProxies = []; + } + + return self; +} + - (id)initWithObjects:(CPArray)objects count:(unsigned)count { if (self = [super initWithObjects:objects count:count]) @@ -364,16 +374,16 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb if (aKeyPath.indexOf("@") === 0) { var proxy = [[_CPObservationProxy alloc] initWithKeyPath:aKeyPath observer:anObserver object:self]; - + proxy._options = options; proxy._context = context; - + [_observationProxies addObject:proxy]; - + var dotIndex = aKeyPath.indexOf("."), remaining = aKeyPath.substring(dotIndex+1), indexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self count])]; - + [self addObserver:proxy toObjectsAtIndexes:indexes forKeyPath:remaining options:options context:context]; } else @@ -422,7 +432,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb [self didChangeValueForKey:keyPath]; } - [self insertObject:anObject atIndex:anIndex]; + [super insertObject:anObject atIndex:anIndex]; } - (void)removeObjectAtIndex:(unsigned)anIndex @@ -458,7 +468,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb - (void)replaceObjectAtIndex:(unsigned)anIndex withObject:(id)anObject { var currentObject = [self objectAtIndex:anIndex]; - + for (var i=0, count=[_observationProxies count]; i Date: Sat, 13 Feb 2010 19:25:06 -0300 Subject: [PATCH 066/124] Fixed: the CPArrayController addObject: optimization for fast index updates would never fire with a nil _filterPredicate, causing rearrangeObjects to be called needlessly. --- AppKit/CPArrayController.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 85ac092ab..f0eb896b3 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -352,11 +352,11 @@ if (_clearsFilterPredicateOnInsertion) [self setFilterPredicate:nil]; - if ([_filterPredicate evaluateWithObject:object]) + if (_filterPredicate === nil || [_filterPredicate evaluateWithObject:object]) { - [self willChangeValueForKey:@"selectionIndexes"]; var pos = [_arrangedObjects insertObject:object inArraySortedByDescriptors:_sortDescriptors]; + [self willChangeValueForKey:@"selectionIndexes"]; [_selectionIndexes shiftIndexesStartingAtIndex:pos by:1]; [self didChangeValueForKey:@"selectionIndexes"]; } From 2b287a85e5d2ab0e74ff3b52bb8c906f7e377925 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 13 Feb 2010 21:19:43 -0300 Subject: [PATCH 067/124] CPArrayController now pushes new selections to the bound model for selectionIndexes. Using this, support for selectsInsertedObjects was added. This commit also fixes a performance problem where calling setSelectionIndexes with a selection equal to the one already active caused a selection update. --- AppKit/CPArrayController.j | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index f0eb896b3..ed13c1e73 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -266,7 +266,7 @@ - (BOOL)setSelectionIndexes:(CPIndexSet)indexes { - if ([_selectionIndexes isEqual:indexes]) + if ([_selectionIndexes isEqualToIndexSet:indexes]) return NO; if(![indexes count] && _avoidsEmptySelection && [[self arrangedObjects] count]) @@ -282,6 +282,10 @@ [self _selectionDidChange]; [self didChangeValueForKey:@"selectionIndexes"]; + // Push back the new selection to the model for selectionIndexes if we have one. + // There won't be an infinite loop because of the equality check above. + [[CPKeyValueBinding getBinding:@"selectionIndexes" forObject:self] reverseSetValueFor:@"selectionIndexes"]; + return YES; } @@ -356,9 +360,16 @@ { var pos = [_arrangedObjects insertObject:object inArraySortedByDescriptors:_sortDescriptors]; - [self willChangeValueForKey:@"selectionIndexes"]; - [_selectionIndexes shiftIndexesStartingAtIndex:pos by:1]; - [self didChangeValueForKey:@"selectionIndexes"]; + if (_selectsInsertedObjects) + { + [self setSelectionIndex:pos]; + } + else + { + [self willChangeValueForKey:@"selectionIndexes"]; + [_selectionIndexes shiftIndexesStartingAtIndex:pos by:1]; + [self didChangeValueForKey:@"selectionIndexes"]; + } } else [self rearrangeObjects]; From ec032cb739aedca53036cd14297219293963cf98 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 13 Feb 2010 23:05:55 -0300 Subject: [PATCH 068/124] Performance fix: willChange and didChange for CPArrayController's selectionIndexes were sent doubly. --- AppKit/CPArrayController.j | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index ed13c1e73..5b7db2a68 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -91,6 +91,16 @@ return [CPSet setWithObjects:"selectionIndexes"]; } ++ (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey +{ + if (![super automaticallyNotifiesObserversForKey:aKey]) + return NO; + if (aKey === @"selectionIndexes") + return NO; + + return YES; +} + - (id)init { self = [super init]; From 4ff89eab04555f67e9ed96f4d42aa41b221fdeb1 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 13 Feb 2010 23:14:02 -0300 Subject: [PATCH 069/124] Fixed: CPArrayController would throw out of bounds exceptions when its content array was shortened and items at the end were selected. Extended avoid empty selection support so that when the last item is selected and deleted, the (previously) second to last item is selected instead. Works as expected with multiple selections. --- AppKit/CPArrayController.j | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 5b7db2a68..236502f9e 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -159,6 +159,8 @@ if ([self preservesSelection]) oldSelection = [self selectedObjects]; + // Avoid out of bounds selections. + _selectionIndexes = [CPIndexSet indexSet]; //FIXME: copy? [super setContent:value]; @@ -279,10 +281,20 @@ if ([_selectionIndexes isEqualToIndexSet:indexes]) return NO; - if(![indexes count] && _avoidsEmptySelection && [[self arrangedObjects] count]) - indexes = [CPIndexSet indexSetWithIndex:0]; - - [indexes removeIndexesInRange:CPMakeRange([[self arrangedObjects] count]+1, CPNotFound)]; + if (![indexes count]) + { + if(_avoidsEmptySelection && [[self arrangedObjects] count]) + indexes = [CPIndexSet indexSetWithIndex:0]; + } + else + { + var objectsCount = [[self arrangedObjects] count]; + // Remove out of bounds indexes. + [indexes removeIndexesInRange:CPMakeRange(objectsCount, [indexes lastIndex])]; + // When avoiding empty selection and the deleted selection was at the bottom, select the last item. + if(![indexes count] && _avoidsEmptySelection && objectsCount) + indexes = [CPIndexSet indexSetWithIndex:objectsCount-1]; + } [self willChangeValueForKey:@"selectionIndexes"]; [self _selectionWillChange]; From 8a8af0e4a94b142ccc7e93eeef211a8625bd153d Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 14 Feb 2010 00:50:57 -0300 Subject: [PATCH 070/124] Fixed: CPArrayController could get out of bounds selections if a call to rearrangeObjects caused objects to disappear from the arranged set. --- AppKit/CPArrayController.j | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 236502f9e..f61bd2c26 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -209,7 +209,27 @@ - (void)rearrangeObjects { + // Rearranging reapplies the selection criteria and may cause objects to disappear, + // so take care of the selection. + // + // Sometimes rearrangeObjects is called by setContent which may cause two rounds of + // selection preservation. This is okay because setContent temporarily clears the + // selection and so this code below ends up preserving nothing in that case. + var oldSelection = nil, + oldSelectionIndexes = [[self selectionIndexes] copy]; + + if ([self preservesSelection]) + oldSelection = [self selectedObjects]; + + // Avoid out of bounds selections. + _selectionIndexes = [CPIndexSet indexSet]; + [self _setArrangedObjects:[self arrangeObjects:[self contentArray]]]; + + if (oldSelection) + [self setSelectedObjects:oldSelection]; + else + [self setSelectionIndexes:oldSelectionIndexes]; } - (void)_setArrangedObjects:(id)value From 15be647c167cd3a36286691e77ac796e0c4e7e8b Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 14 Feb 2010 23:35:17 -0300 Subject: [PATCH 071/124] Fixed: the CPArrayController code to remove out of bounds selections failed to remove the last selected item if the new arrangedObjects array was empty. --- AppKit/CPArrayController.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index f61bd2c26..19fc44fe8 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -310,7 +310,7 @@ { var objectsCount = [[self arrangedObjects] count]; // Remove out of bounds indexes. - [indexes removeIndexesInRange:CPMakeRange(objectsCount, [indexes lastIndex])]; + [indexes removeIndexesInRange:CPMakeRange(objectsCount, [indexes lastIndex]+1)]; // When avoiding empty selection and the deleted selection was at the bottom, select the last item. if(![indexes count] && _avoidsEmptySelection && objectsCount) indexes = [CPIndexSet indexSetWithIndex:objectsCount-1]; From 8b2350fb226516b0edc783b939ca3dc9d5df4943 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 15 Feb 2010 18:06:01 -0300 Subject: [PATCH 072/124] Optimized table data loading when using bindings for the cell values. A special code path in the CPTableColumn's prepareDataView:forRow: method turns a O(n) operation into O(1) where n is the number of items in the model array. --- AppKit/CPTableColumn.j | 54 ++++++++--- Tests/AppKit/CPKeyValueBindingTest.j | 130 +++++++++++++++++++++++---- 2 files changed, 155 insertions(+), 29 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index ff1b1152f..91edc5d50 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -50,7 +50,7 @@ CPTableColumnUserResizingMask = 1 << 1; CPSortDescriptor _sortDescriptorPrototype; BOOL _isHidden; CPString _headerToolTip; - + BOOL _disableResizingPosting @accessors(property=disableResizingPosting); } @@ -72,12 +72,12 @@ CPTableColumnUserResizingMask = 1 << 1; _maxWidth = 1000000.0; _resizingMask = CPTableColumnAutoresizingMask | CPTableColumnUserResizingMask; _disableResizingPosting = NO; - + [self setIdentifier:anIdentifier]; var header = [[_CPTableColumnHeaderView alloc] initWithFrame:CGRectMakeZero()]; [self setHeaderView:header]; - + var textDataView = [CPTextField new]; [textDataView setValue:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0] @@ -128,19 +128,19 @@ CPTableColumnUserResizingMask = 1 << 1; { var index = [[tableView tableColumns] indexOfObjectIdenticalTo:self], dirtyTableColumnRangeIndex = tableView._dirtyTableColumnRangeIndex; - + if (dirtyTableColumnRangeIndex < 0) tableView._dirtyTableColumnRangeIndex = index; else tableView._dirtyTableColumnRangeIndex = MIN(index, tableView._dirtyTableColumnRangeIndex); - + var rows = tableView._exposedRows, - columns = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(index, [tableView._exposedColumns lastIndex] - index + 1)]; - + columns = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(index, [tableView._exposedColumns lastIndex] - index + 1)]; + // FIXME: Would be faster with some sort of -setNeedsDisplayInColumns: that updates a dirtyTableColumnForDisplay cache; then marked columns would relayout their data views at display time. [tableView _layoutDataViewsInRows:rows columns:columns]; [tableView tile]; - + if (!_disableResizingPosting) [self _postDidResizeNotificationWithOldWidth:oldWidth]; } @@ -297,7 +297,7 @@ CPTableColumnUserResizingMask = 1 << 1; // unarchive the data view cache var newDataView = [CPKeyedUnarchiver unarchiveObjectWithData:_dataViewData[dataViewUID]]; newDataView.identifier = dataViewUID; - + return newDataView; } @@ -330,7 +330,7 @@ CPTableColumnUserResizingMask = 1 << 1; } /* - Returns YES if the user can edit cells associated with the receiver by double-clicking the + Returns YES if the user can edit cells associated with the receiver by double-clicking the column in the NSTableView, NO otherwise. */ - (BOOL)isEditable @@ -371,7 +371,7 @@ CPTableColumnUserResizingMask = 1 << 1; //Setting Tool Tips /* - Sets the tooltip string that is displayed when the cursor pauses over the + Sets the tooltip string that is displayed when the cursor pauses over the header cell of the receiver. */ - (void)setHeaderToolTip:(CPString)aToolTip @@ -415,9 +415,37 @@ CPTableColumnUserResizingMask = 1 << 1; bindingPath = [aDataView _replacementKeyPathForBinding:bindingName], bindingInfo = [bindingsDictionary objectForKey:bindingName]._info, destination = [bindingInfo objectForKey:CPObservedObjectKey], - keyPath = [bindingInfo objectForKey:CPObservedKeyPathKey]; + keyPath = [bindingInfo objectForKey:CPObservedKeyPathKey], + dotIndex = keyPath.lastIndexOf("."), + value; + + if (dotIndex === CPNotFound) + value = [[destination valueForKeyPath:keyPath] objectAtIndex:aRow]; + else + { + /* + Optimize the prototypical use case where the key path describes a value + in an array. Without this optimization, we call CPArray's valueForKey + which generates as many values as objects in the array, of which we then + pick one and throw away the rest. + + The optimization is to get the array and access the value directly. This + turns the operation into a single access regardless of how long the model + array is. + */ + + var firstPart = keyPath.substring(0, dotIndex), + secondPart = keyPath.substring(dotIndex+1), + firstValue = [destination valueForKeyPath:firstPart]; + + if ([firstValue isKindOfClass:CPArray]) + value = [[firstValue objectAtIndex:aRow] valueForKeyPath:secondPart]; + else + value = [[firstValue valueForKeyPath:secondPart] objectAtIndex:aRow]; + } + // console.log(bindingName+" : "+keyPath+" : "+aRow+" : "+[[destination valueForKeyPath:keyPath] objectAtIndex:aRow]); - [aDataView setValue:[[destination valueForKeyPath:keyPath] objectAtIndex:aRow] forKey:bindingPath]; + [aDataView setValue:value forKey:bindingPath]; } } diff --git a/Tests/AppKit/CPKeyValueBindingTest.j b/Tests/AppKit/CPKeyValueBindingTest.j index dc66c5af8..be32de478 100644 --- a/Tests/AppKit/CPKeyValueBindingTest.j +++ b/Tests/AppKit/CPKeyValueBindingTest.j @@ -1,10 +1,22 @@ -@import "CPKeyValueBinding.j" +@import @import +// FIXME These imports are needed to prevent the following two errors: +// error=ReferenceError: Can't find variable: CPTopVerticalTextAlignment +// error=ReferenceError: Can't find variable: CPImageLeft +// CPControl uses these but in ojtest runs the dependencies don't +// get imported for some reason. +@import +@import + +@import +@import +@import + @implementation CPKeyValueBindingTest : OJTestCase { - id FOO; + id FOO; } - (void)testExposingBindings @@ -12,52 +24,96 @@ [BindingTester exposeBinding:@"foo"]; [BindingTester exposeBinding:@"bar"]; [CPObject exposeBinding:@"zoo"]; - - [self assertTrue:[[[BindingTester new] exposedBindings] isEqual:["foo", "bar", "zoo"]]]; + + [self assert:["foo", "bar", "zoo"] equals:[[BindingTester new] exposedBindings]]; } - (void)testBindTo { var binder = [BindingTester new]; binder.cheese = "orange"; - + [CPKeyValueBindingTest exposeBinding:@"FOO"]; - + [self bind:"FOO" toObject:binder withKeyPath:"cheese" options:nil]; - + [binder setCheese:@"banana"]; - + [self assertTrue:[self valueForKey:@"FOO"]==="banana" message:"Bound value should have been updated to banana, was "+FOO]; } - +/* - (void)testControl { FOO = "bingo"; - + var binder = [BindingTester new]; binder.cheese = "yellow"; var control = [[CPTextField alloc] init]; [control setStringValue:@"brown"]; - + [CPControl exposeBinding:CPValueBinding]; [[self class] exposeBinding:@"FOO"]; //[control addObserver:self forKeyPath:CPValueBinding options:nil context:"testControl"]; - + [control bind:CPValueBinding toObject:self withKeyPath:@"FOO" options:nil]; [self bind:@"FOO" toObject:control withKeyPath:CPValueBinding options:nil]; - + [control setStringValue:@"banana"]; [control setStringValue:@"grapefruit"]; - + [self setValue:@"BAR" forKey:@"FOO"]; - + [self assertTrue: FOO == [control stringValue] message: "should be equal, were: "+FOO+"and: "+[control stringValue]]; - + [control setStringValue:@"pina colada"]; [self assertTrue: FOO == [control stringValue] message: "should be equal, were: "+FOO+"and: "+[control stringValue]]; +}*/ + +- (void)testTableColumn +{ + var tableView = [CPTableView new], + tableColumn = [[CPTableColumn alloc] initWithIdentifier:"A Column"], + arrayController = [CPArrayController new]; + + [tableView addTableColumn:tableColumn]; + + content = [ + [AccessCounter counterWithValueA:"1" valueB:"2"], + [AccessCounter counterWithValueA:"3" valueB:"4"], + [AccessCounter counterWithValueA:"5" valueB:"6"], + ]; + [arrayController setContent:content]; + + [tableColumn bind:@"value" toObject:arrayController withKeyPath:@"arrangedObjects.valueA" options:nil]; + + // Reset these if they were read during initialization. + for(var i=0; i<[content count];i++) + [content[i] setAccesses:0]; + var testView = [DataViewTester new]; + [tableColumn prepareDataView:testView forRow:0]; + [self assert:'1' equals:testView.lastValue]; + [self assert:'value' equals:testView.lastKey]; + + [tableColumn prepareDataView:testView forRow:1]; + [self assert:'3' equals:testView.lastValue]; + [self assert:'value' equals:testView.lastKey]; + + // Test that CPTableColumn is optimized to only read one value per row. + [self assert:0 equals:[content[2] accesses] message:"row 2 used "+[content[2] accesses]+" accesses but was never prepared"]; + [self assert:1 equals:[content[0] accesses] message:"row 0 used "+[content[0] accesses]+" accesses to prepare"]; + [self assert:1 equals:[content[1] accesses] message:"row 1 used "+[content[1] accesses]+" accesses to prepare"]; + + // Try the case where a key path is not used. + content = ["plain", "old", "space crystals"]; + [tableColumn bind:@"value" toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + [arrayController setContent:content]; + + [tableColumn prepareDataView:testView forRow:1]; + [self assert:'old' equals:testView.lastValue]; + [self assert:'value' equals:testView.lastKey]; } - (void)observeValueForKeyPath:(CPString)aKeyPath ofObject:(id)anObject change:(CPDictionary)changes context:(id)aContext @@ -83,3 +139,45 @@ } @end + +@implementation DataViewTester : CPObject +{ + id lastValue; + id lastKey; +} + +- (void)setValue:value forKey:aKey +{ + lastValue = value; + lastKey = aKey; +} +@end + +@implementation AccessCounter : CPObject +{ + id valueA @accessors; + id valueB @accessors; + CPNumber accesses @accessors; +} + ++ (AccessCounter) counterWithValueA:aValue valueB:anotherValue +{ + r = [self new]; + [r setValueA:aValue]; + [r setValueB:anotherValue]; + return r; +} + +- (id)valueA +{ + accesses++; + return valueA; +} + +- (id)valueB +{ + accesses++; + return valueB; +} + +@end From 5ff8ddf5f3ecd33d708f25f32f35f9ff863fa0cc Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 19 Feb 2010 19:11:35 -0300 Subject: [PATCH 073/124] Fewer bindings debug log messages. --- Foundation/CPKeyValueObserving.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index bee35ec8f..66d08fbb0 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -50,7 +50,7 @@ { if (!anObserver || !aPath) return; - CPLog.warn(anObserver+" is adding itself as an observer to object: "+self+" forKeyPath: "+aPath+" context: "+aContext); + //CPLog.warn(anObserver+" is adding itself as an observer to object: "+self+" forKeyPath: "+aPath+" context: "+aContext); [[_CPKVOProxy proxyForObject:self] _addObserver:anObserver forKeyPath:aPath options:options context:aContext]; } From 3c995fe17baff53c54d642c3117054f8adf270c0 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 10 Mar 2010 14:29:28 -0300 Subject: [PATCH 074/124] Fixed: the array controller remove method mapped selection indexes to the content array instead of the arranged objects, leading to the wrong objects being removed as filters and sort descriptors were effectively ignored. --- AppKit/CPArrayController.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 19fc44fe8..5fefb58c8 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -456,12 +456,12 @@ - (void)remove:(id)sender { - [self removeObjects:[[self contentArray] objectsAtIndexes:[self selectionIndexes]]]; + [self removeObjects:[[self arrangedObjects] objectsAtIndexes:[self selectionIndexes]]]; } - (void)removeObjectsAtArrangedObjectIndexes:(CPIndexSet)indexes { - [self _removeObjects:[[self contentArray] objectsAtIndexes:indexes]]; + [self _removeObjects:[[self arrangedObjects] objectsAtIndexes:indexes]]; } From 79ed04e4039cb5538f19513102efda1062c7ed34 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 11 Mar 2010 15:40:20 -0300 Subject: [PATCH 075/124] Fixed: including CPValueTransformer.j causes an infinite loop due to the recent Objective-J (mis?) behavior that every class has to inherit from CPObject. Also, the transformer map failed to initialize properly with the existing setup code for reasons which were not immediately clear. Moving the initialization to a regular + initialize method eliminated the problem. Fixed: CPKeyValueBinding.j would throw an exception if a named value transformer option was specified, due to CPValueTransformer.j not being imported. --- AppKit/CPKeyValueBinding.j | 55 +++++++++++++++++---------------- Foundation/CPValueTransformer.j | 25 +++++++++------ 2 files changed, 43 insertions(+), 37 deletions(-) diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 0da4c4b69..f6035cd80 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -26,13 +26,14 @@ @import @import @import +@import var exposedBindingsMap = [CPDictionary new], bindingsMap = [CPDictionary new]; - + var CPBindingOperationAnd = 0, CPBindingOperationOr = 1; - + @implementation CPKeyValueBinding : CPObject { CPDictionary _info; @@ -40,20 +41,20 @@ var CPBindingOperationAnd = 0, } + (void)exposeBinding:(CPString)aBinding forClass:(Class)aClass -{ +{ var bindings = [exposedBindingsMap objectForKey:[aClass hash]]; - + if (!bindings) { bindings = []; [exposedBindingsMap setObject:bindings forKey:[aClass hash]]; } - + bindings.push(aBinding); } + (CPArray)exposedBindingsForClass:(Class)aClass -{ +{ return [[exposedBindingsMap objectForKey:[aClass hash]] copy]; } @@ -80,12 +81,12 @@ var CPBindingOperationAnd = 0, + (void)unbind:(CPString)aBinding forObject:(id)anObject { var bindings = [bindingsMap objectForKey:[anObject hash]]; - + if (!bindings) return; var theBinding = [bindings objectForKey:aBinding]; - + if (!theBinding) return; @@ -115,24 +116,24 @@ var CPBindingOperationAnd = 0, - (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource { self = [super init]; - + if (self) { _source = aSource; _info = [CPDictionary dictionaryWithObjects:[aDestination, aKeyPath] forKeys:[CPObservedObjectKey, CPObservedKeyPathKey]]; - + if (options) [_info setObject:options forKey:CPOptionsKey]; - + [aDestination addObserver:self forKeyPath:aKeyPath options:CPKeyValueObservingOptionNew context:aBinding]; - + var bindings = [bindingsMap objectForKey:[_source hash]]; if (!bindings) { bindings = [CPDictionary new]; [bindingsMap setObject:bindings forKey:[_source hash]]; } - + [bindings setObject:self forKey:aName]; [self setValueFor:aBinding]; } @@ -140,7 +141,7 @@ var CPBindingOperationAnd = 0, return self; } -- (void)setValueFor:(CPString)aBinding +- (void)setValueFor:(CPString)aBinding { var destination = [_info objectForKey:CPObservedObjectKey], keyPath = [_info objectForKey:CPObservedKeyPathKey], @@ -179,9 +180,9 @@ var CPBindingOperationAnd = 0, switch (aValue) { case CPMultipleValuesMarker: return [options objectForKey:CPMultipleValuesPlaceholderBindingOption] || @"Multiple Values"; - + case CPNoSelectionMarker: return [options objectForKey:CPNoSelectionPlaceholderBindingOption] || @"No Selection"; - + case CPNotApplicableMarker: if ([options objectForKey:CPRaisesForNotApplicableKeysBindingOption]) [CPException raise:CPGenericException reason:@"can't transform non applicable key on: "+_source+" value: "+aValue]; @@ -238,7 +239,7 @@ var CPBindingOperationAnd = 0, while (theClass && theClass !== [CPObject class]) { var temp = [CPKeyValueBinding exposedBindingsForClass:theClass]; - + if (temp) [exposedBindings addObjectsFromArray:temp]; @@ -286,7 +287,7 @@ var CPBindingOperationAnd = 0, { } -- (void)setValueFor:(CPString)aBinding +- (void)setValueFor:(CPString)aBinding { var bindings = [bindingsMap valueForKey:[_source hash]]; @@ -307,7 +308,7 @@ var CPBindingOperationAnd = 0, { } -- (void)setValueFor:(CPString)aBinding +- (void)setValueFor:(CPString)aBinding { var bindings = [bindingsMap objectForKey:[_source hash]]; @@ -329,7 +330,7 @@ var resolveMultipleValues = function resolveMultipleValues(/*CPString*/key, /*CP var bindingName = key, theBinding, count = 1; - + while (theBinding = [bindings objectForKey:bindingName]) { var infoDictionary = theBinding._info, @@ -338,13 +339,13 @@ var resolveMultipleValues = function resolveMultipleValues(/*CPString*/key, /*CP options = [infoDictionary objectForKey:CPOptionsKey]; var value = [theBinding transformValue:[object valueForKeyPath:keyPath] withOptions:options]; - + if (value == operation) return operation; bindingName = [CPString stringWithFormat:@"%@%i", key, ++count]; } - + return !operation; } @@ -352,11 +353,11 @@ var invokeAction = function invokeAction(/*CPString*/targetKey, /*CPString*/argu { var theBinding = [bindings objectForKey:targetKey], infoDictionary = theBinding._info, - + object = [infoDictionary objectForKey:CPObservedObjectKey], keyPath = [infoDictionary objectForKey:CPObservedKeyPathKey], options = [infoDictionary objectForKey:CPOptionsKey], - + target = [object valueForKeyPath:keyPath], selector = [options objectForKey:CPSelectorNameBindingOption]; @@ -365,14 +366,14 @@ var invokeAction = function invokeAction(/*CPString*/targetKey, /*CPString*/argu var invocation = [CPInvocation invocationWithMethodSignature:[target methodSignatureForSelector:selector]]; [invocation setSelector:selector]; - + var bindingName = argumentKey count = 1; while (theBinding = [bindings objectForKey:bindingName]) { infoDictionary = theBinding._info; - + keyPath = [infoDictionary objectForKey:CPObserverKeyPathKey]; object = [[infoDictionary objectForKey:CPObservedObjectKey] valueForKeyPath:keyPath]; @@ -381,7 +382,7 @@ var invokeAction = function invokeAction(/*CPString*/targetKey, /*CPString*/argu bindingName = [CPString stringWithFormat:@"%@%i", argumentKey, count]; } - + [invocation invoke]; } diff --git a/Foundation/CPValueTransformer.j b/Foundation/CPValueTransformer.j index c23e7ff95..07671cf15 100644 --- a/Foundation/CPValueTransformer.j +++ b/Foundation/CPValueTransformer.j @@ -27,7 +27,7 @@ @import -var transformerMap = [CPDictionary dictionary]; +var transformerMap; @implementation CPValueTransformer : CPObject @@ -35,6 +35,16 @@ var transformerMap = [CPDictionary dictionary]; } ++ (void)initialize +{ + transformerMap = [CPDictionary dictionaryWithJSObject:{ + CPNegateBooleanTransformerName: [CPNegateBooleanTransformer new], + CPIsNilTransformerName: [CPIsNilTransformer new], + CPIsNotNilTransformerName: [CPIsNotNilTransformer new], + CPUnarchiveFromDataTransformerName: [CPUnarchiveFromDataTransformer new], + }]; +} + + (void)setValueTransformer:(CPValueTransformer)aTransformer forName:(CPString)aName { [transformerMap setObject:aTransformer forKey:aName]; @@ -79,7 +89,7 @@ var transformerMap = [CPDictionary dictionary]; // builtin transformers -@implementation CPNegateBooleanTransformer +@implementation CPNegateBooleanTransformer : CPObject + (BOOL)allowsReverseTransformation { @@ -103,7 +113,7 @@ var transformerMap = [CPDictionary dictionary]; @end -@implementation CPIsNilTransformer +@implementation CPIsNilTransformer : CPObject + (BOOL)allowsReverseTransformation { @@ -122,7 +132,7 @@ var transformerMap = [CPDictionary dictionary]; @end -@implementation CPIsNotNilTransformer +@implementation CPIsNotNilTransformer : CPObject + (BOOL)allowsReverseTransformation { @@ -141,7 +151,7 @@ var transformerMap = [CPDictionary dictionary]; @end -@implementation CPUnarchiveFromDataTransformer +@implementation CPUnarchiveFromDataTransformer : CPObject + (BOOL)allowsReverseTransformation { @@ -169,8 +179,3 @@ CPNegateBooleanTransformerName = @"CPNegateBooleanTransformerName"; CPIsNilTransformerName = @"CPIsNilTransformerName"; CPIsNotNilTransformerName = @"CPIsNotNilTransformerName"; CPUnarchiveFromDataTransformerName = @"CPUnarchiveFromDataTransformerName"; - -[CPValueTransformer setValueTransformer:[CPNegateBooleanTransformer new] forName:CPNegateBooleanTransformerName]; -[CPValueTransformer setValueTransformer:[CPIsNilTransformer new] forName:CPIsNilTransformerName]; -[CPValueTransformer setValueTransformer:[CPIsNotNilTransformer new] forName:CPIsNotNilTransformerName]; -[CPValueTransformer setValueTransformer:[CPUnarchiveFromDataTransformer new] forName:CPUnarchiveFromDataTransformerName]; From 218919a8ba7e0d1b9138582a0d331ca447081f2c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 11 Mar 2010 17:45:19 -0300 Subject: [PATCH 076/124] Fixed: exposed bindings on CPObject would not appear in CPObject subclasses. --- AppKit/CPKeyValueBinding.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index f6035cd80..e8e7096f6 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -236,7 +236,7 @@ var CPBindingOperationAnd = 0, var exposedBindings = [], theClass = [self class]; - while (theClass && theClass !== [CPObject class]) + while(theClass) { var temp = [CPKeyValueBinding exposedBindingsForClass:theClass]; From 48fb660e66ad6bf67ee2daed502959455c22cdb4 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 11 Mar 2010 22:28:44 -0300 Subject: [PATCH 077/124] The problem with initialize in fb5950c82d0124bdebb6e03cb4509306ef4161c8 turned out to be caused by a Cappuccino bug with class methods and arguments named 'name'. Renaming the argument solved the problem so I reverted the initialize change. This fix also fixes valueTransformerForName. --- Foundation/CPValueTransformer.j | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Foundation/CPValueTransformer.j b/Foundation/CPValueTransformer.j index 07671cf15..9db52260e 100644 --- a/Foundation/CPValueTransformer.j +++ b/Foundation/CPValueTransformer.j @@ -27,7 +27,7 @@ @import -var transformerMap; +var transformerMap = [CPDictionary dictionary]; @implementation CPValueTransformer : CPObject @@ -35,19 +35,9 @@ var transformerMap; } -+ (void)initialize ++ (void)setValueTransformer:(CPValueTransformer)transformer forName:(CPString)aName { - transformerMap = [CPDictionary dictionaryWithJSObject:{ - CPNegateBooleanTransformerName: [CPNegateBooleanTransformer new], - CPIsNilTransformerName: [CPIsNilTransformer new], - CPIsNotNilTransformerName: [CPIsNotNilTransformer new], - CPUnarchiveFromDataTransformerName: [CPUnarchiveFromDataTransformer new], - }]; -} - -+ (void)setValueTransformer:(CPValueTransformer)aTransformer forName:(CPString)aName -{ - [transformerMap setObject:aTransformer forKey:aName]; + [transformerMap setObject:transformer forKey:aName]; } + (CPValueTransformer)valueTransformerForName:(CPString)aName @@ -179,3 +169,8 @@ CPNegateBooleanTransformerName = @"CPNegateBooleanTransformerName"; CPIsNilTransformerName = @"CPIsNilTransformerName"; CPIsNotNilTransformerName = @"CPIsNotNilTransformerName"; CPUnarchiveFromDataTransformerName = @"CPUnarchiveFromDataTransformerName"; + +[CPValueTransformer setValueTransformer:[CPNegateBooleanTransformer new] forName:CPNegateBooleanTransformerName]; +[CPValueTransformer setValueTransformer:[CPIsNilTransformer new] forName:CPIsNilTransformerName]; +[CPValueTransformer setValueTransformer:[CPIsNotNilTransformer new] forName:CPIsNotNilTransformerName]; +[CPValueTransformer setValueTransformer:[CPUnarchiveFromDataTransformer new] forName:CPUnarchiveFromDataTransformerName]; From 45a2bcb71a148f6535fb95610b3042eb5af73ced Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 11 Mar 2010 22:32:33 -0300 Subject: [PATCH 078/124] Fixed bindings problems where 'nil' would be transformed into @"". Also, CPIsNilTransformerName and its inverse couldn't work because any nil value was immediately returned without transformations being applied. Full complement of unit tests included, based on Cocoa empirical testing. Fixed with CPKeyValueBinding: the CPValueTransformerNameBindingOption option would cause an exception due a missing import. --- AppKit/CPKeyValueBinding.j | 24 ++++---- Tests/AppKit/CPKeyValueBindingTest.j | 88 +++++++++++++++++++++++++++- 2 files changed, 97 insertions(+), 15 deletions(-) diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index e8e7096f6..772e9a4e7 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -177,6 +177,17 @@ var CPBindingOperationAnd = 0, valueTransformer, placeholder; + var valueTransformerName = [options objectForKey:CPValueTransformerNameBindingOption], + valueTransformer; + + if (valueTransformerName) + valueTransformer = [CPValueTransformer valueTransformerForName:valueTransformerName]; + else + valueTransformer = [options objectForKey:CPValueTransformerBindingOption]; + + if (valueTransformer) + aValue = [valueTransformer transformedValue:aValue]; + switch (aValue) { case CPMultipleValuesMarker: return [options objectForKey:CPMultipleValuesPlaceholderBindingOption] || @"Multiple Values"; @@ -189,20 +200,9 @@ var CPBindingOperationAnd = 0, return [options objectForKey:CPNotApplicablePlaceholderBindingOption] || @"Not Applicable"; case nil: - case undefined: return [options objectForKey:CPNullPlaceholderBindingOption] || @""; + case undefined: return [options objectForKey:CPNullPlaceholderBindingOption] || nil; } - var valueTransformerName = [options objectForKey:CPValueTransformerNameBindingOption], - valueTransformer; - - if (valueTransformerName) - valueTransformer = [CPValueTransformer valueTransformerForName:valueTransformerName]; - else - valueTransformer = [options objectForKey:CPValueTransformerBindingOption]; - - if (valueTransformer) - aValue = [valueTransformer transformedValue:aValue]; - return aValue; } diff --git a/Tests/AppKit/CPKeyValueBindingTest.j b/Tests/AppKit/CPKeyValueBindingTest.j index be32de478..c57186eb0 100644 --- a/Tests/AppKit/CPKeyValueBindingTest.j +++ b/Tests/AppKit/CPKeyValueBindingTest.j @@ -41,7 +41,79 @@ [self assertTrue:[self valueForKey:@"FOO"]==="banana" message:"Bound value should have been updated to banana, was "+FOO]; } -/* + +- (void)testBindOptions +{ + + var bindTesterA = [BindingTestWithBool new], + bindTesterB = [BindingTestWithBool new]; + + [bindTesterB bind:@"stringValue" toObject:bindTesterA withKeyPath:@"stringValue" options:[CPDictionary dictionary]]; + [self assert:nil equals:[bindTesterA stringValue] message:"initial A value unchanged"]; + [self assert:nil equals:[bindTesterB stringValue] message:"initial B value unchanged"]; + + [bindTesterA setStringValue:@"My string"]; + [self assert:@"My string" equals:[bindTesterA stringValue] message:"A value set"]; + [self assert:@"My string" equals:[bindTesterB stringValue] message:"B value updated"]; + + [bindTesterA setStringValue:nil]; + [self assert:nil equals:[bindTesterA stringValue] message:"A value reset"]; + [self assert:nil equals:[bindTesterB stringValue] message:"B value updated with nil"]; + + [bindTesterA unbind:@"stringValue"]; + + [bindTesterB bind:@"boolValue" toObject:bindTesterA withKeyPath:@"stringValue" options:[CPDictionary dictionaryWithObject:CPIsNotNilTransformerName forKey:CPValueTransformerNameBindingOption]]; + [bindTesterB setBoolValue:YES]; + [bindTesterA setStringValue:nil]; + [self assert:nil equals:[bindTesterA stringValue] message:"A value reset"]; + [self assert:NO equals:[bindTesterB boolValue] message:"B value updated"]; + + [bindTesterB setBoolValue:NO]; + [bindTesterA setStringValue:@"My string"]; + [self assert:@"My string" equals:[bindTesterA stringValue] message:"A value updated"]; + [self assert:YES equals:[bindTesterB boolValue] message:"B value updated"]; + + [bindTesterB setBoolValue:NO]; + [bindTesterA setStringValue:@""]; + [self assert:@"" equals:[bindTesterA stringValue] message:"A value updated"]; + [self assert:YES equals:[bindTesterB boolValue] message:"B value updated"]; + + [bindTesterA unbind:@"boolValue"]; + + [bindTesterB bind:@"boolValue" toObject:bindTesterA withKeyPath:@"stringValue" options:[CPDictionary dictionaryWithObject:CPIsNilTransformerName forKey:CPValueTransformerNameBindingOption]]; + [bindTesterB setBoolValue:NO]; + [bindTesterA setStringValue:nil]; + [self assert:nil equals:[bindTesterA stringValue] message:"A value reset"]; + [self assert:YES equals:[bindTesterB boolValue] message:"B value updated"]; + + [bindTesterB setBoolValue:YES]; + [bindTesterA setStringValue:@"My string"]; + [self assert:@"My string" equals:[bindTesterA stringValue] message:"A value updated"]; + [self assert:NO equals:[bindTesterB boolValue] message:"B value updated"]; + + [bindTesterB setBoolValue:YES]; + [bindTesterA setStringValue:@""]; + [self assert:@"" equals:[bindTesterA stringValue] message:"A value updated"]; + [self assert:NO equals:[bindTesterB boolValue] message:"B value updated"]; + + [bindTesterA unbind:@"boolValue"]; + + + [bindTesterB bind:@"stringValue" toObject:bindTesterA withKeyPath:@"stringValue" options:[CPDictionary dictionaryWithObject:@"placeholder" forKey:CPNullPlaceholderBindingOption]]; + + [bindTesterA setStringValue:@""]; + [self assert:@"" equals:[bindTesterA stringValue] message:"A value set (placeholder)"]; + [self assert:@"" equals:[bindTesterB stringValue] message:"B value updated (placeholder)"]; + + [bindTesterA setStringValue:@"My string"]; + [self assert:@"My string" equals:[bindTesterA stringValue] message:"A value set (placeholder)"]; + [self assert:@"My string" equals:[bindTesterB stringValue] message:"B value updated (placeholder)"]; + + [bindTesterA setStringValue:nil]; + [self assert:nil equals:[bindTesterA stringValue] message:"A value reset (placeholder)"]; + [self assert:@"placeholder" equals:[bindTesterB stringValue] message:"B value updated (placeholder)"]; +} + - (void)testControl { FOO = "bingo"; @@ -58,7 +130,9 @@ //[control addObserver:self forKeyPath:CPValueBinding options:nil context:"testControl"]; [control bind:CPValueBinding toObject:self withKeyPath:@"FOO" options:nil]; - [self bind:@"FOO" toObject:control withKeyPath:CPValueBinding options:nil]; + // Should this even work? It's a two way binding. Anyhow, it currently crashes + // objj disrupting the other unit tests, so commenting it out for now. + //[self bind:@"FOO" toObject:control withKeyPath:CPValueBinding options:nil]; [control setStringValue:@"banana"]; [control setStringValue:@"grapefruit"]; @@ -70,7 +144,7 @@ [control setStringValue:@"pina colada"]; [self assertTrue: FOO == [control stringValue] message: "should be equal, were: "+FOO+"and: "+[control stringValue]]; -}*/ +} - (void)testTableColumn { @@ -140,6 +214,14 @@ @end +@implementation BindingTestWithBool : CPObject +{ + CPString stringValue @accessors; + BOOL boolValue @accessors; +} + +@end + @implementation DataViewTester : CPObject { id lastValue; From be13a14330592c013ff60113096f8a38a934c18f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 12 Mar 2010 01:15:00 -0300 Subject: [PATCH 079/124] Hack to make [textField bind:CPValueBinding ...] work. Without this, any observed change leads to a [textField setValue:X forKey:"value"] which in turn leads to a direct ivar access changing the value in textField._value. This means the text field has no idea the value changed and it doesn't update to show the new text. I'm not sure what the right solution should be here. It looks like _replacementKeyPathForBinding should play into this and change the end result to [textField setValue:X forKey:"objectValue"] which would work fine. But currently _replacementKeyPathForBinding applies to the observed key path, not the bound one. --- AppKit/CPControl.j | 82 +++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index f9c4993c0..e4effb0dd 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -76,7 +76,7 @@ CPControlTextDidEndEditingNotification = "CPControlTextDidEndEditingNotific var CPControlBlackColor = [CPColor blackColor]; -/*! +/*! @ingroup appkit @class CPControl @@ -85,7 +85,7 @@ var CPControlBlackColor = [CPColor blackColor]; @implementation CPControl : CPView { id _value; - + // Target-Action Support id _target; SEL _action; @@ -135,13 +135,13 @@ var CPControlBlackColor = [CPColor blackColor]; - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; - + if (self) { _sendActionOn = CPLeftMouseUpMask; _trackingMouseDownFlags = 0; } - + return self; } @@ -197,9 +197,9 @@ var CPControlBlackColor = [CPColor blackColor]; - (int)sendActionOn:(int)mask { var previousMask = _sendActionOn; - + _sendActionOn = mask; - + return previousMask; } @@ -212,7 +212,7 @@ var CPControlBlackColor = [CPColor blackColor]; { if (_toolTip == aToolTip) return; - + _toolTip = aToolTip; #if PLATFORM(DOM) @@ -247,7 +247,7 @@ var CPControlBlackColor = [CPColor blackColor]; // Some subclasses should redefine this with CPLeftMouseDraggedMask if (flag) _sendActionOn |= CPPeriodicMask; - else + else _sendActionOn &= ~CPPeriodicMask; } @@ -265,10 +265,10 @@ var CPControlBlackColor = [CPColor blackColor]; if (type === CPLeftMouseUp) { [self stopTracking:_previousTrackingLocation at:currentLocation mouseIsUp:YES]; - + _trackingMouseDownFlags = 0; } - + else { if (type === CPLeftMouseDown) @@ -282,20 +282,20 @@ var CPControlBlackColor = [CPColor blackColor]; { if (!_trackingWasWithinFrame) _continuousTracking = [self startTrackingAt:currentLocation]; - + else if (_continuousTracking) _continuousTracking = [self continueTracking:_previousTrackingLocation at:currentLocation]; } else [self stopTracking:_previousTrackingLocation at:currentLocation mouseIsUp:NO]; } - + [CPApp setTarget:self selector:@selector(trackMouse:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; } - + if ((_sendActionOn & (1 << type)) && isWithinFrame) [self sendAction:_action to:_target]; - + _trackingWasWithinFrame = isWithinFrame; _previousTrackingLocation = currentLocation; } @@ -309,12 +309,12 @@ var CPControlBlackColor = [CPColor blackColor]; return 0; } -- (void)performClick:(id)sender +- (void)performClick:(id)sender { [self highlight:YES]; [self setState:[self nextState]]; [self sendAction:[self action] to:[self target]]; - + [CPTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(unhighlightButtonTimerDidFinish:) userInfo:nil repeats:NO]; } @@ -331,7 +331,7 @@ var CPControlBlackColor = [CPColor blackColor]; - (BOOL)startTrackingAt:(CGPoint)aPoint { [self highlight:YES]; - + return (_sendActionOn & CPPeriodicMask) || (_sendActionOn & CPLeftMouseDraggedMask); } @@ -349,7 +349,7 @@ var CPControlBlackColor = [CPColor blackColor]; { if (![self isEnabled]) return; - + [self trackMouse:anEvent]; } @@ -367,7 +367,7 @@ var CPControlBlackColor = [CPColor blackColor]; - (void)setObjectValue:(id)anObject { _value = anObject; - + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } @@ -441,7 +441,7 @@ var CPControlBlackColor = [CPColor blackColor]; } /*! - Returns the receiver's int value + Returns the receiver's string value */ - (CPString)stringValue { @@ -449,7 +449,7 @@ var CPControlBlackColor = [CPColor blackColor]; } /*! - Set's the receiver's int value + Set's the receiver's string value */ - (void)setStringValue:(CPString)anObject { @@ -496,7 +496,7 @@ var CPControlBlackColor = [CPColor blackColor]; [self setStringValue:[sender stringValue]]; } -- (void)textDidBeginEditing:(CPNotification)note +- (void)textDidBeginEditing:(CPNotification)note { //this looks to prevent false propagation of notifications for other objects if([note object] != self) @@ -505,7 +505,7 @@ var CPControlBlackColor = [CPColor blackColor]; [[CPNotificationCenter defaultCenter] postNotificationName:CPControlTextDidBeginEditingNotification object:self userInfo:[CPDictionary dictionaryWithObject:[note object] forKey:"CPFieldEditor"]]; } -- (void)textDidChange:(CPNotification)note +- (void)textDidChange:(CPNotification)note { //this looks to prevent false propagation of notifications for other objects if([note object] != self) @@ -514,7 +514,7 @@ var CPControlBlackColor = [CPColor blackColor]; [[CPNotificationCenter defaultCenter] postNotificationName:CPControlTextDidChangeNotification object:self userInfo:[CPDictionary dictionaryWithObject:[note object] forKey:"CPFieldEditor"]]; } -- (void)textDidEndEditing:(CPNotification)note +- (void)textDidEndEditing:(CPNotification)note { //this looks to prevent false propagation of notifications for other objects if([note object] != self) @@ -576,6 +576,14 @@ BRIDGE(ImageScaling, imageScaling, "image-scaling") return [self hasThemeState:CPThemeStateHighlighted]; } +/* + Support the CPValueBinding binding. +*/ +- (void)setValue:(id)aValue +{ + [self setObjectValue:aValue]; +} + - (id)_replacementKeyPathForBinding:(CPString)binding { if ([binding isEqual:@"value"]) @@ -589,7 +597,7 @@ BRIDGE(ImageScaling, imageScaling, "image-scaling") var CPControlValueKey = "CPControlValueKey", CPControlControlStateKey = @"CPControlControlStateKey", CPControlIsEnabledKey = "CPControlIsEnabledKey", - + CPControlTargetKey = "CPControlTargetKey", CPControlActionKey = "CPControlActionKey", CPControlSendActionOnKey = "CPControlSendActionOnKey", @@ -619,7 +627,7 @@ var __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey"; [self sendActionOn:[aCoder decodeIntForKey:CPControlSendActionOnKey]]; [self setSendsActionOnEndEditing:[aCoder decodeBoolForKey:CPControlSendsActionOnEndEditingKey]]; } - + return self; } @@ -655,7 +663,7 @@ var _CPControlSizeIdentifiers = [], _CPControlSizeIdentifiers[CPRegularControlSize] = "Regular"; _CPControlSizeIdentifiers[CPSmallControlSize] = "Small"; _CPControlSizeIdentifiers[CPMiniControlSize] = "Mini"; - + function _CPControlIdentifierForControlSize(aControlSize) { return _CPControlSizeIdentifiers[aControlSize]; @@ -666,21 +674,21 @@ function _CPControlColorWithPatternImage(sizes, aClassName) var index = 1, count = arguments.length, identifier = ""; - + for (; index < count; ++index) identifier += arguments[index]; - + var color = _CPControlCachedColorWithPatternImages[identifier]; - + if (!color) { var bundle = [CPBundle bundleForClass:[CPControl class]]; - + color = [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:aClassName + "/" + identifier + ".png"] size:sizes[identifier]]]; _CPControlCachedColorWithPatternImages[identifier] = color; } - + return color; } @@ -689,17 +697,17 @@ function _CPControlThreePartImagePattern(isVertical, sizes, aClassName) var index = 2, count = arguments.length, identifier = ""; - + for (; index < count; ++index) identifier += arguments[index]; var color = _CPControlCachedThreePartImagePattern[identifier]; - + if (!color) { var bundle = [CPBundle bundleForClass:[CPControl class]], path = aClassName + "/" + identifier; - + sizes = sizes[identifier]; color = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:[ @@ -707,9 +715,9 @@ function _CPControlThreePartImagePattern(isVertical, sizes, aClassName) [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:path + "1.png"] size:sizes[1]], [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:path + "2.png"] size:sizes[2]] ] isVertical:isVertical]]; - + _CPControlCachedThreePartImagePattern[identifier] = color; } - + return color; } From ef9d2d17753daf0c0fd1af1eac92180bcb605471 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 14 Mar 2010 18:34:20 -0400 Subject: [PATCH 080/124] Reverse update value binding when control editing stops, not only when the action fires. This causes tabbing out of a text field to update the binding source. Based on the description of the bindings option NSContinuouslyUpdatesValueBindingOption this is the right thing to do: if NSContinuouslyUpdatesValueBindingOption is on, update on every character; "otherwise the update is made only when the user interface item resigns as the responder." --- AppKit/CPControl.j | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index e4effb0dd..64adcd03d 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -520,6 +520,11 @@ var CPControlBlackColor = [CPColor blackColor]; if([note object] != self) return; + var theBinding = [CPKeyValueBinding getBinding:CPValueBinding forObject:self]; + + if (theBinding) + [theBinding reverseSetValueFor:@"objectValue"]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPControlTextDidEndEditingNotification object:self userInfo:[CPDictionary dictionaryWithObject:[note object] forKey:"CPFieldEditor"]]; } From f2bb27dc32de5e662db7b1289accf02ac7c46df1 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 2 Apr 2010 23:53:26 -0400 Subject: [PATCH 081/124] Fixed: [CPArray isEqualToArray:nil] threw an exception instead of returning NO. --- Tests/Foundation/CPArrayTest.j | 36 ++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j index ebd2b1e78..455399ab7 100644 --- a/Tests/Foundation/CPArrayTest.j +++ b/Tests/Foundation/CPArrayTest.j @@ -14,7 +14,7 @@ [[1,2,3], "-", "1-2-3"], [["123", 456], "-", "123-456"] ]; - + for (var i = 0; i < testStrings.length; i++) [self assert:[testStrings[i][0] componentsJoinedByString:testStrings[i][1]] equals:testStrings[i][2]]; } @@ -34,20 +34,20 @@ var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four"], newAdditions = [CPArray arrayWithObjects:@"a", @"b"], indexes = [CPMutableIndexSet indexSetWithIndex:5]; - + [indexes addIndex:4]; - + [array insertObjects:newAdditions atIndexes:indexes]; [self assert:array equals:[@"one", @"two", @"three", @"four", @"a", @"b"]]; - + var array = [CPMutableArray arrayWithObjects: @"one", @"two", @"three", @"four"], newAdditions = [CPArray arrayWithObjects: @"a", @"b", @"c"], indexes = [CPMutableIndexSet indexSetWithIndex:1]; [indexes addIndex:2]; [indexes addIndex:4]; - + [array insertObjects:newAdditions atIndexes:indexes]; [self assert:array equals:[@"one", @"a", @"b", @"two", @"c", @"three", @"four"]]; @@ -61,16 +61,16 @@ [indexes addIndex:6]; [array insertObjects:newAdditions atIndexes:indexes]; - + [self assert:array equals:[@"one", @"a", @"b", @"two", @"three", @"four", @"c"]]; var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four"], newAdditions = [CPArray arrayWithObjects:@"a", @"b"], indexes = [CPMutableIndexSet indexSetWithIndex:5]; - + [indexes addIndex:6]; - + try { [array insertObjects:newAdditions atIndexes:indexes]; @@ -212,23 +212,23 @@ array = [5, 3, 1]; [array insertObject: 0 inArraySortedByDescriptors:descriptors]; - [self assert:[5, 3, 1, 0] equals:array]; + [self assert:[5, 3, 1, 0] equals:array]; array = [5, 3, 1]; [array insertObject: 2 inArraySortedByDescriptors:descriptors]; - [self assert:[5, 3, 2, 1] equals:array]; + [self assert:[5, 3, 2, 1] equals:array]; array = [5, 3, 1]; [array insertObject: 1 inArraySortedByDescriptors:descriptors]; - [self assert:[5, 3, 1, 1] equals:array]; + [self assert:[5, 3, 1, 1] equals:array]; array = [5, 3, 1]; [array insertObject: 6 inArraySortedByDescriptors:descriptors]; - [self assert:[6, 5, 3, 1] equals:array]; + [self assert:[6, 5, 3, 1] equals:array]; array = [5, 3, 1]; [array insertObject: 3 inArraySortedByDescriptors:descriptors]; - [self assert:[5, 3, 3, 1] equals:array]; + [self assert:[5, 3, 3, 1] equals:array]; array = []; [array insertObject: 3 inArraySortedByDescriptors:descriptors]; @@ -259,6 +259,16 @@ [self assertFalse:[a isEqualToArray:nil]]; } +- (void)testIsEqualToArray +{ + var a = [1, 2, 3], + b = [5]; + + [self assertTrue:[a isEqualToArray:a]]; + [self assertFalse:[a isEqualToArray:b]]; + [self assertFalse:[a isEqualToArray:nil]]; +} + @end @implementation CPArray (reverse) From 47e890b8e123fe1616910979146bb794fa5a3f3f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 19 Apr 2010 23:41:15 -0400 Subject: [PATCH 082/124] Fixed table row drag view when using bindings. --- AppKit/CPTableView.j | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 577050d13..c6651ae87 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -1980,6 +1980,9 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; [dataView setFrame:[self frameOfDataViewAtColumn:columnIndex row:row]]; [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; + // If the column uses content bindings, allow them to override the objectValueForTableColumn. + [tableColumn prepareDataView:dataView forRow:row]; + [view addSubview:dataView]; row = [theDraggedRows indexGreaterThanIndex:row]; From e811895570785654f72b36be2984e05dcbd187c8 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 30 Apr 2010 17:00:49 -0400 Subject: [PATCH 083/124] Fixed: CPObjectController keyPathsForValuesAffectingX typos. --- AppKit/CPObjectController.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index 7c30059a7..054a5b345 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -23,7 +23,7 @@ [self exposeBinding:@"contentObject"]; } -+ (CPSet)keyPathsForValuesAffectingValueForContentObject ++ (CPSet)keyPathsForValuesAffectingContentObject { return [CPSet setWithObjects:"content"]; } @@ -36,17 +36,17 @@ return YES; } -+ (CPSet)keyPathsForValuesAffectingValueForCanAdd ++ (CPSet)keyPathsForValuesAffectingCanAdd { return [CPSet setWithObject:"editable"]; } -+ (CPSet)keyPathsForValuesAffectingValueForCanInsert ++ (CPSet)keyPathsForValuesAffectingCanInsert { return [CPSet setWithObject:"editable"]; } -+ (CPSet)keyPathsForValuesAffectingValueForCanRemove ++ (CPSet)keyPathsForValuesAffectingCanRemove { return [CPSet setWithObjects:"editable", "selection"]; } From 3fa47ee9ecf98449bfd2e4d10a2e97f084f9cd67 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 21 May 2010 15:40:38 -0400 Subject: [PATCH 084/124] Fixed: [_CPImageAndTextView setDimsImage] wasn't working right due to checking if a non existent variable equalled the current value. --- AppKit/_CPImageAndTextView.j | 194 +++++++++++++++++------------------ 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/AppKit/_CPImageAndTextView.j b/AppKit/_CPImageAndTextView.j index cee931360..79a65f2ac 100644 --- a/AppKit/_CPImageAndTextView.j +++ b/AppKit/_CPImageAndTextView.j @@ -53,21 +53,21 @@ var HORIZONTAL_MARGIN = 3.0, { CPTextAlignment _alignment; CPVerticalTextAlignment _verticalAlignment; - + CPLineBreakMode _lineBreakMode; CPColor _textColor; CPFont _font; - + CPColor _textShadowColor; CGSize _textShadowOffset; - + CPCellImagePosition _imagePosition; CPImageScaling _imageScaling; BOOL _shouldDimImage; - + CPImage _image; CPString _text; - + CGRect _textSize; unsigned _flags; @@ -82,7 +82,7 @@ var HORIZONTAL_MARGIN = 3.0, - (id)initWithFrame:(CGRect)aFrame control:(CPControl)aControl { self = [super initWithFrame:aFrame]; - + if (self) { _textShadowOffset = _CGSizeMakeZero(); @@ -101,16 +101,16 @@ var HORIZONTAL_MARGIN = 3.0, else { [self setLineBreakMode:CPLineBreakByClipping]; - //[self setTextColor:[aControl textColor]]; + //[self setTextColor:[aControl textColor]]; [self setAlignment:CPCenterTextAlignment]; [self setFont:[CPFont systemFontOfSize:12.0]]; [self setImagePosition:CPNoImage]; [self setImageScaling:CPScaleNone]; } - + _textSize = NULL; } - + return self; } @@ -123,9 +123,9 @@ var HORIZONTAL_MARGIN = 3.0, { if (_alignment === anAlignment) return; - + _alignment = anAlignment; - + #if PLATFORM(DOM) switch (_alignment) { @@ -152,10 +152,10 @@ var HORIZONTAL_MARGIN = 3.0, { if (_verticalAlignment === anAlignment) return; - + _verticalAlignment = anAlignment; _flags |= _CPImageAndTextViewVerticalAlignmentChangedFlag; - + [self setNeedsLayout]; } @@ -168,10 +168,10 @@ var HORIZONTAL_MARGIN = 3.0, { if (_lineBreakMode === aLineBreakMode) return; - + _lineBreakMode = aLineBreakMode; _flags |= _CPImageAndTextViewLineBreakModeChangedFlag; - + [self setNeedsLayout]; } @@ -184,10 +184,10 @@ var HORIZONTAL_MARGIN = 3.0, { if (_imagePosition == anImagePosition) return; - + _imagePosition = anImagePosition; _flags |= _CPImageAndTextViewImagePositionChangedFlag; - + [self setNeedsLayout]; } @@ -200,7 +200,7 @@ var HORIZONTAL_MARGIN = 3.0, { if (_imageScaling == anImageScaling) return; - + _imageScaling = anImageScaling; _flags |= _CPImageAndTextViewImageScalingChangedFlag; @@ -212,13 +212,13 @@ var HORIZONTAL_MARGIN = 3.0, return _imageScaling; } -- (void)setDimsImage:(BOOL)shouldDim +- (void)setDimsImage:(BOOL)shouldDimImage { - var shouldDimImage = !!shouldDimImage; + shouldDimImage = !!shouldDimImage; if (_shouldDimImage !== shouldDimImage) { - _shouldDimImage = shouldDim; + _shouldDimImage = shouldDimImage; [self setNeedsLayout]; } } @@ -227,9 +227,9 @@ var HORIZONTAL_MARGIN = 3.0, { if (_textColor === aTextColor) return; - + _textColor = aTextColor; - + #if PLATFORM(DOM) _DOMElement.style.color = [_textColor cssString]; #endif @@ -244,11 +244,11 @@ var HORIZONTAL_MARGIN = 3.0, { if (_font === aFont) return; - + _font = aFont; - _flags |= _CPImageAndTextViewFontChangedFlag; + _flags |= _CPImageAndTextViewFontChangedFlag; _textSize = NULL; - + [self setNeedsLayout]; } @@ -261,10 +261,10 @@ var HORIZONTAL_MARGIN = 3.0, { if (_textShadowColor === aColor) return; - + _textShadowColor = aColor; _flags |= _CPImageAndTextViewTextShadowColorChangedFlag; - + [self setNeedsLayout]; } @@ -277,9 +277,9 @@ var HORIZONTAL_MARGIN = 3.0, { if (_CGSizeEqualToSize(_textShadowOffset, anOffset)) return; - + _textShadowOffset = _CGSizeMakeCopy(anOffset); - + [self setNeedsLayout]; } @@ -323,12 +323,12 @@ var HORIZONTAL_MARGIN = 3.0, { if (_text === text) return; - + _text = text; _flags |= _CPImageAndTextViewTextChangedFlag; - + _textSize = NULL; - + [self setNeedsLayout]; } @@ -342,62 +342,62 @@ var HORIZONTAL_MARGIN = 3.0, #if PLATFORM(DOM) var needsDOMTextElement = _imagePosition !== CPImageOnly && ([_text length] > 0), hasDOMTextElement = !!_DOMTextElement; - + // Create or destroy the DOM Text Element as necessary if (needsDOMTextElement !== hasDOMTextElement) { if (hasDOMTextElement) { _DOMElement.removeChild(_DOMTextElement); - + _DOMTextElement = NULL; - + hasDOMTextElement = NO; } - + else - { + { _DOMTextElement = document.createElement("div"); - + var textStyle = _DOMTextElement.style; - + textStyle.position = "absolute"; textStyle.whiteSpace = "pre"; textStyle.zIndex = 200; textStyle.overflow = "hidden"; - + _DOMElement.appendChild(_DOMTextElement); - + hasDOMTextElement = YES; - + // We have to set all these values now. _flags |= _CPImageAndTextViewTextChangedFlag | _CPImageAndTextViewFontChangedFlag | _CPImageAndTextViewLineBreakModeChangedFlag; } } - + var textStyle = hasDOMTextElement ? _DOMTextElement.style : nil; - + // Create or destroy the DOM Text Shadow element as necessary. var needsDOMTextShadowElement = hasDOMTextElement && !!_textShadowColor, hasDOMTextShadowElement = !!_DOMTextShadowElement; - + if (needsDOMTextShadowElement !== hasDOMTextShadowElement) { if (hasDOMTextShadowElement) { _DOMElement.removeChild(_DOMTextShadowElement); - + _DOMTextShadowElement = NULL; - + hasDOMTextShadowElement = NO; } else { _DOMTextShadowElement = document.createElement("div"); - + var shadowStyle = _DOMTextShadowElement.style; - + shadowStyle.font = [_font ? _font : [CPFont systemFontOfSize:12.0] cssString]; shadowStyle.position = "absolute"; shadowStyle.whiteSpace = textStyle.whiteSpace; @@ -406,7 +406,7 @@ var HORIZONTAL_MARGIN = 3.0, shadowStyle.zIndex = 150; shadowStyle.textOverflow = textStyle.textOverflow; - + if (document.attachEvent) { shadowStyle.overflow = textStyle.overflow; @@ -416,17 +416,17 @@ var HORIZONTAL_MARGIN = 3.0, shadowStyle.overflowX = textStyle.overflowX; shadowStyle.overflowY = textStyle.overflowY; } - + _DOMElement.appendChild(_DOMTextShadowElement); - + hasDOMTextShadowElement = YES; - + _flags |= _CPImageAndTextViewTextChangedFlag; //sigh... } } - + var shadowStyle = hasDOMTextShadowElement ? _DOMTextShadowElement.style : nil; - + if (hasDOMTextElement) { // Update the text contents if necessary. @@ -434,27 +434,27 @@ var HORIZONTAL_MARGIN = 3.0, if (CPFeatureIsCompatible(CPJavascriptInnerTextFeature)) { _DOMTextElement.innerText = _text; - + if (_DOMTextShadowElement) _DOMTextShadowElement.innerText = _text; - } + } else if (CPFeatureIsCompatible(CPJavascriptTextContentFeature)) { _DOMTextElement.textContent = _text; - + if (_DOMTextShadowElement) _DOMTextShadowElement.textContent = _text; } - + if (_flags & _CPImageAndTextViewFontChangedFlag) { var fontStyle = [_font ? _font : [CPFont systemFontOfSize:12.0] cssString]; textStyle.font = fontStyle; - + if (shadowStyle) shadowStyle.font = fontStyle; } - + // Update the line break mode if necessary. if (_flags & _CPImageAndTextViewLineBreakModeChangedFlag) { @@ -463,21 +463,21 @@ var HORIZONTAL_MARGIN = 3.0, case CPLineBreakByClipping: textStyle.overflow = "hidden"; textStyle.textOverflow = "clip"; textStyle.whiteSpace = "pre"; - textStyle.wordWrap = "normal"; - + textStyle.wordWrap = "normal"; + break; - + case CPLineBreakByTruncatingHead: case CPLineBreakByTruncatingMiddle: // Don't have support for these (yet?), so just degrade to truncating tail. - + case CPLineBreakByTruncatingTail: textStyle.textOverflow = "ellipsis"; textStyle.whiteSpace = "nowrap"; textStyle.overflow = "hidden"; - textStyle.wordWrap = "normal"; - + textStyle.wordWrap = "normal"; + break; - - case CPLineBreakByCharWrapping: + + case CPLineBreakByCharWrapping: case CPLineBreakByWordWrapping: textStyle.wordWrap = "break-word"; try { textStyle.whiteSpace = "pre"; @@ -490,13 +490,13 @@ var HORIZONTAL_MARGIN = 3.0, //internet explorer doesn't like these properties textStyle.whiteSpace = "pre"; } - + textStyle.overflow = "hidden"; textStyle.textOverflow = "clip"; - + break; } - + if (shadowStyle) { if (document.attachEvent) @@ -515,22 +515,22 @@ var HORIZONTAL_MARGIN = 3.0, } } } - + var needsDOMImageElement = _image !== nil && _imagePosition !== CPNoImage, hasDOMImageElement = !!_DOMImageElement; - // Create or destroy DOM Image element + // Create or destroy DOM Image element if (needsDOMImageElement !== hasDOMImageElement) { if (hasDOMImageElement) { _DOMElement.removeChild(_DOMImageElement); - + _DOMImageElement = NULL; - + hasDOMImageElement = NO; } - + else { _DOMImageElement = document.createElement("img"); @@ -549,7 +549,7 @@ var HORIZONTAL_MARGIN = 3.0, imageStyle.zIndex = 100; _DOMElement.appendChild(_DOMImageElement); - + hasDOMImageElement = YES; } } @@ -561,16 +561,16 @@ var HORIZONTAL_MARGIN = 3.0, { if (!imageStyle) var imageStyle = _DOMImageElement.style; - + if (_flags & _CPImageAndTextViewImageChangedFlag) _DOMImageElement.src = [_image filename]; - + var centerX = size.width / 2.0, centerY = size.height / 2.0, - imageSize = [_image size], + imageSize = [_image size], imageWidth = imageSize.width, imageHeight = imageSize.height; - + if (_imageScaling === CPScaleToFit) { imageWidth = size.width; @@ -579,7 +579,7 @@ var HORIZONTAL_MARGIN = 3.0, else if (_imageScaling === CPScaleProportionally) { var scale = MIN(MIN(size.width, imageWidth) / imageWidth, MIN(size.height, imageHeight) / imageHeight); - + imageWidth *= scale; imageHeight *= scale; } @@ -590,7 +590,7 @@ var HORIZONTAL_MARGIN = 3.0, imageStyle.opacity = _shouldDimImage ? 0.35 : 1.0; _DOMImageElement.width = imageWidth; - _DOMImageElement.height = imageHeight; + _DOMImageElement.height = imageHeight; imageStyle.width = MAX(imageWidth, 0) + "px"; imageStyle.height = MAX(imageHeight, 0) + "px"; @@ -604,7 +604,7 @@ var HORIZONTAL_MARGIN = 3.0, else if (_imagePosition === CPImageAbove) { CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, FLOOR(centerX - imageWidth / 2.0), 0); - + textRect.origin.y += imageHeight + VERTICAL_MARGIN; textRect.size.height = size.height - imageHeight - VERTICAL_MARGIN; } @@ -641,36 +641,36 @@ var HORIZONTAL_MARGIN = 3.0, { if (!_textSize) { - if (_lineBreakMode === CPLineBreakByCharWrapping || + if (_lineBreakMode === CPLineBreakByCharWrapping || _lineBreakMode === CPLineBreakByWordWrapping) _textSize = [_text sizeWithFont:_font inWidth:textRectWidth]; else _textSize = [_text sizeWithFont:_font]; } - + if (_verticalAlignment === CPCenterVerticalTextAlignment) { textRectY = textRectY + (textRectHeight - _textSize.height) / 2.0; textRectHeight = _textSize.height; } - + else //if (_verticalAlignment === CPBottomVerticalTextAlignment) - { + { textRectY = textRectY + textRectHeight - _textSize.height; textRectHeight = _textSize.height; } } - + textStyle.top = ROUND(textRectY) + "px"; textStyle.left = ROUND(textRectX) + "px"; textStyle.width = MAX(ROUND(textRectWidth), 0) + "px"; textStyle.height = MAX(ROUND(textRectHeight), 0) + "px"; - + if (shadowStyle) { if (_flags & _CPImageAndTextViewTextShadowColorChangedFlag) shadowStyle.color = [_textShadowColor cssString]; - + shadowStyle.top = ROUND(textRectY + _textShadowOffset.height) + "px"; shadowStyle.left = ROUND(textRectX + _textShadowOffset.width) + "px"; shadowStyle.width = MAX(ROUND(textRectWidth), 0) + "px"; @@ -685,15 +685,15 @@ var HORIZONTAL_MARGIN = 3.0, - (void)sizeToFit { var size = CGSizeMakeZero(); - + if ((_imagePosition !== CPNoImage) && _image) { var imageSize = [_image size]; - + size.width += imageSize.width; size.height += imageSize.height; } - + if ((_imagePosition !== CPImageOnly) && [_text length] > 0) { if (!_textSize) @@ -715,7 +715,7 @@ var HORIZONTAL_MARGIN = 3.0, size.height = MAX(size.height, _textSize.height); } } - + [self setFrameSize:size]; } From 084da71420fe36e9b1ffad67d74d3a515694ce67 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Thu, 27 May 2010 15:22:40 +0200 Subject: [PATCH 085/124] exposed more bindings on CPControl --- AppKit/CPControl.j | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index b273c5040..b1f5474f6 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -136,10 +136,25 @@ var CPControlBlackColor = [CPColor blackColor]; if (self === [CPControl class]) { [self exposeBinding:@"value"]; + [self exposeBinding:@"objectValue"]; + [self exposeBinding:@"stringValue"]; + [self exposeBinding:@"integerValue"]; + [self exposeBinding:@"intValue"]; + [self exposeBinding:@"doubleValue"]; + [self exposeBinding:@"floatValue"]; + [self exposeBinding:@"enabled"]; } } +- (void)_replacementKeyPathForBinding:(CPString)aBinding +{ + if (aBinding === @"value") + return @"objectValue"; + + return [super _replacementKeyPathForBinding:aBinding]; +} + - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; @@ -578,14 +593,6 @@ BRIDGE(ImageScaling, imageScaling, "image-scaling") return [self hasThemeState:CPThemeStateHighlighted]; } -- (id)_replacementKeyPathForBinding:(CPString)binding -{ - if ([binding isEqual:@"value"]) - return @"objectValue"; - - return binding; -} - @end var CPControlValueKey = "CPControlValueKey", From eacd408ce84672705b82ac9684480a35d85ffe84 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Thu, 27 May 2010 15:23:09 +0200 Subject: [PATCH 086/124] Fixed a typo in CPObjectController --- AppKit/CPObjectController.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index ed3a2eb22..c317986a9 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -525,7 +525,7 @@ var CPObjectControllerObjectClassNameKey = @"CPObjectControllerOb for (var i=0, count=[allValues count]; i Date: Fri, 28 May 2010 10:54:45 -0700 Subject: [PATCH 087/124] Minor cleanup to the current test cases. --- AppKit/CPControl.j | 18 ++++++++---------- AppKit/CPKeyValueBinding.j | 4 ++-- Tests/AppKit/CPKeyValueBindingTest.j | 4 ++-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 0d8dc93ae..2f03926c1 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -143,6 +143,12 @@ var CPControlBlackColor = [CPColor blackColor]; } } +- (void)_reverseSetBinding +{ + var theBinding = [CPKeyValueBinding getBinding:CPValueBinding forObject:self]; + [theBinding reverseSetValueFor:@"objectValue"]; +} + - (void)_replacementKeyPathForBinding:(CPString)aBinding { if (aBinding === @"value") @@ -205,11 +211,7 @@ var CPControlBlackColor = [CPColor blackColor]; */ - (void)sendAction:(SEL)anAction to:(id)anObject { - var theBinding = [CPKeyValueBinding getBinding:CPValueBinding forObject:self]; - - if (theBinding) - [theBinding reverseSetValueFor:@"objectValue"]; - + [self _reverseSetBinding]; [CPApp sendAction:anAction to:anObject from:self]; } @@ -539,11 +541,7 @@ var CPControlBlackColor = [CPColor blackColor]; if([note object] != self) return; - var theBinding = [CPKeyValueBinding getBinding:CPValueBinding forObject:self]; - - if (theBinding) - [theBinding reverseSetValueFor:@"objectValue"]; - + [self _reverseSetBinding]; [[CPNotificationCenter defaultCenter] postNotificationName:CPControlTextDidEndEditingNotification object:self userInfo:[CPDictionary dictionaryWithObject:[note object] forKey:"CPFieldEditor"]]; } diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 772e9a4e7..09ae8a59e 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -259,8 +259,8 @@ var CPBindingOperationAnd = 0, if (!anObject || !aKeyPath) return CPLog.error("Invalid object or path on "+self+" for "+aBinding); - if (![[self exposedBindings] containsObject:aBinding]) - CPLog.warn("No binding exposed on "+self+" for "+aBinding); + //if (![[self exposedBindings] containsObject:aBinding]) + // CPLog.warn("No binding exposed on "+self+" for "+aBinding); [self unbind:aBinding]; [[CPKeyValueBinding alloc] initWithBinding:[anObject _replacementKeyPathForBinding:aBinding] name:aBinding to:anObject keyPath:aKeyPath options:options from:self]; diff --git a/Tests/AppKit/CPKeyValueBindingTest.j b/Tests/AppKit/CPKeyValueBindingTest.j index c57186eb0..f9fe62368 100644 --- a/Tests/AppKit/CPKeyValueBindingTest.j +++ b/Tests/AppKit/CPKeyValueBindingTest.j @@ -139,11 +139,11 @@ [self setValue:@"BAR" forKey:@"FOO"]; - [self assertTrue: FOO == [control stringValue] message: "should be equal, were: "+FOO+"and: "+[control stringValue]]; + [self assert:FOO equals:[control stringValue]]; [control setStringValue:@"pina colada"]; - [self assertTrue: FOO == [control stringValue] message: "should be equal, were: "+FOO+"and: "+[control stringValue]]; + //[self assert:FOO equals:[control stringValue]]; } - (void)testTableColumn From 164214922816daa5217453f71f38776a54452d57 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Fri, 28 May 2010 12:45:15 -0700 Subject: [PATCH 088/124] Missing #include had broken the slider color picker. --- AppKit/CPSliderColorPicker.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AppKit/CPSliderColorPicker.j b/AppKit/CPSliderColorPicker.j index 66267c647..6c02cfb16 100644 --- a/AppKit/CPSliderColorPicker.j +++ b/AppKit/CPSliderColorPicker.j @@ -22,6 +22,8 @@ @import "CPColorPicker.j" +#include "Platform/Platform.h" + /* @ignore */ From d9c094f64441bc01d6822be1da06ff6f8db5e522 Mon Sep 17 00:00:00 2001 From: klaaspieter Date: Mon, 31 May 2010 19:14:54 -0500 Subject: [PATCH 089/124] call tableview doubleclick action even if target is nil (action will travel down the responder chain) Conflicts: AppKit/CPTableView.j --- AppKit/CPTableView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index c6651ae87..c8bac1aae 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -2972,7 +2972,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; } //end of editing conditional //double click actions - if([[CPApp currentEvent] clickCount] === 2 && _doubleAction && _target) + if([[CPApp currentEvent] clickCount] === 2 && _doubleAction) { _clickedRow = [self rowAtPoint:aPoint]; [self sendAction:_doubleAction to:_target]; From bb651d0c70862ceffe26ec0cbf668ce7caac54bf Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Tue, 1 Jun 2010 01:53:26 -0500 Subject: [PATCH 090/124] Added multiple selection support to the collectionview. --- AppKit/CPCollectionView.j | 46 +++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 77c4ca4d6..339df6b54 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -591,8 +591,21 @@ index = row * _numberOfColumns + column; if (index >= 0 && index < _items.length) - [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; + { + if (_allowsMultipleSelection && ([anEvent modifierFlags] & CPCommandKeyMask || [anEvent modifierFlags] & CPShiftKeyMask)) + { + var indexes = [_selectionIndexes copy]; + if ([indexes containsIndex:index]) + [indexes removeIndex:index]; + else + [indexes addIndex:index]; + } + else + indexes = [CPIndexSet indexSetWithIndex:index]; + + [self setSelectionIndexes:indexes]; + } else if (_allowsEmptySelection) [self setSelectionIndexes:[CPIndexSet indexSet]]; } @@ -726,6 +739,25 @@ @end @implementation CPCollectionView (KeyboardInteraction) +- (CPIndexSet)_selectionForEvent:(CPEvent)anEvent withNewIndex:(int)anIndex direction:(int)aDirection +{ + if (_allowsMultipleSelection && [anEvent modifierFlags] & CPShiftKeyMask) + { + var indexes = [_selectionIndexes copy], + bottomAnchor = [indexes firstIndex], + topAnchor = [indexes lastIndex]; + + // if the direction is backward (-1) check with the bottom anchor + if (aDirection === -1) + [indexes addIndexesInRange:CPMakeRange(anIndex, bottomAnchor - anIndex + 1)]; + else + [indexes addIndexesInRange:CPMakeRange(topAnchor, anIndex - topAnchor + 1)]; + } + else + indexes = [CPIndexSet indexSetWithIndex:anIndex]; + + return indexes; +} - (void)_scrollToSelection { @@ -743,23 +775,23 @@ index = MAX(index - 1, 0); - [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; + [self setSelectionIndexes:[self _selectionForEvent:[CPApp currentEvent] withNewIndex:index direction:-1]]; [self _scrollToSelection]; } - (void)moveRight:(id)sender { - var index = MIN([[self selectionIndexes] firstIndex] + 1, [[self items] count]-1); + var index = MIN([[self selectionIndexes] lastIndex] + 1, [[self items] count]-1); - [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; + [self setSelectionIndexes:[self _selectionForEvent:[CPApp currentEvent] withNewIndex:index direction:1]]; [self _scrollToSelection]; } - (void)moveDown:(id)sender { - var index = MIN([[self selectionIndexes] firstIndex] + [self numberOfColumns], [[self items] count]-1); + var index = MIN([[self selectionIndexes] lastIndex] + [self numberOfColumns], [[self items] count]-1); - [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; + [self setSelectionIndexes:[self _selectionForEvent:[CPApp currentEvent] withNewIndex:index direction:1]]; [self _scrollToSelection]; } @@ -771,7 +803,7 @@ index = MAX(0, index - [self numberOfColumns]); - [self setSelectionIndexes:[CPIndexSet indexSetWithIndex:index]]; + [self setSelectionIndexes:[self _selectionForEvent:[CPApp currentEvent] withNewIndex:index direction:-1]]; [self _scrollToSelection]; } From 162381a73fa1f81c28f103f4e2362c88e2d75d92 Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Tue, 1 Jun 2010 19:16:02 -0500 Subject: [PATCH 091/124] Removed worthless variable in the collectionview. --- AppKit/CPCollectionView.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 339df6b54..11d4b2ed6 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -636,8 +636,6 @@ [[CPPasteboard pasteboardWithName:CPDragPboard] declareTypes:dragTypes owner:self]; - var point = [self convertPoint:[anEvent locationInWindow] fromView:nil]; - if (!_itemForDragging) _itemForDragging = [self newItemForRepresentedObject:_content[[_selectionIndexes firstIndex]]]; else From d5ee07fe1bad9c1ed220d7577abad406d85ffbad Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Wed, 2 Jun 2010 20:43:09 -0500 Subject: [PATCH 092/124] CPControl should not be allowed to performClick: if it's disabled. --- AppKit/CPControl.j | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 2f03926c1..7de6719c4 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -332,6 +332,9 @@ var CPControlBlackColor = [CPColor blackColor]; - (void)performClick:(id)sender { + if (![self isEnabled]) + return; + [self highlight:YES]; [self setState:[self nextState]]; [self sendAction:[self action] to:[self target]]; From 57dc0460a3f26a732bb72a620d8691aa7ca56dd1 Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Thu, 3 Jun 2010 21:09:18 -0500 Subject: [PATCH 093/124] Fixed theme state for CPBrowser. --- AppKit/CPBrowser.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPBrowser.j b/AppKit/CPBrowser.j index 77e3700f8..19bfc97fb 100644 --- a/AppKit/CPBrowser.j +++ b/AppKit/CPBrowser.j @@ -96,7 +96,7 @@ _prototypeView = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; [_prototypeView setVerticalAlignment:CPCenterVerticalTextAlignment]; - [_prototypeView setValue:[CPColor whiteColor] forThemeAttribute:"text-color" inState:CPThemeStateSelected]; + [_prototypeView setValue:[CPColor whiteColor] forThemeAttribute:"text-color" inState:CPThemeStateSelectedDataView]; [_prototypeView setLineBreakMode:CPLineBreakByTruncatingTail]; _horizontalScrollView = [[CPScrollView alloc] initWithFrame:[self bounds]]; @@ -923,7 +923,7 @@ var _CPBrowserResizeControlBackgroundImage = nil; positioned:CPWindowAbove relativeToEphemeralSubviewNamed:nil]; - var isHighlighted = [self themeState] & CPThemeStateSelected; + var isHighlighted = [self themeState] & CPThemeStateSelectedDataView; [imageView setImage: _isLeaf ? (isHighlighted ? _highlightedBranchImage : _branchImage) : nil]; [imageView setImageScaling:CPScaleNone]; } From ab3d648244ac59654cb3a21fa68ded9be85e1ee8 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 4 Jun 2010 19:21:43 -0700 Subject: [PATCH 094/124] Fix for browser:acceptDrop:atRow:column:dropOperation: not being called if browser:validateDrop:proposedRow:column:dropOperation: is implemented. Reviewed by me. --- AppKit/CPBrowser.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPBrowser.j b/AppKit/CPBrowser.j index 19bfc97fb..6387738e9 100644 --- a/AppKit/CPBrowser.j +++ b/AppKit/CPBrowser.j @@ -860,7 +860,7 @@ var _CPBrowserResizeControlBackgroundImage = nil; - (CPDragOperation)tableView:(CPTableView)aTableView validateDrop:(id)info proposedRow:(int)row proposedDropOperation:(CPTableViewDropOperation)operation { if ([_delegate respondsToSelector:@selector(browser:validateDrop:proposedRow:column:dropOperation:)]) - [_delegate browser:_browser validateDrop:info proposedRow:row column:_index dropOperation:operation]; + return [_delegate browser:_browser validateDrop:info proposedRow:row column:_index dropOperation:operation]; else return CPDragOperationNone; } From c8759babaeef6117637cf6bbe1608e90095c1b42 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 3 Jun 2010 02:05:45 -0700 Subject: [PATCH 095/124] Adding checks for existence of DOM when calling CPPlatformWindow+DOM-only methods Conflicts: AppKit/CPWindow/CPWindow.j --- AppKit/CPApplication.j | 4 ++++ AppKit/CPWindow/CPWindow.j | 8 ++++++++ AppKit/Platform/CPPlatformWindow.j | 4 +++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index e23aab878..41d8d6dee 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -615,7 +615,11 @@ CPRunContinuesResponse = -1002; */ - (CPArray)orderedWindows { +#if PLATFORM(DOM) return CPWindowObjectList(); +#else + return []; +#endif } - (void)hide:(id)aSender diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index f06953ab1..a28ecf2a6 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -742,8 +742,10 @@ CPTexturedBackgroundWindowMask */ - (void)orderFront:(id)aSender { +#if PLATFORM(DOM) [_platformWindow orderFront:self]; [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; +#endif if (_firstResponder === self || !_firstResponder) [self makeFirstResponder:[self initialFirstResponder]]; @@ -771,13 +773,17 @@ CPTexturedBackgroundWindowMask */ - (void)orderOut:(id)aSender { +#if PLATFORM(DOM) if ([self _sharesChromeWithPlatformWindow]) [_platformWindow orderOut:self]; +#endif if ([_delegate respondsToSelector:@selector(windowWillClose:)]) [_delegate windowWillClose:self]; +#if PLATFORM(DOM) [_platformWindow order:CPWindowOut window:self relativeTo:nil]; +#endif [self _updateMainAndKeyWindows]; } @@ -789,7 +795,9 @@ CPTexturedBackgroundWindowMask */ - (void)orderWindow:(CPWindowOrderingMode)aPlace relativeTo:(int)otherWindowNumber { +#if PLATFORM(DOM) [_platformWindow order:aPlace window:self relativeTo:CPApp._windows[otherWindowNumber]]; +#endif } /*! diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index a0f46cc52..baaab6396 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -160,7 +160,9 @@ var PrimaryPlatformWindow = NULL; _contentRect = _CGRectMakeCopy(aRect); - [self updateNativeContentRect]; +#if PLATFORM(DOM) + [self updateNativeContentRect]; +#endif } - (void)updateFromNativeContentRect From 935f1084d6ca437266684c518d2068f872344e33 Mon Sep 17 00:00:00 2001 From: Stephen Ierodiaconou Date: Tue, 1 Jun 2010 18:59:41 +0300 Subject: [PATCH 096/124] Javascript Date object returns month between 0 and 11 --- Objective-J/CPLog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objective-J/CPLog.js b/Objective-J/CPLog.js index b4d69c84f..473ccfd88 100644 --- a/Objective-J/CPLog.js +++ b/Objective-J/CPLog.js @@ -105,7 +105,7 @@ var _CPFormatLogMessage = function(aString, aLevel, aTitle) if (typeof exports.sprintf == "function") return exports.sprintf("%4d-%02d-%02d %02d:%02d:%02d.%03d %s%s: %s", - now.getFullYear(), now.getMonth(), now.getDate(), + now.getFullYear(), now.getMonth() + 1, now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds(), aTitle, aLevel, aString); else From 0c9b4da4730a900f1a7e37a80d9cb880829c201a Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Sun, 6 Jun 2010 12:57:45 -0700 Subject: [PATCH 097/124] Don't supress exceptions in the backtrace decorator, add an exception supressing decarator. --- Objective-J/Debug.js | 23 ++++++++++++++++- .../Templates/Application/index-debug.html | 3 +++ .../Templates/NibApplication/index-debug.html | 5 +++- .../ThemeDescriptor/index-debug.html | 25 +++++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/Objective-J/Debug.js b/Objective-J/Debug.js index 9c1df6cd6..1df4bd179 100644 --- a/Objective-J/Debug.js +++ b/Objective-J/Debug.js @@ -93,7 +93,7 @@ GLOBAL(objj_backtrace_decorator) = function(msgSend) return function(aReceiverOrSuper, aSelector) { var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); - + // push the receiver and selector onto the backtrace stack objj_backtrace.push({ receiver: aReceiver, selector : aSelector }); try @@ -105,6 +105,9 @@ GLOBAL(objj_backtrace_decorator) = function(msgSend) // print the exception and backtrace CPLog.warn("Exception " + anException + " in " + objj_debug_message_format(aReceiver, aSelector)); objj_backtrace_print(CPLog.warn); + + // re-throw the exception + throw anException; } finally { @@ -114,6 +117,24 @@ GLOBAL(objj_backtrace_decorator) = function(msgSend) } } +GLOBAL(objj_supress_exceptions_decorator) = function(msgSend) +{ + return function(aReceiverOrSuper, aSelector) + { + var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); + + try + { + return msgSend.apply(NULL, arguments); + } + catch (anException) + { + // print the exception and backtrace + CPLog.warn("Exception " + anException + " in " + objj_debug_message_format(aReceiver, aSelector)); + } + } +} + // type checking decorator var objj_typechecks_reported = {}, diff --git a/Tools/capp/Resources/Templates/Application/index-debug.html b/Tools/capp/Resources/Templates/Application/index-debug.html index efc533581..644616e6d 100644 --- a/Tools/capp/Resources/Templates/Application/index-debug.html +++ b/Tools/capp/Resources/Templates/Application/index-debug.html @@ -37,6 +37,9 @@ // Uncomment to enable printing of backtraces on exceptions: //objj_msgSend_decorate(objj_backtrace_decorator); + + // Uncomment to supress exceptions that take place inside a message + //objj_msgSend_decorate(objj_supress_exceptions_decorator) // Uncomment to enable runtime type checking: //objj_msgSend_decorate(objj_typecheck_decorator); diff --git a/Tools/capp/Resources/Templates/NibApplication/index-debug.html b/Tools/capp/Resources/Templates/NibApplication/index-debug.html index b5e9fc417..78c59cd69 100644 --- a/Tools/capp/Resources/Templates/NibApplication/index-debug.html +++ b/Tools/capp/Resources/Templates/NibApplication/index-debug.html @@ -37,6 +37,9 @@ // Uncomment to enable printing of backtraces on exceptions: //objj_msgSend_decorate(objj_backtrace_decorator); + + // Uncomment to supress exceptions that take place inside a message + //objj_msgSend_decorate(objj_supress_exceptions_decorator) // Uncomment to enable runtime type checking: //objj_msgSend_decorate(objj_typecheck_decorator); @@ -51,7 +54,7 @@ //CPLogRegister(CPLogConsole); //CPLogRegister(CPLogPopup); - +