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