From 1154a629a7e7a05ea40bdd1d0351f7687658144c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 11:11:37 +0100 Subject: [PATCH 01/12] Code formatting. --- Objective-J/Debug.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Objective-J/Debug.js b/Objective-J/Debug.js index b6f51acb9..58ec0d48f 100644 --- a/Objective-J/Debug.js +++ b/Objective-J/Debug.js @@ -117,7 +117,7 @@ GLOBAL(objj_backtrace_decorator) = function(msgSend) // make sure to always pop objj_backtrace.pop(); } - } + }; } GLOBAL(objj_supress_exceptions_decorator) = function(msgSend) @@ -135,7 +135,7 @@ GLOBAL(objj_supress_exceptions_decorator) = function(msgSend) // print the exception and backtrace CPLog.warn("Exception " + anException + " in " + objj_debug_message_format(aReceiver, aSelector)); } - } + }; } // type checking decorator @@ -148,7 +148,7 @@ GLOBAL(objj_typecheck_decorator) = function(msgSend) return function(aReceiverOrSuper, aSelector) { var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper); - + if (!aReceiver) return msgSend.apply(NULL, arguments); @@ -170,7 +170,7 @@ GLOBAL(objj_typecheck_decorator) = function(msgSend) } } } - + var result = msgSend.apply(NULL, arguments); try @@ -189,14 +189,14 @@ GLOBAL(objj_typecheck_decorator) = function(msgSend) } return result; - } + }; } // type checking logic: GLOBAL(objj_debug_typecheck) = function(expectedType, object) { var objjClass; - + if (!expectedType) { return; @@ -230,7 +230,7 @@ GLOBAL(objj_debug_typecheck) = function(expectedType, object) { return; } - + var actualType; if (object === NULL) actualType = "null"; From 660c98d6e5a4cf9678182eae48842f72ef3ae6e2 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 12:20:47 +0100 Subject: [PATCH 02/12] Use theme system for CPColorWell bordered state. This is more consistent with the rest of Cappuccino and prepares for theming support. --- AppKit/CPColorWell.j | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/AppKit/CPColorWell.j b/AppKit/CPColorWell.j index 9b86c4c6c..bcca9f133 100644 --- a/AppKit/CPColorWell.j +++ b/AppKit/CPColorWell.j @@ -98,25 +98,25 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv object:[CPColorPanel sharedColorPanel]]; } +/*! + Sets whether the color well is bordered. +*/ +- (void)setBordered:(BOOL)shouldBeBordered +{ + if (shouldBeBordered) + [self setThemeState:CPThemeStateBordered]; + else + [self unsetThemeState:CPThemeStateBordered]; + + [self drawWellInside:CGRectInset([self bounds], 3.0, 3.0)]; +} + /*! Returns whether the color well is bordered */ - (BOOL)isBordered { - return _bordered; -} - -/*! - Sets the color well's current color. -*/ -- (void)setBordered:(BOOL)bordered -{ - if (_bordered == bordered) - return; - - _bordered = bordered; - - [self drawWellInside:CGRectInset([self bounds], 3.0, 3.0)]; + return [self hasThemeState:CPThemeStateBordered]; } // Managing Color From Color Wells @@ -336,7 +336,7 @@ var CPColorWellColorKey = "CPColorWellColorKey", if (self) { _active = NO; - _bordered = [aCoder decodeBoolForKey:CPColorWellBorderedKey]; + [self setBordered:[aCoder decodeBoolForKey:CPColorWellBorderedKey]]; _color = [aCoder decodeObjectForKey:CPColorWellColorKey]; [self drawBezelWithHighlight:NO]; @@ -366,7 +366,7 @@ var CPColorWellColorKey = "CPColorWellColorKey", _subviews = actualSubviews; [aCoder encodeObject:_color forKey:CPColorWellColorKey]; - [aCoder encodeObject:_bordered forKey:CPColorWellBorderedKey]; + [aCoder encodeObject:[self isBordered] forKey:CPColorWellBorderedKey]; } @end From 4390bea31fc8b39d31f84bdbb940a3ee20155bbb Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 13:01:44 +0100 Subject: [PATCH 03/12] Simplify CPColorWell drawing and mouse handling. Use standard CPControl mouse handling and highlighting. Switch to setNeedsLayout based drawing and hook up first themed property. --- AppKit/CPColorWell.j | 70 +++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/AppKit/CPColorWell.j b/AppKit/CPColorWell.j index bcca9f133..de721243f 100644 --- a/AppKit/CPColorWell.j +++ b/AppKit/CPColorWell.j @@ -54,6 +54,17 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv return [super _binderClassForBinding:theBinding]; } ++ (CPString)defaultThemeClass +{ + return @"colorwell"; +} + ++ (id)themeAttributes +{ + return [CPDictionary dictionaryWithObjects:[_CGInsetMakeZero(), [CPNull null], _CGInsetMake(3.0, 3.0, 3.0, 3.0), _CGInsetMakeZero(), [CPNull null]] + forKeys:[@"bezel-inset", @"bezel-color", @"content-inset", @"content-border-inset", @"content-border-color"]]; +} + - (void)_reverseSetBinding { var binderClass = [[self class] _binderClassForBinding:CPValueBinding], @@ -72,9 +83,6 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv _bordered = YES; _color = [CPColor whiteColor]; - [self drawBezelWithHighlight:NO]; - [self drawWellInside:CGRectInset([self bounds], 3.0, 3.0)]; - [self _registerForNotifications]; } @@ -107,8 +115,6 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv [self setThemeState:CPThemeStateBordered]; else [self unsetThemeState:CPThemeStateBordered]; - - [self drawWellInside:CGRectInset([self bounds], 3.0, 3.0)]; } /*! @@ -139,7 +145,7 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv _color = aColor; - [self drawWellInside:CGRectInset([self bounds], 3.0, 3.0)]; + [self setNeedsLayout]; } /*! @@ -202,12 +208,6 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv return _active; } -// Drawing a Color Well - -- (void)drawBezelWithHighlight:(BOOL)shouldHighlight -{ -} - /*! Draws the colored area inside the color well without borders. @param aRect the location at which to draw @@ -245,27 +245,11 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv [self deactivate]; } -- (void)mouseDown:(CPEvent)anEvent +- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp { - if (![self isEnabled]) - return; + [self highlight:NO]; - [self drawBezelWithHighlight:YES]; -} - -- (void)mouseDragged:(CPEvent)anEvent -{ - if (![self isEnabled]) - return; - - [self drawBezelWithHighlight:CGRectContainsPoint([self bounds], [self convertPoint:[anEvent locationInWindow] fromView:nil])]; -} - -- (void)mouseUp:(CPEvent)anEvent -{ - [self drawBezelWithHighlight:NO]; - - if (!CGRectContainsPoint([self bounds], [self convertPoint:[anEvent locationInWindow] fromView:nil]) || ![self isEnabled]) + if (!mouseIsUp || !CGRectContainsPoint([self bounds], aPoint) || ![self isEnabled]) return; [self activate:YES]; @@ -276,6 +260,27 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv [colorPanel orderFront:self]; } +- (CGRect)contentRectForBounds:(CGRect)bounds +{ + var contentInset = [self currentValueForThemeAttribute:@"content-inset"]; + + if (_CGInsetIsEmpty(contentInset)) + return bounds; + + bounds = _CGRectMakeCopy(bounds); + bounds.origin.x += contentInset.left; + bounds.origin.y += contentInset.top; + bounds.size.width -= contentInset.left + contentInset.right; + bounds.size.height -= contentInset.top + contentInset.bottom; + + return bounds; +} + +- (void)layoutSubviews +{ + [self drawWellInside:[self contentRectForBounds:[self bounds]]]; +} + @end @implementation CPColorWellValueBinder : CPBinder @@ -339,9 +344,6 @@ var CPColorWellColorKey = "CPColorWellColorKey", [self setBordered:[aCoder decodeBoolForKey:CPColorWellBorderedKey]]; _color = [aCoder decodeObjectForKey:CPColorWellColorKey]; - [self drawBezelWithHighlight:NO]; - [self drawWellInside:CGRectInset([self bounds], 3.0, 3.0)]; - [self _registerForNotifications]; } From f398185aada48e8537174195c8716d77113c31c3 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 14:24:21 +0100 Subject: [PATCH 04/12] CGRectInsetByInset geometry function. This operation appears again and again in Cappuccino. --- AppKit/CPColorWell.j | 11 +---------- AppKit/CoreGraphics/CGGeometry.h | 13 +++++++++++++ AppKit/CoreGraphics/CGGeometry.j | 8 ++++++++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/AppKit/CPColorWell.j b/AppKit/CPColorWell.j index de721243f..aa8fbe705 100644 --- a/AppKit/CPColorWell.j +++ b/AppKit/CPColorWell.j @@ -264,16 +264,7 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv { var contentInset = [self currentValueForThemeAttribute:@"content-inset"]; - if (_CGInsetIsEmpty(contentInset)) - return bounds; - - bounds = _CGRectMakeCopy(bounds); - bounds.origin.x += contentInset.left; - bounds.origin.y += contentInset.top; - bounds.size.width -= contentInset.left + contentInset.right; - bounds.size.height -= contentInset.top + contentInset.bottom; - - return bounds; + return _CGRectInsetByInset(bounds, contentInset); } - (void)layoutSubviews diff --git a/AppKit/CoreGraphics/CGGeometry.h b/AppKit/CoreGraphics/CGGeometry.h index dbfef2039..f66a82d32 100644 --- a/AppKit/CoreGraphics/CGGeometry.h +++ b/AppKit/CoreGraphics/CGGeometry.h @@ -45,6 +45,19 @@ #define _CGRectOffset(aRect, dX, dY) _CGRectMake(aRect.origin.x + dX, aRect.origin.y + dY, aRect.size.width, aRect.size.height) #define _CGRectInset(aRect, dX, dY) _CGRectMake(aRect.origin.x + dX, aRect.origin.y + dY, aRect.size.width - 2 * dX, aRect.size.height - 2 * dY) +/*! + Slow: + + var theInsetRect = _CGRectInsetByInset([self bounds], [self contentInset]); + + Fast: + + var aRect = [self bounds], + anInset = [self contentInset], + theInsetRect = _CGRectInsetByInset(aRect, anInset); +*/ +#define _CGRectInsetByInset(aRect, anInset) _CGRectMake((aRect).origin.x + (anInset).left, (aRect).origin.y + (anInset).top, (aRect).size.width - (anInset).left - (anInset).right, (aRect).size.height - (anInset).top - (anInset).bottom) + #define _CGRectGetHeight(aRect) (aRect.size.height) #define _CGRectGetMaxX(aRect) (aRect.origin.x + aRect.size.width) #define _CGRectGetMaxY(aRect) (aRect.origin.y + aRect.size.height) diff --git a/AppKit/CoreGraphics/CGGeometry.j b/AppKit/CoreGraphics/CGGeometry.j index 20775a1a8..957662a00 100644 --- a/AppKit/CoreGraphics/CGGeometry.j +++ b/AppKit/CoreGraphics/CGGeometry.j @@ -241,6 +241,14 @@ function CGRectUnion(lhsRect, rhsRect) return _CGRectMake(minX, minY, maxX - minX, maxY - minY); } +/*! + Returns the specified rectangle inset by the given CGInset as a new rectangle. + @param aRect the rect to inset + @param anInset a CGInset to inset by + @return CGRect aRect inset by anInset +*/ +_function(CGRectInsetByInset(aRect, anInset)); + function CGPointFromString(aString) { var comma = aString.indexOf(','); From f6514f3c64dad5b013d8079fc99fc38e9b238971 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 15:57:24 +0100 Subject: [PATCH 05/12] Fix CPColorPanel errors and code style. --- AppKit/CPColorPanel.j | 73 ++++++++++++++++++++-------------------- AppKit/CPColorPicker.j | 76 ++++++++++++++++++++++-------------------- 2 files changed, 77 insertions(+), 72 deletions(-) diff --git a/AppKit/CPColorPanel.j b/AppKit/CPColorPanel.j index d9fe9bbf7..25ee0ddda 100644 --- a/AppKit/CPColorPanel.j +++ b/AppKit/CPColorPanel.j @@ -144,7 +144,7 @@ CPColorPickerViewHeight = 370; - (void)setColor:(CPColor)aColor { _color = aColor; - [_previewView setBackgroundColor: _color]; + [_previewView setBackgroundColor:_color]; [CPApp sendAction:@selector(changeColor:) to:nil from:self]; @@ -299,7 +299,7 @@ CPColorPickerViewHeight = 370; bounds = [contentView bounds]; _toolbar = [[CPView alloc] initWithFrame:CGRectMake(0, 6, CGRectGetWidth(bounds), TOOLBAR_HEIGHT)]; - [_toolbar setAutoresizingMask: CPViewWidthSizable]; + [_toolbar setAutoresizingMask:CPViewWidthSizable]; var totalToolbarWidth = count * ICON_WIDTH + (count - 1) * ICON_PADDING, leftOffset = (CGRectGetWidth(bounds) - totalToolbarWidth) / 2.0, @@ -339,7 +339,7 @@ CPColorPickerViewHeight = 370; [previewBox addSubview:_previewView]; - var _previewLabel = [[CPTextField alloc] initWithFrame: CPRectMake(10, TOOLBAR_HEIGHT + 10, 60, 15)]; + var _previewLabel = [[CPTextField alloc] initWithFrame:CGRectMake(10, TOOLBAR_HEIGHT + 10, 60, 15)]; [_previewLabel setStringValue:"Preview:"]; [_previewLabel setTextColor:[CPColor blackColor]]; [_previewLabel setAlignment:CPRightTextAlignment]; @@ -357,14 +357,14 @@ CPColorPickerViewHeight = 370; [swatchBox addSubview:_swatchView]; - var _swatchLabel = [[CPTextField alloc] initWithFrame: CPRectMake(10, TOOLBAR_HEIGHT + 8 + PREVIEW_HEIGHT + 6, 60, 15)]; - [_swatchLabel setStringValue: "Swatches:"]; + var _swatchLabel = [[CPTextField alloc] initWithFrame:CGRectMake(10, TOOLBAR_HEIGHT + 8 + PREVIEW_HEIGHT + 6, 60, 15)]; + [_swatchLabel setStringValue:"Swatches:"]; [_swatchLabel setTextColor:[CPColor blackColor]]; [_swatchLabel setAlignment:CPRightTextAlignment]; - var opacityLabel = [[CPTextField alloc] initWithFrame: CPRectMake(10, TOOLBAR_HEIGHT + PREVIEW_HEIGHT + 35, 60, 20)]; - [opacityLabel setStringValue: "Opacity:"]; + var opacityLabel = [[CPTextField alloc] initWithFrame:CGRectMake(10, TOOLBAR_HEIGHT + PREVIEW_HEIGHT + 35, 60, 20)]; + [opacityLabel setStringValue:"Opacity:"]; [opacityLabel setTextColor:[CPColor blackColor]]; [opacityLabel setAlignment:CPRightTextAlignment]; @@ -389,7 +389,7 @@ CPColorPickerViewHeight = 370; _action = nil; _activePicker = nil; - [_previewView setBackgroundColor: _color]; + [_previewView setBackgroundColor:_color]; if (buttonForLater) [self _setPicker:buttonForLater]; @@ -407,12 +407,13 @@ CPColorPickerViewHeight = 370; CPColorDragType = "CPColorDragType"; + var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; /* @ignore */ @implementation _CPColorPanelSwatches : CPView { - CPView[] _swatches; + CPArray _swatches; CPColor _dragColor; CPColorPanel _colorPanel; CPCookie _swatchCookie; @@ -422,13 +423,13 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; { self = [super initWithFrame:aFrame]; - [self setBackgroundColor: [CPColor grayColor]]; + [self setBackgroundColor:[CPColor grayColor]]; [self registerForDraggedTypes:[CPArray arrayWithObjects:CPColorDragType]]; var whiteColor = [CPColor whiteColor]; - _swatchCookie = [[CPCookie alloc] initWithName: CPColorPanelSwatchesCookie]; + _swatchCookie = [[CPCookie alloc] initWithName:CPColorPanelSwatchesCookie]; var colorList = [self startingColorList]; _swatches = []; @@ -436,15 +437,15 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; for (var i = 0; i < 50; i++) { // FIXME: http://280north.lighthouseapp.com/projects/13294-cappuccino/tickets/25-implement-cpbox - var view = [[CPView alloc] initWithFrame: CPRectMake(13 * i + 1, 1, 12, 12)], + var view = [[CPView alloc] initWithFrame:CPRectMake(13 * i + 1, 1, 12, 12)], fillView = [[CPView alloc] initWithFrame:CGRectInset([view bounds], 1.0, 1.0)]; [view setBackgroundColor:whiteColor]; - [fillView setBackgroundColor: (i < colorList.length) ? colorList[i] : whiteColor]; + [fillView setBackgroundColor:(i < colorList.length) ? colorList[i] : whiteColor]; [view addSubview:fillView]; - [self addSubview: view]; + [self addSubview:view]; _swatches.push(view); } @@ -461,7 +462,7 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; { var cookieValue = [_swatchCookie value]; - if (cookieValue == "") + if (!cookieValue) { return [ [CPColor blackColor], @@ -480,7 +481,7 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; result = []; for (var i = 0; i < cookieValue.length; i++) - result.push([CPColor colorWithHexString: cookieValue[i]]); + result.push([CPColor colorWithHexString:cookieValue[i]]); return result; } @@ -495,7 +496,7 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; var future = new Date(); future.setYear(2019); - [_swatchCookie setValue: JSON.stringify(result) expires:future domain: nil]; + [_swatchCookie setValue:JSON.stringify(result) expires:future domain:nil]; } - (void)setColorPanel:(CPColorPanel)panel @@ -528,7 +529,7 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; if (!CGRectContainsPoint(bounds, point) || point.x > [self bounds].size.width - 1 || point.x < 1) return NO; - [_colorPanel setColor: [self colorAtIndex:FLOOR(point.x / 13)] updatePicker: YES]; + [_colorPanel setColor:[self colorAtIndex:FLOOR(point.x / 13)] updatePicker:YES]; } - (void)mouseDragged:(CPEvent)anEvent @@ -545,10 +546,10 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; // FIXME: http://280north.lighthouseapp.com/projects/13294-cappuccino/tickets/25-implement-cpbox _dragColor = [[swatch subviews][0] backgroundColor]; - var bounds = CPRectCreateCopy([swatch bounds]); + var bounds = CGRectMakeCopy([swatch bounds]); // FIXME: http://280north.lighthouseapp.com/projects/13294-cappuccino/tickets/25-implement-cpbox - var dragView = [[CPView alloc] initWithFrame: bounds], + var dragView = [[CPView alloc] initWithFrame:bounds], dragFillView = [[CPView alloc] initWithFrame:CGRectInset(bounds, 1.0, 1.0)]; [dragView setBackgroundColor:[CPColor blackColor]]; @@ -556,13 +557,13 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; [dragView addSubview:dragFillView]; - [self dragView: dragView - at: CPPointMake(point.x - bounds.size.width / 2.0, point.y - bounds.size.height / 2.0) - offset: CPPointMake(0.0, 0.0) - event: anEvent - pasteboard: nil - source: self - slideBack: YES]; + [self dragView:dragView + at:CGPointMake(point.x - bounds.size.width / 2.0, point.y - bounds.size.height / 2.0) + offset:CGPointMake(0.0, 0.0) + event:anEvent + pasteboard:nil + source:self + slideBack:YES]; } - (void)pasteboard:(CPPasteboard)aPasteboard provideDataForType:(CPString)aType @@ -580,7 +581,7 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; if (![pasteboard availableTypeFromArray:[CPColorDragType]] || location.x > [self bounds].size.width - 1 || location.x < 1) return NO; - [self setColor:[CPKeyedUnarchiver unarchiveObjectWithData:[pasteboard dataForType:CPColorDragType]] atIndex: FLOOR(location.x / 13)]; + [self setColor:[CPKeyedUnarchiver unarchiveObjectWithData:[pasteboard dataForType:CPColorDragType]] atIndex:FLOOR(location.x / 13)]; } @end @@ -635,7 +636,7 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; var bounds = CPRectMake(0, 0, 15, 15); // FIXME: http://280north.lighthouseapp.com/projects/13294-cappuccino/tickets/25-implement-cpbox - var dragView = [[CPView alloc] initWithFrame: bounds], + var dragView = [[CPView alloc] initWithFrame:bounds], dragFillView = [[CPView alloc] initWithFrame:CGRectInset(bounds, 1.0, 1.0)]; [dragView setBackgroundColor:[CPColor blackColor]]; @@ -643,13 +644,13 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; [dragView addSubview:dragFillView]; - [self dragView: dragView - at: CPPointMake(point.x - bounds.size.width / 2.0, point.y - bounds.size.height / 2.0) - offset: CPPointMake(0.0, 0.0) - event: anEvent - pasteboard: nil - source: self - slideBack: YES]; + [self dragView:dragView + at:CPPointMake(point.x - bounds.size.width / 2.0, point.y - bounds.size.height / 2.0) + offset:CPPointMake(0.0, 0.0) + event:anEvent + pasteboard:nil + source:self + slideBack:YES]; } - (void)pasteboard:(CPPasteboard)aPasteboard provideDataForType:(CPString)aType diff --git a/AppKit/CPColorPicker.j b/AppKit/CPColorPicker.j index 032f78dc4..7fe4e7c09 100644 --- a/AppKit/CPColorPicker.j +++ b/AppKit/CPColorPicker.j @@ -44,10 +44,11 @@ */ - (id)initWithPickerMask:(int)aMask colorPanel:(CPColorPanel)aPanel { - self = [super init]; - - _panel = aPanel; - _mask = aMask; + if (self = [super init]) + { + _panel = aPanel; + _mask = aMask; + } return self; } @@ -76,7 +77,6 @@ */ - (void)setMode:(CPColorPanelMode)mode { - return; } /*! @@ -85,7 +85,6 @@ */ - (void)setColor:(CPColor)aColor { - return; } @end @@ -110,12 +109,12 @@ - (id)initView { - aFrame = CPRectMake(0, 0, CPColorPickerViewWidth, CPColorPickerViewHeight); + var aFrame = _CGRectMake(0, 0, CPColorPickerViewWidth, CPColorPickerViewHeight); _pickerView = [[CPView alloc] initWithFrame:aFrame]; [_pickerView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - _brightnessSlider = [[CPSlider alloc] initWithFrame:CGRectMake(0, (aFrame.size.height - 34), aFrame.size.width, 15)]; + _brightnessSlider = [[CPSlider alloc] initWithFrame:_CGRectMake(0, (aFrame.size.height - 34), aFrame.size.width, 15)]; [_brightnessSlider setValue:15.0 forThemeAttribute:@"track-width"]; [_brightnessSlider setValue:[CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle bundleForClass:[CPColorPicker class]] pathForResource:@"brightness_bar.png"]]] forThemeAttribute:@"track-color"]; @@ -128,9 +127,9 @@ [_brightnessSlider setAction:@selector(brightnessSliderDidChange:)]; [_brightnessSlider setAutoresizingMask:CPViewWidthSizable | CPViewMinYMargin]; - _hueSaturationView = [[__CPColorWheel alloc] initWithFrame: CPRectMake(0, 0, aFrame.size.width, aFrame.size.height - 38)]; - [_hueSaturationView setDelegate: self]; - [_hueSaturationView setAutoresizingMask: (CPViewWidthSizable | CPViewHeightSizable)]; + _hueSaturationView = [[__CPColorWheel alloc] initWithFrame:_CGRectMake(0, 0, aFrame.size.width, aFrame.size.height - 38)]; + [_hueSaturationView setDelegate:self]; + [_hueSaturationView setAutoresizingMask:(CPViewWidthSizable | CPViewHeightSizable)]; [_pickerView addSubview:_hueSaturationView]; [_pickerView addSubview:_brightnessSlider]; @@ -225,46 +224,49 @@ - (id)initWithFrame:(CPRect)aFrame { - self = [super initWithFrame:aFrame]; - - var path = [[CPBundle bundleForClass:CPColorPicker] pathForResource:@"wheel.png"]; - - _wheelImage = new Image(); - _wheelImage.src = path; - _wheelImage.style.position = "absolute"; - - path = [[CPBundle bundleForClass:CPColorPicker] pathForResource:@"wheel_black.png"]; - - _blackWheelImage = new Image(); - _blackWheelImage.src = path; - _blackWheelImage.style.opacity = "0"; - _blackWheelImage.style.filter = "alpha(opacity=0)" - _blackWheelImage.style.position = "absolute"; - + if (self = [super initWithFrame:aFrame]) + { #if PLATFORM(DOM) - _DOMElement.appendChild(_wheelImage); - _DOMElement.appendChild(_blackWheelImage); + var path = [[CPBundle bundleForClass:CPColorPicker] pathForResource:@"wheel.png"]; + + _wheelImage = new Image(); + _wheelImage.src = path; + _wheelImage.style.position = "absolute"; + + path = [[CPBundle bundleForClass:CPColorPicker] pathForResource:@"wheel_black.png"]; + + _blackWheelImage = new Image(); + _blackWheelImage.src = path; + _blackWheelImage.style.opacity = "0"; + _blackWheelImage.style.filter = "alpha(opacity=0)" + _blackWheelImage.style.position = "absolute"; + + _DOMElement.appendChild(_wheelImage); + _DOMElement.appendChild(_blackWheelImage); #endif - [self setWheelSize:aFrame.size]; + [self setWheelSize:aFrame.size]; - _crosshair = [[CPView alloc] initWithFrame:CPRectMake(_radius - 2, _radius - 2, 4, 4)]; - [_crosshair setBackgroundColor:[CPColor blackColor]]; + _crosshair = [[CPView alloc] initWithFrame:CGRectMake(_radius - 2, _radius - 2, 4, 4)]; + [_crosshair setBackgroundColor:[CPColor blackColor]]; - var view = [[CPView alloc] initWithFrame:CGRectInset([_crosshair bounds], 1.0, 1.0)]; - [view setBackgroundColor:[CPColor whiteColor]]; + var view = [[CPView alloc] initWithFrame:CGRectInset([_crosshair bounds], 1.0, 1.0)]; + [view setBackgroundColor:[CPColor whiteColor]]; - [_crosshair addSubview:view]; + [_crosshair addSubview:view]; - [self addSubview:_crosshair]; + [self addSubview:_crosshair]; + } return self; } - (void)setWheelBrightness:(float)brightness { +#if PLATFORM(DOM) _blackWheelImage.style.opacity = 1.0 - brightness; _blackWheelImage.style.filter = "alpha(opacity=" + (1.0 - brightness) * 100 + ")" +#endif } - (void)setFrameSize:(CPSize)aSize @@ -277,6 +279,7 @@ { var min = MIN(aSize.width, aSize.height); +#if PLATFORM(DOM) _blackWheelImage.style.width = min; _blackWheelImage.style.height = min; _blackWheelImage.width = min; @@ -290,6 +293,7 @@ _wheelImage.height = min; _wheelImage.style.top = (aSize.height - min) / 2.0 + "px"; _wheelImage.style.left = (aSize.width - min) / 2.0 + "px"; +#endif _radius = min / 2.0; From 754311d2e2de17b71c22678d1e328bb6a1af651b Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 16:06:09 +0100 Subject: [PATCH 06/12] More colour panel clean up. --- AppKit/CPSliderColorPicker.j | 282 +++++++++++++++++------------------ Tests/AppKit/CPButtonTest.j | 2 +- 2 files changed, 142 insertions(+), 142 deletions(-) diff --git a/AppKit/CPSliderColorPicker.j b/AppKit/CPSliderColorPicker.j index 3945d9619..3bf8106db 100644 --- a/AppKit/CPSliderColorPicker.j +++ b/AppKit/CPSliderColorPicker.j @@ -60,7 +60,7 @@ - (id)initWithPickerMask:(int)mask colorPanel:(CPColorPanel)owningColorPanel { - return [super initWithPickerMask:mask colorPanel: owningColorPanel]; + return [super initWithPickerMask:mask colorPanel:owningColorPanel]; } - (id)initView @@ -70,156 +70,156 @@ _contentView = [[CPView alloc] initWithFrame:aFrame]; [_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - _rgbLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 10, 100, 20)]; - [_rgbLabel setStringValue: "Red, Green, Blue"]; + _rgbLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 10, 100, 20)]; + [_rgbLabel setStringValue:"Red, Green, Blue"]; [_rgbLabel setTextColor:[CPColor blackColor]]; - _redLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 37, 15, 20)]; - [_redLabel setStringValue: "R"]; + _redLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 37, 15, 20)]; + [_redLabel setStringValue:"R"]; [_redLabel setTextColor:[CPColor blackColor]]; - _redSlider = [[CPSlider alloc] initWithFrame: CGRectMake(15, 35, aFrame.size.width - 70, 20)]; - [_redSlider setMaxValue: 1.0]; - [_redSlider setMinValue: 0.0]; - [_redSlider setTarget: self]; - [_redSlider setAction: @selector(sliderChanged:)]; - [_redSlider setAutoresizingMask: CPViewWidthSizable]; + _redSlider = [[CPSlider alloc] initWithFrame:CGRectMake(15, 35, aFrame.size.width - 70, 20)]; + [_redSlider setMaxValue:1.0]; + [_redSlider setMinValue:0.0]; + [_redSlider setTarget:self]; + [_redSlider setAction:@selector(sliderChanged:)]; + [_redSlider setAutoresizingMask:CPViewWidthSizable]; // red value input box - _redValue = [[CPTextField alloc] initWithFrame: CGRectMake(aFrame.size.width - 45, 30, 45, 28)]; - [_redValue setAutoresizingMask: CPViewMinXMargin]; - [_redValue setEditable: YES]; - [_redValue setBezeled: YES]; - [_redValue setDelegate: self]; - [_contentView addSubview: _redValue]; + _redValue = [[CPTextField alloc] initWithFrame:CGRectMake(aFrame.size.width - 45, 30, 45, 28)]; + [_redValue setAutoresizingMask:CPViewMinXMargin]; + [_redValue setEditable:YES]; + [_redValue setBezeled:YES]; + [_redValue setDelegate:self]; + [_contentView addSubview:_redValue]; - _greenLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 63, 15, 20)]; - [_greenLabel setStringValue: "G"]; + _greenLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 63, 15, 20)]; + [_greenLabel setStringValue:"G"]; [_greenLabel setTextColor:[CPColor blackColor]]; - _greenSlider = [[CPSlider alloc] initWithFrame: CGRectMake(15, 61, aFrame.size.width - 70, 20)]; - [_greenSlider setMaxValue: 1.0]; - [_greenSlider setMinValue: 0.0]; - [_greenSlider setTarget: self]; - [_greenSlider setAction: @selector(sliderChanged:)]; - [_greenSlider setAutoresizingMask: CPViewWidthSizable]; + _greenSlider = [[CPSlider alloc] initWithFrame:CGRectMake(15, 61, aFrame.size.width - 70, 20)]; + [_greenSlider setMaxValue:1.0]; + [_greenSlider setMinValue:0.0]; + [_greenSlider setTarget:self]; + [_greenSlider setAction:@selector(sliderChanged:)]; + [_greenSlider setAutoresizingMask:CPViewWidthSizable]; // green value input box - _greenValue = [[CPTextField alloc] initWithFrame: CGRectMake(aFrame.size.width - 45, 56, 45, 28)]; - [_greenValue setAutoresizingMask: CPViewMinXMargin]; - [_greenValue setEditable: YES]; - [_greenValue setBezeled: YES]; - [_greenValue setDelegate: self]; - [_contentView addSubview: _greenValue]; + _greenValue = [[CPTextField alloc] initWithFrame:CGRectMake(aFrame.size.width - 45, 56, 45, 28)]; + [_greenValue setAutoresizingMask:CPViewMinXMargin]; + [_greenValue setEditable:YES]; + [_greenValue setBezeled:YES]; + [_greenValue setDelegate:self]; + [_contentView addSubview:_greenValue]; - _blueLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 90, 15, 20)]; - [_blueLabel setStringValue: "B"]; + _blueLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 90, 15, 20)]; + [_blueLabel setStringValue:"B"]; [_blueLabel setTextColor:[CPColor blackColor]]; - _blueSlider = [[CPSlider alloc] initWithFrame: CGRectMake(15, 87, aFrame.size.width - 70, 20)]; - [_blueSlider setMaxValue: 1.0]; - [_blueSlider setMinValue: 0.0]; - [_blueSlider setTarget: self]; - [_blueSlider setAction: @selector(sliderChanged:)]; - [_blueSlider setAutoresizingMask: CPViewWidthSizable]; + _blueSlider = [[CPSlider alloc] initWithFrame:CGRectMake(15, 87, aFrame.size.width - 70, 20)]; + [_blueSlider setMaxValue:1.0]; + [_blueSlider setMinValue:0.0]; + [_blueSlider setTarget:self]; + [_blueSlider setAction:@selector(sliderChanged:)]; + [_blueSlider setAutoresizingMask:CPViewWidthSizable]; // blue value input box - _blueValue = [[CPTextField alloc] initWithFrame: CGRectMake(aFrame.size.width - 45, 82, 45, 28)]; - [_blueValue setAutoresizingMask: CPViewMinXMargin]; - [_blueValue setEditable: YES]; - [_blueValue setBezeled: YES]; - [_blueValue setDelegate: self]; - [_contentView addSubview: _blueValue]; + _blueValue = [[CPTextField alloc] initWithFrame:CGRectMake(aFrame.size.width - 45, 82, 45, 28)]; + [_blueValue setAutoresizingMask:CPViewMinXMargin]; + [_blueValue setEditable:YES]; + [_blueValue setBezeled:YES]; + [_blueValue setDelegate:self]; + [_contentView addSubview:_blueValue]; - _hsbLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 120, 190, 20)]; - [_hsbLabel setStringValue: "Hue, Saturation, Brightness"]; + _hsbLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 120, 190, 20)]; + [_hsbLabel setStringValue:"Hue, Saturation, Brightness"]; [_hsbLabel setTextColor:[CPColor blackColor]]; - _hueLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 145, 15, 20)]; - [_hueLabel setStringValue: "H"]; + _hueLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 145, 15, 20)]; + [_hueLabel setStringValue:"H"]; [_hueLabel setTextColor:[CPColor blackColor]]; - _hueSlider = [[CPSlider alloc] initWithFrame: CGRectMake(15, 143, aFrame.size.width - 70, 20)]; - [_hueSlider setMaxValue: 359.0]; - [_hueSlider setMinValue: 0.0]; - [_hueSlider setTarget: self]; - [_hueSlider setAction: @selector(sliderChanged:)]; - [_hueSlider setAutoresizingMask: CPViewWidthSizable]; + _hueSlider = [[CPSlider alloc] initWithFrame:CGRectMake(15, 143, aFrame.size.width - 70, 20)]; + [_hueSlider setMaxValue:359.0]; + [_hueSlider setMinValue:0.0]; + [_hueSlider setTarget:self]; + [_hueSlider setAction:@selector(sliderChanged:)]; + [_hueSlider setAutoresizingMask:CPViewWidthSizable]; // hue value input box - _hueValue = [[CPTextField alloc] initWithFrame: CGRectMake(aFrame.size.width - 45, 138, 45, 28)]; - [_hueValue setAutoresizingMask: CPViewMinXMargin]; - [_hueValue setEditable: YES]; - [_hueValue setBezeled: YES]; - [_hueValue setDelegate: self]; - [_contentView addSubview: _hueValue]; + _hueValue = [[CPTextField alloc] initWithFrame:CGRectMake(aFrame.size.width - 45, 138, 45, 28)]; + [_hueValue setAutoresizingMask:CPViewMinXMargin]; + [_hueValue setEditable:YES]; + [_hueValue setBezeled:YES]; + [_hueValue setDelegate:self]; + [_contentView addSubview:_hueValue]; - _saturationLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 170, 15, 20)]; - [_saturationLabel setStringValue: "S"]; + _saturationLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 170, 15, 20)]; + [_saturationLabel setStringValue:"S"]; [_saturationLabel setTextColor:[CPColor blackColor]]; - _saturationSlider = [[CPSlider alloc] initWithFrame: CGRectMake(15, 168, aFrame.size.width - 70, 20)]; - [_saturationSlider setMaxValue: 100.0]; - [_saturationSlider setMinValue: 0.0]; - [_saturationSlider setTarget: self]; - [_saturationSlider setAction: @selector(sliderChanged:)]; - [_saturationSlider setAutoresizingMask: CPViewWidthSizable]; + _saturationSlider = [[CPSlider alloc] initWithFrame:CGRectMake(15, 168, aFrame.size.width - 70, 20)]; + [_saturationSlider setMaxValue:100.0]; + [_saturationSlider setMinValue:0.0]; + [_saturationSlider setTarget:self]; + [_saturationSlider setAction:@selector(sliderChanged:)]; + [_saturationSlider setAutoresizingMask:CPViewWidthSizable]; // saturation value input box - _saturationValue = [[CPTextField alloc] initWithFrame: CGRectMake(aFrame.size.width - 45, 164, 45, 28)]; - [_saturationValue setAutoresizingMask: CPViewMinXMargin]; - [_saturationValue setEditable: YES]; - [_saturationValue setBezeled: YES]; - [_saturationValue setDelegate: self]; - [_contentView addSubview: _saturationValue]; + _saturationValue = [[CPTextField alloc] initWithFrame:CGRectMake(aFrame.size.width - 45, 164, 45, 28)]; + [_saturationValue setAutoresizingMask:CPViewMinXMargin]; + [_saturationValue setEditable:YES]; + [_saturationValue setBezeled:YES]; + [_saturationValue setDelegate:self]; + [_contentView addSubview:_saturationValue]; - _brightnessLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 196, 15, 20)]; - [_brightnessLabel setStringValue: "B"]; + _brightnessLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 196, 15, 20)]; + [_brightnessLabel setStringValue:"B"]; [_brightnessLabel setTextColor:[CPColor blackColor]]; - _brightnessSlider = [[CPSlider alloc] initWithFrame: CGRectMake(15, 194, aFrame.size.width - 70, 20)]; - [_brightnessSlider setMaxValue: 100.0]; - [_brightnessSlider setMinValue: 0.0]; - [_brightnessSlider setTarget: self]; - [_brightnessSlider setAction: @selector(sliderChanged:)]; - [_brightnessSlider setAutoresizingMask: CPViewWidthSizable]; + _brightnessSlider = [[CPSlider alloc] initWithFrame:CGRectMake(15, 194, aFrame.size.width - 70, 20)]; + [_brightnessSlider setMaxValue:100.0]; + [_brightnessSlider setMinValue:0.0]; + [_brightnessSlider setTarget:self]; + [_brightnessSlider setAction:@selector(sliderChanged:)]; + [_brightnessSlider setAutoresizingMask:CPViewWidthSizable]; // brightness value input box - _brightnessValue = [[CPTextField alloc] initWithFrame: CGRectMake(aFrame.size.width - 45, 190, 45, 28)]; - [_brightnessValue setAutoresizingMask: CPViewMinXMargin]; - [_brightnessValue setEditable: YES]; - [_brightnessValue setBezeled: YES]; - [_brightnessValue setDelegate: self]; - [_contentView addSubview: _brightnessValue]; + _brightnessValue = [[CPTextField alloc] initWithFrame:CGRectMake(aFrame.size.width - 45, 190, 45, 28)]; + [_brightnessValue setAutoresizingMask:CPViewMinXMargin]; + [_brightnessValue setEditable:YES]; + [_brightnessValue setBezeled:YES]; + [_brightnessValue setDelegate:self]; + [_contentView addSubview:_brightnessValue]; - _hexLabel = [[CPTextField alloc] initWithFrame: CGRectMake(0, 230, 30, 20)]; - [_hexLabel setStringValue: "Hex"]; + _hexLabel = [[CPTextField alloc] initWithFrame:CGRectMake(0, 230, 30, 20)]; + [_hexLabel setStringValue:"Hex"]; [_hexLabel setTextColor:[CPColor blackColor]]; //hex input box - _hexValue = [[CPTextField alloc] initWithFrame: CGRectMake(32, 225, 80, 28)]; - [_hexValue setEditable: YES]; - [_hexValue setBezeled: YES]; - [_hexValue setDelegate: self]; - [_contentView addSubview: _hexValue]; + _hexValue = [[CPTextField alloc] initWithFrame:CGRectMake(32, 225, 80, 28)]; + [_hexValue setEditable:YES]; + [_hexValue setBezeled:YES]; + [_hexValue setDelegate:self]; + [_contentView addSubview:_hexValue]; - [_contentView addSubview: _rgbLabel]; - [_contentView addSubview: _redLabel]; - [_contentView addSubview: _greenLabel]; - [_contentView addSubview: _blueLabel]; - [_contentView addSubview: _redSlider]; - [_contentView addSubview: _greenSlider]; - [_contentView addSubview: _blueSlider]; + [_contentView addSubview:_rgbLabel]; + [_contentView addSubview:_redLabel]; + [_contentView addSubview:_greenLabel]; + [_contentView addSubview:_blueLabel]; + [_contentView addSubview:_redSlider]; + [_contentView addSubview:_greenSlider]; + [_contentView addSubview:_blueSlider]; - [_contentView addSubview: _hsbLabel]; - [_contentView addSubview: _hueLabel]; - [_contentView addSubview: _saturationLabel]; - [_contentView addSubview: _brightnessLabel]; - [_contentView addSubview: _hueSlider]; - [_contentView addSubview: _saturationSlider]; - [_contentView addSubview: _brightnessSlider]; + [_contentView addSubview:_hsbLabel]; + [_contentView addSubview:_hueLabel]; + [_contentView addSubview:_saturationLabel]; + [_contentView addSubview:_brightnessLabel]; + [_contentView addSubview:_hueSlider]; + [_contentView addSubview:_saturationSlider]; + [_contentView addSubview:_brightnessSlider]; - [_contentView addSubview: _hexLabel]; + [_contentView addSubview:_hexLabel]; } - (CPView)provideNewView:(BOOL)initialRequest @@ -250,35 +250,35 @@ { case _hueSlider: case _saturationSlider: - case _brightnessSlider: newColor = [CPColor colorWithHue: [_hueSlider floatValue] - saturation: [_saturationSlider floatValue] - brightness: [_brightnessSlider floatValue] - alpha: alpha]; + case _brightnessSlider: newColor = [CPColor colorWithHue:[_hueSlider floatValue] + saturation:[_saturationSlider floatValue] + brightness:[_brightnessSlider floatValue] + alpha:alpha]; - [self updateRGBSliders: newColor]; + [self updateRGBSliders:newColor]; break; case _redSlider: case _greenSlider: - case _blueSlider: newColor = [CPColor colorWithCalibratedRed: [_redSlider floatValue] - green: [_greenSlider floatValue] - blue: [_blueSlider floatValue] - alpha: alpha]; + case _blueSlider: newColor = [CPColor colorWithCalibratedRed:[_redSlider floatValue] + green:[_greenSlider floatValue] + blue:[_blueSlider floatValue] + alpha:alpha]; - [self updateHSBSliders: newColor]; + [self updateHSBSliders:newColor]; break; } [self updateLabels]; - [self updateHex: newColor]; - [colorPanel setColor: newColor]; + [self updateHex:newColor]; + [colorPanel setColor:newColor]; } - (void)setColor:(CPColor)aColor { - [self updateRGBSliders: aColor]; - [self updateHSBSliders: aColor]; - [self updateHex: aColor]; + [self updateRGBSliders:aColor]; + [self updateHSBSliders:aColor]; + [self updateHex:aColor]; [self updateLabels]; } @@ -307,13 +307,13 @@ - (void)updateLabels { - [_hueValue setStringValue: ROUND([_hueSlider floatValue])]; - [_saturationValue setStringValue: ROUND([_saturationSlider floatValue])]; - [_brightnessValue setStringValue: ROUND([_brightnessSlider floatValue])]; + [_hueValue setStringValue:ROUND([_hueSlider floatValue])]; + [_saturationValue setStringValue:ROUND([_saturationSlider floatValue])]; + [_brightnessValue setStringValue:ROUND([_brightnessSlider floatValue])]; - [_redValue setStringValue: ROUND([_redSlider floatValue] * 255)]; - [_greenValue setStringValue: ROUND([_greenSlider floatValue] * 255)]; - [_blueValue setStringValue: ROUND([_blueSlider floatValue] * 255)]; + [_redValue setStringValue:ROUND([_redSlider floatValue] * 255)]; + [_greenValue setStringValue:ROUND([_greenSlider floatValue] * 255)]; + [_blueValue setStringValue:ROUND([_blueSlider floatValue] * 255)]; } - (CPImage)provideNewButtonImage @@ -333,12 +333,12 @@ if (field === _hexValue) { - var newColor = [CPColor colorWithHexString: value]; + var newColor = [CPColor colorWithHexString:value]; if (newColor) { - [self setColor: newColor]; - [[self colorPanel] setColor: newColor]; + [self setColor:newColor]; + [[self colorPanel] setColor:newColor]; } } else @@ -346,27 +346,27 @@ switch (field) { case _redValue: [_redSlider setFloatValue:MAX(MIN(ROUND(value), 255) / 255.0, 0)]; - [self sliderChanged: _redSlider]; + [self sliderChanged:_redSlider]; break; case _greenValue: [_greenSlider setFloatValue:MAX(MIN(ROUND(value), 255) / 255.0, 0)]; - [self sliderChanged: _greenSlider]; + [self sliderChanged:_greenSlider]; break; case _blueValue: [_blueSlider setFloatValue:MAX(MIN(ROUND(value), 255) / 255.0, 0)]; - [self sliderChanged: _blueSlider]; + [self sliderChanged:_blueSlider]; break; case _hueValue: [_hueSlider setFloatValue:MAX(MIN(ROUND(value), 360), 0)]; - [self sliderChanged: _hueSlider]; + [self sliderChanged:_hueSlider]; break; case _saturationValue: [_saturationSlider setFloatValue:MAX(MIN(ROUND(value), 100), 0)]; - [self sliderChanged: _saturationSlider]; + [self sliderChanged:_saturationSlider]; break; case _brightnessValue: [_brightnessSlider setFloatValue:MAX(MIN(ROUND(value), 100), 0)]; - [self sliderChanged: _brightnessSlider]; + [self sliderChanged:_brightnessSlider]; break; } } diff --git a/Tests/AppKit/CPButtonTest.j b/Tests/AppKit/CPButtonTest.j index 3632a7d35..112d89020 100644 --- a/Tests/AppKit/CPButtonTest.j +++ b/Tests/AppKit/CPButtonTest.j @@ -3,7 +3,7 @@ @import @import -[CPApplication sharedApplication] +[CPApplication sharedApplication]; @implementation CPButtonTest : OJTestCase { From ad74e93ea26ea4226230d2241921851928e068b6 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 9 Jul 2012 10:20:18 -0700 Subject: [PATCH 07/12] use CPPopUpMenuWindowLevel for _CPPopUpList's window level --- AppKit/_CPPopUpList.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index b214c777d..2bf5f081b 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -140,7 +140,7 @@ var ListColumnIdentifier = @"1"; [panel setTitle:@""]; [panel setFloatingPanel:YES]; [panel setBecomesKeyOnlyIfNeeded:YES]; - [panel setLevel:CPStatusWindowLevel]; + [panel setLevel:CPPopUpMenuWindowLevel]; [panel setHasShadow:YES]; [panel setShadowStyle:CPMenuWindowShadowStyle]; [panel setDelegate:self]; From b09908e6afa503480cd5d6274dd919a365644384 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 19:18:46 +0100 Subject: [PATCH 08/12] Themable CPColorWell with Aristo look when bordered. --- AppKit/CPColorWell.j | 90 +++++++++++------- .../Resources/colorwell-bezel-center.png | Bin 0 -> 133 bytes .../Aristo/Resources/colorwell-bezel-left.png | Bin 0 -> 194 bytes .../Resources/colorwell-bezel-right.png | Bin 0 -> 198 bytes .../colorwell-content-border-center.png | Bin 0 -> 118 bytes .../colorwell-content-border-left.png | Bin 0 -> 119 bytes .../colorwell-content-border-right.png | Bin 0 -> 119 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 35 +++++++ 8 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-center.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-left.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-right.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-content-border-center.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-content-border-left.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-content-border-right.png diff --git a/AppKit/CPColorWell.j b/AppKit/CPColorWell.j index aa8fbe705..35e113211 100644 --- a/AppKit/CPColorWell.j +++ b/AppKit/CPColorWell.j @@ -43,7 +43,6 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv BOOL _bordered; CPColor _color; - CPView _wellView; } + (Class)_binderClassForBinding:(CPString)theBinding @@ -80,8 +79,8 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv if (self) { _active = NO; - _bordered = YES; _color = [CPColor whiteColor]; + [self setBordered:YES]; [self _registerForNotifications]; } @@ -208,25 +207,6 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv return _active; } -/*! - Draws the colored area inside the color well without borders. - @param aRect the location at which to draw -*/ -- (void)drawWellInside:(CGRect)aRect -{ - if (!_wellView) - { - _wellView = [[CPView alloc] initWithFrame:aRect]; - [_wellView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - - [self addSubview:_wellView]; - } - else - [_wellView setFrame:aRect]; - - [_wellView setBackgroundColor:_color]; -} - - (void)colorPanelDidChangeColor:(CPNotification)aNotification { [self takeColorFrom:[aNotification object]]; @@ -267,9 +247,64 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv return _CGRectInsetByInset(bounds, contentInset); } +- (CGRect)bezelRectForBounds:(CGRect)bounds +{ + var bezelInset = [self currentValueForThemeAttribute:@"bezel-inset"]; + + return _CGRectInsetByInset(bounds, bezelInset); +} + +- (CGRect)contentBorderRectForBounds:(CGRect)bounds +{ + var contentBorderInset = [self currentValueForThemeAttribute:@"content-border-inset"]; + + return _CGRectInsetByInset(bounds, contentBorderInset); +} + +- (CGRect)rectForEphemeralSubviewNamed:(CPString)aName +{ + switch (aName) + { + case "bezel-view": + return [self bezelRectForBounds:[self bounds]]; + case "content-view": + return [self contentRectForBounds:[self bounds]]; + case "content-border-view": + return [self contentBorderRectForBounds:[self bounds]]; + } + + return [super rectForEphemeralSubviewNamed:aName]; +} + +- (CPView)createEphemeralSubviewNamed:(CPString)aName +{ + var view = [[CPView alloc] initWithFrame:_CGRectMakeZero()]; + + [view setHitTests:NO]; + + return view; +} + - (void)layoutSubviews { - [self drawWellInside:[self contentRectForBounds:[self bounds]]]; + var bezelView = [self layoutEphemeralSubviewNamed:@"bezel-view" + positioned:CPWindowBelow + relativeToEphemeralSubviewNamed:@"content-view"]; + + [bezelView setBackgroundColor:[self currentValueForThemeAttribute:@"bezel-color"]]; + + var contentView = [self layoutEphemeralSubviewNamed:@"content-view" + positioned:CPWindowAbove + relativeToEphemeralSubviewNamed:@"bezel-view"]; + + + [contentView setBackgroundColor:_color]; + + var contentBorderView = [self layoutEphemeralSubviewNamed:@"content-border-view" + positioned:CPWindowAbove + relativeToEphemeralSubviewNamed:@"content-view"]; + + [contentBorderView setBackgroundColor:[self currentValueForThemeAttribute:@"content-border-color"]]; } @end @@ -332,8 +367,8 @@ var CPColorWellColorKey = "CPColorWellColorKey", if (self) { _active = NO; - [self setBordered:[aCoder decodeBoolForKey:CPColorWellBorderedKey]]; _color = [aCoder decodeObjectForKey:CPColorWellColorKey]; + [self setBordered:[aCoder decodeBoolForKey:CPColorWellBorderedKey]]; [self _registerForNotifications]; } @@ -347,17 +382,8 @@ var CPColorWellColorKey = "CPColorWellColorKey", */ - (void)encodeWithCoder:(CPCoder)aCoder { - // We do this in order to avoid encoding the _wellView, which - // should just automatically be created programmatically as needed. - var actualSubviews = _subviews; - - _subviews = [_subviews copy]; - [_subviews removeObjectIdenticalTo:_wellView]; - [super encodeWithCoder:aCoder]; - _subviews = actualSubviews; - [aCoder encodeObject:_color forKey:CPColorWellColorKey]; [aCoder encodeObject:[self isBordered] forKey:CPColorWellBorderedKey]; } diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-center.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-center.png new file mode 100644 index 0000000000000000000000000000000000000000..343e76d51909f118f05d637310422a3acc69b903 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6{&l=IEGZ*N=isbC`kIj&*BrmuO=~p$*4p9-{0Tvi}(Z> enFJXa*%*ZGImaFJo3sn4g~8L+&t;ucLK6V@?k0@@ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-left.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d188ea17bb76b69d4a026d6c8e272c8e09248146 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`!3HGlE#033DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MJb*xjv*Ddl2Q^95}1-i6~x$+*tXXG{^tAl>+9?40>}S- zetv%bzM7w(=Chti{QdvGy}p2Pg9VQQ8%Kjh&z8pqe}8}Pm-}|Wa>0QgykGu{PhjZy r{NO+%b9N(ByyU`7Yz}J}1QHmck4JFLuW2p-+Q;DO>gTe~DWM4fHr+_+ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-right.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-right.png new file mode 100644 index 0000000000000000000000000000000000000000..7c6bbf90d56dd4311ad6fde0ff757d8c51f57f37 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`!3HGlE#033DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MH!whjv*DdlF||qHZUiZDb$_+@ca9F|KH!<&gOcu!l35o zr>Fm)pPz5fX!%X&|G&S?mw5I#oH_RC|NnY635RC}K{J`Rim=Sc$mC~Zm*9(Um~&re wf8F0-RUaN4-0E=7c0!4OfOO*=W`P8TRkC6B$L=cL2inQt>FVdQ&MBb@0HkJ3aR2}S literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-content-border-center.png b/AppKit/Themes/Aristo/Resources/colorwell-content-border-center.png new file mode 100644 index 0000000000000000000000000000000000000000..96e46d5ca4074941106bc00cafa2db65e1663a07 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrK!3HE%<(K{hQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiX=Q;978H@B_$*z7^E!_kT9q9Ty{k PY8X6S{an^LB{Ts5pH(5) literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-content-border-left.png b/AppKit/Themes/Aristo/Resources/colorwell-content-border-left.png new file mode 100644 index 0000000000000000000000000000000000000000..ca13ac1c804ea8488de10bd1edfd6095ba1ed26b GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrK!3HE%<(K{hQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=eiacE$Ln>}1B_t#mq%jHchzQ=_UvJLFVZb1r!<-=-dS@n3 O5re0zpUXO@geCxLZXUb< literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-content-border-right.png b/AppKit/Themes/Aristo/Resources/colorwell-content-border-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ca13ac1c804ea8488de10bd1edfd6095ba1ed26b GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrK!3HE%<(K{hQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=eiacE$Ln>}1B_t#mq%jHchzQ=_UvJLFVZb1r!<-=-dS@n3 O5re0zpUXO@geCxLZXUb< literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index df1eae02c..0ae2790d4 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1129,6 +1129,41 @@ var themedButtonValues = nil, return button; } ++ (CPColorWell)themedColorWell +{ + // The CPColorPanel CPColorWell depends on requires CPApp. + [CPApplication sharedApplication]; + + var colorWell = [[CPColorWell alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)], + + bezelColor = PatternColor( + [ + ["colorwell-bezel-left.png", 3.0, 24.0], + ["colorwell-bezel-center.png", 1.0, 24.0], + ["colorwell-bezel-right.png", 3.0, 24.0] + ], + PatternIsHorizontal), + + contentBorderColor = PatternColor( + [ + ["colorwell-content-border-left.png", 1.0, 15.0], + ["colorwell-content-border-center.png", 1.0, 15.0], + ["colorwell-content-border-right.png", 1.0, 15.0] + ], + PatternIsHorizontal), + + themedColorWellValues = [ + [@"bezel-color", bezelColor, CPThemeStateBordered], + [@"content-inset", CGInsetMake(5.0, 5.0, 5.0, 5.0), CPThemeStateBordered], + [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], + [@"content-border-color", contentBorderColor, CPThemeStateBordered], + ]; + + [self registerThemeValues:themedColorWellValues forView:colorWell]; + + return colorWell; +} + + (CPComboBox)themedComboBox { var combo = [[CPComboBox alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 29.0)], From 2d8a849d12fb3bfb4ddce7e1a9f8632a463a6f67 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 19:19:38 +0100 Subject: [PATCH 09/12] nib2cib size fix for bordered CPColorWell. --- .../Resources/MainMenu.cib | 2 +- .../Resources/MainMenu.xib | 73 ++++++++++++++++--- Tools/nib2cib/NSColorWell.j | 8 ++ 3 files changed, 72 insertions(+), 11 deletions(-) diff --git a/Tests/Manual/CPColorWellBindings/Resources/MainMenu.cib b/Tests/Manual/CPColorWellBindings/Resources/MainMenu.cib index b0441739a..36d612407 100644 --- a/Tests/Manual/CPColorWellBindings/Resources/MainMenu.cib +++ b/Tests/Manual/CPColorWellBindings/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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;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;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;44E;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;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;26E;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;30E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;47E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;48E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;52E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;53E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;55E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;56E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;52E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;57E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;59E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;60E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;61E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;63E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;52E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;64E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;65E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;66E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;67E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;68E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;69E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;52E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;68E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;47E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;72E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;73E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;74E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;75E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;76E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;28E;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;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;78E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;78E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;79E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;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;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;83E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;87E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;37E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;36E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;88E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;88E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;88E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;88E;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;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;90E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;91E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;77E;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;87E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;92E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;87E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;94E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;95E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;12;$agrid-colorD;K;6;CP$UIDd;2;96E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;97E;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;98E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;99E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;77E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;2;77E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;89E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;89E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;100E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;100E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;89E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;101E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;96E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;77E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;89E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;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;106E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;107E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;108E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;100E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;2;89E;K;28;CPSortDescriptorPrototypeKeyD;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;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;110E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;111E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;112E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;30E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;113E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;97E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;77E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;114E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;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;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;111E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;117E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;112E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;118E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;77E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;30E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;97E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;77E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;120E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPColorWellK;8;$classesA;S;11;CPColorWellS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;121E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;97E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;123E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;2;89E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;6;$afontD;K;6;CP$UIDd;3;128E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;91E;K;11;$aalignmentD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;89E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;129E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;130E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;100E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;100E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;91E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;97E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;131E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;132E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;133E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;134E;K;16;$aimage-positionD;K;6;CP$UIDd;2;91E;K;6;$afontD;K;6;CP$UIDd;3;128E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;77E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;97E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;136E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;100E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;91E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;77E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;137E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;138E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;100E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;100E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;100E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;100E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;2;89E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;100E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;100E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;100E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;100E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;S;8;delegateS;9;theWindowS;27;value: avoidsEmptySelectionS;5;valueS;20;avoidsEmptySelectionD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;38;value: arrangedObjects.color.cssStringS;31;arrangedObjects.color.cssStringD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;19;contentArray: arrayS;12;contentArrayS;5;arrayD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;32;value: selection.color.cssStringS;25;selection.color.cssStringD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;139E;E;E;S;26;textColor: selection.colorS;9;textColorS;15;selection.colorD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;22;value: selection.colorD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;24;{{335, 165}, {715, 473}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {715, 473}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;43E;E;E;S;6;normalS;22;{{20, 20}, {168, 135}}S;20;{{0, 0}, {168, 135}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;90E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;86E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;77E;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;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;111E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;143E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;d;1;2S;20;{{0, 0}, {167, 133}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;145E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;2;93E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;146E;E;d;1;4d;2;23S;6;{3, 2}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;d;3;164d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;105E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;147E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;148E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;77E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;149E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;151E;K;6;$afontD;K;6;CP$UIDd;3;153E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;97E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;91E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;15;$acontent-insetD;K;6;CP$UIDd;3;155E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;130E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;97E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;149E;E;d;1;3S;19;{{1, 1}, {166, 15}}S;19;{{0, 0}, {166, 15}}d;1;8S;8;scrollerS;29;_horizontalScrollerDidScroll:f;18;0.9940119760479041S;22;{{224, 16}, {15, 102}}S;19;{{0, 0}, {15, 102}}d;11;-2147483648S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9925373134328358S;22;{{213, 20}, {103, 23}}S;19;{{0, 0}, {103, 23}}D;K;6;$classD;K;6;CP$UIDd;2;93E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;156E;E;S;22;{{210, 51}, {194, 17}}S;19;{{0, 0}, {194, 17}}S;9;textfieldD;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;157E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;158E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;100E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;100E;E;S;5;Labeld;4;3072S;22;{{18, 161}, {172, 18}}S;19;{{0, 0}, {172, 18}}S;9;check-boxS;8;selectedd;1;1S;21;Avoid Empty SelectionS;13;AppControllerS;19;CPMutableDictionaryS;4;NULLS;20;{{1, 1}, {166, 133}}S;20;{{0, 0}, {166, 133}}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;2;93E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;159E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;135E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;162E;E;E;S;12;columnHeaderS;0;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;157E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;158E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;100E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;100E;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;152E;K;4;nameD;K;6;CP$UIDd;3;163E;K;12;defaultValueD;K;6;CP$UIDd;3;150E;K;6;valuesD;K;6;CP$UIDd;3;164E;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;154E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;E;E;S;17;Arial, sans-serifd;2;12D;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;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;E;E;f;3;0.5D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;161E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;106E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;106E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;168E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;80E;E;S;4;fontD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;169E;K;6;normalD;K;6;CP$UIDd;3;150E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}f;13;0.05813049898f;13;0.05554189906d;2;18D;K;6;$classD;K;6;CP$UIDd;3;127E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;157E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;158E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;89E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;100E;E;E;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;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;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;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;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;27E;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;35E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;49E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;50E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;27E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;53E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;54E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;55E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;57E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;58E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;54E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;59E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;61E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;54E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;64E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;65E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;66E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;68E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;54E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;69E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;71E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;72E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;55E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;53E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;54E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;55E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;49E;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;75E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;76E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;77E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;78E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;79E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;29E;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;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;81E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;84E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;85E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;86E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;90E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;38E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;37E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;91E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;91E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;91E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;91E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;92E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;92E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;92E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;93E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;94E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;80E;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;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;90E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;95E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;90E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;12;$agrid-colorD;K;6;CP$UIDd;2;99E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;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;101E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;102E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;80E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;2;80E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;92E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;92E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;103E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;103E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;92E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;104E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;99E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;80E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;92E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;1;0E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;105E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;106E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;107E;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;3;111E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;103E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;2;92E;K;28;CPSortDescriptorPrototypeKeyD;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;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;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;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;80E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;31E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;116E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;80E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;117E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;118E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;119E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;120E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;80E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;31E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;122E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;80E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;123E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPColorWellK;8;$classesA;S;11;CPColorWellS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;127E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;128E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;2;92E;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;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;129E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;130E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;6;$afontD;K;6;CP$UIDd;3;133E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;134E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;135E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;103E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;103E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;103E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;136E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;94E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;100E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;137E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;140E;K;16;$aimage-positionD;K;6;CP$UIDd;2;94E;K;6;$afontD;K;6;CP$UIDd;3;133E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;80E;K;11;$aalignmentD;K;6;CP$UIDd;2;80E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;141E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;142E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;143E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;103E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;141E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;141E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;94E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;80E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;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;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;100E;K;19;CPColorWellColorKeyD;K;6;CP$UIDd;3;146E;K;22;CPColorWellBorderedKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;147E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;148E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;103E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;103E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;103E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;103E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;2;92E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;103E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;103E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;103E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;103E;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;8;delegateS;9;theWindowS;22;value: selection.colorS;5;valueS;15;selection.colorD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;K;26;CPConditionallySetsEnabledD;K;6;CP$UIDd;3;103E;E;E;S;27;value: avoidsEmptySelectionS;20;avoidsEmptySelectionD;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;E;E;S;38;value: arrangedObjects.color.cssStringS;31;arrangedObjects.color.cssStringD;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;E;E;S;19;contentArray: arrayS;12;contentArrayS;5;arrayD;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;E;E;S;32;value: selection.color.cssStringS;25;selection.color.cssStringD;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;149E;E;E;S;26;textColor: selection.colorS;9;textColorD;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;K;26;CPConditionallySetsEnabledD;K;6;CP$UIDd;3;103E;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;24;{{335, 555}, {715, 473}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {715, 473}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;E;E;S;6;normalS;22;{{20, 20}, {168, 135}}S;20;{{0, 0}, {168, 135}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;93E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;150E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;151E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;152E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;114E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;153E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;33E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;d;1;2S;20;{{0, 0}, {167, 133}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;96E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;155E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;2;96E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;156E;E;d;1;4d;2;23S;6;{3, 2}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;E;E;d;3;164d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;108E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;157E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;80E;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;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;160E;K;6;$afontD;K;6;CP$UIDd;3;162E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;100E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;80E;K;15;$acontent-insetD;K;6;CP$UIDd;3;164E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;143E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;135E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;100E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;80E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;143E;E;d;1;3S;19;{{1, 1}, {166, 15}}S;19;{{0, 0}, {166, 15}}d;1;8S;8;scrollerS;29;_horizontalScrollerDidScroll:f;18;0.9940119760479041S;22;{{224, 16}, {15, 102}}S;19;{{0, 0}, {15, 102}}d;11;-2147483648S;17;disabled+verticalS;27;_verticalScrollerDidScroll:f;18;0.9925373134328358S;22;{{213, 19}, {103, 24}}S;19;{{0, 0}, {103, 24}}S;9;colorwellS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;96E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;165E;E;S;22;{{210, 51}, {194, 17}}S;19;{{0, 0}, {194, 17}}S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;166E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;167E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;103E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;103E;E;S;5;Labeld;4;3072D;K;6;$classD;K;6;CP$UIDd;2;96E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;168E;E;S;22;{{18, 161}, {172, 18}}S;19;{{0, 0}, {172, 18}}S;9;check-boxS;8;selectedd;1;1S;21;Avoid Empty SelectionS;0;S;22;{{324, 20}, {103, 23}}S;19;{{0, 0}, {103, 23}}D;K;6;$classD;K;6;CP$UIDd;2;96E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;169E;E;S;13;AppControllerS;19;CPMutableDictionaryS;4;NULLS;20;{{1, 1}, {166, 133}}S;20;{{0, 0}, {166, 133}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;96E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;170E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;E;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;141E;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;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;132E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;166E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;167E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;103E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;103E;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;161E;K;4;nameD;K;6;CP$UIDd;3;174E;K;12;defaultValueD;K;6;CP$UIDd;3;159E;K;6;valuesD;K;6;CP$UIDd;3;175E;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;163E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;E;E;S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;141E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;E;E;f;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;109E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;109E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;180E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;E;S;4;fontD;K;6;$classD;K;6;CP$UIDd;2;56E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;181E;K;6;normalD;K;6;CP$UIDd;3;159E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}f;13;0.05813049898f;13;0.05554189906f;18;0.6862745098039216d;2;18D;K;6;$classD;K;6;CP$UIDd;3;132E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;166E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;167E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;92E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;103E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPColorWellBindings/Resources/MainMenu.xib b/Tests/Manual/CPColorWellBindings/Resources/MainMenu.xib index b716f978c..789de57ac 100644 --- a/Tests/Manual/CPColorWellBindings/Resources/MainMenu.xib +++ b/Tests/Manual/CPColorWellBindings/Resources/MainMenu.xib @@ -2,13 +2,13 @@ 1050 - 11C74 - 1938 - 1138.23 - 567.00 + 11E53 + 2182 + 1138.47 + 569.00 com.apple.InterfaceBuilder.CocoaPlugin - 1938 + 2182 YES @@ -72,7 +72,7 @@ {{213, 430}, {103, 23}} - + _NS:1100 YES YES @@ -297,13 +297,34 @@ 25 + + + 268 + + YES + + YES + NSColor pasteboard type + + + {{324, 430}, {103, 23}} + + + + _NS:1100 + YES + + 1 + MC4wNTgxMzA0OTg5OCAwLjA1NTU0MTg5OTA2IDEAA + + {715, 473} - {{0, 0}, {1680, 1028}} + {{0, 0}, {2560, 1418}} {10000000000000, 10000000000000} YES @@ -349,10 +370,14 @@ value: selection.color value selection.color + + NSConditionallySetsEnabled + + 2 - 523 + 540 @@ -438,6 +463,26 @@ 534 + + + value: selection.color + + + + + + value: selection.color + value + selection.color + + NSConditionallySetsEnabled + + + 2 + + + 541 + @@ -486,6 +531,7 @@ + @@ -576,6 +622,11 @@ + + 538 + + + @@ -602,8 +653,9 @@ 507.IBPluginDependency 520.IBPluginDependency 521.IBPluginDependency + 538.IBPluginDependency - + YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -625,6 +677,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -639,7 +692,7 @@ - 535 + 541 diff --git a/Tools/nib2cib/NSColorWell.j b/Tools/nib2cib/NSColorWell.j index 161d7b80c..dbb0a0042 100644 --- a/Tools/nib2cib/NSColorWell.j +++ b/Tools/nib2cib/NSColorWell.j @@ -38,6 +38,14 @@ [self setEnabled:[aCoder decodeBoolForKey:@"NSEnabled"]]; [self setBordered:[aCoder decodeBoolForKey:@"NSIsBordered"]]; [self setColor:[aCoder decodeObjectForKey:@"NSColor"]]; + + if ([self isBordered]) + { + var frameSize = [self frameSize]; + CPLog.debug("NSColorWell: adjusting height from %d to %d", frameSize.height, 24.0); + frameSize.height = 24.0; + [self setFrameSize:frameSize]; + } } return self; From 77a009c9a61e773e1b0f8802ba89a68838160d87 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 19:53:57 +0100 Subject: [PATCH 10/12] Highlighted and disabled looks for bordered CPColorWell. --- .../colorwell-bezel-disabled-center.png | Bin 0 -> 141 bytes .../colorwell-bezel-disabled-left.png | Bin 0 -> 199 bytes .../colorwell-bezel-disabled-right.png | Bin 0 -> 198 bytes .../colorwell-bezel-highlighted-center.png | Bin 0 -> 143 bytes .../colorwell-bezel-highlighted-left.png | Bin 0 -> 208 bytes .../colorwell-bezel-highlighted-right.png | Bin 0 -> 216 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 20 ++++++++++++++++++ 7 files changed, 20 insertions(+) create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-center.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-left.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-right.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-center.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-left.png create mode 100644 AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-right.png diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-center.png new file mode 100644 index 0000000000000000000000000000000000000000..3aefab2d3ed3cae052a6733098ab37801b7067dc GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73q7rIEGZ*N=isbn2_+}^Yiod%kJ;5H#T70$>a0?|NnNO njF=pjI@O3X%#6AX49pDY%}i93?^&M*YGv?r^>bP0l+XkK2&63_ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..6f1614ab9c1f7099e8113827f64b71bb83c36541 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`!3HGlE#033DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MVX#1jv*Ddl2Q^95?GSr6rM38vF-c){r&ZSzrMb81Y0*op|`5!K|dq5*uc*P5Sx$`T6<% v3XB5JAHTi5efeLYR$=8UtdAVd@Czg`Xuk6_(7nO~vXsHo)z4*}Q$iB}#OhCK literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-disabled-right.png new file mode 100644 index 0000000000000000000000000000000000000000..bf56b963735bae32f0b3282cf50d711cab65d706 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`!3HGlE#033DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MH!whjv*DdlF||q1elZ36#gCk@cR0C{_pSauV*c)kla`Q z|DSxveP+u?K0E>n3`cx){{R2q{z+0I(83^9!iZzODw#7e}BC_ljZ*z v4L$zb^Y71Nds4&Txte(+i-)8`10zGyX)o^+cXbP0l+XkK;=xFg literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-center.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd335f5bf933eedb7840d409af36db582d1bde3 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!3HF)&rH7sq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&ZTEIEGZ*N(u-M&rjG<_4QT#vhVNj8ygrJ898w(IHV;$ pPEsy-)iC?apD!XNQ|bpSOpc)I$ztaD0e0sv{1FERiC literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-left.png new file mode 100644 index 0000000000000000000000000000000000000000..8c15793353669ded78ddfa3a44478d1bd4aaacd7 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`!3HGlE#033DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MMa)2jv*Ddl0w46)6)_X3Ye2@*?fI{`#mSC<=WT(`(v)= z=H^x_EG+yx|Ng#0BSyyO|NsBDY&<0q(ICUNK!b<;B zVSe5J&(F`7Pteie(VJ&o{!Ss_0ef;qg@w%u1|}YcA91qZ5>Bh~0BvXRboFyt=akR{ E0KIWXApigX literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/colorwell-bezel-highlighted-right.png new file mode 100644 index 0000000000000000000000000000000000000000..8bde109b6b5c2c6f02cfa2632648dc4246536f4f GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`!3HGlE#033DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MOB_Ijv*Ddl0w46_0tm)cCZ}TJ>xq=qlLg6+v;zYm$&EN zxA5`tc_S$)**ml063_qt|DUHMB|S=E>}vSIgXh z7y2m7w6FhH!(Oz{m{HRH++6E&0gZ~jpGUjJ>(|BZ-o|<2CbK{SgO!)+PA0C&zCc$n Nc)I$ztaD0e0svg)Op^cr literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 0ae2790d4..00b7787dc 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1144,6 +1144,22 @@ var themedButtonValues = nil, ], PatternIsHorizontal), + bezelHighlightedColor = PatternColor( + [ + ["colorwell-bezel-highlighted-left.png", 3.0, 24.0], + ["colorwell-bezel-highlighted-center.png", 1.0, 24.0], + ["colorwell-bezel-highlighted-right.png", 3.0, 24.0] + ], + PatternIsHorizontal), + + bezelDisabledColor = PatternColor( + [ + ["colorwell-bezel-disabled-left.png", 3.0, 24.0], + ["colorwell-bezel-disabled-center.png", 1.0, 24.0], + ["colorwell-bezel-disabled-right.png", 3.0, 24.0] + ], + PatternIsHorizontal), + contentBorderColor = PatternColor( [ ["colorwell-content-border-left.png", 1.0, 15.0], @@ -1157,6 +1173,10 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(5.0, 5.0, 5.0, 5.0), CPThemeStateBordered], [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], + + [@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted], + + [@"bezel-color", bezelDisabledColor, CPThemeStateBordered | CPThemeStateDisabled], ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; From 613f61a898d2614317c88e6567b794208f3a3064 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 20:03:19 +0100 Subject: [PATCH 11/12] Unit test CPColorWell archiving. --- Tests/AppKit/CPColorWellTest.j | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Tests/AppKit/CPColorWellTest.j diff --git a/Tests/AppKit/CPColorWellTest.j b/Tests/AppKit/CPColorWellTest.j new file mode 100644 index 000000000..2e57ee0b9 --- /dev/null +++ b/Tests/AppKit/CPColorWellTest.j @@ -0,0 +1,32 @@ +@import +@import + +[CPApplication sharedApplication]; + +@implementation CPColorWellTest : OJTestCase +{ + CPColorWell colorWell; +} + +- (void)setUp +{ + colorWell = [[CPColorWell alloc] initWithFrame:CGRectMakeZero()]; +} + +- (void)testCoding +{ + [self assertTrue:[colorWell isBordered] message:"color well bordered"]; + [self assert:[CPColor whiteColor] equals:[colorWell color] message:"color well default color"]; + + [colorWell setColor:[CPColor greenColor]]; + [colorWell setBordered:NO]; + + // Test archiving. + var archived = [CPKeyedArchiver archivedDataWithRootObject:colorWell], + unarchived = [CPKeyedUnarchiver unarchiveObjectWithData:archived]; + + [self assertFalse:[colorWell isBordered] message:"color well archived bordered state"]; + [self assert:[CPColor greenColor] equals:[colorWell color] message:"color well archived color"]; +} + +@end From eb643a2df8580a3384d9d64211c38b0c17768ac9 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 9 Jul 2012 20:31:29 +0100 Subject: [PATCH 12/12] Simplify code. --- AppKit/CPButton.j | 23 +++-------------------- AppKit/CPTextField.j | 17 ++--------------- 2 files changed, 5 insertions(+), 35 deletions(-) diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 7add82d70..8594bc410 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -576,35 +576,18 @@ CPButtonImageOffset = 3.0; { var contentInset = [self currentValueForThemeAttribute:@"content-inset"]; - if (_CGInsetIsEmpty(contentInset)) - return bounds; - - bounds = _CGRectMakeCopy(bounds); - bounds.origin.x += contentInset.left; - bounds.origin.y += contentInset.top; - bounds.size.width -= contentInset.left + contentInset.right; - bounds.size.height -= contentInset.top + contentInset.bottom; - - return bounds; + return _CGRectInsetByInset(bounds, contentInset); } - (CGRect)bezelRectForBounds:(CGRect)bounds { + // Is this necessary? The theme itself can just change its inset to a zero inset when !CPThemeStateBordered. if (![self isBordered]) return bounds; var bezelInset = [self currentValueForThemeAttribute:@"bezel-inset"]; - if (_CGInsetIsEmpty(bezelInset)) - return bounds; - - bounds = _CGRectMakeCopy(bounds); - bounds.origin.x += bezelInset.left; - bounds.origin.y += bezelInset.top; - bounds.size.width -= bezelInset.left + bezelInset.right; - bounds.size.height -= bezelInset.top + bezelInset.bottom; - - return bounds; + return _CGRectInsetByInset(bounds, bezelInset); } - (CGSize)_minimumFrameSize diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 60874a91a..f02bb28fd 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1313,27 +1313,14 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); { var contentInset = [self currentValueForThemeAttribute:@"content-inset"]; - bounds.origin.x += contentInset.left; - bounds.origin.y += contentInset.top; - bounds.size.width -= contentInset.left + contentInset.right; - bounds.size.height -= contentInset.top + contentInset.bottom; - - return bounds; + return _CGRectInsetByInset(bounds, contentInset); } - (CGRect)bezelRectForBounds:(CGRect)bounds { var bezelInset = [self currentValueForThemeAttribute:@"bezel-inset"]; - if (_CGInsetIsEmpty(bezelInset)) - return bounds; - - bounds.origin.x += bezelInset.left; - bounds.origin.y += bezelInset.top; - bounds.size.width -= bezelInset.left + bezelInset.right; - bounds.size.height -= bezelInset.top + bezelInset.bottom; - - return bounds; + return _CGRectInsetByInset(bounds, bezelInset); } - (CGRect)rectForEphemeralSubviewNamed:(CPString)aName