mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-15 23:21:28 +00:00
Merge branch 'master' of git@github.com:280north/cappuccino
This commit is contained in:
+156
-24
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user