Fixed #61 searching in passwords is now supported

Fixed #80 nested groups can be selected as templates or trash
Trash UUID now get's stored correctly
Enhanced and fixed some undo errors in moving groups and/or entries
Added action names for moving groups/entries via drag and drop
This commit is contained in:
michael starke
2013-09-10 00:57:47 +02:00
parent 5511dd1207
commit 5796333a2e
8 changed files with 986 additions and 862 deletions

View File

@@ -70,7 +70,7 @@
<CommandLineArguments> <CommandLineArguments>
<CommandLineArgument <CommandLineArgument
argument = "-NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints YES" argument = "-NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints YES"
isEnabled = "NO"> isEnabled = "YES">
</CommandLineArgument> </CommandLineArgument>
</CommandLineArguments> </CommandLineArguments>
<AdditionalOptions> <AdditionalOptions>

File diff suppressed because it is too large Load Diff

View File

@@ -42,10 +42,39 @@
<reference key="NSNextResponder"/> <reference key="NSNextResponder"/>
<int key="NSvFlags">268</int> <int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews"> <array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="786439399">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{234, 6}, {74, 17}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="498286707"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="150863911">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">Password</string>
<object class="NSFont" key="NSSupport" id="29">
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">12</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="786439399"/>
<int key="NSButtonFlags">-1232846848</int>
<int key="NSButtonFlags2">173</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSSearchField" id="498286707"> <object class="NSSearchField" id="498286707">
<reference key="NSNextResponder" ref="1005"/> <reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int> <int key="NSvFlags">268</int>
<string key="NSFrame">{{242, 6}, {100, 19}}</string> <string key="NSFrame">{{316, 6}, {100, 19}}</string>
<reference key="NSSuperview" ref="1005"/> <reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="113591000"/> <reference key="NSNextKeyView" ref="113591000"/>
@@ -121,7 +150,7 @@
<object class="NSButton" id="113591000"> <object class="NSButton" id="113591000">
<reference key="NSNextResponder" ref="1005"/> <reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int> <int key="NSvFlags">268</int>
<string key="NSFrame">{{350, 6}, {42, 17}}</string> <string key="NSFrame">{{424, 6}, {42, 17}}</string>
<reference key="NSSuperview" ref="1005"/> <reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:9</string> <string key="NSReuseIdentifierKey">_NS:9</string>
@@ -148,18 +177,14 @@
<string key="NSFrame">{{188, 6}, {38, 17}}</string> <string key="NSFrame">{{188, 6}, {38, 17}}</string>
<reference key="NSSuperview" ref="1005"/> <reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="498286707"/> <reference key="NSNextKeyView" ref="786439399"/>
<string key="NSReuseIdentifierKey">_NS:9</string> <string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="149174717"> <object class="NSButtonCell" key="NSCell" id="149174717">
<int key="NSCellFlags">-2080374784</int> <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134348800</int> <int key="NSCellFlags2">134348800</int>
<string key="NSContents">URL</string> <string key="NSContents">URL</string>
<object class="NSFont" key="NSSupport" id="29"> <reference key="NSSupport" ref="29"/>
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">12</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:9</string> <string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="340435610"/> <reference key="NSControlView" ref="340435610"/>
<int key="NSButtonFlags">-1232846848</int> <int key="NSButtonFlags">-1232846848</int>
@@ -263,7 +288,7 @@
<bool key="NSAllowsLogicalLayoutDirection">NO</bool> <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object> </object>
</array> </array>
<string key="NSFrameSize">{400, 30}</string> <string key="NSFrameSize">{474, 30}</string>
<reference key="NSSuperview"/> <reference key="NSSuperview"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="906526407"/> <reference key="NSNextKeyView" ref="906526407"/>
@@ -360,6 +385,22 @@
</object> </object>
<int key="connectionID">95</int> <int key="connectionID">95</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterPasswordButton</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="786439399"/>
</object>
<int key="connectionID">101</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">_toggleFilterSpace:</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="786439399"/>
</object>
<int key="connectionID">102</int>
</object>
</array> </array>
<object class="IBMutableOrderedSet" key="objectRecords"> <object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects"> <array key="orderedObjects">
@@ -443,7 +484,7 @@
<reference key="firstItem" ref="498286707"/> <reference key="firstItem" ref="498286707"/>
<int key="firstAttribute">5</int> <int key="firstAttribute">5</int>
<int key="relation">1</int> <int key="relation">1</int>
<reference key="secondItem" ref="340435610"/> <reference key="secondItem" ref="786439399"/>
<int key="secondAttribute">6</int> <int key="secondAttribute">6</int>
<float key="multiplier">1</float> <float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant"> <object class="IBNSLayoutSymbolicConstant" key="constant">
@@ -471,6 +512,38 @@
<float key="scoringTypeFloat">40</float> <float key="scoringTypeFloat">40</float>
<int key="contentType">2</int> <int key="contentType">2</int>
</object> </object>
<object class="IBNSLayoutConstraint" id="878591000">
<reference key="firstItem" ref="786439399"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="340435610"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="664428666">
<reference key="firstItem" ref="786439399"/>
<int key="firstAttribute">11</int>
<int key="relation">0</int>
<reference key="secondItem" ref="340435610"/>
<int key="secondAttribute">11</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="959342076"> <object class="IBNSLayoutConstraint" id="959342076">
<reference key="firstItem" ref="1005"/> <reference key="firstItem" ref="1005"/>
<int key="firstAttribute">10</int> <int key="firstAttribute">10</int>
@@ -637,6 +710,7 @@
<reference ref="340435610"/> <reference ref="340435610"/>
<reference ref="113591000"/> <reference ref="113591000"/>
<reference ref="498286707"/> <reference ref="498286707"/>
<reference ref="786439399"/>
</array> </array>
<reference key="parent" ref="0"/> <reference key="parent" ref="0"/>
</object> </object>
@@ -777,8 +851,8 @@
</object> </object>
<float key="priority">1000</float> <float key="priority">1000</float>
<reference key="containingView" ref="498286707"/> <reference key="containingView" ref="498286707"/>
<int key="scoringType">3</int> <int key="scoringType">9</int>
<float key="scoringTypeFloat">9</float> <float key="scoringTypeFloat">40</float>
<int key="contentType">1</int> <int key="contentType">1</int>
</object> </object>
</array> </array>
@@ -794,11 +868,6 @@
<reference key="object" ref="120785100"/> <reference key="object" ref="120785100"/>
<reference key="parent" ref="1005"/> <reference key="parent" ref="1005"/>
</object> </object>
<object class="IBObjectRecord">
<int key="objectID">87</int>
<reference key="object" ref="312382951"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord"> <object class="IBObjectRecord">
<int key="objectID">83</int> <int key="objectID">83</int>
<reference key="object" ref="548170831"/> <reference key="object" ref="548170831"/>
@@ -814,13 +883,41 @@
<reference key="object" ref="817657248"/> <reference key="object" ref="817657248"/>
<reference key="parent" ref="498286707"/> <reference key="parent" ref="498286707"/>
</object> </object>
<object class="IBObjectRecord">
<int key="objectID">96</int>
<reference key="object" ref="786439399"/>
<array class="NSMutableArray" key="children">
<reference ref="150863911"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">97</int>
<reference key="object" ref="150863911"/>
<reference key="parent" ref="786439399"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">98</int>
<reference key="object" ref="664428666"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">99</int>
<reference key="object" ref="878591000"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">100</int>
<reference key="object" ref="312382951"/>
<reference key="parent" ref="1005"/>
</object>
</array> </array>
</object> </object>
<dictionary class="NSMutableDictionary" key="flattenedProperties"> <dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="1.IBNSViewMetadataConstraints"> <array key="1.IBNSViewMetadataConstraints">
<reference ref="777287174"/> <reference ref="777287174"/>
<reference ref="201173489"/> <reference ref="201173489"/>
<reference ref="274700398"/> <reference ref="274700398"/>
@@ -831,6 +928,8 @@
<reference ref="160109106"/> <reference ref="160109106"/>
<reference ref="112675040"/> <reference ref="112675040"/>
<reference ref="959342076"/> <reference ref="959342076"/>
<reference ref="664428666"/>
<reference ref="878591000"/>
<reference ref="120785100"/> <reference ref="120785100"/>
<reference ref="312382951"/> <reference ref="312382951"/>
<reference ref="207946731"/> <reference ref="207946731"/>
@@ -840,6 +939,7 @@
<boolean value="NO" key="1.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/> <boolean value="NO" key="1.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/>
<boolean value="NO" key="1.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/> <boolean value="NO" key="1.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="100.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="2.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/> <boolean value="NO" key="2.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -875,14 +975,18 @@
<string key="81.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="81.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="87.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="93.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="93.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="96.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="96.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="97.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="98.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="99.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary> </dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/> <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/> <nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/> <dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/> <nil key="sourceID"/>
<int key="maxID">95</int> <int key="maxID">102</int>
</object> </object>
<object class="IBClassDescriber" key="IBDocument.Classes"> <object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions"> <array class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -897,6 +1001,17 @@
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">MPEntryViewController</string> <string key="className">MPEntryViewController</string>
<string key="superclassName">MPViewController</string> <string key="superclassName">MPViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">_toggleFilterSpace:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">_toggleFilterSpace:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">_toggleFilterSpace:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets"> <dictionary class="NSMutableDictionary" key="outlets">
<string key="addEntryButton">NSButton</string> <string key="addEntryButton">NSButton</string>
<string key="bottomBar">HNHGradientView</string> <string key="bottomBar">HNHGradientView</string>
@@ -905,11 +1020,12 @@
<string key="filterBar">NSView</string> <string key="filterBar">NSView</string>
<string key="filterDoneButton">NSButton</string> <string key="filterDoneButton">NSButton</string>
<string key="filterLabelTextField">NSTextField</string> <string key="filterLabelTextField">NSTextField</string>
<string key="filterPasswordButton">NSButton</string>
<string key="filterSearchField">NSSearchField</string> <string key="filterSearchField">NSSearchField</string>
<string key="filterTitleButton">NSButton</string> <string key="filterTitleButton">NSButton</string>
<string key="filterURLButton">NSButton</string> <string key="filterURLButton">NSButton</string>
<string key="filterUsernameButton">NSButton</string> <string key="filterUsernameButton">NSButton</string>
<string key="tableToTop">NSLayoutConstraint</string> <string key="tableToTopConstraint">NSLayoutConstraint</string>
<string key="trashBar">HNHGradientView</string> <string key="trashBar">HNHGradientView</string>
</dictionary> </dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName"> <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
@@ -941,6 +1057,10 @@
<string key="name">filterLabelTextField</string> <string key="name">filterLabelTextField</string>
<string key="candidateClassName">NSTextField</string> <string key="candidateClassName">NSTextField</string>
</object> </object>
<object class="IBToOneOutletInfo" key="filterPasswordButton">
<string key="name">filterPasswordButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterSearchField"> <object class="IBToOneOutletInfo" key="filterSearchField">
<string key="name">filterSearchField</string> <string key="name">filterSearchField</string>
<string key="candidateClassName">NSSearchField</string> <string key="candidateClassName">NSSearchField</string>
@@ -957,8 +1077,8 @@
<string key="name">filterUsernameButton</string> <string key="name">filterUsernameButton</string>
<string key="candidateClassName">NSButton</string> <string key="candidateClassName">NSButton</string>
</object> </object>
<object class="IBToOneOutletInfo" key="tableToTop"> <object class="IBToOneOutletInfo" key="tableToTopConstraint">
<string key="name">tableToTop</string> <string key="name">tableToTopConstraint</string>
<string key="candidateClassName">NSLayoutConstraint</string> <string key="candidateClassName">NSLayoutConstraint</string>
</object> </object>
<object class="IBToOneOutletInfo" key="trashBar"> <object class="IBToOneOutletInfo" key="trashBar">

