Revision: 4754
          http://skim-app.svn.sourceforge.net/skim-app/?rev=4754&view=rev
Author:   hofman
Date:     2008-10-07 17:15:01 +0000 (Tue, 07 Oct 2008)

Log Message:
-----------
Avoid code duplication, get notes filter predicate in note outline view

Modified Paths:
--------------
    trunk/SKMainWindowController.m
    trunk/SKNoteOutlineView.h
    trunk/SKNoteOutlineView.m
    trunk/SKNotesDocument.m

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2008-10-07 17:04:57 UTC (rev 4753)
+++ trunk/SKMainWindowController.m      2008-10-07 17:15:01 UTC (rev 4754)
@@ -3698,41 +3698,7 @@
 }
 
 - (void)updateNoteFilterPredicate {
-    NSPredicate *filterPredicate = nil;
-    NSPredicate *typePredicate = nil;
-    NSPredicate *searchPredicate = nil;
-    NSArray *types = [noteOutlineView noteTypes];
-    NSString *searchString = [noteSearchField stringValue];
-    if ([types count] < 8) {
-        NSExpression *lhs = [NSExpression expressionForKeyPath:@"type"];
-        NSMutableArray *predicateArray = [NSMutableArray array];
-        NSEnumerator *typeEnum = [types objectEnumerator];
-        NSString *type;
-        
-        while (type = [typeEnum nextObject]) {
-            NSExpression *rhs = [NSExpression expressionForConstantValue:type];
-            NSPredicate *predicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSEqualToPredicateOperatorType 
options:0];
-            [predicateArray addObject:predicate];
-        }
-        typePredicate = [NSCompoundPredicate 
orPredicateWithSubpredicates:predicateArray];
-    }
-    if (searchString && [searchString isEqualToString:@""] == NO) {
-        NSExpression *lhs = [NSExpression 
expressionForConstantValue:searchString];
-        NSExpression *rhs = [NSExpression expressionForKeyPath:@"string"];
-        NSPredicate *stringPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:NSCaseInsensitivePredicateOption | 
NSDiacriticInsensitivePredicateOption];
-        rhs = [NSExpression expressionForKeyPath:@"text.string"];
-        NSPredicate *textPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:NSCaseInsensitivePredicateOption | 
NSDiacriticInsensitivePredicateOption];
-        searchPredicate = [NSCompoundPredicate 
orPredicateWithSubpredicates:[NSArray arrayWithObjects:stringPredicate, 
textPredicate, nil]];
-    }
-    if (typePredicate) {
-        if (searchPredicate)
-            filterPredicate = [NSCompoundPredicate 
andPredicateWithSubpredicates:[NSArray arrayWithObjects:typePredicate, 
searchPredicate, nil]];
-        else
-            filterPredicate = typePredicate;
-    } else if (searchPredicate) {
-        filterPredicate = searchPredicate;
-    }
-    [noteArrayController setFilterPredicate:filterPredicate];
+    [noteArrayController setFilterPredicate:[noteOutlineView 
filterPredicateForSearchString:[noteSearchField stringValue]]];
     [noteOutlineView reloadData];
 }
 

Modified: trunk/SKNoteOutlineView.h
===================================================================
--- trunk/SKNoteOutlineView.h   2008-10-07 17:04:57 UTC (rev 4753)
+++ trunk/SKNoteOutlineView.h   2008-10-07 17:15:01 UTC (rev 4754)
@@ -49,6 +49,8 @@
 - (void)setNoteTypes:(NSArray *)types;
 - (NSMenu *)noteTypeMenu;
 
+- (NSPredicate *)filterPredicateForSearchString:(NSString *)searchString;
+
 - (IBAction)toggleDisplayNoteType:(id)sender;
 - (IBAction)displayAllNoteTypes:(id)sender;
 - (IBAction)selectNoteTypes:(id)sender;

Modified: trunk/SKNoteOutlineView.m
===================================================================
--- trunk/SKNoteOutlineView.m   2008-10-07 17:04:57 UTC (rev 4753)
+++ trunk/SKNoteOutlineView.m   2008-10-07 17:15:01 UTC (rev 4754)
@@ -44,6 +44,7 @@
 #import "NSEvent_SKExtensions.h"
 #import "NSMenu_SKExtensions.h"
 
+#define NUMBER_OF_TYPES 9
 
 @implementation SKNoteOutlineView
 
@@ -199,6 +200,43 @@
     }
 }
 
