Merge pull request #10 from gunyarakun/fix-invalid-return
[cocotron.git] / AppKit / NSSegmentedControl / NSSegmentedControl.m
blob188b646ca811de97a373174b46824711eadbb50d
1 /* Copyright (c) 2006-2007 Christopher J. W. Lloyd
3 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
9 #import <AppKit/NSSegmentedControl.h>
10 #import <AppKit/NSSegmentedCell.h>
12 @interface NSSegmentedCell (PrivateToControlView)
13 - (void)_wasDrawnWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
14 @end
16 @implementation NSSegmentedControl
17 +(Class)cellClass {
18         return [NSSegmentedCell class];
21 -(NSInteger)segmentCount {
22    return [_cell segmentCount];
25 -(NSSegmentStyle)segmentStyle {
26    return [_cell segmentStyle];
29 -(NSInteger)tagForSegment:(NSInteger)segment {
30    return [_cell tagForSegment:segment];
33 -(NSImage *)imageForSegment:(NSInteger)segment {
34    return [_cell imageForSegment:segment];
37 -(BOOL)isEnabledForSegment:(NSInteger)segment {
38    return [_cell isEnabledForSegment:segment];
41 -(NSString *)labelForSegment:(NSInteger)segment {
42    return [_cell labelForSegment:segment];
45 -(NSMenu *)menuForSegment:(NSInteger)segment {
46    return [_cell menuForSegment:segment];
49 -(NSString *)toolTipForSegment:(NSInteger)segment {
50    return [_cell toolTipForSegment:segment];
53 -(CGFloat)widthForSegment:(NSInteger)segment {
54    return [_cell widthForSegment:segment];
57 -(NSImageScaling)imageScalingForSegment:(NSInteger)segment {
58    return [_cell imageScalingForSegment:segment];
61 -(NSInteger)selectedSegment {
62    return [_cell selectedSegment];
65 -(BOOL)isSelectedForSegment:(NSInteger)segment {
66    return [_cell isSelectedForSegment:segment];
69 -(void)setSegmentCount:(NSInteger)count {
70    [_cell setSegmentCount:count];
73 -(void)setSegmentStyle:(NSSegmentStyle)value {
74    [_cell setSegmentStyle:value];
75    [self setNeedsDisplay:YES];
78 -(void)setTag:(NSInteger)tag forSegment:(NSInteger)segment {
79    [_cell setTag:tag forSegment:segment];
82 -(void)setImage:(NSImage *)image forSegment:(NSInteger)segment {
83    [_cell setImage:image forSegment:segment];
84    [self setNeedsDisplay:YES];
87 -(void)setEnabled:(BOOL)enabled forSegment:(NSInteger)segment {
88    [_cell setEnabled:enabled forSegment:segment];
89    [self setNeedsDisplay:YES];
92 -(void)setLabel:(NSString *)label forSegment:(NSInteger)segment {
93    [_cell setLabel:label forSegment:segment];
94    [self setNeedsDisplay:YES];
97 -(void)setMenu:(NSMenu *)menu forSegment:(NSInteger)segment {
98    [_cell setMenu:menu forSegment:segment];
101 -(void)setToolTip:(NSString *)string forSegment:(NSInteger)segment {
102    [_cell setToolTip:string forSegment:segment];
105 -(void)setWidth:(CGFloat)width forSegment:(NSInteger)segment {
106    [_cell setWidth:width forSegment:segment];
107    [self setNeedsDisplay:YES];
110 -(void)setImageScaling:(NSImageScaling)value forSegment:(NSInteger)segment {
111    [_cell setImageScaling:value forSegment:segment];
112    [self setNeedsDisplay:YES];
115 -(BOOL)selectSegmentWithTag:(NSInteger)tag {
116    BOOL result=[_cell selectSegmentWithTag:tag];
118    [self setNeedsDisplay:YES];
120    return result;
123 -(void)setSelected:(BOOL)flag forSegment:(NSInteger)segment {
124    [_cell setSelected:flag forSegment:segment];
125    [self setNeedsDisplay:YES];
128 -(void)setSelectedSegment:(NSInteger)segment {
129    [_cell setSelectedSegment:segment];
130    [self setNeedsDisplay:YES];
133 -(void)drawRect:(NSRect)rect {
134    [super drawRect:rect];
135    [_cell _wasDrawnWithFrame:rect inView:self];
138 @end
140 @implementation NSSegmentedControl (Bindings)
141 -(id)_cell
143    return _cell;
146 -(id)_selectedLabel
148    return [_cell labelForSegment:[_cell selectedSegment]];
151 -(void)_setSelectedLabel:(id)label
153    int idx=[[_cell valueForKeyPath:@"segments.label"] indexOfObject:label];
154    [_cell setSelectedSegment:idx];
155         [self setNeedsDisplay:YES];
158 +(NSSet*)keyPathsForValuesAffectingSelectedLabel
160    return [NSSet setWithObject:@"cell.selectedSegment"];
163 // selectedTag is implemented by NSControl - so no need for a fancy bindings version
164 -(NSInteger)selectedTag
166         NSInteger selectedSegment = [_cell selectedSegment];
167         NSInteger tag = -1;
168         if (selectedSegment != -1) {
169                 tag = [_cell tagForSegment: selectedSegment];
170         }
171    return tag;
174 -(void)_setSelectedTag:(NSInteger)tag
176    [_cell selectSegmentWithTag:tag];
177         [self setNeedsDisplay:YES];
180 +(NSSet*)keyPathsForValuesAffectingSelectedTag {
181    return [NSSet setWithObject:@"cell.selectedSegment"];
184 -(NSInteger)_selectedIndex
186    return [_cell selectedSegment];
189 -(void)_setSelectedIndex:(NSInteger)idx
191    [_cell setSelectedSegment:idx];
192         [self setNeedsDisplay:YES];
195 +(NSSet*)keyPathsForValuesAffectingSelectedIndex {
196    return [NSSet setWithObject:@"cell.selectedSegment"];
198 @end