# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1349468234 0 # Node ID eecf0eb609d882b0b9988cd43863e800217d2fc4 # Parent 2bcdc3cfffa770f53164aa5e2060ac0436bc6323 Added keyboard handling for (check/radio/spin)buttons, containers, trees, lists on Mac. diff -r 2bcdc3cfffa7 -r eecf0eb609d8 mac/dw.m --- a/mac/dw.m Sat Sep 29 00:21:21 2012 +0000 +++ b/mac/dw.m Fri Oct 05 20:17:14 2012 +0000 @@ -1024,6 +1024,23 @@ -(NSButtonType)buttonType { return buttonType; } -(void)setParent:(DWBox *)input { parent = input; } -(DWBox *)parent { return parent; } +-(void)keyDown:(NSEvent *)theEvent +{ + unichar vk = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; + if(vk == VK_RETURN || vk == VK_SPACE) + { + if(buttonType == NSSwitchButton) + [self setState:([self state] ? NSOffState : NSOnState)]; + [self buttonClicked:self]; + } + else + { + [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]; + [super keyDown:theEvent]; + } +} +-(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; } +-(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; } -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; } @end @@ -2079,6 +2096,14 @@ _event_handler(self, (NSEvent *)[self getRowTitle:row], 10); return nil; } +-(void)keyDown:(NSEvent *)theEvent +{ + if([[theEvent charactersIgnoringModifiers] characterAtIndex:0] == VK_TAB) + [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]; + [super keyDown:theEvent]; +} +-(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; } +-(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; } -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; } @end @@ -2314,6 +2339,14 @@ [cell setTextColor:fgcolor]; } -(void)clear { NSMutableArray *toclear = data; data = nil; _free_tree_recurse(toclear, NULL); [self reloadData]; } +-(void)keyDown:(NSEvent *)theEvent +{ + if([[theEvent charactersIgnoringModifiers] characterAtIndex:0] == VK_TAB) + [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]; + [super keyDown:theEvent]; +} +-(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; } +-(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; } -(void)dealloc { UserData *root = userdata; @@ -2404,6 +2437,25 @@ [textfield takeIntValueFrom:self]; _event_handler(parent, (void *)[self integerValue], 14); } +-(void)keyDown:(NSEvent *)theEvent +{ + unichar vk = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; + if(vk == VK_UP || vk == VK_DOWN) + { + if(vk == VK_UP) + [self setIntegerValue:([self integerValue]+[self increment])]; + else + [self setIntegerValue:([self integerValue]-[self increment])]; + [self mouseUp:theEvent]; + } + else + { + [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]; + [super keyDown:theEvent]; + } +} +-(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; } +-(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; } @end /* Subclass for a Spinbutton type */