]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/textctrl.mm
introduce wxBG_STYLE_{ERASE,PAINT} and implement their documented semantics in wxGTK
[wxWidgets.git] / src / osx / cocoa / textctrl.mm
index 6814c6cdd58d8d4fcc8cfb306b0241540aae7ae4..2b12dac53bcaeb62dd47dae7bd1f53323ecce700 100644 (file)
@@ -78,11 +78,6 @@ protected :
     NSView* m_textView;
 } ;
 
-@interface wxNSSecureTextField : NSSecureTextField
-{
-}
-@end
-
 @implementation wxNSSecureTextField 
 
 + (void)initialize
@@ -128,16 +123,6 @@ protected :
 }
 @end
 
-@interface wxNSTextView : NSTextView
-{
-    wxNSTextScrollView* scrollView;
-}
-
-- (void)setScrollView: (wxNSTextScrollView *) sv;
-- (wxNSTextScrollView*) scrollView;
-
-@end
-
 @implementation wxNSTextScrollView
 
 + (void)initialize
@@ -150,79 +135,60 @@ protected :
     }
 }
 
-- (void)textDidChange:(NSNotification *)aNotification
+@end
+
+@implementation wxNSTextFieldEditor
+
+- (void) keyDown:(NSEvent*) event
 {
-    wxUnusedVar(aNotification);
-    wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
-    if ( impl )
-    {
-        wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
-        if ( wxpeer ) {
-            wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, wxpeer->GetId());
-            event.SetEventObject( wxpeer );
-            event.SetString( static_cast<wxTextCtrl*>(wxpeer)->GetValue() );
-            wxpeer->HandleWindowEvent( event );
-        }
-    }
+    wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( [self delegate] );
+    lastKeyDownEvent = event;
+    if ( impl == NULL || !impl->DoHandleKeyEvent(event) )
+        [super keyDown:event];
+    lastKeyDownEvent = nil;
 }
 
-- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)commandSelector
+- (void) keyUp:(NSEvent*) event
 {
-    wxUnusedVar(aTextView);
-    wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
-    if ( impl  )
-    {
-        wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
-        if (commandSelector == @selector(insertNewline:))
-        {
-            if ( wxpeer && wxpeer->GetWindowStyle() & wxTE_PROCESS_ENTER ) 
-            {
-                wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId());
-                event.SetEventObject( wxpeer );
-                event.SetString( static_cast<wxTextCtrl*>(wxpeer)->GetValue() );
-                wxpeer->HandleWindowEvent( event );
-            }
-        }
-    }
-    
-    return NO;
+    wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( [self delegate] );
+    if ( impl == NULL || !impl->DoHandleKeyEvent(event) )
+        [super keyUp:event];
 }
 
-- (void)textDidEndEditing:(NSNotification *)aNotification
+- (void) flagsChanged:(NSEvent*) event
 {
-    wxUnusedVar(aNotification);
-    wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
-    if ( impl )
-    {
-        impl->DoNotifyFocusEvent( false, NULL );
-    }
+    wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( [self delegate] );
+    if ( impl == NULL || !impl->DoHandleKeyEvent(event) )
+        [super flagsChanged:event];
 }
-@end
 
-@implementation wxNSTextView
+- (BOOL) performKeyEquivalent:(NSEvent*) event
+{
+    BOOL retval = [super performKeyEquivalent:event];
+    return retval;
+}
 
-- (BOOL) becomeFirstResponder
+- (void) insertText:(id) str
 {
-    BOOL val = [super becomeFirstResponder];
-    
-    if ( val )
+    wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( [self delegate] );
+    if ( impl == NULL || lastKeyDownEvent==nil || !impl->DoHandleCharEvent(lastKeyDownEvent, str) )
     {
-        wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( scrollView );
-        if (impl )
-            impl->DoNotifyFocusEvent( true, NULL );
-
+        [super insertText:str];
     }
-    return val;
 }
 
-- (void)setScrollView: (wxNSTextScrollView *) sv
-{
-    scrollView = sv;
-}
+@end
 
-- (wxNSTextScrollView*) scrollView
+@implementation wxNSTextView
+
++ (void)initialize
 {
-    return scrollView;
+    static BOOL initialized = NO;
+    if (!initialized) 
+    {
+        initialized = YES;
+        wxOSXCocoaClassAddWXMethods( self );
+    }
 }
 
 @end
@@ -239,6 +205,30 @@ protected :
     }
 }
 
+- (id) initWithFrame:(NSRect) frame
+{
+    self = [super initWithFrame:frame];
+    fieldEditor = nil;
+    return self;
+}
+
+- (void) dealloc
+{
+    [fieldEditor release];
+    [super dealloc];
+}
+
+- (void) setFieldEditor:(wxNSTextFieldEditor*) editor
+{
+    fieldEditor = editor;
+}
+
+- (wxNSTextFieldEditor*) fieldEditor
+{
+    return fieldEditor;
+}
+
+
 - (void) setEnabled:(BOOL) flag
 {
     [super setEnabled: flag];
@@ -329,7 +319,8 @@ wxNSTextViewControl::wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w ) : wxW
     [m_scrollView setDocumentView: tv];
 
     [tv setDelegate: w];
-    [tv setScrollView:sv];
+    
+    InstallEventHandler(tv);    
 }
 
 wxNSTextViewControl::~wxNSTextViewControl()
@@ -358,6 +349,7 @@ void wxNSTextViewControl::SetStringValue( const wxString &str)
     if (m_textView)
         [m_textView setString: wxCFStringRef( st , m_wxPeer->GetFont().GetEncoding() ).AsNSString()];
 }
+
 void wxNSTextViewControl::Copy() 
 {
     if (m_textView)
@@ -443,6 +435,7 @@ wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *wxPeer, WXWidget w ) : w
     m_textField = (NSTextField*) w;
     [m_textField setDelegate: w];
     m_selStart = m_selEnd = 0;
+    m_hasEditor = [w isKindOfClass:[NSTextField class]];
 }
 
 wxNSTextFieldControl::~wxNSTextFieldControl()