View File

@@ -100,8 +100,7 @@
} }
- (IBAction)close:(id)sender { - (IBAction)close:(id)sender {
[NSApp endSheet:[self window]]; [self dismissSheet:0];
[[self window] orderOut:nil];
} }
- (void)updateView { - (void)updateView {
@@ -237,11 +236,13 @@
- (NSMenu *)_buildTreeMenu:(KPKTree *)tree preselect:(NSUUID *)uuid { - (NSMenu *)_buildTreeMenu:(KPKTree *)tree preselect:(NSUUID *)uuid {
NSMenu *menu = [[NSMenu alloc] init]; NSMenu *menu = [[NSMenu alloc] init];
[menu setAutoenablesItems:NO]; [menu setAutoenablesItems:NO];
/*
Trash and Templates can be nested, so wee need to adhere to this :(
*/
for(KPKGroup *group in tree.root.groups) { for(KPKGroup *group in tree.root.groups) {
[self _insertMenuItemsForGroup:group atLevel:0 inMenu:menu preselect:uuid];
}
return menu;
}
- (void)_insertMenuItemsForGroup:(KPKGroup *)group atLevel:(NSUInteger)level inMenu:(NSMenu *)menu preselect:(NSUUID *)uuid{
NSMenuItem *groupItem = [[NSMenuItem alloc] init]; NSMenuItem *groupItem = [[NSMenuItem alloc] init];
[groupItem setImage:group.iconImage]; [groupItem setImage:group.iconImage];
[groupItem setTitle:group.name]; [groupItem setTitle:group.name];
@@ -250,9 +251,11 @@
if(uuid && [group.uuid isEqual:uuid]) { if(uuid && [group.uuid isEqual:uuid]) {
[groupItem setState:NSOnState]; [groupItem setState:NSOnState];
} }
[groupItem setIndentationLevel:level];
[menu addItem:groupItem]; [menu addItem:groupItem];
for(KPKGroup *childGroup in group.groups) {
[self _insertMenuItemsForGroup:childGroup atLevel:level + 1 inMenu:menu preselect:uuid];
} }
return menu;
} }
@end @end

View File

@@ -405,12 +405,12 @@ typedef NS_ENUM(NSUInteger, MPAlertType) {
- (void)deleteEntry:(KPKEntry *)entry { - (void)deleteEntry:(KPKEntry *)entry {
if(self.useTrash) { if(self.useTrash) {
if(!self.trash) {
[self _createTrashGroup];
}
if([self isItemTrashed:entry]) { if([self isItemTrashed:entry]) {
return; // Entry is already trashed return; // Entry is already trashed
} }
if(!self.trash) {
[self _createTrashGroup];
}
[entry moveToGroup:self.trash atIndex:[self.trash.entries count]]; [entry moveToGroup:self.trash atIndex:[self.trash.entries count]];
[[self undoManager] setActionName:NSLocalizedString(@"TRASH_ENTRY", "Move Entry to Trash")]; [[self undoManager] setActionName:NSLocalizedString(@"TRASH_ENTRY", "Move Entry to Trash")];
} }
@@ -496,17 +496,14 @@ typedef NS_ENUM(NSUInteger, MPAlertType) {
- (KPKGroup *)_createTrashGroup { - (KPKGroup *)_createTrashGroup {
/* Maybe push the stuff to the Tree? */ /* Maybe push the stuff to the Tree? */
KPKGroup *trash = [self.tree createGroup:self.tree.root]; KPKGroup *trash = [self.tree createGroup:self.tree.root];
BOOL wasEnabled = [self.undoManager isUndoRegistrationEnabled];
[self.undoManager disableUndoRegistration];
trash.name = NSLocalizedString(@"TRASH", @"Name for the trash group"); trash.name = NSLocalizedString(@"TRASH", @"Name for the trash group");
trash.icon = MPIconTrash; trash.icon = MPIconTrash;
BOOL registrationEnable = [[self undoManager] isUndoRegistrationEnabled];
if(registrationEnable) {
[[self undoManager] disableUndoRegistration];
}
[self.tree.root addGroup:trash]; [self.tree.root addGroup:trash];
if(registrationEnable) { if(wasEnabled) {
[[self undoManager] enableUndoRegistration]; [self.undoManager enableUndoRegistration];
} }
self.tree.metaData.recycleBinUuid = trash.uuid; self.tree.metaData.recycleBinUuid = trash.uuid;
return trash; return trash;
} }

View File

@@ -42,6 +42,7 @@ typedef NS_OPTIONS(NSUInteger, MPFilterModeType) {
MPFilterUrls = (1<<0), MPFilterUrls = (1<<0),
MPFilterUsernames = (1<<1), MPFilterUsernames = (1<<1),
MPFilterTitles = (1<<2), MPFilterTitles = (1<<2),
MPFilterPasswords = (1<<3),
}; };
typedef NS_ENUM(NSUInteger,MPOVerlayInfoType) { typedef NS_ENUM(NSUInteger,MPOVerlayInfoType) {
@@ -64,10 +65,6 @@ NSString *const _MPTableImageCellView = @"ImageCell";
NSString *const _MPTableStringCellView = @"StringCell"; NSString *const _MPTableStringCellView = @"StringCell";
NSString *const _MPTAbleSecurCellView = @"PasswordCell"; NSString *const _MPTAbleSecurCellView = @"PasswordCell";
NSString *const _toggleFilterURLButton = @"SearchURL";
NSString *const _toggleFilterTitleButton = @"SearchTitle";
NSString *const _toggleFilterUsernameButton = @"SearchUsername";
@interface MPEntryViewController () { @interface MPEntryViewController () {
MPEntryContextMenuDelegate *_menuDelegate; MPEntryContextMenuDelegate *_menuDelegate;
} }
@@ -84,6 +81,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
@property (weak) IBOutlet NSButton *filterTitleButton; @property (weak) IBOutlet NSButton *filterTitleButton;
@property (weak) IBOutlet NSButton *filterUsernameButton; @property (weak) IBOutlet NSButton *filterUsernameButton;
@property (weak) IBOutlet NSButton *filterURLButton; @property (weak) IBOutlet NSButton *filterURLButton;
@property (weak) IBOutlet NSButton *filterPasswordButton;
@property (weak) IBOutlet NSTextField *filterLabelTextField; @property (weak) IBOutlet NSTextField *filterLabelTextField;
@property (weak) IBOutlet NSSearchField *filterSearchField; @property (weak) IBOutlet NSSearchField *filterSearchField;
@property (weak) IBOutlet HNHGradientView *bottomBar; @property (weak) IBOutlet HNHGradientView *bottomBar;
@@ -96,7 +94,6 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
@property (nonatomic, strong) MPEntryTableDataSource *dataSource; @property (nonatomic, strong) MPEntryTableDataSource *dataSource;
@property (assign, nonatomic) MPFilterModeType filterMode; @property (assign, nonatomic) MPFilterModeType filterMode;
@property (strong, nonatomic) NSDictionary *filterButtonToMode;
@end @end
@@ -111,10 +108,6 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self) { if(self) {
_filterMode = MPFilterTitles; _filterMode = MPFilterTitles;
_filterButtonToMode = @{ _toggleFilterUsernameButton : @(MPFilterUsernames),
_toggleFilterTitleButton : @(MPFilterTitles),
_toggleFilterURLButton : @(MPFilterUrls)
};
_entryArrayController = [[NSArrayController alloc] init]; _entryArrayController = [[NSArrayController alloc] init];
_dataSource = [[MPEntryTableDataSource alloc] init]; _dataSource = [[MPEntryTableDataSource alloc] init];
_dataSource.viewController = self; _dataSource.viewController = self;
@@ -235,7 +228,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
} }
else { else {
assert(entry.parent); assert(entry.parent);
[[view textField] bind:NSValueBinding toObject:entry.parent withKeyPath:entry.parent.name options:nil]; [[view textField] bind:NSValueBinding toObject:entry.parent withKeyPath:@"parent.name" options:nil];
[[view imageView] setImage:entry.iconImage]; [[view imageView] setImage:entry.iconImage];
} }
} }
@@ -353,7 +346,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
} }
- (void)updateFilter { - (void)updateFilter {
//[self _showFilterBarAnimated]; [self _showFilterBarAnimated];
if(![self hasFilter]) { if(![self hasFilter]) {
return; return;
} }
@@ -362,16 +355,19 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
dispatch_async(backgroundQueue, ^{ dispatch_async(backgroundQueue, ^{
MPDocument *document = [[self windowController] document]; MPDocument *document = [[self windowController] document];
if([self hasFilter]) { if([self hasFilter]) {
NSMutableArray *prediactes = [NSMutableArray arrayWithCapacity:3]; NSMutableArray *prediactes = [NSMutableArray arrayWithCapacity:4];
if( [self _shouldFilterTitles] ) { if([self _shouldFilterTitles]) {
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.title CONTAINS[cd] %@", self.filter]]; [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.title CONTAINS[cd] %@", self.filter]];
} }
if( [self _shouldFilterUsernames] ) { if([self _shouldFilterUsernames]) {
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.username CONTAINS[cd] %@", self.filter]]; [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.username CONTAINS[cd] %@", self.filter]];
} }
if( [self _shouldFilterURLs] ) { if([self _shouldFilterURLs]) {
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.url CONTAINS[cd] %@", self.filter]]; [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.url CONTAINS[cd] %@", self.filter]];
} }
if([self _shouldFilterPasswords]) {
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.password CONTAINS[cd] %@", self.filter]];
}
NSPredicate *fullFilter = [NSCompoundPredicate orPredicateWithSubpredicates:prediactes]; NSPredicate *fullFilter = [NSCompoundPredicate orPredicateWithSubpredicates:prediactes];
self.filteredEntries = [[document.root childEntries] filteredArrayUsingPredicate:fullFilter]; self.filteredEntries = [[document.root childEntries] filteredArrayUsingPredicate:fullFilter];
} }
@@ -397,9 +393,10 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
- (void)setupFilterBar { - (void)setupFilterBar {
if(!self.filterBar) { if(!self.filterBar) {
[[NSBundle mainBundle] loadNibNamed:@"FilterBar" owner:self topLevelObjects:nil]; [[NSBundle mainBundle] loadNibNamed:@"FilterBar" owner:self topLevelObjects:nil];
[self.filterURLButton setIdentifier:_toggleFilterURLButton]; [self.filterURLButton setTag:MPFilterUrls];
[self.filterUsernameButton setIdentifier:_toggleFilterUsernameButton]; [self.filterUsernameButton setTag:MPFilterUsernames];
[self.filterTitleButton setIdentifier:_toggleFilterTitleButton]; [self.filterTitleButton setTag:MPFilterTitles];
[self.filterPasswordButton setTag:MPFilterPasswords];
[[self.filterLabelTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; [[self.filterLabelTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
[self.filterDoneButton setAction:@selector(clearFilter:)]; [self.filterDoneButton setAction:@selector(clearFilter:)];
[self.filterDoneButton setTarget:nil]; [self.filterDoneButton setTarget:nil];
@@ -426,6 +423,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
[self.filterTitleButton setState:[self _shouldFilterTitles] ? NSOnState : NSOffState]; [self.filterTitleButton setState:[self _shouldFilterTitles] ? NSOnState : NSOffState];
[self.filterURLButton setState:[self _shouldFilterURLs] ? NSOnState : NSOffState ]; [self.filterURLButton setState:[self _shouldFilterURLs] ? NSOnState : NSOffState ];
[self.filterUsernameButton setState:[self _shouldFilterUsernames] ? NSOnState : NSOffState]; [self.filterUsernameButton setState:[self _shouldFilterUsernames] ? NSOnState : NSOffState];
[self.filterPasswordButton setState:[self _shouldFilterPasswords] ? NSOnState : NSOffState];
if([self _showsFilterBar]) { if([self _showsFilterBar]) {
return; // nothing to to return; // nothing to to
@@ -670,10 +668,12 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
return YES; return YES;
} }
- (void)_toggleFilterSpace:(id)sender { - (IBAction)_toggleFilterSpace:(id)sender {
if(![sender isKindOfClass:[NSButton class]]) {
return; // Wrong sender
}
NSButton *button = sender; NSButton *button = sender;
NSNumber *value = self.filterButtonToMode[[button identifier]]; MPFilterModeType toggledMode = [button tag];
MPFilterModeType toggledMode = (MPFilterModeType)[value intValue];
switch ([button state]) { switch ([button state]) {
case NSOnState: case NSOnState:
self.filterMode |= toggledMode; self.filterMode |= toggledMode;
@@ -724,15 +724,19 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
} }
- (BOOL)_shouldFilterTitles { - (BOOL)_shouldFilterTitles {
return ( MPFilterNone != (self.filterMode & MPFilterTitles)); return (MPFilterNone != (self.filterMode & MPFilterTitles));
} }
- (BOOL)_shouldFilterURLs { - (BOOL)_shouldFilterURLs {
return ( MPFilterNone != (self.filterMode & MPFilterUrls)); return (MPFilterNone != (self.filterMode & MPFilterUrls));
} }
- (BOOL)_shouldFilterUsernames { - (BOOL)_shouldFilterUsernames {
return ( MPFilterNone != (self.filterMode & MPFilterUsernames)); return (MPFilterNone != (self.filterMode & MPFilterUsernames));
}
- (BOOL)_shouldFilterPasswords {
return (MPFilterNone != (self.filterMode & MPFilterPasswords));
} }
@end @end

View File

@@ -117,10 +117,12 @@
NSString *draggedType = [types lastObject]; NSString *draggedType = [types lastObject];
if([draggedType isEqualToString:KPKGroupUTI]) { if([draggedType isEqualToString:KPKGroupUTI]) {
[self.draggedGroup moveToGroup:targetGroup atIndex:index]; [self.draggedGroup moveToGroup:targetGroup atIndex:index];
[self.draggedGroup.undoManager setActionName:NSLocalizedString(@"MOVE_GROUP", "")];
return YES; return YES;
} }
else if([draggedType isEqualToString:KPKUUIDUTI]) { else if([draggedType isEqualToString:KPKUUIDUTI]) {
[self.draggedEntry moveToGroup:targetGroup atIndex:index]; [self.draggedEntry moveToGroup:targetGroup atIndex:index];
[self.draggedEntry.undoManager setActionName:NSLocalizedString(@"MOVE_ENTRY", "")];
return YES; return YES;
} }
return NO; return NO;