comparison mac/dw.m @ 1806:eecf0eb609d8

Added keyboard handling for (check/radio/spin)buttons, containers, trees, lists on Mac.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 05 Oct 2012 20:17:14 +0000
parents 2bcdc3cfffa7
children d7447c814f8b
comparison
equal deleted inserted replaced
1805:2bcdc3cfffa7 1806:eecf0eb609d8
1022 } 1022 }
1023 -(void)setButtonType:(NSButtonType)input { buttonType = input; [super setButtonType:input]; } 1023 -(void)setButtonType:(NSButtonType)input { buttonType = input; [super setButtonType:input]; }
1024 -(NSButtonType)buttonType { return buttonType; } 1024 -(NSButtonType)buttonType { return buttonType; }
1025 -(void)setParent:(DWBox *)input { parent = input; } 1025 -(void)setParent:(DWBox *)input { parent = input; }
1026 -(DWBox *)parent { return parent; } 1026 -(DWBox *)parent { return parent; }
1027 -(void)keyDown:(NSEvent *)theEvent
1028 {
1029 unichar vk = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
1030 if(vk == VK_RETURN || vk == VK_SPACE)
1031 {
1032 if(buttonType == NSSwitchButton)
1033 [self setState:([self state] ? NSOffState : NSOnState)];
1034 [self buttonClicked:self];
1035 }
1036 else
1037 {
1038 [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
1039 [super keyDown:theEvent];
1040 }
1041 }
1042 -(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; }
1043 -(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; }
1027 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; } 1044 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; }
1028 @end 1045 @end
1029 1046
1030 /* Subclass for a progress type */ 1047 /* Subclass for a progress type */
1031 @interface DWPercent : NSProgressIndicator 1048 @interface DWPercent : NSProgressIndicator
2077 NSPoint where = [self convertPoint:[event locationInWindow] fromView:nil]; 2094 NSPoint where = [self convertPoint:[event locationInWindow] fromView:nil];
2078 row = (int)[self rowAtPoint:where]; 2095 row = (int)[self rowAtPoint:where];
2079 _event_handler(self, (NSEvent *)[self getRowTitle:row], 10); 2096 _event_handler(self, (NSEvent *)[self getRowTitle:row], 10);
2080 return nil; 2097 return nil;
2081 } 2098 }
2099 -(void)keyDown:(NSEvent *)theEvent
2100 {
2101 if([[theEvent charactersIgnoringModifiers] characterAtIndex:0] == VK_TAB)
2102 [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
2103 [super keyDown:theEvent];
2104 }
2105 -(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; }
2106 -(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; }
2082 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; } 2107 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; }
2083 @end 2108 @end
2084 2109
2085 /* Dive into the tree freeing all desired child nodes */ 2110 /* Dive into the tree freeing all desired child nodes */
2086 void _free_tree_recurse(NSMutableArray *node, NSMutableArray *item) 2111 void _free_tree_recurse(NSMutableArray *node, NSMutableArray *item)
2312 fgcolor = input; 2337 fgcolor = input;
2313 [fgcolor retain]; 2338 [fgcolor retain];
2314 [cell setTextColor:fgcolor]; 2339 [cell setTextColor:fgcolor];
2315 } 2340 }
2316 -(void)clear { NSMutableArray *toclear = data; data = nil; _free_tree_recurse(toclear, NULL); [self reloadData]; } 2341 -(void)clear { NSMutableArray *toclear = data; data = nil; _free_tree_recurse(toclear, NULL); [self reloadData]; }
2342 -(void)keyDown:(NSEvent *)theEvent
2343 {
2344 if([[theEvent charactersIgnoringModifiers] characterAtIndex:0] == VK_TAB)
2345 [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
2346 [super keyDown:theEvent];
2347 }
2348 -(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; }
2349 -(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; }
2317 -(void)dealloc 2350 -(void)dealloc
2318 { 2351 {
2319 UserData *root = userdata; 2352 UserData *root = userdata;
2320 _remove_userdata(&root, NULL, TRUE); 2353 _remove_userdata(&root, NULL, TRUE);
2321 _free_tree_recurse(data, NULL); 2354 _free_tree_recurse(data, NULL);
2402 -(void)mouseUp:(NSEvent *)event 2435 -(void)mouseUp:(NSEvent *)event
2403 { 2436 {
2404 [textfield takeIntValueFrom:self]; 2437 [textfield takeIntValueFrom:self];
2405 _event_handler(parent, (void *)[self integerValue], 14); 2438 _event_handler(parent, (void *)[self integerValue], 14);
2406 } 2439 }
2440 -(void)keyDown:(NSEvent *)theEvent
2441 {
2442 unichar vk = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
2443 if(vk == VK_UP || vk == VK_DOWN)
2444 {
2445 if(vk == VK_UP)
2446 [self setIntegerValue:([self integerValue]+[self increment])];
2447 else
2448 [self setIntegerValue:([self integerValue]-[self increment])];
2449 [self mouseUp:theEvent];
2450 }
2451 else
2452 {
2453 [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
2454 [super keyDown:theEvent];
2455 }
2456 }
2457 -(void)insertTab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectNextKeyView:self]; }
2458 -(void)insertBacktab:(id)sender { if([[self window] firstResponder] == self) [[self window] selectPreviousKeyView:self]; }
2407 @end 2459 @end
2408 2460
2409 /* Subclass for a Spinbutton type */ 2461 /* Subclass for a Spinbutton type */
2410 @interface DWSpinButton : NSView 2462 @interface DWSpinButton : NSView
2411 #ifdef BUILDING_FOR_SNOW_LEOPARD 2463 #ifdef BUILDING_FOR_SNOW_LEOPARD