Revision: 4979
          http://skim-app.svn.sourceforge.net/skim-app/?rev=4979&view=rev
Author:   hofman
Date:     2008-11-22 18:48:54 +0000 (Sat, 22 Nov 2008)

Log Message:
-----------
Add search menu item to choose case insensitive option to note search fields

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

Modified: trunk/SKMainWindowController.h
===================================================================
--- trunk/SKMainWindowController.h      2008-11-21 17:58:52 UTC (rev 4978)
+++ trunk/SKMainWindowController.h      2008-11-22 18:48:54 UTC (rev 4979)
@@ -159,6 +159,7 @@
     NSMutableArray              *notes;
     CFMutableDictionaryRef      rowHeights;
     BOOL                        updatingNoteSelection;
+    BOOL                        caseInsensitiveNoteSearch;
     
     IBOutlet NSArrayController  *snapshotArrayController;
     IBOutlet SKThumbnailTableView *snapshotTableView;
@@ -336,6 +337,7 @@
 - (IBAction)chooseTransition:(id)sender;
 - (IBAction)toggleCaseInsensitiveSearch:(id)sender;
 - (IBAction)toggleWholeWordSearch:(id)sender;
+- (IBAction)toggleCaseInsensitiveNoteSearch:(id)sender;
 
 - (void)showSnapshotAtPageNumber:(int)pageNum forRect:(NSRect)rect 
scaleFactor:(float)scaleFactor autoFits:(BOOL)autoFits;
 - (void)showSnapshotsWithSetups:(NSArray *)setups;

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2008-11-21 17:58:52 UTC (rev 4978)
+++ trunk/SKMainWindowController.m      2008-11-22 18:48:54 UTC (rev 4979)
@@ -224,6 +224,7 @@
         findPanelFind = NO;
         caseInsensitiveSearch = YES;
         wholeWordSearch = NO;
+        caseInsensitiveNoteSearch = YES;
         groupedSearchResults = [[NSMutableArray alloc] init];
         thumbnails = [[NSMutableArray alloc] init];
         notes = [[NSMutableArray alloc] init];
@@ -331,6 +332,10 @@
     [menu addItemWithTitle:NSLocalizedString(@"Ignore Case", @"Menu item 
title") action:@selector(toggleCaseInsensitiveSearch:) target:self];
     [[searchField cell] setSearchMenuTemplate:menu];
     [[searchField cell] setPlaceholderString:NSLocalizedString(@"Search", 
@"placeholder")];
+    
+    menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] autorelease];
+    [menu addItemWithTitle:NSLocalizedString(@"Ignore Case", @"Menu item 
title") action:@selector(toggleCaseInsensitiveNoteSearch:) target:self];
+    [[noteSearchField cell] setSearchMenuTemplate:menu];
     [[noteSearchField cell] setPlaceholderString:NSLocalizedString(@"Search", 
@"placeholder")];
     
     [[[noteOutlineView 
tableColumnWithIdentifier:SKMainWindowNoteColumnIdentifer] headerCell] 
setTitle:NSLocalizedString(@"Note", @"Table header title")];
@@ -2115,6 +2120,12 @@
         [self search:searchField];
 }
 
+- (IBAction)toggleCaseInsensitiveNoteSearch:(id)sender {
+    caseInsensitiveNoteSearch = NO == caseInsensitiveNoteSearch;
+    if ([[noteSearchField stringValue] length])
+        [self searchNotes:noteSearchField];
+}
+
 - (IBAction)toggleLeftSidePane:(id)sender {
     if ([self isFullScreen]) {
         [[SKPDFToolTipWindow sharedToolTipWindow] fadeOut];
@@ -3692,7 +3703,7 @@
 }
 
 - (void)updateNoteFilterPredicate {
-    [noteArrayController setFilterPredicate:[noteOutlineView 
filterPredicateForSearchString:[noteSearchField stringValue]]];
+    [noteArrayController setFilterPredicate:[noteOutlineView 
filterPredicateForSearchString:[noteSearchField stringValue] 
caseInsensitive:caseInsensitiveNoteSearch]];
     [noteOutlineView reloadData];
 }
 

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2008-11-21 17:58:52 UTC (rev 4978)
+++ trunk/SKMainWindowController_UI.m   2008-11-22 18:48:54 UTC (rev 4979)
@@ -1347,6 +1347,9 @@
     } else if (action == @selector(toggleWholeWordSearch:)) {
         [menuItem setState:wholeWordSearch ? NSOnState : NSOffState];
         return floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_4;
+    } else if (action == @selector(toggleCaseInsensitiveNoteSearch:)) {
+        [menuItem setState:caseInsensitiveNoteSearch ? NSOnState : NSOffState];
+        return YES;
     }
     return YES;
 }

Modified: trunk/SKNoteOutlineView.h
===================================================================
--- trunk/SKNoteOutlineView.h   2008-11-21 17:58:52 UTC (rev 4978)
+++ trunk/SKNoteOutlineView.h   2008-11-22 18:48:54 UTC (rev 4979)
@@ -49,7 +49,7 @@
 - (void)setNoteTypes:(NSArray *)types;
 - (NSMenu *)noteTypeMenu;
 
