]> git.saurik.com Git - wxWidgets.git/commitdiff
supporting max len event
authorStefan Csomor <csomor@advancedconcepts.ch>
Wed, 12 Jun 2013 22:04:38 +0000 (22:04 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Wed, 12 Jun 2013 22:04:38 +0000 (22:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74191 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/textentry.h
src/osx/cocoa/textctrl.mm
src/osx/textentry_osx.cpp

index b51e97bbd560da781b6172b4ddb793b140719a11..16225e0e89e46e995bfa461f4147bbaf080731c5 100644 (file)
@@ -80,6 +80,8 @@ public:
     virtual void SetSelection(long from, long to);
     virtual void SetEditable(bool editable);
 
+    virtual bool SendMaxLenEvent();
+
     // Implementation
     // --------------
 
index 760257f4f4547e0afa9139dd416ca4331cf1fe1d..14f3a176e148796ef03b920d8f18cbe35c5c41e6 100644 (file)
@@ -111,6 +111,7 @@ NSView* wxMacEditHelper::ms_viewCurrentlyEdited = nil;
 @interface wxMaximumLengthFormatter : NSFormatter
 {
     int maxLength;
+    wxTextEntry* field;
 }
 
 @end
@@ -148,12 +149,17 @@ NSView* wxMacEditHelper::ms_viewCurrentlyEdited = nil;
     int len = [*partialStringPtr length];
     if ( maxLength > 0 && len > maxLength )
     {
-        // TODO wxEVT_TEXT_MAXLEN
+        field->SendMaxLenEvent();
         return NO;
     }
     return YES;
 }
 
+- (void) setTextEntry:(wxTextEntry*) tf
+{
+    field = tf;
+}
+
 @end
 
 @implementation wxNSSecureTextField
@@ -805,6 +811,7 @@ void wxNSTextFieldControl::SetMaxLength(unsigned long len)
 {
     wxMaximumLengthFormatter* formatter = [[[wxMaximumLengthFormatter alloc] init] autorelease];
     [formatter setMaxLength:len];
+    [formatter setTextEntry:GetTextEntry()];
     [m_textField setFormatter:formatter];
 }
 
index 8fe74193ea6ef0d9849b5e3d87db1ad5104ad8b4..c5f53512b235ed9fdb7a3c22b632b1495cfff53e 100644 (file)
@@ -224,6 +224,23 @@ bool wxTextEntry::IsEditable() const
     return m_editable ;
 }
 
+bool wxTextEntry::SendMaxLenEvent()
+{
+    wxWindow *win = GetEditableWindow();
+    wxCHECK_MSG( win, false, "can't send an event without a window" );
+    
+    wxCommandEvent event(wxEVT_TEXT_MAXLEN, win->GetId());
+    
+    // do not do this as it could be very inefficient if the text control
+    // contains a lot of text and we're not using ref-counted wxString
+    // implementation -- instead, event.GetString() will query the control for
+    // its current text if needed
+    //event.SetString(win->GetValue());
+    
+    event.SetEventObject(win);
+    return win->HandleWindowEvent(event);
+}
+
 // ----------------------------------------------------------------------------
 // Undo/redo
 // ----------------------------------------------------------------------------