diff options
Diffstat (limited to 'spinbox_darwin.m')
| -rw-r--r-- | spinbox_darwin.m | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/spinbox_darwin.m b/spinbox_darwin.m index f9d6fe4..f767a76 100644 --- a/spinbox_darwin.m +++ b/spinbox_darwin.m @@ -4,37 +4,58 @@ #include "_cgo_export.h" #import <Cocoa/Cocoa.h> +#define togoSpinbox(x) ((goSpinbox *) (x)) + @interface goSpinbox : NSObject { @public void *gospinbox; + NSTextField *textfield; + NSNumberFormatter *formatter; + NSStepper *stepper; } @property NSInteger integerValue; +@property NSInteger minimum; +@property NSInteger maximum; @end @implementation goSpinbox @synthesize integerValue; +@synthesize minimum; +@synthesize maximum; @end -id newSpinboxStepper(void) +id newSpinbox(void *gospinbox) { - NSStepper *s; + goSpinbox *s; + + s = [goSpinbox new]; + s->gospinbox = gospinbox; + s->textfield = (NSTextField *) newTextField(); + s->formatter = [NSNumberFormatter new]; + [s->formatter setAllowsFloats:NO]; + [s->textfield setFormatter:s->formatter]; + s->stepper = [[NSStepper alloc] initWithFrame:NSZeroRect]; + [s->stepper setAutorepeat:YES]; // hold mouse button to step repeatedly + + [s setMinimum:0]; + [s setMaximum:100]; + + [s->textfield bind:@"integerValue" toObject:s withKeyPath:@"integerValue" options:nil]; + [s->stepper bind:@"integerValue" toObject:s withKeyPath:@"integerValue" options:nil]; +// [s->formatter bind:@"minimum" toObject:s withKeyPath:@"minimum" options:nil]; + [s->stepper bind:@"minValue" toObject:s withKeyPath:@"minimum" options:nil]; +// [s->formatter bind:@"maximum" toObject:s withkeyPath:@"maximum" options:nil]; + [s->stepper bind:@"maxValue" toObject:s withKeyPath:@"maximum" options:nil]; - s = [[NSStepper alloc] initWithFrame:NSZeroRect]; - [s setMinValue:0]; - [s setMaxValue:100]; - [s setIncrement:1]; - [s setAutorepeat:YES]; // hold mouse button to step repeatedly return (id) s; } -id spinboxSetup(id textfield, id stepper, void *gospinbox) +id spinboxTextField(id spinbox) { - goSpinbox *g; + return (id) (togoSpinbox(spinbox)->textfield); +} - g = [goSpinbox new]; - g->gospinbox = gospinbox; - // TODO set any options? - [textfield bind:@"integerValue" toObject:g withKeyPath:@"integerValue" options:nil]; - [stepper bind:@"integerValue" toObject:g withKeyPath:@"integerValue" options:nil]; - return (id) g; +id spinboxStepper(id spinbox) +{ + return (id) (togoSpinbox(spinbox)->stepper); } |
