gwenhywfar  4.3.3
CocoaSpinbox.m
Go to the documentation of this file.
1 //
2 // CocoaSpinbox.m
3 //
4 //
5 // Created by Samuel Strupp on 19.08.10.
6 //
7 
8 #ifdef HAVE_CONFIG_H
9 # include <config.h>
10 #endif
11 
12 
13 #import "CocoaSpinbox.h"
14 
15 #ifndef COCOA_SPINBOX_MM
16 #define COCOA_SPINBOX_MM
17 
18 @implementation CocoaSpinbox
19 
20 @synthesize fillX;
21 @synthesize fillY;
22 
23 - (id)initWithFrame:(NSRect)frame {
24  self = [super initWithFrame:frame];
25  if (self) {
26 
27  textfield = [[NSTextField alloc] initWithFrame:NSMakeRect(0.0, 0.0, 40.0, 27.0)];
28  [textfield setAlignment:NSRightTextAlignment];
29  [textfield setTarget:self];
30  [textfield setAction:@selector(getValueFromTextField:)];
31  [self addSubview:textfield];
32 
33  stepper = [[NSStepper alloc] initWithFrame:NSMakeRect(40.0, 0.0, 19.0, 27.0)];
34  [stepper setTarget:self];
35  [stepper setAction:@selector(getValueFromStepper:)];
36  [stepper setValueWraps:NO];
37  [self addSubview:stepper];
38 
39  fillX = NO;
40  fillY = NO;
41 
42  minValue = NSIntegerMin;
43  maxValue = NSIntegerMax;
44 
45  [stepper setMinValue:minValue];
46  [stepper setMaxValue:maxValue];
47 
48  c_actionPtr = nil;
49  c_actionData = nil;
50 
51  minWidth = 40.0;
52  }
53  return self;
54 }
55 
56 -(void) dealloc {
57  [stepper release];
58  [textfield release];
59  [super dealloc];
60 }
61 
62 -(void) setC_ActionPtr:(gwenSpinBoxActionPtr)ptr Data:(void*)data {
63  c_actionPtr = ptr;
64  c_actionData = data;
65 }
66 
67 -(void) valueDidChange {
68  if (c_actionPtr) {
70  }
71 }
72 
73 
74 -(void) setFrame:(NSRect)frameRect {
75  if (frameRect.size.height < 22.0) frameRect.size.height = 22.0;
76  [super setFrame:frameRect];
77  NSRect bounds = [self bounds];
78  NSRect stepperFrame = NSMakeRect(bounds.origin.x+bounds.size.width-16.0, bounds.origin.y-3.0, 19.0, 27.0);
79  [stepper setFrame:stepperFrame];
80 
81  NSRect textfieldFrame = NSMakeRect(bounds.origin.x, bounds.origin.y, bounds.size.width-16.0, 22.0);
82  [textfield setFrame:textfieldFrame];
83 }
84 
86  if ([textfield window]) {
87  [[textfield window] makeFirstResponder:textfield];
88  }
89 }
90 
92  if ([textfield window]) {
93  if ([[textfield window] firstResponder] == textfield) return YES;
94  }
95  return NO;
96 }
97 
98 -(void) setEnabled:(BOOL)value {
99  [textfield setEnabled:value];
100  [stepper setEnabled:value];
101 }
102 
103 -(BOOL) isEnabled {
104  return [textfield isEnabled];
105 }
106 
107 
108 -(void) setIntegerValue:(NSInteger)new_value {
109  if (new_value >= minValue && new_value <= maxValue) {
110  [textfield setIntegerValue:new_value];
111  [stepper setIntegerValue:new_value];
112  }
113 }
114 
115 -(NSInteger) integerValue {
116  return [textfield integerValue];
117 }
118 
119 -(void) setMinValue:(NSInteger)new_min_value {
120  minValue = new_min_value;
121  [stepper setMinValue:minValue];
123  if ([self integerValue] < minValue) [self setIntegerValue:minValue];
124 }
125 
126 -(NSInteger) minValue {
127  return minValue;
128 }
129 
130 -(void) setMaxValue:(NSInteger)new_max_value {
131  maxValue = new_max_value;
132  [stepper setMaxValue:maxValue];
134  if ([self integerValue] > maxValue) [self setIntegerValue:maxValue];
135 }
136 
137 -(NSInteger) maxValue {
138  return maxValue;
139 }
140 
141 
142 - (void)setStringValue:(NSString *)aString {
143  NSInteger value = 0;
144  if (aString && [aString length] > 0) {
145  value = [aString integerValue];
146  }
147  [self setIntegerValue:value];
148 }
149 
150 -(NSString*) stringValue {
151  return [textfield stringValue];
152 }
153 
154 -(void) getValueFromStepper:(id)sender {
155  NSInteger new_value = [stepper integerValue];
156  if (new_value >= minValue && new_value <= maxValue) {
157  [textfield setIntegerValue:new_value];
158  [self valueDidChange];
159  }
160 }
161 
162 -(void) getValueFromTextField:(id)sender {
163  NSInteger new_value = [textfield integerValue];
164  if (new_value < minValue) new_value = minValue;
165  if (new_value > maxValue) new_value = maxValue;
166  [textfield setIntegerValue:new_value];
167  [stepper setIntegerValue:new_value];
168  [self valueDidChange];
169 }
170 
171 #pragma mark Protocol Methods
172 
173 
174 - (NSSize) minSize {
175  return NSMakeSize(minWidth, 22.0);
176 }
177 
178 @end
179 
180 #endif