-- (NSPredicate *)filterPredicateForSearchString:(NSString *)searchString;
+- (NSPredicate *)filterPredicateForSearchString:(NSString *)searchString 
caseInsensitive:(BOOL)caseInsensitive;
 
 - (IBAction)toggleDisplayNoteType:(id)sender;
 - (IBAction)displayAllNoteTypes:(id)sender;

Modified: trunk/SKNoteOutlineView.m
===================================================================
--- trunk/SKNoteOutlineView.m   2008-11-21 17:58:52 UTC (rev 4978)
+++ trunk/SKNoteOutlineView.m   2008-11-22 18:48:54 UTC (rev 4979)
@@ -200,7 +200,7 @@
     }
 }
 
-- (NSPredicate *)filterPredicateForSearchString:(NSString *)searchString {
+- (NSPredicate *)filterPredicateForSearchString:(NSString *)searchString 
caseInsensitive:(BOOL)caseInsensitive {
     NSPredicate *filterPredicate = nil;
     NSPredicate *typePredicate = nil;
     NSPredicate *searchPredicate = nil;
@@ -221,9 +221,12 @@
     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];
+        unsigned int options = NSDiacriticInsensitivePredicateOption;
+        if (caseInsensitive)
+            options |= NSCaseInsensitivePredicateOption;
+        NSPredicate *stringPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:options];
         rhs = [NSExpression expressionForKeyPath:@"text.string"];
-        NSPredicate *textPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:NSCaseInsensitivePredicateOption | 
NSDiacriticInsensitivePredicateOption];
+        NSPredicate *textPredicate = [NSComparisonPredicate 
predicateWithLeftExpression:lhs rightExpression:rhs 
modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType 
options:options];
         searchPredicate = [NSCompoundPredicate 
orPredicateWithSubpredicates:[NSArray arrayWithObjects:stringPredicate, 
textPredicate, nil]];
     }
     if (typePredicate) {

Modified: trunk/SKNotesDocument.h
===================================================================
--- trunk/SKNotesDocument.h     2008-11-21 17:58:52 UTC (rev 4978)
+++ trunk/SKNotesDocument.h     2008-11-22 18:48:54 UTC (rev 4979)
@@ -49,11 +49,13 @@
     NSMutableArray *notes;
     CFMutableDictionaryRef rowHeights;
     BOOL exportUsingPanel;
+    BOOL caseInsensitiveSearch;
 }
 
 - (IBAction)openPDF:(id)sender;
 - (IBAction)searchNotes:(id)sender;
 - (IBAction)toggleStatusBar:(id)sender;
+- (IBAction)toggleCaseInsensitiveSearch:(id)sender;
  
 - (NSArray *)notes;
 - (unsigned int)countOfNotes;

Modified: trunk/SKNotesDocument.m
===================================================================
--- trunk/SKNotesDocument.m     2008-11-21 17:58:52 UTC (rev 4978)
+++ trunk/SKNotesDocument.m     2008-11-22 18:48:54 UTC (rev 4979)
@@ -82,6 +82,7 @@
     if (self = [super init]) {
         notes = [[NSMutableArray alloc] initWithCapacity:10];
         rowHeights = CFDictionaryCreateMutable(NULL, 0, 
&kSKPointerEqualObjectDictionaryKeyCallBacks, 
&kSKFloatDictionaryValueCallBacks);
+        caseInsensitiveSearch = YES;
     }
     return self;
 }
@@ -114,6 +115,9 @@
     if ([[NSUserDefaults standardUserDefaults] 
boolForKey:SKShowNotesStatusBarKey] == NO)
         [self toggleStatusBar:nil];
     
+    NSMenu *menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] 
autorelease];
+    [menu addItemWithTitle:NSLocalizedString(@"Ignore Case", @"Menu item 
title") action:@selector(toggleCaseInsensitiveSearch:) target:self];
+    [[searchField cell] setSearchMenuTemplate:menu];
     [[searchField cell] setPlaceholderString:NSLocalizedString(@"Search", 
@"placeholder")];
     
     [[[outlineView 
tableColumnWithIdentifier:SKNotesDocumentNoteColumnIdentifier] headerCell] 
setTitle:NSLocalizedString(@"Note", @"Table header title")];
@@ -278,7 +282,7 @@
 }
 
 - (void)updateNoteFilterPredicate {
-    [arrayController setFilterPredicate:[outlineView 
filterPredicateForSearchString:[searchField stringValue]]];
+    [arrayController setFilterPredicate:[outlineView 
filterPredicateForSearchString:[searchField stringValue] 
caseInsensitive:caseInsensitiveSearch]];
     [outlineView reloadData];
 }
 
@@ -368,6 +372,12 @@
     [outlineView reloadData];
 }
 
+- (IBAction)toggleCaseInsensitiveSearch:(id)sender {
+    caseInsensitiveSearch = NO == caseInsensitiveSearch;
+    if ([[searchField stringValue] length])
+        [self searchNotes:searchField];
+}
+
 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
     SEL action = [menuItem action];
     if (action == @selector(toggleStatusBar:)) {
@@ -376,6 +386,9 @@
         else
             [menuItem setTitle:NSLocalizedString(@"Show Status Bar", @"Menu 
item title")];
         return YES;
+    } else if (action == @selector(toggleCaseInsensitiveSearch:)) {
+        [menuItem setState:caseInsensitiveSearch ? NSOnState : NSOffState];
+        return YES;
     }
     return YES;
 }


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