Merge branch 'master' of git@github.com:280north/cappuccino

This commit is contained in:
Francisco Ryan Tolmasky I
2008-12-16 19:44:53 -08:00
4 changed files with 283 additions and 26 deletions
+156 -24
View File
@@ -46,27 +46,25 @@ CPSegmentSwitchTrackingMomentary = 2;
*/
@implementation CPSegmentedControl : CPControl
{
unsigned _segmentCount;
CPArray _segments;
CPArray _selectedSegment;
int _selectedSegment;
int _segmentStyle;
CPSegmentSwitchTracking _trackingMode;
unsigned _trackingSegment;
BOOL _trackingHighlighted;
}
- (id)initWithFrame:(CGRect)aRect
{
_segments = [];
self = [super initWithFrame:aRect];
if (self)
{
_segments = [];
_selectedSegment = -1;
_segmentCount = 0;
_trackingMode = CPSegmentSwitchTrackingSelectOne;
}
@@ -88,26 +86,26 @@ CPSegmentSwitchTrackingMomentary = 2;
*/
- (void)setSegmentCount:(unsigned)aCount
{
if (_segmentCount == aCount)
if (_segments.length == aCount)
return;
var height = CGRectGetHeight([self bounds]);
if (_segmentCount < aCount)
if (_segments.length < aCount)
{
var index = _segmentCount;
var index = _segments.length;
for (; index < aCount; ++index)
{
_segments[index] = _CPSegmentMake();
_segments[index] = [[_CPSegmentItem alloc] init];
_segments[index].frame.size.height = height;
}
}
else if (aCount < _segmentCount)
else if (aCount < _segments.length)
{
var index = aCount;
for (; index < _segmentCount; ++index)
for (; index < _segments.length; ++index)
{
[_segments[index].imageView removeFromSuperview];
[_segments[index].labelView removeFromSuperview];
@@ -116,9 +114,7 @@ CPSegmentSwitchTrackingMomentary = 2;
}
}
_segmentCount = aCount;
if (_selectedSegment < _segmentCount)
if (_selectedSegment < _segments.length)
_selectedSegment = -1;
[self tileWithChangedSegment:0];
@@ -129,7 +125,7 @@ CPSegmentSwitchTrackingMomentary = 2;
*/
- (unsigned)segmentCount
{
return _segmentCount;
return _segments.length;
}
// Specifying Selected Segment
@@ -159,7 +155,7 @@ CPSegmentSwitchTrackingMomentary = 2;
{
var index = 0;
for (; index < _segmentCount; ++index)
for (; index < _segments.length; ++index)
if (_segments[index].tag == aTag)
{
[self setSelectedSegment:index];
@@ -189,7 +185,7 @@ CPSegmentSwitchTrackingMomentary = 2;
var index = 0,
selected = NO;
for (; index < _segmentCount; ++index)
for (; index < _segments.length; ++index)
if (_segments[index].selected)
if (selected)
[self setSelected:NO forSegment:index];
@@ -201,7 +197,7 @@ CPSegmentSwitchTrackingMomentary = 2;
{
var index = 0;
for (; index < _segmentCount; ++index)
for (; index < _segments.length; ++index)
if (_segments[index].selected)
[self setSelected:NO forSegment:index];
}
@@ -536,7 +532,7 @@ CPSegmentSwitchTrackingMomentary = 2;
// Update Following Segments Widths
var index = aSegment + 1;
for (; index < _segmentCount; ++index)
for (; index < _segments.length; ++index)
{
_segments[index].frame.origin.x += delta;
@@ -631,6 +627,7 @@ CPSegmentSwitchTrackingMomentary = 2;
{
_trackingHighlighted = YES;
_trackingSegment = [self testSegment:location];
CPLog.error("_trackingSegment="+_trackingSegment);
[self drawSegmentBezel:_trackingSegment highlight:YES];
}
@@ -654,7 +651,7 @@ CPSegmentSwitchTrackingMomentary = 2;
{
[super setFont:aFont];
var count = _segmentCount;
var count = _segments.length;
if (!count)
return;
@@ -667,7 +664,142 @@ CPSegmentSwitchTrackingMomentary = 2;
@end
var _CPSegmentMake = function()
var CPSegmentedControlSegmentsKey = "CPSegmentedControlSegmentsKey",
CPSegmentedControlSelectedKey = "CPSegmentedControlSelectedKey",
CPSegmentedControlSegmentStyleKey = "CPSegmentedControlSegmentStyleKey",
CPSegmentedControlTrackingModeKey = "CPSegmentedControlTrackingModeKey";
@implementation CPSegmentedControl (CPCoding)
- (id)initWithCoder:(CPCoder)aCoder
{
return { width:0, image:nil, label:@"", menu:nil, selected:NO, enabled:NO, tag:0, labelView:nil, imageView:nil, frame:CGRectMakeZero() }
self = [super initWithCoder:aCoder];
if (self)
{
_segments = [aCoder decodeObjectForKey:CPSegmentedControlSegmentsKey];
_segmentStyle = [aCoder decodeIntForKey:CPSegmentedControlSegmentStyleKey];
if ([aCoder containsValueForKey:CPSegmentedControlSelectedKey])
_selectedSegment = [aCoder decodeIntForKey:CPSegmentedControlSelectedKey];
else
_selectedSegment = -1;
if ([aCoder containsValueForKey:CPSegmentedControlTrackingModeKey])
_trackingMode = [aCoder decodeIntForKey:CPSegmentedControlTrackingModeKey];
else
_trackingMode = CPSegmentSwitchTrackingSelectOne;
// HACK
for (var i = 0; i < _segments.length; i++)
{
if (_segments[i].image != undefined)
[self setImage:_segments[i].image forSegment:i];
if (_segments[i].label != undefined)
[self setLabel:_segments[i].label forSegment:i];
}
}
return self;
}
- (void)encodeWithCoder:(CPCoder)aCoder
{
var actualSubviews = _subviews;
_subviews = [];
[super encodeWithCoder:aCoder];
_subviews = actualSubviews;
[aCoder encodeObject:_segments forKey:CPSegmentedControlSegmentsKey];
[aCoder encodeInt:_selectedSegment forKey:CPSegmentedControlSelectedKey];
[aCoder encodeInt:_segmentStyle forKey:CPSegmentedControlSegmentStyleKey];
[aCoder encodeInt:_trackingMode forKey:CPSegmentedControlTrackingModeKey];
}
@end
@implementation _CPSegmentItem : CPObject
{
CPImage image;
CPString label;
CPMenu menu;
BOOL selected;
BOOL enabled;
int tag;
int width;
CPView labelView;
CPView imageView;
CPRect frame;
}
- (id)init
{
if (self = [super init])
{
image = nil;
label = @"";
menu = nil;
selected = NO;
enabled = NO;
tag = 0;
labelView = nil;
imageView = nil;
width = 0;
frame = CGRectMakeZero();
}
return self;
}
@end
var CPSegmentItemImageKey = "CPSegmentItemImageKey",
CPSegmentItemLabelKey = "CPSegmentItemLabelKey",
CPSegmentItemMenuKey = "CPSegmentItemMenuKey",
CPSegmentItemSelectedKey = "CPSegmentItemSelectedKey",
CPSegmentItemEnabledKey = "CPSegmentItemEnabledKey",
CPSegmentItemTagKey = "CPSegmentItemTagKey";
@implementation _CPSegmentItem (CPCoding)
- (id)initWithCoder:(CPCoder)aCoder
{
self = [super init];
if (self)
{
image = [aCoder decodeObjectForKey:CPSegmentItemImageKey];
label = [aCoder decodeObjectForKey:CPSegmentItemLabelKey];
menu = [aCoder decodeObjectForKey:CPSegmentItemMenuKey];
selected = [aCoder decodeBoolForKey:CPSegmentItemSelectedKey];
enabled = [aCoder decodeBoolForKey:CPSegmentItemEnabledKey];
tag = [aCoder decodeIntForKey:CPSegmentItemTagKey];
labelView = nil;
imageView = nil;
width = 0;
frame = CGRectMakeZero();
}
return self;
}
- (void)encodeWithCoder:(CPCoder)aCoder
{
[aCoder encodeObject:image forKey:CPSegmentItemImageKey];
[aCoder encodeObject:label forKey:CPSegmentItemLabelKey];
[aCoder encodeObject:menu forKey:CPSegmentItemMenuKey];
[aCoder encodeBool:selected forKey:CPSegmentItemSelectedKey];
[aCoder encodeBool:enabled forKey:CPSegmentItemEnabledKey];
[aCoder encodeInt:tag forKey:CPSegmentItemTagKey];
}
@end
-2
View File
@@ -182,8 +182,6 @@ var CPTabViewItemIdentifierKey = "CPTabViewItemIdentifierKey",
_view = [aCoder decodeObjectForKey:CPTabViewItemViewKey];
_auxiliaryView = [aCoder decodeObjectForKey:CPTabViewItemAuxViewKey];
CPLog.warn("_identifier="+_identifier+" _label="+_label+" _view="+_view+" _auxiliaryView="+_auxiliaryView);
}
return self;
+1
View File
@@ -34,6 +34,7 @@
@import "NSNibConnector.j"
@import "NSPopUpButton.j"
@import "NSResponder.j"
@import "NSSegmentedControl.j"
@import "NSSlider.j"
@import "NSSplitView.j"
@import "NSTabView.j"
+126
View File
@@ -0,0 +1,126 @@
/*
* NSSegmentedControl.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/CPSegmentedControl.j>
@import "NSSegmentedControl.j"
@implementation CPSegmentedControl (CPCoding)
- (id)NS_initWithCoder:(CPCoder)aCoder
{
if (self = [super NS_initWithCoder:aCoder])
{
var cell = [aCoder decodeObjectForKey:"NSCell"];
_segments = [cell segments];
_selectedSegment = [cell selectedSegment];
_segmentStyle = [cell segmentStyle];
_trackingMode = [cell trackingMode];
}
return self;
}
@end
@implementation NSSegmentedControl : CPSegmentedControl
{
}
- (id)initWithCoder:(CPCoder)aCoder
{
return [self NS_initWithCoder:aCoder];
}
- (Class)classForKeyedArchiver
{
return [CPSegmentedControl class];
}
@end
@implementation NSSegmentedCell : NSActionCell
{
CPArray _segments @accessors(readonly, getter=segments);
int _selectedSegment @accessors(readonly, getter=selectedSegment);
int _segmentStyle @accessors(readonly, getter=segmentStyle);
CPSegmentSwitchTracking _trackingMode @accessors(readonly, getter=trackingMode);
}
- (id)initWithCoder:(CPCoder)aCoder
{
if (self = [super initWithCoder:aCoder])
{
_segments = [aCoder decodeObjectForKey:"NSSegmentImages"];
_selectedSegment = [aCoder decodeIntForKey:"NSSelectedSegment"];
_segmentStyle = [aCoder decodeIntForKey:"NSSegmentStyle"];
_trackingMode = [aCoder decodeIntForKey:"NSTrackingMode"];
}
return self;
}
@end
@implementation _CPSegmentItem (CPCoding)
- (id)NS_initWithCoder:(CPCoder)aCoder
{
if (self = [super init])
{
image = [aCoder decodeObjectForKey:"NSSegmentItemImage"];
label = [aCoder decodeObjectForKey:"NSSegmentItemLabel"];
menu = [aCoder decodeObjectForKey:"NSSegmentItemMenu"];
selected = [aCoder decodeBoolForKey:"NSSegmentItemSelected"];
enabled = ![aCoder decodeBoolForKey:"NSSegmentItemDisabled"];
tag = [aCoder decodeIntForKey:"NSSegmentItemTag"];
// NSSegmentItemImageScaling
// NSSegmentItemTooltip
}
return self;
}
@end
@implementation NSSegmentItem : _CPSegmentItem
{
}
- (id)initWithCoder:(CPCoder)aCoder
{
return [self NS_initWithCoder:aCoder];
}
- (Class)classForKeyedArchiver
{
return [_CPSegmentItem class];
}
@end