changeset 1808:f3458cd6277c

Added keyboard support to the notebook control on Mac.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 06 Oct 2012 00:33:37 +0000
parents d7447c814f8b
children 5efaea897310
files mac/dw.m
diffstat 1 files changed, 41 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mac/dw.m	Fri Oct 05 20:23:29 2012 +0000
+++ b/mac/dw.m	Sat Oct 06 00:33:37 2012 +0000
@@ -1319,6 +1319,47 @@
     }
     _event_handler(self, DW_INT_TO_POINTER([page pageid]), 15);
 }
+-(void)keyDown:(NSEvent *)theEvent
+{
+    unichar vk = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
+    
+    if(vk == VK_TAB)
+        [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
+    else if(vk == VK_LEFT)
+    {
+        NSArray *pages = [self tabViewItems];
+        DWNotebookPage *page = (DWNotebookPage *)[self selectedTabViewItem];
+        NSUInteger index = [pages indexOfObject:page];
+                     
+        if(index != NSNotFound)
+        {
+            if(index > 0)
+               [self selectTabViewItem:[pages objectAtIndex:(index-1)]];
+            else
+               [self selectTabViewItem:[pages objectAtIndex:0]];
+                
+        }
+    }
+    else if(vk == VK_RIGHT)
+    {
+        NSArray *pages = [self tabViewItems];
+        DWNotebookPage *page = (DWNotebookPage *)[self selectedTabViewItem];
+        NSUInteger index = [pages indexOfObject:page];
+        NSUInteger count = [pages count];
+        
+        if(index != NSNotFound)
+        {
+            if(index + 1 < count)
+                [self selectTabViewItem:[pages objectAtIndex:(index+1)]];
+            else
+                [self selectTabViewItem:[pages objectAtIndex:(count-1)]];
+            
+        }
+    }
+    [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