Refactored the selection tracking to be in the document now

Filtering should work reliably now. No "sticking" of entries
Fixed #42. Deleted entries now result in desolation.
This commit is contained in:
michael starke
2013-07-24 01:05:49 +02:00
parent 8087085fc0
commit 4a35d0d4ff
29 changed files with 1713 additions and 1444 deletions

2
HNHUi

Submodule HNHUi updated: c32f87da30...e5ab00f08e

View File

@@ -15,9 +15,9 @@
4C16BA6217879A3C002B42BD /* MPPasswordStringFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C16BA6117879A3C002B42BD /* MPPasswordStringFormatter.m */; };
4C1842AB179B027800E2F5BC /* KPKDeletedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842AA179B027800E2F5BC /* KPKDeletedNode.m */; };
4C1842AF179B211C00E2F5BC /* KPKXmlTreeReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842AE179B211C00E2F5BC /* KPKXmlTreeReader.m */; };
4C1842B2179B28C400E2F5BC /* KPKBinaryTreeReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842B1179B28C400E2F5BC /* KPKBinaryTreeReader.m */; };
4C1842B5179B28D400E2F5BC /* KPKBinaryTreeWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842B4179B28D400E2F5BC /* KPKBinaryTreeWriter.m */; };
4C1842B8179B348600E2F5BC /* KPKTreeLoadingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842B7179B348600E2F5BC /* KPKTreeLoadingTest.m */; };
4C1842B2179B28C400E2F5BC /* KPKLegacyTreeReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842B1179B28C400E2F5BC /* KPKLegacyTreeReader.m */; };
4C1842B5179B28D400E2F5BC /* KPKLegacyTreeWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842B4179B28D400E2F5BC /* KPKLegacyTreeWriter.m */; };
4C1842B8179B348600E2F5BC /* KPKLegacyLoadingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842B7179B348600E2F5BC /* KPKLegacyLoadingTest.m */; };
4C1842BC179B434C00E2F5BC /* KPKXmlHeaderReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842BB179B434C00E2F5BC /* KPKXmlHeaderReader.m */; };
4C1842C0179B5BFD00E2F5BC /* NSData+CommonCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842BF179B5BFD00E2F5BC /* NSData+CommonCrypto.m */; };
4C1842C3179B69E700E2F5BC /* NSData+HashedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842C2179B69E700E2F5BC /* NSData+HashedData.m */; };
@@ -25,6 +25,7 @@
4C1842CA179C616700E2F5BC /* KPKTreeCryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842C9179C616700E2F5BC /* KPKTreeCryptor.m */; };
4C1842D0179C64DD00E2F5BC /* KPKLegacyTreeCryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842CF179C64DD00E2F5BC /* KPKLegacyTreeCryptor.m */; };
4C1842D3179C64F000E2F5BC /* KPKXmlTreeCryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842D2179C64EF00E2F5BC /* KPKXmlTreeCryptor.m */; };
4C18816C179E06920045C5B7 /* TrashBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C18816B179E06920045C5B7 /* TrashBar.xib */; };
4C18F9AB178E122500890BCE /* Test_Password_1234.kdb in Resources */ = {isa = PBXBuildFile; fileRef = 4C18F9AA178E122500890BCE /* Test_Password_1234.kdb */; };
4C19E500178E26EF002F2CD0 /* Test_Password_1234.kdbx in Resources */ = {isa = PBXBuildFile; fileRef = 4C19E4FF178E26EF002F2CD0 /* Test_Password_1234.kdbx */; };
4C19E503178E2871002F2CD0 /* MPDatabasePasswordAndKeyfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C19E502178E2871002F2CD0 /* MPDatabasePasswordAndKeyfile.m */; };
@@ -214,6 +215,8 @@
4CC672791781D0C0006DEDCF /* KdbGroup+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC672781781D0C0006DEDCF /* KdbGroup+MPAdditions.m */; };
4CC6727C1781D0D2006DEDCF /* KdbEntry+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6727B1781D0D2006DEDCF /* KdbEntry+MPAdditions.m */; };
4CC7EA1B17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7EA1A17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m */; };
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE29179F203B008402BE /* MPOutlineView.m */; };
4CCEDE2E179F213B008402BE /* MPNotifications.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE2D179F213B008402BE /* MPNotifications.m */; };
4CD3ABBA178F71B50073F5C5 /* KPKTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD3ABB4178F71B50073F5C5 /* KPKTree.m */; };
4CD3ABBF178F72610073F5C5 /* KPKEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD3ABBE178F72610073F5C5 /* KPKEntry.m */; };
4CD3ABC2178F72720073F5C5 /* KPKGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD3ABC1178F72720073F5C5 /* KPKGroup.m */; };
@@ -246,6 +249,9 @@
4CF7805F176E75110032EE71 /* ServerSettings.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CF7805E176E75110032EE71 /* ServerSettings.xib */; };
4CF78064176E75AD0032EE71 /* MPServerSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF78063176E75AD0032EE71 /* MPServerSettingsController.m */; };
4CFC53BF16E94729007396BE /* MPShadowBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC53BE16E94729007396BE /* MPShadowBox.m */; };
4CFC873B179DEDF3000DFC03 /* KPKMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC873A179DEDF3000DFC03 /* KPKMetaData.m */; };
4CFC873E179DF200000DFC03 /* KPKTimeInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC873D179DF200000DFC03 /* KPKTimeInfo.m */; };
4CFC8743179DFD3E000DFC03 /* KPKXmlLoadingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC8742179DFD3E000DFC03 /* KPKXmlLoadingTest.m */; };
4CFEB36E1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFEB36D1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.m */; };
/* End PBXBuildFile section */
@@ -266,12 +272,12 @@
4C1842AA179B027800E2F5BC /* KPKDeletedNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKDeletedNode.m; sourceTree = "<group>"; };
4C1842AD179B211C00E2F5BC /* KPKXmlTreeReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKXmlTreeReader.h; sourceTree = "<group>"; };
4C1842AE179B211C00E2F5BC /* KPKXmlTreeReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKXmlTreeReader.m; sourceTree = "<group>"; };
4C1842B0179B28C400E2F5BC /* KPKBinaryTreeReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKBinaryTreeReader.h; sourceTree = "<group>"; };
4C1842B1179B28C400E2F5BC /* KPKBinaryTreeReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKBinaryTreeReader.m; sourceTree = "<group>"; };
4C1842B3179B28D400E2F5BC /* KPKBinaryTreeWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKBinaryTreeWriter.h; sourceTree = "<group>"; };
4C1842B4179B28D400E2F5BC /* KPKBinaryTreeWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKBinaryTreeWriter.m; sourceTree = "<group>"; };
4C1842B6179B348600E2F5BC /* KPKTreeLoadingTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKTreeLoadingTest.h; sourceTree = "<group>"; };
4C1842B7179B348600E2F5BC /* KPKTreeLoadingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKTreeLoadingTest.m; sourceTree = "<group>"; };
4C1842B0179B28C400E2F5BC /* KPKLegacyTreeReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKLegacyTreeReader.h; sourceTree = "<group>"; };
4C1842B1179B28C400E2F5BC /* KPKLegacyTreeReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKLegacyTreeReader.m; sourceTree = "<group>"; };
4C1842B3179B28D400E2F5BC /* KPKLegacyTreeWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKLegacyTreeWriter.h; sourceTree = "<group>"; };
4C1842B4179B28D400E2F5BC /* KPKLegacyTreeWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKLegacyTreeWriter.m; sourceTree = "<group>"; };
4C1842B6179B348600E2F5BC /* KPKLegacyLoadingTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKLegacyLoadingTest.h; sourceTree = "<group>"; };
4C1842B7179B348600E2F5BC /* KPKLegacyLoadingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKLegacyLoadingTest.m; sourceTree = "<group>"; };
4C1842B9179B3A1700E2F5BC /* KPKHeaderFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KPKHeaderFields.h; path = Format/KPKHeaderFields.h; sourceTree = "<group>"; };
4C1842BA179B434C00E2F5BC /* KPKXmlHeaderReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKXmlHeaderReader.h; sourceTree = "<group>"; };
4C1842BB179B434C00E2F5BC /* KPKXmlHeaderReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKXmlHeaderReader.m; sourceTree = "<group>"; };
@@ -290,6 +296,7 @@
4C1842D2179C64EF00E2F5BC /* KPKXmlTreeCryptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKXmlTreeCryptor.m; sourceTree = "<group>"; };
4C1842D4179C6DE400E2F5BC /* KPKHeaderReading.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKHeaderReading.h; sourceTree = "<group>"; };
4C1842D5179C6F1800E2F5BC /* KPKHeaderWriting.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKHeaderWriting.h; sourceTree = "<group>"; };
4C18816B179E06920045C5B7 /* TrashBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TrashBar.xib; sourceTree = "<group>"; };
4C18F9AA178E122500890BCE /* Test_Password_1234.kdb */ = {isa = PBXFileReference; lastKnownFileType = file; name = Test_Password_1234.kdb; path = Databases/Test_Password_1234.kdb; sourceTree = "<group>"; };
4C19E4FF178E26EF002F2CD0 /* Test_Password_1234.kdbx */ = {isa = PBXFileReference; lastKnownFileType = file; name = Test_Password_1234.kdbx; path = Databases/Test_Password_1234.kdbx; sourceTree = "<group>"; };
4C19E501178E2871002F2CD0 /* MPDatabasePasswordAndKeyfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDatabasePasswordAndKeyfile.h; sourceTree = "<group>"; };
@@ -650,6 +657,10 @@
4CC7EA1A17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HNHRoundendTextFieldCellHelper.m; sourceTree = "<group>"; };
4CCA7EEC1797866F00B0B55E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/GeneralSettings.strings; sourceTree = "<group>"; };
4CCA7EEE1797867200B0B55E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/GeneralSettings.strings; sourceTree = "<group>"; };
4CCEDE28179F203B008402BE /* MPOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineView.h; sourceTree = "<group>"; };
4CCEDE29179F203B008402BE /* MPOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOutlineView.m; sourceTree = "<group>"; };
4CCEDE2C179F2122008402BE /* MPNotifications.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPNotifications.h; sourceTree = "<group>"; };
4CCEDE2D179F213B008402BE /* MPNotifications.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNotifications.m; sourceTree = "<group>"; };
4CD3ABB2178F71B50073F5C5 /* KPKVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KPKVersion.h; path = Format/KPKVersion.h; sourceTree = "<group>"; };
4CD3ABB3178F71B50073F5C5 /* KPKTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKTree.h; sourceTree = "<group>"; };
4CD3ABB4178F71B50073F5C5 /* KPKTree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKTree.m; sourceTree = "<group>"; };
@@ -707,6 +718,14 @@
4CF78063176E75AD0032EE71 /* MPServerSettingsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPServerSettingsController.m; sourceTree = "<group>"; };
4CFC53BD16E94729007396BE /* MPShadowBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPShadowBox.h; sourceTree = "<group>"; };
4CFC53BE16E94729007396BE /* MPShadowBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPShadowBox.m; sourceTree = "<group>"; };
4CFC8739179DEDF3000DFC03 /* KPKMetaData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKMetaData.h; sourceTree = "<group>"; };
4CFC873A179DEDF3000DFC03 /* KPKMetaData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKMetaData.m; sourceTree = "<group>"; };
4CFC873C179DF200000DFC03 /* KPKTimeInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKTimeInfo.h; sourceTree = "<group>"; };
4CFC873D179DF200000DFC03 /* KPKTimeInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKTimeInfo.m; sourceTree = "<group>"; };
4CFC873F179DF295000DFC03 /* KPKTimerecording.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKTimerecording.h; sourceTree = "<group>"; };
4CFC8740179DF7A3000DFC03 /* KPKUndoing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKUndoing.h; sourceTree = "<group>"; };
4CFC8741179DFD3E000DFC03 /* KPKXmlLoadingTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKXmlLoadingTest.h; sourceTree = "<group>"; };
4CFC8742179DFD3E000DFC03 /* KPKXmlLoadingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKXmlLoadingTest.m; sourceTree = "<group>"; };
4CFEB36C1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Kdb3Entry+KVOAdditions.h"; sourceTree = "<group>"; };
4CFEB36D1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Kdb3Entry+KVOAdditions.m"; sourceTree = "<group>"; };
6E719715172058BA00E4C5FC /* MPDatabaseVersion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPDatabaseVersion.h; sourceTree = "<group>"; };
@@ -745,6 +764,7 @@
4C61EA0416D2FFE200AC519E /* OutlineView.xib */,
4CF78061176E752E0032EE71 /* PasswordInputs */,
4C3FFD9D16DAF60600DF9186 /* FilterBar.xib */,
4C18816B179E06920045C5B7 /* TrashBar.xib */,
4C76156F1764C0E20015A1A6 /* InspectorView.xib */,
4CE39AC016ECE359000FE29D /* IconSelection.xib */,
4C2C8B331787500E009649F3 /* UnprotectedWarningView.xib */,
@@ -762,6 +782,8 @@
4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */,
4C5FE9AC17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.h */,
4C5FE9AD17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m */,
4CCEDE28179F203B008402BE /* MPOutlineView.h */,
4CCEDE29179F203B008402BE /* MPOutlineView.m */,
);
name = Views;
sourceTree = "<group>";
@@ -1031,6 +1053,8 @@
4CA23359176DBFE100F0B6AC /* MPLockDaemon.m */,
4C16BA6017879A3C002B42BD /* MPPasswordStringFormatter.h */,
4C16BA6117879A3C002B42BD /* MPPasswordStringFormatter.m */,
4CCEDE2C179F2122008402BE /* MPNotifications.h */,
4CCEDE2D179F213B008402BE /* MPNotifications.m */,
);
name = Helper;
sourceTree = "<group>";
@@ -1093,8 +1117,10 @@
4C45FB1F178E09ED0010007D /* Supporting Files */,
4C305F3A179A19F90082334F /* KPKIconLoading.h */,
4C305F3B179A19F90082334F /* KPKIconLoading.m */,
4C1842B6179B348600E2F5BC /* KPKTreeLoadingTest.h */,
4C1842B7179B348600E2F5BC /* KPKTreeLoadingTest.m */,
4C1842B6179B348600E2F5BC /* KPKLegacyLoadingTest.h */,
4C1842B7179B348600E2F5BC /* KPKLegacyLoadingTest.m */,
4CFC8741179DFD3E000DFC03 /* KPKXmlLoadingTest.h */,
4CFC8742179DFD3E000DFC03 /* KPKXmlLoadingTest.m */,
);
path = MacPassTests;
sourceTree = "<group>";
@@ -1494,6 +1520,12 @@
4C305F35179A0BD70082334F /* KPKIcon.m */,
4C1842A9179B027700E2F5BC /* KPKDeletedNode.h */,
4C1842AA179B027800E2F5BC /* KPKDeletedNode.m */,
4CFC8739179DEDF3000DFC03 /* KPKMetaData.h */,
4CFC873A179DEDF3000DFC03 /* KPKMetaData.m */,
4CFC873C179DF200000DFC03 /* KPKTimeInfo.h */,
4CFC873D179DF200000DFC03 /* KPKTimeInfo.m */,
4CFC873F179DF295000DFC03 /* KPKTimerecording.h */,
4CFC8740179DF7A3000DFC03 /* KPKUndoing.h */,
);
path = Core;
sourceTree = "<group>";
@@ -1503,24 +1535,24 @@
children = (
4CDB5C401794AA4F0017667E /* KPKTree+Serializing.h */,
4CDB5C411794AA4F0017667E /* KPKTree+Serializing.m */,
4C1842C8179C616600E2F5BC /* KPKTreeCryptor.h */,
4C1842C9179C616700E2F5BC /* KPKTreeCryptor.m */,
4C1842BA179B434C00E2F5BC /* KPKXmlHeaderReader.h */,
4C1842BB179B434C00E2F5BC /* KPKXmlHeaderReader.m */,
4C1842D1179C64EF00E2F5BC /* KPKXmlTreeCryptor.h */,
4C1842D2179C64EF00E2F5BC /* KPKXmlTreeCryptor.m */,
4C5AA58F179549A1008ECAD7 /* KPKXmlTreeWriter.h */,
4C5AA590179549A1008ECAD7 /* KPKXmlTreeWriter.m */,
4C1842AD179B211C00E2F5BC /* KPKXmlTreeReader.h */,
4C1842AE179B211C00E2F5BC /* KPKXmlTreeReader.m */,
4C1842B0179B28C400E2F5BC /* KPKBinaryTreeReader.h */,
4C1842B1179B28C400E2F5BC /* KPKBinaryTreeReader.m */,
4C1842B3179B28D400E2F5BC /* KPKBinaryTreeWriter.h */,
4C1842B4179B28D400E2F5BC /* KPKBinaryTreeWriter.m */,
4C1842BA179B434C00E2F5BC /* KPKXmlHeaderReader.h */,
4C1842BB179B434C00E2F5BC /* KPKXmlHeaderReader.m */,
4C1842B0179B28C400E2F5BC /* KPKLegacyTreeReader.h */,
4C1842B1179B28C400E2F5BC /* KPKLegacyTreeReader.m */,
4C1842B3179B28D400E2F5BC /* KPKLegacyTreeWriter.h */,
4C1842B4179B28D400E2F5BC /* KPKLegacyTreeWriter.m */,
4C1842C4179BF51F00E2F5BC /* KPKLegacyHeaderReader.h */,
4C1842C5179BF52000E2F5BC /* KPKLegacyHeaderReader.m */,
4C1842C8179C616600E2F5BC /* KPKTreeCryptor.h */,
4C1842C9179C616700E2F5BC /* KPKTreeCryptor.m */,
4C1842CE179C64DC00E2F5BC /* KPKLegacyTreeCryptor.h */,
4C1842CF179C64DD00E2F5BC /* KPKLegacyTreeCryptor.m */,
4C1842D1179C64EF00E2F5BC /* KPKXmlTreeCryptor.h */,
4C1842D2179C64EF00E2F5BC /* KPKXmlTreeCryptor.m */,
4C1842D4179C6DE400E2F5BC /* KPKHeaderReading.h */,
4C1842D5179C6F1800E2F5BC /* KPKHeaderWriting.h */,
);
@@ -1720,6 +1752,7 @@
4C52A88F1788628B00868229 /* 13_KeysTemplate.pdf in Resources */,
4C52A8901788628B00868229 /* 18_DisplayTemplate.pdf in Resources */,
4C52A892178863B000868229 /* 68_PhoneTemplate.pdf in Resources */,
4C18816C179E06920045C5B7 /* TrashBar.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1750,7 +1783,8 @@
4C45FB30178E0CE20010007D /* MPDatabaseCreation.m in Sources */,
4C19E503178E2871002F2CD0 /* MPDatabasePasswordAndKeyfile.m in Sources */,
4C305F3C179A19F90082334F /* KPKIconLoading.m in Sources */,
4C1842B8179B348600E2F5BC /* KPKTreeLoadingTest.m in Sources */,
4C1842B8179B348600E2F5BC /* KPKLegacyLoadingTest.m in Sources */,
4CFC8743179DFD3E000DFC03 /* KPKXmlLoadingTest.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1931,8 +1965,8 @@
4CA7C36C179A98140099C34B /* NSString+Base64.m in Sources */,
4C1842AB179B027800E2F5BC /* KPKDeletedNode.m in Sources */,
4C1842AF179B211C00E2F5BC /* KPKXmlTreeReader.m in Sources */,
4C1842B2179B28C400E2F5BC /* KPKBinaryTreeReader.m in Sources */,
4C1842B5179B28D400E2F5BC /* KPKBinaryTreeWriter.m in Sources */,
4C1842B2179B28C400E2F5BC /* KPKLegacyTreeReader.m in Sources */,
4C1842B5179B28D400E2F5BC /* KPKLegacyTreeWriter.m in Sources */,
4C1842BC179B434C00E2F5BC /* KPKXmlHeaderReader.m in Sources */,
4C1842C0179B5BFD00E2F5BC /* NSData+CommonCrypto.m in Sources */,
4C1842C3179B69E700E2F5BC /* NSData+HashedData.m in Sources */,
@@ -1940,6 +1974,10 @@
4C1842CA179C616700E2F5BC /* KPKTreeCryptor.m in Sources */,
4C1842D0179C64DD00E2F5BC /* KPKLegacyTreeCryptor.m in Sources */,
4C1842D3179C64F000E2F5BC /* KPKXmlTreeCryptor.m in Sources */,
4CFC873B179DEDF3000DFC03 /* KPKMetaData.m in Sources */,
4CFC873E179DF200000DFC03 /* KPKTimeInfo.m in Sources */,
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */,
4CCEDE2E179F213B008402BE /* MPNotifications.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -52,13 +52,51 @@
<reference key="NSNextResponder" ref="997686550"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="396823428">
<reference key="NSNextResponder" ref="163272962"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{328, 8}, {38, 14}}</string>
<reference key="NSSuperview" ref="163272962"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="257142188">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">272761856</int>
<string key="NSContents">0 Items</string>
<object class="NSFont" key="NSSupport" id="26">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">11</double>
<int key="NSfFlags">3100</int>
</object>
<string key="NSCellIdentifier">_NS:1535</string>
<reference key="NSControlView" ref="396823428"/>
<object class="NSColor" key="NSBackgroundColor" id="10074991">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor" id="1055557409">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor" id="847395763">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlTextColor</string>
<object class="NSColor" key="NSColor" id="913356606">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MAA</bytes>
</object>
</object>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="276578969">
<reference key="NSNextResponder" ref="163272962"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{7, 5}, {32, 19}}</string>
<reference key="NSSuperview" ref="163272962"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<reference key="NSNextKeyView" ref="396823428"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="160641004">
@@ -88,7 +126,6 @@
</array>
<string key="NSFrameSize">{694, 30}</string>
<reference key="NSSuperview" ref="997686550"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="276578969"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSClassName">HNHGradientView</string>
@@ -107,7 +144,6 @@
<array class="NSMutableArray" key="NSSubviews"/>
<string key="NSFrameSize">{694, 548}</string>
<reference key="NSSuperview" ref="262664416"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="788738248"/>
<string key="NSReuseIdentifierKey">_NS:13</string>
<bool key="NSEnabled">YES</bool>
@@ -118,7 +154,6 @@
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{694, 17}</string>
<reference key="NSSuperview" ref="736877784"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="262664416"/>
<reference key="NSTableView" ref="528076956"/>
</object>
@@ -139,11 +174,7 @@
<int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport" id="26">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">11</double>
<int key="NSfFlags">3100</int>
</object>
<reference key="NSSupport" ref="26"/>
<object class="NSColor" key="NSBackgroundColor" id="977063486">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
@@ -157,10 +188,7 @@
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">headerTextColor</string>
<object class="NSColor" key="NSColor" id="913356606">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MAA</bytes>
</object>
<reference key="NSColor" ref="913356606"/>
</object>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="201181707">
@@ -177,17 +205,9 @@
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlBackgroundColor</string>
<object class="NSColor" key="NSColor" id="1055557409">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor" id="847395763">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlTextColor</string>
<reference key="NSColor" ref="913356606"/>
<reference key="NSColor" ref="1055557409"/>
</object>
<reference key="NSTextColor" ref="847395763"/>
</object>
<int key="NSResizingMask">3</int>
<bool key="NSIsResizeable">YES</bool>
@@ -331,7 +351,6 @@
</array>
<string key="NSFrame">{{0, 17}, {694, 548}}</string>
<reference key="NSSuperview" ref="613995671"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="528076956"/>
<string key="NSReuseIdentifierKey">_NS:11</string>
<reference key="NSDocView" ref="528076956"/>
@@ -343,7 +362,6 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
<reference key="NSSuperview" ref="613995671"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="802411427"/>
<string key="NSReuseIdentifierKey">_NS:58</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -356,7 +374,6 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{0, 310}, {480, 16}}</string>
<reference key="NSSuperview" ref="613995671"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="163272962"/>
<string key="NSReuseIdentifierKey">_NS:60</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -373,7 +390,6 @@
</array>
<string key="NSFrameSize">{694, 17}</string>
<reference key="NSSuperview" ref="613995671"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="253618752"/>
<reference key="NSDocView" ref="253618752"/>
<reference key="NSBGColor" ref="136901388"/>
@@ -382,7 +398,6 @@
</array>
<string key="NSFrame">{{0, 30}, {694, 565}}</string>
<reference key="NSSuperview" ref="997686550"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="736877784"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="NSsFlags">133680</int>
@@ -398,7 +413,6 @@
</array>
<string key="NSFrameSize">{694, 594}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="613995671"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSClassName">NSView</string>
@@ -461,6 +475,14 @@
</object>
<int key="connectionID">745</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">entryCountTextField</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="396823428"/>
</object>
<int key="connectionID">842</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">textField</string>
@@ -471,7 +493,7 @@
<object class="NSTextField" id="306813103">
<reference key="NSNextResponder" ref="788738248"/>
<int key="NSvFlags">266</int>
<string key="NSFrameSize">{105, 17}</string>
<string key="NSFrameSize">{104.5, 17}</string>
<reference key="NSSuperview" ref="788738248"/>
<reference key="NSNextKeyView" ref="804102913"/>
<string key="NSAntiCompressionPriority">{250, 750}</string>
@@ -482,18 +504,13 @@
<string key="NSContents">Table View Cell</string>
<reference key="NSSupport" ref="454123306"/>
<reference key="NSControlView" ref="306813103"/>
<object class="NSColor" key="NSBackgroundColor" id="10074991">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlColor</string>
<reference key="NSColor" ref="1055557409"/>
</object>
<reference key="NSBackgroundColor" ref="10074991"/>
<reference key="NSTextColor" ref="847395763"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{1, 1}, {105, 17}}</string>
<string key="NSFrame">{{1, 1}, {104.5, 17}}</string>
<reference key="NSNextKeyView" ref="306813103"/>
</object>
<reference key="destination" ref="306813103"/>
@@ -562,7 +579,7 @@
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{109, 1}, {144, 17}}</string>
<string key="NSFrame">{{108.5, 1}, {144, 17}}</string>
<reference key="NSNextKeyView" ref="591921532"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
</object>
@@ -605,7 +622,7 @@
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{378, 1}, {113, 17}}</string>
<string key="NSFrame">{{377, 1}, {113, 17}}</string>
<reference key="NSNextKeyView" ref="441850286"/>
</object>
<reference key="destination" ref="441850286"/>
@@ -622,7 +639,7 @@
<object class="NSTextField" id="1042596093">
<reference key="NSNextResponder" ref="878614701"/>
<int key="NSvFlags">266</int>
<string key="NSFrameSize">{119, 17}</string>
<string key="NSFrameSize">{118.5, 17}</string>
<reference key="NSSuperview" ref="878614701"/>
<reference key="NSNextKeyView" ref="542633869"/>
<string key="NSAntiCompressionPriority">{250, 750}</string>
@@ -639,7 +656,7 @@
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{256, 1}, {119, 17}}</string>
<string key="NSFrame">{{255.5, 1}, {118.5, 17}}</string>
<reference key="NSNextKeyView" ref="1042596093"/>
</object>
<reference key="destination" ref="1042596093"/>
@@ -673,7 +690,7 @@
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{494, 1}, {198, 17}}</string>
<string key="NSFrame">{{493, 1}, {198, 17}}</string>
<reference key="NSNextKeyView" ref="488604658"/>
</object>
<reference key="destination" ref="488604658"/>
@@ -1459,7 +1476,7 @@
<reference key="object" ref="163272962"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="244975730">
<reference key="firstItem" ref="276578969"/>
<reference key="firstItem" ref="396823428"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="163272962"/>
@@ -1474,6 +1491,38 @@
<float key="scoringTypeFloat">22</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="40671104">
<reference key="firstItem" ref="396823428"/>
<int key="firstAttribute">9</int>
<int key="relation">0</int>
<reference key="secondItem" ref="163272962"/>
<int key="secondAttribute">9</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="163272962"/>
<int key="scoringType">5</int>
<float key="scoringTypeFloat">22</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="540540814">
<reference key="firstItem" ref="276578969"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="396823428"/>
<int key="secondAttribute">10</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="163272962"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="187301323">
<reference key="firstItem" ref="276578969"/>
<int key="firstAttribute">5</int>
@@ -1507,6 +1556,7 @@
<int key="contentType">1</int>
</object>
<reference ref="276578969"/>
<reference ref="396823428"/>
</array>
<reference key="parent" ref="997686550"/>
</object>
@@ -1575,7 +1625,51 @@
<reference key="parent" ref="276578969"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">834</int>
<int key="objectID">835</int>
<reference key="object" ref="396823428"/>
<array class="NSMutableArray" key="children">
<reference ref="257142188"/>
<object class="IBNSLayoutConstraint" id="776958363">
<reference key="firstItem" ref="396823428"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">32</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="396823428"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="163272962"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">836</int>
<reference key="object" ref="257142188"/>
<reference key="parent" ref="396823428"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">837</int>
<reference key="object" ref="40671104"/>
<reference key="parent" ref="163272962"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">839</int>
<reference key="object" ref="776958363"/>
<reference key="parent" ref="396823428"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">840</int>
<reference key="object" ref="540540814"/>
<reference key="parent" ref="163272962"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">841</int>
<reference key="object" ref="244975730"/>
<reference key="parent" ref="163272962"/>
</object>
@@ -1715,9 +1809,11 @@
<string key="678.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="679.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="683.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="690.IBNSViewMetadataConstraints">
<array class="NSMutableArray" key="690.IBNSViewMetadataConstraints">
<reference ref="337191559"/>
<reference ref="187301323"/>
<reference ref="540540814"/>
<reference ref="40671104"/>
<reference ref="244975730"/>
</array>
<boolean value="NO" key="690.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
@@ -1735,117 +1831,24 @@
<string key="733.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="741.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="743.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="834.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="835.IBNSViewMetadataConstraints">
<reference ref="776958363"/>
</array>
<boolean value="NO" key="835.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="835.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="836.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="837.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="839.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="840.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="841.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">834</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">HNHGradientView</string>
<string key="superclassName">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/HNHGradientView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPEntryViewController</string>
<string key="superclassName">MPViewController</string>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="addEntryButton">NSButton</string>
<string key="bottomBar">HNHGradientView</string>
<string key="entryTable">NSTableView</string>
<string key="filterBar">NSView</string>
<string key="filterDoneButton">NSButton</string>
<string key="filterLabelTextField">NSTextField</string>
<string key="filterSearchField">NSSearchField</string>
<string key="filterTitleButton">NSButton</string>
<string key="filterURLButton">NSButton</string>
<string key="filterUsernameButton">NSButton</string>
<string key="tableToTop">NSLayoutConstraint</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="addEntryButton">
<string key="name">addEntryButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="bottomBar">
<string key="name">bottomBar</string>
<string key="candidateClassName">HNHGradientView</string>
</object>
<object class="IBToOneOutletInfo" key="entryTable">
<string key="name">entryTable</string>
<string key="candidateClassName">NSTableView</string>
</object>
<object class="IBToOneOutletInfo" key="filterBar">
<string key="name">filterBar</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="filterDoneButton">
<string key="name">filterDoneButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterLabelTextField">
<string key="name">filterLabelTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="filterSearchField">
<string key="name">filterSearchField</string>
<string key="candidateClassName">NSSearchField</string>
</object>
<object class="IBToOneOutletInfo" key="filterTitleButton">
<string key="name">filterTitleButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterURLButton">
<string key="name">filterURLButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterUsernameButton">
<string key="name">filterUsernameButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="tableToTop">
<string key="name">tableToTop</string>
<string key="candidateClassName">NSLayoutConstraint</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPEntryViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPTableView</string>
<string key="superclassName">NSTableView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPTableView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPViewController</string>
<string key="superclassName">NSViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSLayoutConstraint</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
</object>
</object>
</array>
<int key="maxID">842</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>

View File

@@ -897,18 +897,10 @@
<object class="IBPartialClassDescription">
<string key="className">MPEntryViewController</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">
<string key="addEntryButton">NSButton</string>
<string key="bottomBar">HNHGradientView</string>
<string key="entryCountTextField">NSTextField</string>
<string key="entryTable">NSTableView</string>
<string key="filterBar">NSView</string>
<string key="filterDoneButton">NSButton</string>
@@ -918,8 +910,21 @@
<string key="filterURLButton">NSButton</string>
<string key="filterUsernameButton">NSButton</string>
<string key="tableToTop">NSLayoutConstraint</string>
<string key="trashBar">HNHGradientView</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="addEntryButton">
<string key="name">addEntryButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="bottomBar">
<string key="name">bottomBar</string>
<string key="candidateClassName">HNHGradientView</string>
</object>
<object class="IBToOneOutletInfo" key="entryCountTextField">
<string key="name">entryCountTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="entryTable">
<string key="name">entryTable</string>
<string key="candidateClassName">NSTableView</string>
@@ -956,6 +961,10 @@
<string key="name">tableToTop</string>
<string key="candidateClassName">NSLayoutConstraint</string>
</object>
<object class="IBToOneOutletInfo" key="trashBar">
<string key="name">trashBar</string>
<string key="candidateClassName">HNHGradientView</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>

View File

@@ -11,9 +11,7 @@
APPKIT_EXTERN NSString *const MPDocumentDidAddGroupNotification;
APPKIT_EXTERN NSString *const MPDocumentWillDelteGroupNotification;
APPKIT_EXTERN NSString *const MPDocumentDidAddEntryNotification;
APPKIT_EXTERN NSString *const MPDocumentWillDeleteEntryNotification;
APPKIT_EXTERN NSString *const MPDocumentDidRevertNotifiation;
APPKIT_EXTERN NSString *const MPDocumentEntryKey;
@@ -21,6 +19,12 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
APPKIT_EXTERN NSString *const MPDocumentRequestPasswordSaveNotification;
/*
APPKIT_EXTERN NSString *const MPDocumentDidChangeCurrentItemNotification;
APPKIT_EXTERN NSString *const MPDocumentDidChangeCurrentGroupNotication;
APPKIT_EXTERN NSString *const MPDocumnetDidChangeCurrentEntryNotification;
*/
@class KdbGroup;
@class KdbEntry;
@class KdbTree;
@@ -53,6 +57,14 @@ APPKIT_EXTERN NSString *const MPDocumentRequestPasswordSaveNotification;
@property (assign, readonly, getter = isReadOnly) BOOL readOnly;
/*
State (active group/entry)
*/
@property (nonatomic, weak) KdbEntry *selectedEntry;
@property (nonatomic, weak) KdbGroup *selectedGroup;
@property (nonatomic, weak) id selectedItem;
- (id)initWithVersion:(MPDatabaseVersion)version;
#pragma mark Lock/Decrypt
@@ -94,7 +106,7 @@ APPKIT_EXTERN NSString *const MPDocumentRequestPasswordSaveNotification;
- (void)deleteGroup:(KdbGroup *)group;
- (void)deleteEntry:(KdbEntry *)entry;
- (void)emptyTrash:(id)sender;
- (IBAction)emptyTrash:(id)sender;
@end

