# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1299875459 0 # Node ID 7087f3a294e5e18491b8d8591f9b564184afa33d # Parent 336800e9e6483dacb734bbf1fd8bf5bb90a34de4 Spinbuttons now respond to value changed. Fix for typing in spinbutton a value out of the range. Other related event fixes. diff -r 336800e9e648 -r 7087f3a294e5 mac/dw.m --- a/mac/dw.m Fri Mar 11 19:59:29 2011 +0000 +++ b/mac/dw.m Fri Mar 11 20:30:59 2011 +0000 @@ -134,7 +134,7 @@ int _event_handler(id object, NSEvent *event, int message) { SignalHandler *handler = _get_handler(object, message); - /*NSLog(@"Event handler - type %d\n", message);*/ + NSLog(@"Event handler - type %d\n", message); if(handler) { @@ -670,7 +670,7 @@ @implementation DWSlider -(void *)userdata { return userdata; } -(void)setUserdata:(void *)input { userdata = input; } --(void)sliderChanged:(id)sender { NSLog(@"Slider changed"); _event_handler(self, (void *)[self integerValue], 14); } +-(void)sliderChanged:(id)sender { _event_handler(self, (void *)[self integerValue], 14); } -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } @end @@ -686,7 +686,7 @@ -(float)range; -(float)visible; -(void)setRange:(float)input1 andVisible:(float)input2; --(void)changed:(id)sender; +-(void)scrollerChanged:(id)sender; @end @implementation DWScrollbar @@ -695,7 +695,7 @@ -(float)range { return range; } -(float)visible { return visible; } -(void)setRange:(float)input1 andVisible:(float)input2 { range = input1; visible = input2; } --(void)changed:(id)sender { NSNumber *num = [NSNumber numberWithDouble:[self floatValue]]; _event_handler(self, (void *)[num integerValue], 14); } +-(void)scrollerChanged:(id)sender { NSNumber *num = [NSNumber numberWithDouble:[self floatValue]]; _event_handler(self, (void *)[num integerValue], 14); } -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } @end @@ -1165,9 +1165,12 @@ @interface DWStepper : NSStepper { id textfield; + id parent; } -(void)setTextfield:(id)input; -(id)textfield; +-(void)setParent:(id)input; +-(id)parent; -(void)mouseDown:(NSEvent *)event; -(void)mouseUp:(NSEvent *)event; @end @@ -1175,17 +1178,21 @@ @implementation DWStepper -(void)setTextfield:(id)input { textfield = input; } -(id)textfield { return textfield; } +-(void)setParent:(id)input { parent = input; } +-(id)parent { return parent; } -(void)mouseDown:(NSEvent *)event { [super mouseDown:event]; if([[NSApp currentEvent] type] == NSLeftMouseUp) { - [textfield takeIntValueFrom:self]; + [textfield takeIntValueFrom:self]; + _event_handler(parent, (void *)[self integerValue], 14); } } -(void)mouseUp:(NSEvent *)event { [textfield takeIntValueFrom:self]; + _event_handler(parent, (void *)[self integerValue], 14); } @end @@ -1215,6 +1222,7 @@ [self addSubview:textfield]; stepper = [[DWStepper alloc] init]; [self addSubview:stepper]; + [stepper setParent:self]; [stepper setTextfield:textfield]; [textfield takeIntValueFrom:stepper]; [textfield setDelegate:self]; @@ -1228,6 +1236,8 @@ -(void)controlTextDidChange:(NSNotification *)aNotification { [stepper takeIntValueFrom:textfield]; + [textfield takeIntValueFrom:stepper]; + _event_handler(self, (void *)[stepper integerValue], 14); } -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } @end @@ -2573,6 +2583,8 @@ [scrollbar setAction:@selector(changed:)]; [scrollbar setRange:0.0 andVisible:0.0]; [scrollbar setKnobProportion:1.0]; + [scrollbar setTarget:scrollbar]; + [scrollbar setAction:@selector(scrollerChanged:)]; [scrollbar setTag:cid]; [scrollbar setEnabled:YES]; return scrollbar;