diff --git a/MacPass/MPDocument.m b/MacPass/MPDocument.m index 16afc23a..017ecfe8 100644 --- a/MacPass/MPDocument.m +++ b/MacPass/MPDocument.m @@ -509,13 +509,41 @@ typedef NS_ENUM(NSUInteger, MPAlertType) { return; } +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { + return [self validateUserInterfaceItem:menuItem]; +} + +- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem { + return [self validateUserInterfaceItem:theItem]; +} + - (BOOL)validateUserInterfaceItem:(id)anItem { - if([anItem action] == [MPActionHelper actionOfType:MPActionEmptyTrash]) { - BOOL hasGroups = [self.trash.groups count] > 0; - BOOL hasEntries = [self.trash.entries count] > 0; - return (hasEntries || hasGroups); + if(self.encrypted || self.isReadOnly) { return NO; } + + switch([MPActionHelper typeForAction:[anItem action]]) { + case MPActionDelete: { + BOOL valid = (nil != self.selectedItem); + valid &= (self.selectedItem != self.trash); + valid &= ![self isItemTrashed:self.selectedItem]; + return valid; + } + case MPActionEmptyTrash: { + BOOL hasGroups = [self.trash.groups count] > 0; + BOOL hasEntries = [self.trash.entries count] > 0; + return (hasEntries || hasGroups); + } + case MPActionDatabaseSettings: + case MPActionEditPassword: + return !self.encrypted; + case MPActionAddGroup: + case MPActionAddEntry: + return (nil != self.selectedGroup); + case MPActionLock: + return self.compositeKey.hasPasswordOrKeyFile; + default: + return YES; } - + return [super validateUserInterfaceItem:anItem]; } diff --git a/MacPass/MPDocumentWindowController.h b/MacPass/MPDocumentWindowController.h index 78a0501a..efbb4d16 100644 --- a/MacPass/MPDocumentWindowController.h +++ b/MacPass/MPDocumentWindowController.h @@ -22,13 +22,6 @@ @property (readonly, strong) MPOutlineViewController *outlineViewController; @property (readonly, strong) MPInspectorViewController *inspectorViewController; -/** - @param action The action that should be validatet - @param item The item that the action affects. Pass nil to fall back for default item - @returns YES if the action is valid, NO otherwise - */ -- (BOOL)validateAction:(SEL)action forItem:(id)item; - - (void)showEntries; - (void)showPasswordInput; - (void)performFindPanelAction:(id)sender; diff --git a/MacPass/MPDocumentWindowController.m b/MacPass/MPDocumentWindowController.m index e8c277e5..d19fb838 100644 --- a/MacPass/MPDocumentWindowController.m +++ b/MacPass/MPDocumentWindowController.m @@ -206,80 +206,6 @@ typedef NS_ENUM(NSUInteger, MPAlertContext) { [self.entryViewController showFilter:sender]; } -- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { - MPDocument *document = [self document]; - SEL itemAction = [menuItem action]; - if(itemAction == @selector(showDatabaseSettings:) - || itemAction == @selector(editPassword:)) { - return !document.encrypted; - } - - BOOL enabled = YES; - if(itemAction == [MPActionHelper actionOfType:MPActionDelete]) { - enabled &= (nil != document.selectedItem) && (document.selectedItem != document.trash); - } - - enabled &= !( document.encrypted || document.isReadOnly ); - return enabled; -} - -- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem { - MPDocument *document = [self document]; - if(document.encrypted || document.isReadOnly) { - return NO; - } - MPActionType actionType = [MPActionHelper typeForAction:[theItem action]]; - switch (actionType) { - case MPActionAddGroup: - case MPActionAddEntry: - return (nil != document.selectedGroup); - case MPActionDelete: { - BOOL valid = (nil != document.selectedItem); - valid &= (document.selectedItem != document.trash); - valid &= ![document isItemTrashed:document.selectedItem]; - return valid; - } - case MPActionLock: - return document.compositeKey.hasPasswordOrKeyFile; - - case MPActionToggleInspector: - return (nil != [_splitView superview]); - - default: - return YES; - } - return YES; -} - -- (BOOL)validateAction:(SEL)action forItem:(id)item { - MPDocument *document = [self document]; - if(document.encrypted || document.isReadOnly) { - return NO; - } - MPActionType actionType = [MPActionHelper typeForAction:action]; - switch (actionType) { - case MPActionAddGroup: - case MPActionAddEntry: - // test if Group is in trash - return (nil != document.selectedGroup); - case MPActionDelete: { - BOOL valid = (nil != document.selectedItem); - valid &= (document.selectedItem != document.trash); - valid &= ![document isItemTrashed:document.selectedItem]; - return valid; - } - case MPActionLock: - return document.compositeKey.hasPasswordOrKeyFile; - - case MPActionToggleInspector: - return (nil != [_splitView superview]); - - default: - return YES; - } - return YES; -} - - (void)showPasswordInput { if(!self.passwordInputController) { self.passwordInputController = [[MPPasswordInputController alloc] init];