View File

@@ -14,6 +14,7 @@
#import "MPIconHelper.h"
#import "MPActionHelper.h"
#import "MPSettingsHelper.h"
#import "MPNotifications.h"
#import "KdbLib.h"
#import "Kdb3Node.h"
@@ -38,9 +39,7 @@
#import "DDXMLNode.h"
NSString *const MPDocumentDidAddGroupNotification = @"com.hicknhack.macpass.MPDocumentDidAddGroupNotification";
NSString *const MPDocumentWillDelteGroupNotification = @"com.hicknhack.macpass.MPDocumentDidDelteGroupNotification";
NSString *const MPDocumentDidAddEntryNotification = @"com.hicknhack.macpass.MPDocumentDidAddEntryNotification";
NSString *const MPDocumentWillDeleteEntryNotification = @"com.hicknhack.macpass.MPDocumentDidDeleteEntryNotification";
NSString *const MPDocumentDidRevertNotifiation = @"com.hicknhack.macpass.MPDocumentDidRevertNotifiation";
NSString *const MPDocumentRequestPasswordSaveNotification = @"com.hicknhack.macpass.MPDocumentRequestPasswordSaveNotification";
@@ -257,6 +256,27 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey
return NO;
}
- (void)setSelectedGroup:(KdbGroup *)selectedGroup {
if(_selectedGroup != selectedGroup) {
_selectedGroup = selectedGroup;
}
self.selectedItem = _selectedGroup;
}
- (void)setSelectedEntry:(KdbEntry *)selectedEntry {
if(_selectedEntry != selectedEntry) {
_selectedEntry = selectedEntry;
}
self.selectedItem = selectedEntry;
}
- (void)setSelectedItem:(id)selectedItem {
if(_selectedItem != selectedItem) {
_selectedItem = selectedItem;
[[NSNotificationCenter defaultCenter] postNotificationName:MPCurrentItemChangedNotification object:self];
}
}
#pragma mark Data Accesors
- (void)setTree:(KdbTree *)tree {
if(_tree != tree) {
@@ -424,6 +444,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey
else {
[entry deleteUndoable];
}
self.selectedEntry = nil;
}
- (void)deleteGroup:(KdbGroup *)group {

View File

@@ -18,21 +18,13 @@
@class KdbGroup;
@class KdbEntry;
APPKIT_EXTERN NSString *const MPCurrentItemChangedNotification;
@interface MPDocumentWindowController : NSWindowController <NSWindowDelegate, MPDatabaseSettingsDelegate>
@interface MPDocumentWindowController : NSWindowController <MPDatabaseSettingsDelegate>
@property (readonly, strong) MPPasswordInputController *passwordInputController;
@property (readonly, strong) MPEntryViewController *entryViewController;
@property (readonly, strong) MPOutlineViewController *outlineViewController;
@property (readonly, strong) MPInspectorViewController *inspectorViewController;
/* Holds the current item. That is either a KdbGroup or a KdbEntry */
@property (readonly, unsafe_unretained) id currentItem;
@property (readonly, unsafe_unretained) KdbGroup *currentGroup;
@property (readonly, unsafe_unretained) KdbEntry *currentEntry;
/**
@param action The action that should be validatet
@param item The item that the action affects. Pass nil to fall back for default item

View File

@@ -19,8 +19,6 @@
#import "MPConstants.h"
#import "MPSettingsHelper.h"
NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCurrentItemChangedNotification";
@interface MPDocumentWindowController () {
@private
id _firstResponder;
@@ -30,9 +28,6 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
@property (strong) IBOutlet NSSplitView *splitView;
@property (strong) NSToolbar *toolbar;
@property (unsafe_unretained) id currentItem;
@property (unsafe_unretained) KdbGroup *currentGroup;
@property (unsafe_unretained) KdbEntry *currentEntry;
@property (strong) MPPasswordInputController *passwordInputController;
@property (strong) MPEntryViewController *entryViewController;
@@ -54,11 +49,7 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
_outlineViewController = [[MPOutlineViewController alloc] init];
_entryViewController = [[MPEntryViewController alloc] init];
_inspectorViewController = [[MPInspectorViewController alloc] init];
_currentItem = nil;
_saveAfterPasswordEdit = NO;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateCurrentItem:) name:MPOutlineViewDidChangeGroupSelection object:_outlineViewController];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateCurrentItem:) name:MPDidChangeSelectedEntryNotification object:_entryViewController];
}
return self;
}
@@ -100,8 +91,6 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
[inspectorView removeFromSuperview];
}
[[self window] setDelegate:self];
MPDocument *document = [self document];
if(!document.decrypted) {
[self showPasswordInput];
@@ -145,25 +134,6 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
[self.window makeFirstResponder:[viewController reconmendedFirstResponder]];
}
#pragma mark Notification handling
- (void)_updateCurrentItem:(NSNotification *)notification {
id sender = [notification object];
self.currentGroup = _outlineViewController.selectedGroup;
self.currentEntry = _entryViewController.selectedEntry;
if( sender == _outlineViewController.outlineView || sender == _outlineViewController ) {
self.currentItem = _outlineViewController.selectedGroup;
}
else if( sender == _entryViewController.entryTable || sender == _entryViewController) {
self.currentItem = _entryViewController.selectedEntry;
}
else {
return; // no notification!
}
[[NSNotificationCenter defaultCenter] postNotificationName:MPCurrentItemChangedNotification object:self];
}
- (void)_didRevertDocument:(NSNotification *)notification {
[self.outlineViewController clearSelection];
[self showPasswordInput];
@@ -196,7 +166,7 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
enabled = (nil != document.treeV4);
}
if(itemAction == [MPActionHelper actionOfType:MPActionDelete]) {
enabled &= (nil != _currentItem) && (_currentItem != document.trash);
enabled &= (nil != document.selectedItem) && (document.selectedItem != document.trash);
}
enabled &= !( !document.decrypted || document.isLocked || document.isReadOnly );
@@ -212,11 +182,11 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
switch (actionType) {
case MPActionAddGroup:
case MPActionAddEntry:
return (nil != _outlineViewController.selectedGroup);
return (nil != document.selectedGroup);
case MPActionDelete: {
BOOL valid = (nil != _currentItem);
valid &= (_currentItem != document.trash);
valid &= ![document isItemTrashed:_currentItem];
BOOL valid = (nil != document.selectedItem);
valid &= (document.selectedItem != document.trash);
valid &= ![document isItemTrashed:document.selectedItem];
return valid;
}
case MPActionLock:
@@ -241,11 +211,11 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
case MPActionAddGroup:
case MPActionAddEntry:
// test if Group is in trash
return (nil != _outlineViewController.selectedGroup);
return (nil != document.selectedGroup);
case MPActionDelete: {
BOOL valid = (nil != _currentItem);
valid &= (_currentItem != document.trash);
valid &= ![document isItemTrashed:_currentItem];
BOOL valid = (nil != document.selectedItem);
valid &= (document.selectedItem != document.trash);
valid &= ![document isItemTrashed:document.selectedItem];
return valid;
}
case MPActionLock:
@@ -381,30 +351,6 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
[_outlineViewController showOutline];
}
#pragma mark NSWindowDelegate
- (void)windowDidUpdate:(NSNotification *)notification {
id firstResonder = [[self window] firstResponder];
if(_firstResponder == firstResonder) {
return;
}
_firstResponder = firstResonder;
if([_firstResponder isKindOfClass:[NSView class]]) {
[self _updateCurrentItem:[NSNotification notificationWithName:@"dummy" object:_firstResponder ]];
}
}
//- (void)windowDidBecomeKey:(NSNotification *)notification {
// if(!_requestPassword) {
// return; // Nothing to do;
// }
// MPDocument *document = [self document];
// if(!document.hasPasswordOrKey && document.decrypted) {
// _requestPassword = NO;
// [self performSelector:@selector(editPassword:) withObject:nil afterDelay:0.5];
// }
//}
#pragma mark MPDatabaseSettingsDelegate
- (void)didCancelDatabaseSettings {
_saveAfterPasswordEdit = NO; // Just Reset the flag

View File

@@ -14,8 +14,6 @@ APPKIT_EXTERN NSString *const MPEntryTablePasswordColumnIdentifier;
APPKIT_EXTERN NSString *const MPEntryTableParentColumnIdentifier;
APPKIT_EXTERN NSString *const MPEntryTableURLColumnIdentifier;
APPKIT_EXTERN NSString *const MPDidChangeSelectedEntryNotification;
/* Tags to determine what to copy */
typedef NS_ENUM( NSUInteger, MPCopyContentTypeTag) {
MPCopyUsername,

View File

@@ -30,7 +30,7 @@
#import "KdbGroup+Undo.h"
#import "KdbEntry+Undo.h"
NSString *const MPDidChangeSelectedEntryNotification = @"com.macpass.MPDidChangeSelectedEntryNotification";
#import "MPNotifications.h"
#define STATUS_BAR_ANIMATION_TIME 0.2
@@ -69,6 +69,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
@property (strong) NSArrayController *entryArrayController;
@property (strong) NSArray *filteredEntries;
@property (strong) IBOutlet NSView *filterBar;
@property (strong) IBOutlet HNHGradientView *trashBar;
@property (weak) IBOutlet NSTableView *entryTable;
@property (strong) IBOutlet NSLayoutConstraint *tableToTop;
@property (weak) IBOutlet NSButton *filterDoneButton;
@@ -80,6 +81,8 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
@property (weak) IBOutlet NSSearchField *filterSearchField;
@property (weak) IBOutlet HNHGradientView *bottomBar;
@property (weak) IBOutlet NSButton *addEntryButton;
@property (weak) IBOutlet NSTextField *entryCountTextField;
@property (weak) KdbEntry *selectedEntry;
@@ -102,9 +105,9 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
if(self) {
_filterMode = MPFilterTitles;
_filterButtonToMode = @{ _toggleFilterUsernameButton : @(MPFilterUsernames),
_toggleFilterTitleButton : @(MPFilterTitles),
_toggleFilterURLButton : @(MPFilterUrls)
};
_toggleFilterTitleButton : @(MPFilterTitles),
_toggleFilterURLButton : @(MPFilterUrls)
};
_entryArrayController = [[NSArrayController alloc] init];
_dataSource = [[MPEntryTableDataSource alloc] init];
_dataSource.viewController = self;
@@ -133,6 +136,11 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
[self.entryTable setTarget:self];
[self.entryTable setFloatsGroupRows:NO];
//[self.entryTable registerForDraggedTypes:@[MPPasteBoardType]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_didBecomFirstResponder:)
name:MPDidBecomeFirstResonderNotification
object:_entryTable];
[self _setupEntryMenu];
NSTableColumn *parentColumn = [self.entryTable tableColumns][0];
@@ -174,10 +182,11 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
}
- (void)setupNotifications:(MPDocumentWindowController *)windowController {
MPDocument *document = [windowController document];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_didChangeCurrentItem:)
name:MPCurrentItemChangedNotification
object:windowController];
object:document];
}
#pragma mark NSTableViewDelgate
@@ -225,27 +234,20 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
}
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
MPDocument *document = [[self windowController] document];
if([self.entryTable selectedRow] < 0 || [[_entryTable selectedRowIndexes] count] > 1) {
self.selectedEntry = nil;
document.selectedEntry = nil;
}
else {
self.selectedEntry = [self.entryArrayController arrangedObjects][[self.entryTable selectedRow]];
document.selectedEntry = [self.entryArrayController arrangedObjects][[self.entryTable selectedRow]];
}
[[NSNotificationCenter defaultCenter] postNotificationName:MPDidChangeSelectedEntryNotification object:self userInfo:nil];
}
#pragma mark Notifications
- (void)_didChangeCurrentItem:(NSNotification *)notification {
if([self _showsFilterBar]) {
//[self.filterSearchField setStringValue:@""];
[self clearFilter:nil];
}
MPDocumentWindowController *sender = [notification object];
id item = sender.currentItem;
/*
Filter? If no group is selected, we shouldn display a list of entries
*/
if(!sender.currentGroup) {
MPDocument *document = [notification object];
if(!document.selectedGroup) {
[self.entryArrayController unbind:NSContentArrayBinding];
[self.entryArrayController setContent:nil];
return;
@@ -253,17 +255,31 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
/*
If a grup is the current item, see if we already show that group
*/
if(item == sender.currentGroup) {
if(document.selectedItem == document.selectedGroup) {
/*
If we reselct the group, or just another group
we clear the filter and bind to the new selected group
*/
if([self _showsFilterBar] && ![document.selectedItem isKindOfClass:[KdbEntry class]]) {
[self clearFilter:nil];
[self.entryArrayController bind:NSContentArrayBinding toObject:document.selectedGroup withKeyPath:@"entries" options:nil];
return;
}
if([[self.entryArrayController content] count] > 0) {
KdbEntry *entry = [[self.entryArrayController content] lastObject];
if(entry.parent == item) {
if(entry.parent == document.selectedGroup) {
return; // we are showing the correct object right now.
}
}
[self.entryArrayController bind:NSContentArrayBinding toObject:item withKeyPath:@"entries" options:nil];
[self.entryArrayController bind:NSContentArrayBinding toObject:document.selectedGroup withKeyPath:@"entries" options:nil];
}
}
- (void)_didBecomFirstResponder:(NSNotification *)notification {
MPDocument *document = [[self windowController] document];
document.selectedItem = document.selectedEntry;
}
#pragma mark Filtering
@@ -284,8 +300,11 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
- (void)clearFilter:(id)sender {
self.filter = nil;
[self.filterSearchField setStringValue:@""];
[[self.entryTable tableColumnWithIdentifier:MPEntryTableParentColumnIdentifier] setHidden:YES];
[self _hideFilterBarAnimated:YES];
MPDocument *document = [[self windowController] document];
document.selectedGroup = document.selectedGroup;
}
- (void)updateFilter {
@@ -312,6 +331,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
self.filteredEntries = [[document.root childEntries] filteredArrayUsingPredicate:fullFilter];
dispatch_sync(dispatch_get_main_queue(), ^{
document.selectedEntry = nil;
[self.entryArrayController unbind:NSContentArrayBinding];
[self.entryArrayController setContent:self.filteredEntries];
[[self.entryTable tableColumnWithIdentifier:MPEntryTableParentColumnIdentifier] setHidden:NO];
@@ -382,6 +402,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
else {
[self.view layoutSubtreeIfNeeded];
}
[[[self windowController] window] makeFirstResponder:self.filterSearchField];
}
- (void)_hideFilterBarAnimated:(BOOL)animate {
@@ -428,7 +449,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
infoImage = [[NSBundle mainBundle] imageForResource:@"09_IdentityTemplate"];
infoText = NSLocalizedString(@"COPIED_USERNAME", @"Username was copied to the pasteboard");
break;
case MPOverlayInfoCustom:
infoImage = [[NSBundle mainBundle] imageForResource:@"00_PasswordTemplate"];
infoText = [NSString stringWithFormat:NSLocalizedString(@"COPIED_FIELD_%@", "Field nam that was copied to the pasteboard"), name];
@@ -437,6 +458,56 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
[[MPOverlayWindowController sharedController] displayOverlayImage:infoImage label:infoText atView:self.view];
}
- (void)_showTrashBar {
if([self hasFilter]) {
[self clearFilter:nil];
}
if(!self.trashBar) {
[self _setupTrashBar];
}
NSView *scrollView = [_entryTable enclosingScrollView];
NSDictionary *views = NSDictionaryOfVariableBindings(scrollView, _trashBar);
[[self view] layout];
[[self view] removeConstraint:self.tableToTop];
[[self view] addSubview:self.trashBar];
[[self view] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_trashBar]|" options:0 metrics:nil views:views]];
[[self view] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_trashBar(==30)]-0-[scrollView]" options:0 metrics:nil views:views]];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext* context) {
context.duration = STATUS_BAR_ANIMATION_TIME;
context.allowsImplicitAnimation = YES;
[[self view] layoutSubtreeIfNeeded];
} completionHandler:nil] ;
//[[self view] layoutSubtreeIfNeeded];
}
- (void)_hideTrashBar {
if(![self.trashBar superview]) {
return; // Trahsbar is not visible
}
[self.trashBar removeFromSuperview];
[[self view] addConstraint:self.tableToTop];
[[self view] layoutSubtreeIfNeeded];
}
- (void)_setupTrashBar {
/* Load the bundle */
[[NSBundle mainBundle] loadNibNamed:@"TrashBar" owner:self topLevelObjects:nil];
NSArray *activeColors = @[
[NSColor colorWithCalibratedWhite:0.2 alpha:1],
[NSColor colorWithCalibratedWhite:0.4 alpha:1]
];
NSArray *inactiveColors = @[ [NSColor colorWithCalibratedWhite:0.3 alpha:1],
[NSColor colorWithCalibratedWhite:0.6 alpha:1]
];
self.trashBar.activeGradient = [[NSGradient alloc] initWithColors:activeColors];
self.trashBar.inactiveGradient = [[NSGradient alloc] initWithColors:inactiveColors];
}
#pragma mark EntryMenu
- (void)_setupEntryMenu {

View File

@@ -22,6 +22,7 @@
#import "MPSelectedAttachmentTableCellView.h"
#import "MPAttachmentTableViewDelegate.h"
#import "MPCustomFieldTableViewDelegate.h"
#import "MPNotifications.h"
#import "NSDate+Humanized.h"
@@ -129,11 +130,11 @@ enum {
}
- (void)setupNotifications:(MPDocumentWindowController *)windowController {
/* Register for Entry selection */
MPDocument *document = [windowController document];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_didChangeCurrentItem:)
name:MPCurrentItemChangedNotification
object:windowController];
object:document];
}
- (void)setModificationDate:(NSDate *)modificationDate {
@@ -418,19 +419,24 @@ enum {
#pragma mark Notificiations
- (void)_didChangeCurrentItem:(NSNotification *)notification {
MPDocumentWindowController *sender = [notification object];
id item = sender.currentItem;
if(!item) {
/**
Remove double handling.
Just call for documents properties when neede
*/
MPDocument *document = [[self windowController] document];
if(!document.selectedItem) {
self.selectedGroup = nil;
self.selectedEntry = nil;
}
if([item isKindOfClass:[KdbGroup class]]) {
BOOL isGroup = document.selectedItem == document.selectedGroup;
BOOL isEntry = document.selectedItem == document.selectedEntry;
if(isGroup) {
self.selectedEntry = nil;
self.selectedGroup = sender.currentItem;
self.selectedGroup = document.selectedItem;
}
else if([item isKindOfClass:[KdbEntry class]]) {
else if(isEntry) {
self.selectedGroup = nil;
self.selectedEntry = sender.currentItem;
self.selectedEntry = document.selectedItem;
}
[self _updateContent];
}

17
MacPass/MPNotifications.h Normal file
View File

@@ -0,0 +1,17 @@
//
// MPNotifications.h
// MacPass
//
// Created by Michael Starke on 23.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#ifndef MacPass_MPNotifications_h
#define MacPass_MPNotifications_h
#import <Foundation/Foundation.h>
FOUNDATION_EXPORT NSString *const MPDidBecomeFirstResonderNotification;
FOUNDATION_EXPORT NSString *const MPCurrentItemChangedNotification;
#endif

12
MacPass/MPNotifications.m Normal file
View File

@@ -0,0 +1,12 @@
//
// MPNotifications.m
// MacPass
//
// Created by Michael Starke on 23.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPNotifications.h"
NSString *const MPDidBecomeFirstResonderNotification = @"com.hicknhack.macpass.MPDidBecomeFirstResonderNotification";
NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCurrentItemChangedNotification";

13
MacPass/MPOutlineView.h Normal file
View File

@@ -0,0 +1,13 @@
//
// MPOutlineView.h
// MacPass
//
// Created by Michael Starke on 23.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface MPOutlineView : NSOutlineView
@end

21
MacPass/MPOutlineView.m Normal file
View File

@@ -0,0 +1,21 @@
//
// MPOutlineView.m
// MacPass
//
// Created by Michael Starke on 23.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPOutlineView.h"
#import "MPNotifications.h"
@implementation MPOutlineView
- (BOOL)becomeFirstResponder {
[[NSNotificationCenter defaultCenter] postNotificationName:MPDidBecomeFirstResonderNotification
object:self
userInfo:nil];
return YES;
}
@end

View File

@@ -17,9 +17,8 @@ APPKIT_EXTERN NSString *const MPOutlineViewDidChangeGroupSelection;
@interface MPOutlineViewController : MPViewController <NSOutlineViewDelegate>
@property (readonly, weak) NSOutlineView *outlineView;
@property (weak) IBOutlet HNHGradientView *bottomBar;
@property (weak, readonly, nonatomic) KdbGroup *selectedGroup;
- (void)clearSelection;
- (void)showOutline;

View File

@@ -16,6 +16,7 @@
#import "MPIconHelper.h"
#import "MPUppercaseStringValueTransformer.h"
#import "MPRootAdapter.h"
#import "MPNotifications.h"
#import "KdbLib.h"
#import "Kdb4Node.h"
@@ -33,7 +34,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
}
@property (weak) IBOutlet NSOutlineView *outlineView;
@property (weak) IBOutlet NSButton *addGroupButton;
@property (nonatomic, weak) KdbGroup *selectedGroup;
@property (strong) NSTreeController *treeController;
@property (strong) MPOutlineDataSource *datasource;
@@ -71,6 +71,11 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
[_outlineView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
[_bottomBar setBorderType:HNHBorderTop];
[_addGroupButton setAction:[MPActionHelper actionOfType:MPActionAddGroup]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_didBecomeFirstResponder:)
name:MPDidBecomeFirstResonderNotification
object:_outlineView];
}
- (void)showOutline {
@@ -101,17 +106,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
}
}
//- (void)setSelectedGroup:(KdbGroup *)selectedGroup {
// if(_selectedGroup != selectedGroup) {
// _selectedGroup = selectedGroup;
// if([selectedGroup isKindOfClass:[Kdb4Group class]]) {
// MPDocument *document = [[self windowController] document];
// document.treeV4.lastSelectedGroup = ((Kdb4Group *)selectedGroup).uuid;
// }
// }
//}
#pragma mark Notifications
- (void)setupNotifications:(MPDocumentWindowController *)windowController {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didCreateGroup:) name:MPDocumentDidAddGroupNotification object:[windowController document]];
@@ -128,7 +122,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
if( selectedRow == -1) {
MPDocument *document = [[self windowController] document];
indexSet = [NSIndexSet indexSetWithIndex:[document.root.groups count]];
//TODO: Find out why selection is not set (treeUpdate?)
}
else {
id item = [_outlineView itemAtRow:selectedRow];
@@ -137,6 +130,14 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
}
}
- (void)_didBecomeFirstResponder:(NSNotification *)notification {
if( [notification object] != _outlineView ) {
return; // Nothing we need to worry about
}
MPDocument *document = [[self windowController] document];
document.selectedItem = document.selectedGroup;
}
#pragma mark Validation
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
@@ -212,8 +213,8 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
- (void)outlineViewSelectionDidChange:(NSNotification *)notification {
NSTreeNode *treeNode = [_outlineView itemAtRow:[_outlineView selectedRow]];
KdbGroup *selectedGroup = [treeNode representedObject];
self.selectedGroup = selectedGroup;
[[NSNotificationCenter defaultCenter] postNotificationName:MPOutlineViewDidChangeGroupSelection object:self userInfo:nil];
MPDocument *document = [[self windowController] document];
document.selectedGroup = selectedGroup;
}
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item {

View File

@@ -7,9 +7,17 @@
//
#import "MPTableView.h"
#import "MPNotifications.h"
@implementation MPTableView
- (BOOL)becomeFirstResponder {
[[NSNotificationCenter defaultCenter] postNotificationName:MPDidBecomeFirstResonderNotification
object:self
userInfo:nil];
return YES;
}
- (void)drawBackgroundInClipRect:(NSRect)clipRect {
/*
We need to clear the outer areas

View File

@@ -1054,6 +1054,7 @@
<string key="196.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="227.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="227.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="228.CustomClassName">MPOutlineView</string>
<string key="228.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES" key="228.ibExternalAutomaticallyCalculatesRowSizeFromViewHeight"/>
<string key="229.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1163,6 +1164,14 @@
<string key="minorKey">./Classes/HNHGradientView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPOutlineView</string>
<string key="superclassName">NSOutlineView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPOutlineView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPOutlineViewController</string>
<string key="superclassName">MPViewController</string>

377
MacPass/TrashBar.xib Normal file
View File

@@ -0,0 +1,377 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1080</int>
<string key="IBDocument.SystemVersion">12E55</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.39</string>
<string key="IBDocument.HIToolboxVersion">626.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">3084</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBNSLayoutConstraint</string>
<string>NSButton</string>
<string>NSButtonCell</string>
<string>NSCustomObject</string>
<string>NSCustomView</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="NSCustomObject" id="1001">
<string key="NSClassName">MPEntryViewController</string>
</object>
<object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1004">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSCustomView" id="1005">
<reference key="NSNextResponder"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="277872291">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{71, 5}, {87, 19}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="337475579">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Empty Trash</string>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">12</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="277872291"/>
<int key="NSButtonFlags">-2038153216</int>
<int key="NSButtonFlags2">164</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrameSize">{178, 30}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="277872291"/>
<string key="NSClassName">HNHGradientView</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">trashBar</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="1005"/>
</object>
<int key="connectionID">22</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">emptyTrash:</string>
<reference key="source" ref="1003"/>
<reference key="destination" ref="277872291"/>
</object>
<int key="connectionID">23</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1001"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1003"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1004"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">1</int>
<reference key="object" ref="1005"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="120765898">
<reference key="firstItem" ref="277872291"/>
<int key="firstAttribute">5</int>
<int key="relation">1</int>
<reference key="secondItem" ref="1005"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</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="546131096">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="277872291"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</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="879298244">
<reference key="firstItem" ref="277872291"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1005"/>
<int key="secondAttribute">10</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">5</int>
<float key="scoringTypeFloat">22</float>
<int key="contentType">2</int>
</object>
<reference ref="277872291"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">13</int>
<reference key="object" ref="277872291"/>
<array class="NSMutableArray" key="children">
<reference ref="337475579"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">14</int>
<reference key="object" ref="337475579"/>
<reference key="parent" ref="277872291"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">18</int>
<reference key="object" ref="879298244"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">20</int>
<reference key="object" ref="546131096"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">21</int>
<reference key="object" ref="120765898"/>
<reference key="parent" ref="1005"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="1.IBNSViewMetadataConstraints">
<reference ref="879298244"/>
<reference ref="546131096"/>
<reference ref="120765898"/>
</array>
<boolean value="NO" key="1.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/>
<boolean value="NO" key="1.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="13.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">23</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">HNHGradientView</string>
<string key="superclassName">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/HNHGradientView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPDocument</string>
<string key="superclassName">NSDocument</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">emptyTrash:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">emptyTrash:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">emptyTrash:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="warningView">NSView</string>
<string key="warningViewImage">NSImageView</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="warningView">
<string key="name">warningView</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="warningViewImage">
<string key="name">warningViewImage</string>
<string key="candidateClassName">NSImageView</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPDocument.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPEntryViewController</string>
<string key="superclassName">MPViewController</string>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="addEntryButton">NSButton</string>
<string key="bottomBar">HNHGradientView</string>
<string key="entryCountTextField">NSTextField</string>
<string key="entryTable">NSTableView</string>
<string key="filterBar">NSView</string>
<string key="filterDoneButton">NSButton</string>
<string key="filterLabelTextField">NSTextField</string>
<string key="filterSearchField">NSSearchField</string>
<string key="filterTitleButton">NSButton</string>
<string key="filterURLButton">NSButton</string>
<string key="filterUsernameButton">NSButton</string>
<string key="tableToTop">NSLayoutConstraint</string>
<string key="trashBar">HNHGradientView</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="addEntryButton">
<string key="name">addEntryButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="bottomBar">
<string key="name">bottomBar</string>
<string key="candidateClassName">HNHGradientView</string>
</object>
<object class="IBToOneOutletInfo" key="entryCountTextField">
<string key="name">entryCountTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="entryTable">
<string key="name">entryTable</string>
<string key="candidateClassName">NSTableView</string>
</object>
<object class="IBToOneOutletInfo" key="filterBar">
<string key="name">filterBar</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="filterDoneButton">
<string key="name">filterDoneButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterLabelTextField">
<string key="name">filterLabelTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="filterSearchField">
<string key="name">filterSearchField</string>
<string key="candidateClassName">NSSearchField</string>
</object>
<object class="IBToOneOutletInfo" key="filterTitleButton">
<string key="name">filterTitleButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterURLButton">
<string key="name">filterURLButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterUsernameButton">
<string key="name">filterUsernameButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="tableToTop">
<string key="name">tableToTop</string>
<string key="candidateClassName">NSLayoutConstraint</string>
</object>
<object class="IBToOneOutletInfo" key="trashBar">
<string key="name">trashBar</string>
<string key="candidateClassName">HNHGradientView</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPEntryViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPViewController</string>
<string key="superclassName">NSViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSLayoutConstraint</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<bool key="IBDocument.UseAutolayout">YES</bool>
</data>
</archive>

Binary file not shown.

Binary file not shown.

View File

@@ -10,7 +10,7 @@
@class KPKPassword;
@interface KPKTreeLoadingTest : SenTestCase {
@interface KPKLegacyLoadingTest : SenTestCase {
@private
NSData *_data;
KPKPassword *_password;

View File

@@ -6,15 +6,15 @@
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KPKTreeLoadingTest.h"
#import "KPKLegacyLoadingTest.h"
#import "KPKTreeCryptor.h"
#import "KPKPassword.h"
@implementation KPKTreeLoadingTest
@implementation KPKLegacyLoadingTest
- (void)setUp {
NSBundle *myBundle = [NSBundle bundleForClass:[self class]];
NSURL *url = [myBundle URLForResource:@"Test_Password_1234" withExtension:@"kdbx"];
NSURL *url = [myBundle URLForResource:@"Test_Password_1234" withExtension:@"kdb"];
_data = [NSData dataWithContentsOfURL:url];
_password = [[KPKPassword alloc] initWithPassword:@"1234" key:nil];
}

View File

@@ -0,0 +1,18 @@
//
// KPKXmlLoadingTest.h
// MacPass
//
// Created by Michael Starke on 23.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <SenTestingKit/SenTestingKit.h>
@class KPKPassword;
@interface KPKXmlLoadingTest : SenTestCase {
@private
NSData *_data;
KPKPassword *_password;
}
@end

View File

@@ -0,0 +1,33 @@
//
// KPKXmlLoadingTest.m
// MacPass
//
// Created by Michael Starke on 23.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KPKXmlLoadingTest.h"
#import "KPKTreeCryptor.h"
#import "KPKPassword.h"
@implementation KPKXmlLoadingTest
- (void)setUp {
NSBundle *myBundle = [NSBundle bundleForClass:[self class]];
NSURL *url = [myBundle URLForResource:@"Test_Password_1234" withExtension:@"kdbx"];
_data = [NSData dataWithContentsOfURL:url];
_password = [[KPKPassword alloc] initWithPassword:@"1234" key:nil];
}
- (void)tearDown {
_data = nil;
_password = nil;
}
- (void)testLoading {
KPKTreeCryptor *cryptor = [KPKTreeCryptor treeCryptorWithData:_data password:_password];
KPKTree *tree = [cryptor decryptTree:NULL];
STAssertNotNil(tree, @"Loading should result in a tree object");
}
@end