]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/textctrl.mm
making sure peer->Move refreshes properly, bringing in synch with carbon, applying...
[wxWidgets.git] / src / osx / cocoa / textctrl.mm
index 308f0b8e9c1e43d7712cfe001d1e69265a629f6b..fc2169099e6afa0ebdf4d8a0279ff42a26bb26c5 100644 (file)
 }
 
 
-- (void)controlTextDidChange:(NSNotification *)aNotification
+- (void)textDidChange:(NSNotification *)aNotification
 {
     if ( impl )
     {
         }
     }
 }
+
+- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)commandSelector
+{
+    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;
+}
 @end
 
 @implementation wxNSTextField
     impl = item;
 }
 
+- (void) setEnabled:(BOOL) flag
+{
+    [super setEnabled: flag];
+
+    if (![self drawsBackground]) {
+        // Static text is drawn incorrectly when disabled.
+        // For an explanation, see
+        // http://www.cocoabuilder.com/archive/message/cocoa/2006/7/21/168028
+        if (flag) {
+            [self setTextColor: [NSColor controlTextColor]];
+        } else {
+            [self setTextColor: [NSColor secondarySelectedControlColor]];
+        }
+    }
+}
 
 - (void)controlTextDidChange:(NSNotification *)aNotification
 {
     }
 }
 
+typedef BOOL (*wxOSX_insertNewlineHandlerPtr)(NSView* self, SEL _cmd, NSControl *control, NSTextView* textView, SEL commandSelector);
+
+- (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector
+{
+    if (commandSelector == @selector(insertNewline:))
+    {
+        if ( impl  )
+        {
+            wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
+            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;
+}
 /*
 - (void)controlTextDidEndEditing:(NSNotification *)aNotification
 {
 wxNSTextViewControl::wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w ) : wxWidgetCocoaImpl(wxPeer, w)
 {
     m_scrollView = (NSScrollView*) w;
-    [w setImplementation: this];
+    [(wxNSTextField*)w setImplementation: this];
     
     [m_scrollView setHasVerticalScroller:YES];
     [m_scrollView setHasHorizontalScroller:NO];
@@ -282,7 +338,9 @@ void wxNSTextViewControl::GetSelection( long* from, long* to) const
 
 void wxNSTextViewControl::SetSelection( long from , long to )
 {
-    [m_textView setSelectedRange:NSMakeRange(from, to-from)];
+    NSRange selrange = NSMakeRange(from, to-from);
+    [m_textView setSelectedRange:selrange];
+    [m_textView scrollRangeToVisible:selrange];
 }
 
 void wxNSTextViewControl::WriteText(const wxString& str) 
@@ -290,6 +348,7 @@ void wxNSTextViewControl::WriteText(const wxString& str)
     // temp hack to get logging working early
     wxString former = GetStringValue();
     SetStringValue( former + str );
+    SetSelection(GetStringValue().length(), GetStringValue().length());
 }
 
 // wxNSTextFieldControl
@@ -377,6 +436,7 @@ void wxNSTextFieldControl::WriteText(const wxString& str)
     // temp hack to get logging working early
     wxString former = GetStringValue();
     SetStringValue( former + str );
+    SetSelection(GetStringValue().length(), GetStringValue().length());
 }
 
 void wxNSTextFieldControl::controlAction(WXWidget slf, void* _cmd, void *sender)