Broken commit - refactoring search

This commit is contained in:
michael starke
2014-02-24 12:05:41 +01:00
parent c084d49d95
commit 81dc24d9b2
12 changed files with 118 additions and 165 deletions

View File

@@ -9,7 +9,7 @@
#import "MPContextBarViewController.h"
#import "HNHGradientView.h"
#import "KPKEntry.h"
#import "MPEntryFilterHelper.h"
#import "MPDocumentSearchService.h"
#import "NSButton+HNHTextColor.h"
@@ -34,10 +34,8 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
@property (nonatomic, assign) BOOL hasFilter;
/* Filter */
@property (weak) IBOutlet NSPopUpButton *filterTypePopupButton;
@property (weak) IBOutlet NSButton *filterDoneButton;
@property (weak) IBOutlet NSTextField *filterLabelTextField;
@property (weak) IBOutlet NSSearchField *filterSearchField;
/* History */
@property (weak) IBOutlet HNHGradientView *historyBar;
@property (weak) IBOutlet NSTextField *historyLabel;
@@ -59,7 +57,6 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
_hasFilter = NO;
_filterMode = MPFilterTitles;
_delegateRespondsToDidExitFilter = NO;
_delegateRespondsToDidExitHistory = NO;
_delegateRespondsToShouldEmptyTrash = NO;
@@ -71,10 +68,6 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
- (void)didLoadView {
[[self.filterLabelTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
[self.filterTypePopupButton setMenu:[self _allocFilterMenu]];
[self.filterSearchField setAction:@selector(_didChangeFilter)];
[[self.filterSearchField cell] setSendsSearchStringImmediately:NO];
self.historyBar.activeGradient = [[NSGradient alloc] initWithStartingColor:[NSColor redColor] endingColor:[NSColor greenColor]];
@@ -96,14 +89,13 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
[self.emptyTrashButton setNextKeyView:self.nextKeyView];
[self.filterDoneButton setNextKeyView:self.nextKeyView];
}
[self _updateFilterMenu];
[self _updateFilterButtons];
}
#pragma mark Properties
- (void)setFilterMode:(MPFilterMode)newFilterMode {
if(_filterMode != newFilterMode) {
if(newFilterMode == MPFilterNone) {
if(newFilterMode == MPEntrySearchNone) {
newFilterMode = MPFilterTitles;
}
_filterMode = newFilterMode;
@@ -123,7 +115,6 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
}
- (void)disable {
[self.filterSearchField setEnabled:NO];
}
- (void)enable {
@@ -145,22 +136,6 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
}
}
#pragma mark Actions
- (void)toggleFilterSpace:(id)sender {
if(![sender isKindOfClass:[NSMenuItem class]]) {
return; // Wrong sender
}
MPFilterMode toggledMode = [sender tag];
if(toggledMode & self.filterMode) {
/* Disable enabled flag */
self.filterMode ^= toggledMode;
}
else {
/* Enable disabled flag */
self.filterMode |= toggledMode;
}
}
- (void)exitFilter:(id)sender {
if(!self.hasFilter) {
return; // Nothing to do;
@@ -231,74 +206,4 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
// only the entry view has to be bound, the rest not
}
- (NSMenu *)_allocFilterMenu {
NSMenu *searchMenu = [[NSMenu alloc] init];
NSMenuItem *activeFilterItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SEARCH_IN", "") action:NULL keyEquivalent:@""];
[activeFilterItem setTag:MPContextBarViewControllerActiveFilterMenuItemTag];
[searchMenu addItem:activeFilterItem];
[searchMenu addItem:[NSMenuItem separatorItem]];
NSArray *titles = @[NSLocalizedString(@"TITLE", ""),
NSLocalizedString(@"PASSWORD", ""),
NSLocalizedString(@"URL", ""),
NSLocalizedString(@"USERNAME", "")
];
NSArray *tags = @[ @(MPFilterTitles),
@(MPFilterPasswords),
@(MPFilterUrls),
@(MPFilterUsernames) ];
/* Attributes */
for(NSUInteger index = 0; index < [tags count]; index++) {
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:titles[index] action:@selector(toggleFilterSpace:) keyEquivalent:@""];
[item setTag:[tags[index] integerValue]];
[item setTarget:self];
[searchMenu addItem:item];
}
[searchMenu addItem:[NSMenuItem separatorItem]];
/* Special Search */
NSMenuItem *doublePasswordsItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"DUPLICTE_PASSWORDS", "") action:NULL keyEquivalent:@""];
[doublePasswordsItem setTag:MPFilterDoublePasswords];
[searchMenu addItem:doublePasswordsItem];
return searchMenu;
}
- (void)_updateFilterMenu {
NSMenu *menu = [self.filterTypePopupButton menu];
NSArray *allItems = [menu itemArray];
NSArray *enabledItems = [self _filterItemsForMode:self.filterMode];
for(NSMenuItem *item in allItems) {
BOOL isSelected = [enabledItems containsObject:item];
[item setState:(isSelected ? NSOnState : NSOffState)];
}
NSMenuItem *activeFilterItem = [menu itemWithTag:MPContextBarViewControllerActiveFilterMenuItemTag];
__block NSMutableString *activeFilterTitle;
[enabledItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if(activeFilterTitle == nil) {
activeFilterTitle = [[NSMutableString alloc] initWithString:[obj title]];
}
else {
[activeFilterTitle appendFormat:@", %@", [obj title]];
}
}];
[activeFilterItem setTitle:activeFilterTitle];
[self.filterTypePopupButton selectItem:activeFilterItem];
}
- (NSArray *)_filterItemsForMode:(MPFilterMode)mode {
NSArray *options = [MPEntryFilterHelper optionsEnabledInMode:mode];
NSMenu *menu = [self.filterTypePopupButton menu];
NSMutableArray *menuItems = [[NSMutableArray alloc] initWithCapacity:[[menu itemArray] count]];
for(NSNumber *number in options) {
MPFilterMode flag = [number integerValue];
NSMenuItem *flagItem = [menu itemWithTag:flag];
if(flagItem) {
[menuItems addObject:flagItem];
}
}
return menuItems;
}
@end