Revision: 18333
          http://bibdesk.svn.sourceforge.net/bibdesk/?rev=18333&view=rev
Author:   hofman
Date:     2011-12-22 22:26:38 +0000 (Thu, 22 Dec 2011)
Log Message:
-----------
convenience method to safely set selected ranges in a text view

Modified Paths:
--------------
    trunk/bibdesk/BDSKEditor.m
    trunk/bibdesk/BDSKTextImportController.m
    trunk/bibdesk/NSTextView_BDSKExtensions.h
    trunk/bibdesk/NSTextView_BDSKExtensions.m

Modified: trunk/bibdesk/BDSKEditor.m
===================================================================
--- trunk/bibdesk/BDSKEditor.m  2011-12-22 19:21:04 UTC (rev 18332)
+++ trunk/bibdesk/BDSKEditor.m  2011-12-22 22:26:38 UTC (rev 18333)
@@ -84,6 +84,7 @@
 #import "BDSKGroupsArray.h"
 #import "NSTableView_BDSKExtensions.h"
 #import "NSInvocation_BDSKExtensions.h"
+#import "NSTextView_BDSKExtensions.h"
 
 #define WEAK_NULL NULL
 
@@ -421,12 +422,11 @@
                if ([[self window] makeFirstResponder:firstResponder] && 
editorFlags.didSetupFields == NO) {
             if (firstResponder == tableView && editedRow != -1)
                 [tableView editColumn:1 row:editedRow withEvent:nil select:NO];
-            if (validRanges(selection, [[textView string] length])) // check 
range for safety
-                [textView setSelectedRanges:selection];
+            [textView setSafeSelectedRanges:selection];
         }
-        return YES;
         
     }
+    return YES;
 }
 
 #pragma mark Actions

Modified: trunk/bibdesk/BDSKTextImportController.m
===================================================================
--- trunk/bibdesk/BDSKTextImportController.m    2011-12-22 19:21:04 UTC (rev 
18332)
+++ trunk/bibdesk/BDSKTextImportController.m    2011-12-22 22:26:38 UTC (rev 
18333)
@@ -65,6 +65,7 @@
 #import "NSWindowController_BDSKExtensions.h"
 #import "NSEvent_BDSKExtensions.h"
 #import "BDSKURLSheetController.h"
+#import "NSTextView_BDSKExtensions.h"
 
 #define BDSKTextImportControllerFrameAutosaveName @"BDSKTextImportController 
Frame Autosave Name"
 
@@ -643,8 +644,7 @@
             if(shouldPreserveSelection && [[self window] 
makeFirstResponder:firstResponder]){
                 if(editedRow != -1)
                     [itemTableView editColumn:2 row:editedRow withEvent:nil 
select:YES];
-                if(validRanges(selection, [[textView string] length])) // 
check ranges for safety
-                    [textView setSelectedRanges:selection];
+                [textView setSafeSelectedRanges:selection];
             }
         }
        }

Modified: trunk/bibdesk/NSTextView_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSTextView_BDSKExtensions.h   2011-12-22 19:21:04 UTC (rev 
18332)
+++ trunk/bibdesk/NSTextView_BDSKExtensions.h   2011-12-22 22:26:38 UTC (rev 
18333)
@@ -38,8 +38,14 @@
 
 
 @interface NSTextView (BDSKExtensions)
+
 - (void)selectLineNumber:(NSInteger)line;
+
 - (void)highlightComponentsOfSearchString:(NSString *)searchString;
 - (void)highlightOccurrencesOfString:(NSString *)substring;
+
+- (void)setSafeSelectedRanges:(NSArray *)ranges;
+
 - (NSPoint)locationForCompletionWindow;
+
 @end

Modified: trunk/bibdesk/NSTextView_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSTextView_BDSKExtensions.m   2011-12-22 19:21:04 UTC (rev 
18332)
+++ trunk/bibdesk/NSTextView_BDSKExtensions.m   2011-12-22 22:26:38 UTC (rev 
18333)
@@ -191,6 +191,23 @@
     [self setSelectedRanges:newRanges];
 }
 
+- (void)setSafeSelectedRanges:(NSArray *)ranges {
+    NSUInteger length = [[self string] length];
+    NSMutableArray *mutableRanges = [NSMutableArray array];
+    for (NSValue *value in ranges) {
+        NSRange range = [value rangeValue];
+        if (NSMaxRange(range) > length) {
+            if (range.location >= length)
+                continue;
+            value = [NSValue valueWithRange:NSMakeRange(range.location, length 
- range.location)];
+        }
+        [mutableRanges addObject:value];
+    }
+    if ([mutableRanges count] == 0)
+        [mutableRanges addObject:[NSValue valueWithRange:NSMakeRange(length, 
0)]];
+    [self setSelectedRanges:mutableRanges];
+}
+
 - (NSPoint)locationForCompletionWindow;
 {
     NSPoint point = NSZeroPoint;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create 
new or port existing apps to sell to consumers worldwide. Explore the 
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to