Mercurial > dwindows
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 |