gwenhywfar 5.10.1
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
85-(void) makeFirstResponder {
86 if ([textfield window]) {
87 [[textfield window] makeFirstResponder:textfield];
88 }
89}
90
91-(BOOL) isFirstResponder {
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
void(* gwenSpinBoxActionPtr)(NSView *spinbox, void *data)
Definition: CocoaSpinbox.h:16
NSInteger minValue
Definition: CocoaSpinbox.h:30
NSString * stringValue()
Definition: CocoaSpinbox.m:150
NSStepper * stepper
Definition: CocoaSpinbox.h:22
CGFloat minWidth
Definition: CocoaSpinbox.h:25
BOOL isFirstResponder()
Definition: CocoaSpinbox.m:91
void * c_actionData
Definition: CocoaSpinbox.h:34
NSInteger maxValue
Definition: CocoaSpinbox.h:31
void makeFirstResponder()
Definition: CocoaSpinbox.m:85
NSTextField * textfield
Definition: CocoaSpinbox.h:23
gwenSpinBoxActionPtr c_actionPtr
Definition: CocoaSpinbox.h:33
NSInteger integerValue()
Definition: CocoaSpinbox.m:115