From 2c7f2098004f5fe90189c536affc73dfe67393e9 Mon Sep 17 00:00:00 2001 From: Bibiko Date: Mon, 10 Aug 2009 16:38:54 +0000 Subject: =?UTF-8?q?=E2=80=A2=20added=20to=20the=20FieldEditorSheet=20a=20m?= =?UTF-8?q?ax=20text=20length=20validation=20=E2=80=A2=20added=20the=20max?= =?UTF-8?q?=20text=20length=20validation=20for=20the=20TableContent=20whil?= =?UTF-8?q?e=20editing=20in=20the=20FieldEditorSheet=20=E2=80=A2=20reinvok?= =?UTF-8?q?ed=20the=20validation=20of=20the=20max=20text=20length=20for=20?= =?UTF-8?q?TableContent=20editing=20while=20editing=20in=20=20a=20cell=20?= =?UTF-8?q?=E2=80=A2=20fixed=20in=20TableContent:=20prevent=20the=20editin?= =?UTF-8?q?g=20of=20data=20cells=20in=20gray=20if=20the=20cell=20displays?= =?UTF-8?q?=20the=20gray=20NULL=20value?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/SPFieldEditorController.m | 48 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'Source/SPFieldEditorController.m') diff --git a/Source/SPFieldEditorController.m b/Source/SPFieldEditorController.m index 7b05c5fa..230a3861 100644 --- a/Source/SPFieldEditorController.m +++ b/Source/SPFieldEditorController.m @@ -28,6 +28,7 @@ #import "SPTextViewAdditions.h" #import "SPDataAdditions.h" #import "QLPreviewPanel.h" +#import "SPDataCellFormatter.h" @implementation SPFieldEditorController @@ -37,6 +38,7 @@ // force the nib to be loaded (void) [self window]; counter = 0; + maxTextLength = 0; // Allow the user to enter cmd+return to close the edit sheet in addition to fn+return [editSheetOkButton setKeyEquivalentModifierMask:NSCommandKeyMask]; @@ -51,6 +53,11 @@ [super dealloc]; } +- (void)setTextMaxLength:(unsigned long long)length +{ + maxTextLength = length; +} + - (id)editWithObject:(id)data fieldName:(NSString*)fieldName usingEncoding:(NSStringEncoding)anEncoding isObjectBlob:(BOOL)isFieldBlob isEditable:(BOOL)isEditable withWindow:(NSWindow *)tableWindow { @@ -594,12 +601,51 @@ } } +#pragma mark - +#pragma mark Delegates + +/* + Validate editTextView for max text length + */ +- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)r replacementString:(NSString *)replacementString +{ + if(textView == editTextView && maxTextLength > 0) { + + int newLength; + + // Pure attribute changes are ok. + if (!replacementString) return YES; + + // The exact change isn't known. Disallow the change to be safe. + if (r.location==NSNotFound) return NO; + + // Calculate the length of the text after the change. + newLength=[[textView textStorage] length]+[replacementString length]-r.length; + + // If it's too long, disallow the change. + // If the user pastes something into insert it partially to maxTextLength. + if (newLength>maxTextLength) { + + if(maxTextLength-[[textView textStorage] length] < [replacementString length]) { + [textView insertText:[replacementString substringToIndex:maxTextLength-[[textView textStorage] length]]]; + } + NSBeep(); + return NO; + } + + // Otherwise, allow it. + return YES; + + } + return YES; +} + /* invoked when the user changes the string in the editSheet */ - (void)textViewDidChangeSelection:(NSNotification *)notification { - + // Do nothing if user really didn't changed text (e.g. for font size changing return) if(editSheetWillBeInitialized || ([[[notification object] textStorage] changeInLength]==0)) return; -- cgit v1.2.3