Skip to content

Commit

Permalink
CPColorWell coding and nib2cib support.
Browse files Browse the repository at this point in the history
  • Loading branch information
Tom Robinson committed Oct 28, 2008
1 parent 1457f5d commit ed5aa5b
Show file tree
Hide file tree
Showing 3 changed files with 150 additions and 14 deletions.
103 changes: 89 additions & 14 deletions AppKit/CPColorWell.j
Expand Up @@ -38,6 +38,7 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv
@implementation CPColorWell : CPControl
{
BOOL _active;
BOOL _bordered;

CPColor _color;
CPView _wellView;
Expand All @@ -50,30 +51,56 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv
if (self)
{
_active = NO;

_bordered = YES;
_color = [CPColor whiteColor];

[self drawBezelWithHighlight:NO];
[self drawWellInside:CGRectInset([self bounds], 3.0, 3.0)];

var defaultCenter = [CPNotificationCenter defaultCenter];

[defaultCenter
addObserver:self
selector:@selector(colorWellDidBecomeExclusive:)
name:_CPColorWellDidBecomeExclusiveNotification
object:nil];

[defaultCenter
addObserver:self
selector:@selector(colorPanelWillClose:)
name:CPWindowWillCloseNotification
object:[CPColorPanel sharedColorPanel]];
[self _registerForNotifications];
}

return self;
}

- (void)_registerForNotifications
{
var defaultCenter = [CPNotificationCenter defaultCenter];

[defaultCenter
addObserver:self
selector:@selector(colorWellDidBecomeExclusive:)
name:_CPColorWellDidBecomeExclusiveNotification
object:nil];

[defaultCenter
addObserver:self
selector:@selector(colorPanelWillClose:)
name:CPWindowWillCloseNotification
object:[CPColorPanel sharedColorPanel]];
}

/*!
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)];
}

// Managing Color From Color Wells

/*!
Expand Down Expand Up @@ -226,3 +253,51 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv
}

@end

var CPColorWellColorKey = "CPColorWellColorKey",
CPColorWellBorderedKey = "CPColorWellBorderedKey";

@implementation CPColorWell (CPCoding)

/*!
Initializes the color well by unarchiving data from <code>aCoder</code>.
@param aCoder the coder containing the archived <objj>CPColorWell</objj>.
*/
- (id)initWithCoder:(CPCoder)aCoder
{
self = [super initWithCoder:aCoder];

if (self)
{
_active = NO;
_bordered = [aCoder decodeObjectForKey:CPColorWellBorderedKey];
_color = [aCoder decodeObjectForKey:CPColorWellColorKey];

[self _registerForNotifications];
}

return self;
}

/*!
Archives this button into the provided coder.
@param aCoder the coder to which the color well's instance data will be written.
*/
- (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:_bordered forKey:CPColorWellBorderedKey];
}

@end
1 change: 1 addition & 0 deletions Tools/nib2cib/NSAppKit.j
Expand Up @@ -23,6 +23,7 @@
@import "NSButton.j"
@import "NSCell.j"
@import "NSColor.j"
@import "NSColorWell.j"
@import "NSControl.j"
@import "NSCustomObject.j"
@import "NSCustomView.j"
Expand Down
60 changes: 60 additions & 0 deletions Tools/nib2cib/NSColorWell.j
@@ -0,0 +1,60 @@
/*
* NSColorWell.j
* nib2cib
*
* Created by Thomas Robinson.
* Copyright 2008, 280 North, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

@import <AppKit/CPColorWell.j>

@import "NSCell.j"
@import "NSControl.j"


@implementation CPColorWell (NSCoding)

- (id)NS_initWithCoder:(CPCoder)aCoder
{
self = [super NS_initWithCoder:aCoder];

if (self)
{
[self setBordered:[aCoder decodeBoolForKey:"NSIsBordered"]];
[self setColor:[aCoder decodeBoolForKey:"NSColor"]];
}

return self;
}

@end

@implementation NSColorWell : CPColorWell
{
}

- (id)initWithCoder:(CPCoder)aCoder
{
return [self NS_initWithCoder:aCoder];
}

- (Class)classForKeyedArchiver
{
return [CPColorWell class];
}

@end

0 comments on commit ed5aa5b

Please sign in to comment.