]> git.saurik.com Git - wxWidgets.git/commitdiff
native maxlength support, fixes #10269 (for osx_cocoa)
authorStefan Csomor <csomor@advancedconcepts.ch>
Sun, 15 Jan 2012 15:55:58 +0000 (15:55 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sun, 15 Jan 2012 15:55:58 +0000 (15:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70356 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/osx/cocoa/textctrl.mm

index ab588204b2de586e36c4e2af8a3db8dd2a5bf747..96a35ede643805f6e833cd771ced56e71b464f90 100644 (file)
@@ -107,6 +107,55 @@ protected :
 
 NSView* wxMacEditHelper::ms_viewCurrentlyEdited = nil;
 
+// a minimal NSFormatter that just avoids getting too long entries
+@interface wxMaximumLengthFormatter : NSFormatter
+{
+    int maxLength;
+}
+
+@end
+
+@implementation wxMaximumLengthFormatter
+
+- (id)init 
+{
+    [super init];
+    maxLength = 0;
+    return self;
+}
+
+- (void) setMaxLength:(int) maxlen 
+{
+    maxLength = maxlen;
+}
+
+- (NSString *)stringForObjectValue:(id)anObject 
+{
+    if(![anObject isKindOfClass:[NSString class]])
+        return nil;
+    return [NSString stringWithString:anObject];
+}
+
+- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString  **)error 
+{
+    *obj = [NSString stringWithString:string];
+    return YES;
+}
+
+- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr 
+              originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error
+{
+    int len = [*partialStringPtr length];
+    if ( maxLength > 0 && len > maxLength )
+    {
+        // TODO wxEVT_COMMAND_TEXT_MAXLEN
+        return NO;
+    }
+    return YES;
+}
+
+@end
+
 @implementation wxNSSecureTextField
 
 + (void)initialize
@@ -688,6 +737,13 @@ void wxNSTextFieldControl::SetStringValue( const wxString &str)
     [m_textField setStringValue: wxCFStringRef( str , m_wxPeer->GetFont().GetEncoding() ).AsNSString()];
 }
 
+void wxNSTextFieldControl::SetMaxLength(unsigned long len)
+{
+    wxMaximumLengthFormatter* formatter = [[[wxMaximumLengthFormatter alloc] init] autorelease];
+    [formatter setMaxLength:len];
+    [m_textField setFormatter:formatter];
+}
+
 void wxNSTextFieldControl::Copy()
 {
     NSText* editor = [m_textField currentEditor];