From cd9a3a68ecd47cfb8e3b1950fe282f09b6fc50f4 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 16 Dec 2008 16:42:21 -0800 Subject: [PATCH 1/2] Spurious CPLog --- AppKit/CPTabViewItem.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index 8a3d37369..2027daea4 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -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; From 2d887d0a7e8ca61d8e588ac7c6cd70c1864ab118 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 16 Dec 2008 16:43:00 -0800 Subject: [PATCH 2/2] Initial CPSegmentedControl archiving/nib2cib support (currently useless) --- AppKit/CPSegmentedControl.j | 180 +++++++++++++++++++++++++---- Tools/nib2cib/NSAppKit.j | 1 + Tools/nib2cib/NSSegmentedControl.j | 126 ++++++++++++++++++++ 3 files changed, 283 insertions(+), 24 deletions(-) create mode 100644 Tools/nib2cib/NSSegmentedControl.j diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 3721bc29b..07a57cb9b 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -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 + diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 38670100e..d35bcc452 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -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" diff --git a/Tools/nib2cib/NSSegmentedControl.j b/Tools/nib2cib/NSSegmentedControl.j new file mode 100644 index 000000000..619a5773c --- /dev/null +++ b/Tools/nib2cib/NSSegmentedControl.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 + +@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 +