mirror of
https://github.com/MacPass/MacPass.git
synced 2025-12-14 21:13:35 +00:00
Merge pull request #112 from andrewschleifer/validation
Centralise the Validation
This commit is contained in:
@@ -20,6 +20,7 @@ typedef NS_ENUM(NSUInteger, MPActionType) {
|
|||||||
MPActionToggleInspector,
|
MPActionToggleInspector,
|
||||||
MPActionLock, // show the lock screen
|
MPActionLock, // show the lock screen
|
||||||
MPActionEmptyTrash, // empties the trashcan, if there is one
|
MPActionEmptyTrash, // empties the trashcan, if there is one
|
||||||
|
MPActionEditPassword, // change the database password
|
||||||
MPActionDatabaseSettings, // Show the settings for the database
|
MPActionDatabaseSettings, // Show the settings for the database
|
||||||
MPActionEditTemplateGroup
|
MPActionEditTemplateGroup
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
@(MPActionCopyURL) : @"copyURL:",
|
@(MPActionCopyURL) : @"copyURL:",
|
||||||
@(MPActionCopyUsername) : @"copyUsername:",
|
@(MPActionCopyUsername) : @"copyUsername:",
|
||||||
@(MPActionDelete) : @"deleteNode:",
|
@(MPActionDelete) : @"deleteNode:",
|
||||||
|
@(MPActionEditPassword) : @"editPassword:",
|
||||||
@(MPActionOpenURL) : @"openURL:",
|
@(MPActionOpenURL) : @"openURL:",
|
||||||
@(MPActionToggleInspector) : @"toggleInspector:",
|
@(MPActionToggleInspector) : @"toggleInspector:",
|
||||||
@(MPActionLock) : @"lock:",
|
@(MPActionLock) : @"lock:",
|
||||||
|
|||||||
@@ -509,14 +509,46 @@ typedef NS_ENUM(NSUInteger, MPAlertType) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||||
|
return [self validateUserInterfaceItem:menuItem];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem {
|
||||||
|
return [self validateUserInterfaceItem:theItem];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)anItem {
|
- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)anItem {
|
||||||
if([anItem action] == [MPActionHelper actionOfType:MPActionEmptyTrash]) {
|
if(self.encrypted || self.isReadOnly) { return NO; }
|
||||||
BOOL hasGroups = [self.trash.groups count] > 0;
|
|
||||||
BOOL hasEntries = [self.trash.entries count] > 0;
|
BOOL valid = YES;
|
||||||
return (hasEntries || hasGroups);
|
switch([MPActionHelper typeForAction:[anItem action]]) {
|
||||||
|
case MPActionAddGroup:
|
||||||
|
valid &= (nil != self.selectedGroup);
|
||||||
|
// fall-through
|
||||||
|
case MPActionAddEntry:
|
||||||
|
// fall-through
|
||||||
|
case MPActionDelete: {
|
||||||
|
valid &= (nil != self.selectedItem);
|
||||||
|
valid &= (self.trash != self.selectedItem);
|
||||||
|
valid &= ![self isItemTrashed:self.selectedItem];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MPActionEmptyTrash: {
|
||||||
|
valid &= [self.trash.groups count] > 0;
|
||||||
|
valid &= [self.trash.entries count] > 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MPActionDatabaseSettings:
|
||||||
|
case MPActionEditPassword:
|
||||||
|
valid &= !self.encrypted;
|
||||||
|
break;
|
||||||
|
case MPActionLock:
|
||||||
|
valid &= self.compositeKey.hasPasswordOrKeyFile;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
valid = YES;
|
||||||
}
|
}
|
||||||
|
return valid;
|
||||||
return [super validateUserInterfaceItem:anItem];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_storeKeyURL:(NSURL *)keyURL {
|
- (void)_storeKeyURL:(NSURL *)keyURL {
|
||||||
|
|||||||
@@ -22,13 +22,6 @@
|
|||||||
@property (readonly, strong) MPOutlineViewController *outlineViewController;
|
@property (readonly, strong) MPOutlineViewController *outlineViewController;
|
||||||
@property (readonly, strong) MPInspectorViewController *inspectorViewController;
|
@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)showEntries;
|
||||||
- (void)showPasswordInput;
|
- (void)showPasswordInput;
|
||||||
- (void)performFindPanelAction:(id)sender;
|
- (void)performFindPanelAction:(id)sender;
|
||||||
|
|||||||
@@ -206,80 +206,6 @@ typedef NS_ENUM(NSUInteger, MPAlertContext) {
|
|||||||
[self.entryViewController showFilter:sender];
|
[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 {
|
- (void)showPasswordInput {
|
||||||
if(!self.passwordInputController) {
|
if(!self.passwordInputController) {
|
||||||
self.passwordInputController = [[MPPasswordInputController alloc] init];
|
self.passwordInputController = [[MPPasswordInputController alloc] init];
|
||||||
|
|||||||
@@ -676,11 +676,6 @@ NSString *const _MPTAbleSecurCellView = @"PasswordCell";
|
|||||||
// //
|
// //
|
||||||
//}
|
//}
|
||||||
|
|
||||||
#pragma mark Validation
|
|
||||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)_toggleFilterSpace:(id)sender {
|
- (IBAction)_toggleFilterSpace:(id)sender {
|
||||||
if(![sender isKindOfClass:[NSButton class]]) {
|
if(![sender isKindOfClass:[NSButton class]]) {
|
||||||
return; // Wrong sender
|
return; // Wrong sender
|
||||||
|
|||||||
@@ -158,29 +158,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
|
|||||||
return [[self.outlineView itemAtRow:row] representedObject];
|
return [[self.outlineView itemAtRow:row] representedObject];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Validation
|
|
||||||
|
|
||||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
|
||||||
MPActionType actionType = [MPActionHelper typeForAction:[menuItem action]];
|
|
||||||
switch(actionType) {
|
|
||||||
case MPActionAddEntry:
|
|
||||||
case MPActionAddGroup:
|
|
||||||
case MPActionDelete: {
|
|
||||||
MPDocument *document = [[self windowController] document];
|
|
||||||
id selected = [self _clickedOrSelectedGroup];
|
|
||||||
if(!selected) {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
if(selected == document.trash) {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
return ![document isItemTrashed:selected];
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return YES; // We are only validated for three targets
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Actions
|
#pragma mark Actions
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user