+- (NSPredicate *)filterPredicateForSearchString:(NSString *)searchString {
+    NSPredicate *filterPredicate = nil;
+    NSPredicate *typePredicate = nil;
+    NSPredicate *searchPredicate = nil;
+    NSArray *types = [self noteTypes];
+    if ([types count] < NUMBER_OF_TYPES) {
+        NSExpression *lhs = [NSExpression expressionForKeyPath:@"type"];
+        NSMutableArray *predicateArray = [NSMutableArray array];
+        NSEnumerator *typeEnum = [types objectEnumerator];
+        NSString *type;
+        
+        while (type = [typeEnum nextObject]) {
+            NSExpression *rhs = [NSExpression expressionForConstantValue:type];
+            NSPredicate *predicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSEqualToPredicateOperatorType 
options:0];
+            [predicateArray addObject:predicate];
+        }
+        typePredicate = [NSCompoundPredicate 
orPredicateWithSubpredicates:predicateArray];
+    }
+    if (searchString && [searchString isEqualToString:@""] == NO) {
+        NSExpression *lhs = [NSExpression 
expressionForConstantValue:searchString];
+        NSExpression *rhs = [NSExpression expressionForKeyPath:@"string"];
+        NSPredicate *stringPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:NSCaseInsensitivePredicateOption | 
NSDiacriticInsensitivePredicateOption];
+        rhs = [NSExpression expressionForKeyPath:@"text.string"];
+        NSPredicate *textPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:NSCaseInsensitivePredicateOption | 
NSDiacriticInsensitivePredicateOption];
+        searchPredicate = [NSCompoundPredicate 
orPredicateWithSubpredicates:[NSArray arrayWithObjects:stringPredicate, 
textPredicate, nil]];
+    }
+    if (typePredicate) {
+        if (searchPredicate)
+            filterPredicate = [NSCompoundPredicate 
andPredicateWithSubpredicates:[NSArray arrayWithObjects:typePredicate, 
searchPredicate, nil]];
+        else
+            filterPredicate = typePredicate;
+    } else if (searchPredicate) {
+        filterPredicate = searchPredicate;
+    }
+    return filterPredicate;
+}
+
 #pragma mark Note Types
 
 - (NSMenu *)noteTypeMenu {
@@ -248,7 +286,7 @@
     NSMenu *menu = [self noteTypeMenu];
     int i;
     
-    for (i = 0; i < 9; i++) {
+    for (i = 0; i < NUMBER_OF_TYPES; i++) {
         NSMenuItem *item = [menu itemAtIndex:i];
         if ([item state] == NSOnState)
             [types addObject:[item representedObject]];
@@ -260,7 +298,7 @@
     NSMenu *menu = [self noteTypeMenu];
     int i;
     
-    for (i = 0; i < 9; i++) {
+    for (i = 0; i < NUMBER_OF_TYPES; i++) {
         NSMenuItem *item = [menu itemAtIndex:i];
         [item setState:[types containsObject:[item representedObject]] ? 
NSOnState : NSOffState];
     }
@@ -279,7 +317,7 @@
 - (IBAction)displayAllNoteTypes:(id)sender {
     NSMenu *menu = [self noteTypeMenu];
     int i;
-    for (i = 0; i < 9; i++)
+    for (i = 0; i < NUMBER_OF_TYPES; i++)
         [[menu itemAtIndex:i] setState:NSOnState];
     [self noteTypesUpdated];
 }
@@ -288,7 +326,7 @@
     if (returnCode == NSOKButton) {
         NSMenu *menu = [self noteTypeMenu];
         int i;
-        for (i = 0; i < 9; i++)
+        for (i = 0; i < NUMBER_OF_TYPES; i++)
             [[menu itemAtIndex:i] setState:[[noteTypeMatrix cellWithTag:i] 
state]];
         [self noteTypesUpdated];
     }
@@ -302,7 +340,7 @@
     
     NSMenu *menu = [self noteTypeMenu];
     int i;
-    for (i = 0; i < 9; i++)
+    for (i = 0; i < NUMBER_OF_TYPES; i++)
         [[noteTypeMatrix cellWithTag:i] setState:[[menu itemAtIndex:i] state]];
        
     [NSApp beginSheet:noteTypeSheet

Modified: trunk/SKNotesDocument.m
===================================================================
--- trunk/SKNotesDocument.m     2008-10-07 17:04:57 UTC (rev 4753)
+++ trunk/SKNotesDocument.m     2008-10-07 17:15:01 UTC (rev 4754)
@@ -304,41 +304,7 @@
 }
 
 - (void)updateNoteFilterPredicate {
-    NSPredicate *filterPredicate = nil;
-    NSPredicate *typePredicate = nil;
-    NSPredicate *searchPredicate = nil;
-    NSArray *types = [outlineView noteTypes];
-    NSString *searchString = [searchField stringValue];
-    if ([types count] < 8) {
-        NSExpression *lhs = [NSExpression expressionForKeyPath:@"type"];
-        NSMutableArray *predicateArray = [NSMutableArray array];
-        NSEnumerator *typeEnum = [types objectEnumerator];
-        NSString *type;
-        
-        while (type = [typeEnum nextObject]) {
-            NSExpression *rhs = [NSExpression expressionForConstantValue:type];
-            NSPredicate *predicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSEqualToPredicateOperatorType 
options:0];
-            [predicateArray addObject:predicate];
-        }
-        typePredicate = [NSCompoundPredicate 
orPredicateWithSubpredicates:predicateArray];
-    }
-    if (searchString && [searchString isEqualToString:@""] == NO) {
-        NSExpression *lhs = [NSExpression 
expressionForConstantValue:searchString];
-        NSExpression *rhs = [NSExpression expressionForKeyPath:@"string"];
-        NSPredicate *stringPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:NSCaseInsensitivePredicateOption | 
NSDiacriticInsensitivePredicateOption];
-        rhs = [NSExpression expressionForKeyPath:@"text.string"];
-        NSPredicate *textPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:NSCaseInsensitivePredicateOption | 
NSDiacriticInsensitivePredicateOption];
-        searchPredicate = [NSCompoundPredicate 
orPredicateWithSubpredicates:[NSArray arrayWithObjects:stringPredicate, 
textPredicate, nil]];
-    }
-    if (typePredicate) {
-        if (searchPredicate)
-            filterPredicate = [NSCompoundPredicate 
andPredicateWithSubpredicates:[NSArray arrayWithObjects:typePredicate, 
searchPredicate, nil]];
-        else
-            filterPredicate = typePredicate;
-    } else if (searchPredicate) {
-        filterPredicate = searchPredicate;
-    }
-    [arrayController setFilterPredicate:filterPredicate];
+    [arrayController setFilterPredicate:[outlineView 
filterPredicateForSearchString:[searchField stringValue]]];
     [outlineView reloadData];
 }
 


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

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to