mirror of
https://github.com/MacPass/MacPass.git
synced 2026-01-31 16:38:14 +00:00
Compare commits
7 Commits
0.3.6-alph
...
0.3.8-alph
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6622148a0 | ||
|
|
af4336e94b | ||
|
|
4a35d0d4ff | ||
|
|
8087085fc0 | ||
|
|
9ced3fce0b | ||
|
|
acc800c9e6 | ||
|
|
45cb4a2652 |
2
HNHUi
2
HNHUi
Submodule HNHUi updated: c32f87da30...9546c4088c
Submodule KeePassKit updated: c0665e4052...e52882661c
@@ -15,13 +15,17 @@
|
||||
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 */; };
|
||||
4C1842BC179B434C00E2F5BC /* KPKXmlCipherInformation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842BB179B434C00E2F5BC /* KPKXmlCipherInformation.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 */; };
|
||||
4C1842C6179BF52100E2F5BC /* KPKBinaryCipherInformation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842C5179BF52000E2F5BC /* KPKBinaryCipherInformation.m */; };
|
||||
4C1842C6179BF52100E2F5BC /* KPKLegacyHeaderReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1842C5179BF52000E2F5BC /* KPKLegacyHeaderReader.m */; };
|
||||
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 */; };
|
||||
@@ -79,7 +83,6 @@
|
||||
4C3D4C0817594CA40038DAAC /* HNHSeparator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3D4C0717594CA40038DAAC /* HNHSeparator.m */; };
|
||||
4C3E1CC0177DEFB3003BD9BD /* StringField+Undo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3E1CBF177DEFB3003BD9BD /* StringField+Undo.m */; };
|
||||
4C3F28541791EDFD00703281 /* KPKErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3F28531791EDFD00703281 /* KPKErrors.m */; };
|
||||
4C3F28581791F04F00703281 /* LocalizableErrors.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4C3F28571791F04F00703281 /* LocalizableErrors.strings */; };
|
||||
4C3FFD9E16DAF60600DF9186 /* FilterBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C3FFD9D16DAF60600DF9186 /* FilterBar.xib */; };
|
||||
4C431BCD16E2A82800700A81 /* MPPasteBoardController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C431BCC16E2A82700700A81 /* MPPasteBoardController.m */; };
|
||||
4C431BCF16E2BAB000700A81 /* OverlayWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C431BCE16E2BAB000700A81 /* OverlayWindow.xib */; };
|
||||
@@ -159,7 +162,6 @@
|
||||
4C6D1D27178586CA0014C5A5 /* 99_AddFolderTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C6D1D26178586CA0014C5A5 /* 99_AddFolderTemplate.pdf */; };
|
||||
4C6D1D2B17858A250014C5A5 /* MacPass.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4C6D1D2A17858A250014C5A5 /* MacPass.icns */; };
|
||||
4C701CBC178618A000581B88 /* 12_RemoteTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C701CBB178618A000581B88 /* 12_RemoteTemplate.pdf */; };
|
||||
4C70D0FD1790924700652EE9 /* KPKTreeLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C70D0FC1790924700652EE9 /* KPKTreeLoader.m */; };
|
||||
4C70D100179092F200652EE9 /* KPKPassword.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C70D0FF179092F200652EE9 /* KPKPassword.m */; };
|
||||
4C74DD07177BD1640034A9DB /* MPCustomFieldView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C74DD06177BD1640034A9DB /* MPCustomFieldView.m */; };
|
||||
4C76155C1764C04C0015A1A6 /* GeneralSettings.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C76155E1764C04C0015A1A6 /* GeneralSettings.xib */; };
|
||||
@@ -213,6 +215,9 @@
|
||||
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 */; };
|
||||
4CCEDE32179F5B6C008402BE /* KPKDataStreamer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE31179F5B6C008402BE /* KPKDataStreamer.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 */; };
|
||||
@@ -245,6 +250,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 */
|
||||
|
||||
@@ -265,22 +273,31 @@
|
||||
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>"; };
|
||||
4C1842B9179B3A1700E2F5BC /* KPKHeaderFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKHeaderFields.h; sourceTree = "<group>"; };
|
||||
4C1842BA179B434C00E2F5BC /* KPKXmlCipherInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKXmlCipherInformation.h; sourceTree = "<group>"; };
|
||||
4C1842BB179B434C00E2F5BC /* KPKXmlCipherInformation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKXmlCipherInformation.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>"; };
|
||||
4C1842BE179B5BFD00E2F5BC /* NSData+CommonCrypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+CommonCrypto.h"; sourceTree = "<group>"; };
|
||||
4C1842BF179B5BFD00E2F5BC /* NSData+CommonCrypto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+CommonCrypto.m"; sourceTree = "<group>"; };
|
||||
4C1842C1179B69E600E2F5BC /* NSData+HashedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+HashedData.h"; sourceTree = "<group>"; };
|
||||
4C1842C2179B69E700E2F5BC /* NSData+HashedData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+HashedData.m"; sourceTree = "<group>"; };
|
||||
4C1842C4179BF51F00E2F5BC /* KPKBinaryCipherInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKBinaryCipherInformation.h; sourceTree = "<group>"; };
|
||||
4C1842C5179BF52000E2F5BC /* KPKBinaryCipherInformation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKBinaryCipherInformation.m; sourceTree = "<group>"; };
|
||||
4C1842C7179BF6A100E2F5BC /* KPKKdbHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKKdbHeader.h; sourceTree = "<group>"; };
|
||||
4C1842C4179BF51F00E2F5BC /* KPKLegacyHeaderReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKLegacyHeaderReader.h; sourceTree = "<group>"; };
|
||||
4C1842C5179BF52000E2F5BC /* KPKLegacyHeaderReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKLegacyHeaderReader.m; sourceTree = "<group>"; };
|
||||
4C1842C7179BF6A100E2F5BC /* KPKLegacyHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KPKLegacyHeader.h; path = Format/KPKLegacyHeader.h; sourceTree = "<group>"; };
|
||||
4C1842C8179C616600E2F5BC /* KPKTreeCryptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKTreeCryptor.h; sourceTree = "<group>"; };
|
||||
4C1842C9179C616700E2F5BC /* KPKTreeCryptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKTreeCryptor.m; sourceTree = "<group>"; };
|
||||
4C1842CE179C64DC00E2F5BC /* KPKLegacyTreeCryptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKLegacyTreeCryptor.h; sourceTree = "<group>"; };
|
||||
4C1842CF179C64DD00E2F5BC /* KPKLegacyTreeCryptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKLegacyTreeCryptor.m; sourceTree = "<group>"; };
|
||||
4C1842D1179C64EF00E2F5BC /* KPKXmlTreeCryptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKXmlTreeCryptor.h; sourceTree = "<group>"; };
|
||||
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>"; };
|
||||
@@ -386,13 +403,12 @@
|
||||
4C3E1CBF177DEFB3003BD9BD /* StringField+Undo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "StringField+Undo.m"; sourceTree = "<group>"; };
|
||||
4C3F28521791EDE800703281 /* KPKErrors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKErrors.h; sourceTree = "<group>"; };
|
||||
4C3F28531791EDFD00703281 /* KPKErrors.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKErrors.m; sourceTree = "<group>"; };
|
||||
4C3F28571791F04F00703281 /* LocalizableErrors.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = LocalizableErrors.strings; path = Resources/LocalizableErrors.strings; sourceTree = "<group>"; };
|
||||
4C3FFD9D16DAF60600DF9186 /* FilterBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FilterBar.xib; sourceTree = "<group>"; };
|
||||
4C431BCB16E2A82700700A81 /* MPPasteBoardController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasteBoardController.h; sourceTree = "<group>"; };
|
||||
4C431BCC16E2A82700700A81 /* MPPasteBoardController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasteBoardController.m; sourceTree = "<group>"; };
|
||||
4C431BCE16E2BAB000700A81 /* OverlayWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OverlayWindow.xib; sourceTree = "<group>"; };
|
||||
4C4436751792BE810099E220 /* KPKFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKFormat.h; sourceTree = "<group>"; };
|
||||
4C4436761792BE810099E220 /* KPKFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKFormat.m; sourceTree = "<group>"; };
|
||||
4C4436751792BE810099E220 /* KPKFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KPKFormat.h; path = Format/KPKFormat.h; sourceTree = "<group>"; };
|
||||
4C4436761792BE810099E220 /* KPKFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KPKFormat.m; path = Format/KPKFormat.m; sourceTree = "<group>"; };
|
||||
4C4510071798C53700219998 /* StringField+Validation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "StringField+Validation.h"; sourceTree = "<group>"; };
|
||||
4C4510081798C53700219998 /* StringField+Validation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "StringField+Validation.m"; sourceTree = "<group>"; };
|
||||
4C45100A1798C65C00219998 /* Kdb4Entry+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Kdb4Entry+MPAdditions.h"; sourceTree = "<group>"; };
|
||||
@@ -534,8 +550,6 @@
|
||||
4C6D1D26178586CA0014C5A5 /* 99_AddFolderTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 99_AddFolderTemplate.pdf; sourceTree = "<group>"; };
|
||||
4C6D1D2A17858A250014C5A5 /* MacPass.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MacPass.icns; path = "../Assets/App icon/MacPass.icns"; sourceTree = "<group>"; };
|
||||
4C701CBB178618A000581B88 /* 12_RemoteTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 12_RemoteTemplate.pdf; sourceTree = "<group>"; };
|
||||
4C70D0FB1790924700652EE9 /* KPKTreeLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKTreeLoader.h; sourceTree = "<group>"; };
|
||||
4C70D0FC1790924700652EE9 /* KPKTreeLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKTreeLoader.m; sourceTree = "<group>"; };
|
||||
4C70D0FE179092F200652EE9 /* KPKPassword.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKPassword.h; sourceTree = "<group>"; };
|
||||
4C70D0FF179092F200652EE9 /* KPKPassword.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKPassword.m; sourceTree = "<group>"; };
|
||||
4C74DD05177BD1640034A9DB /* MPCustomFieldView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCustomFieldView.h; sourceTree = "<group>"; };
|
||||
@@ -644,7 +658,14 @@
|
||||
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>"; };
|
||||
4CD3ABB2178F71B50073F5C5 /* KPKVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKVersion.h; 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>"; };
|
||||
4CCEDE2F179F550D008402BE /* KPKTreeReading.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KPKTreeReading.h; sourceTree = "<group>"; };
|
||||
4CCEDE30179F5B6C008402BE /* KPKDataStreamer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKDataStreamer.h; sourceTree = "<group>"; };
|
||||
4CCEDE31179F5B6C008402BE /* KPKDataStreamer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKDataStreamer.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>"; };
|
||||
4CD3ABBD178F72610073F5C5 /* KPKEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKEntry.h; sourceTree = "<group>"; };
|
||||
@@ -664,6 +685,7 @@
|
||||
4CD884B615BD47080042BBF8 /* DocumentWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DocumentWindow.xib; sourceTree = "<group>"; };
|
||||
4CDB5C401794AA4F0017667E /* KPKTree+Serializing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKTree+Serializing.h"; sourceTree = "<group>"; };
|
||||
4CDB5C411794AA4F0017667E /* KPKTree+Serializing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKTree+Serializing.m"; sourceTree = "<group>"; };
|
||||
4CDE28D0179C8E010036C771 /* MPDatabaseSettingsDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPDatabaseSettingsDelegate.h; sourceTree = "<group>"; };
|
||||
4CDF01A116D1B76700D0AC08 /* MPEntryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEntryViewController.h; sourceTree = "<group>"; };
|
||||
4CDF01A216D1B76700D0AC08 /* MPEntryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEntryViewController.m; sourceTree = "<group>"; };
|
||||
4CE298E91795FC2A00DF7BDB /* MPEntryMenuDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEntryMenuDelegate.h; sourceTree = "<group>"; };
|
||||
@@ -700,6 +722,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>"; };
|
||||
@@ -738,6 +768,7 @@
|
||||
4C61EA0416D2FFE200AC519E /* OutlineView.xib */,
|
||||
4CF78061176E752E0032EE71 /* PasswordInputs */,
|
||||
4C3FFD9D16DAF60600DF9186 /* FilterBar.xib */,
|
||||
4C18816B179E06920045C5B7 /* TrashBar.xib */,
|
||||
4C76156F1764C0E20015A1A6 /* InspectorView.xib */,
|
||||
4CE39AC016ECE359000FE29D /* IconSelection.xib */,
|
||||
4C2C8B331787500E009649F3 /* UnprotectedWarningView.xib */,
|
||||
@@ -755,6 +786,8 @@
|
||||
4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */,
|
||||
4C5FE9AC17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.h */,
|
||||
4C5FE9AD17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m */,
|
||||
4CCEDE28179F203B008402BE /* MPOutlineView.h */,
|
||||
4CCEDE29179F203B008402BE /* MPOutlineView.m */,
|
||||
);
|
||||
name = Views;
|
||||
sourceTree = "<group>";
|
||||
@@ -779,6 +812,18 @@
|
||||
name = ValueTransformer;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C1842D6179C716100E2F5BC /* Format */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C4436751792BE810099E220 /* KPKFormat.h */,
|
||||
4C4436761792BE810099E220 /* KPKFormat.m */,
|
||||
4CD3ABB2178F71B50073F5C5 /* KPKVersion.h */,
|
||||
4C1842C7179BF6A100E2F5BC /* KPKLegacyHeader.h */,
|
||||
4C1842B9179B3A1700E2F5BC /* KPKHeaderFields.h */,
|
||||
);
|
||||
name = Format;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C18F9AC178E123200890BCE /* Databases */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -1012,6 +1057,8 @@
|
||||
4CA23359176DBFE100F0B6AC /* MPLockDaemon.m */,
|
||||
4C16BA6017879A3C002B42BD /* MPPasswordStringFormatter.h */,
|
||||
4C16BA6117879A3C002B42BD /* MPPasswordStringFormatter.m */,
|
||||
4CCEDE2C179F2122008402BE /* MPNotifications.h */,
|
||||
4CCEDE2D179F213B008402BE /* MPNotifications.m */,
|
||||
);
|
||||
name = Helper;
|
||||
sourceTree = "<group>";
|
||||
@@ -1060,14 +1107,6 @@
|
||||
name = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C3F28591791F05400703281 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C3F28571791F04F00703281 /* LocalizableErrors.strings */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C45FB1E178E09ED0010007D /* MacPassTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -1082,8 +1121,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>";
|
||||
@@ -1342,6 +1383,7 @@
|
||||
children = (
|
||||
4CF6C715176F5183007A811D /* MPServerRequestHandler.h */,
|
||||
4CA0B30D15BCB6FD00654E32 /* MPSettingsTab.h */,
|
||||
4CDE28D0179C8E010036C771 /* MPDatabaseSettingsDelegate.h */,
|
||||
);
|
||||
name = Protocolls;
|
||||
sourceTree = "<group>";
|
||||
@@ -1434,7 +1476,7 @@
|
||||
4CD3ABAD178F71B50073F5C5 /* KeePassKit */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C3F28591791F05400703281 /* Resources */,
|
||||
4C1842D6179C716100E2F5BC /* Format */,
|
||||
4CD3ABAF178F71B50073F5C5 /* Categories */,
|
||||
4CD3ABB1178F71B50073F5C5 /* Core */,
|
||||
4CD3ABB5178F71B50073F5C5 /* IO */,
|
||||
@@ -1464,9 +1506,6 @@
|
||||
children = (
|
||||
4C70D0FE179092F200652EE9 /* KPKPassword.h */,
|
||||
4C70D0FF179092F200652EE9 /* KPKPassword.m */,
|
||||
4C4436751792BE810099E220 /* KPKFormat.h */,
|
||||
4C4436761792BE810099E220 /* KPKFormat.m */,
|
||||
4CD3ABB2178F71B50073F5C5 /* KPKVersion.h */,
|
||||
4CD3ABB3178F71B50073F5C5 /* KPKTree.h */,
|
||||
4CD3ABB4178F71B50073F5C5 /* KPKTree.m */,
|
||||
4CD3ABBD178F72610073F5C5 /* KPKEntry.h */,
|
||||
@@ -1485,7 +1524,12 @@
|
||||
4C305F35179A0BD70082334F /* KPKIcon.m */,
|
||||
4C1842A9179B027700E2F5BC /* KPKDeletedNode.h */,
|
||||
4C1842AA179B027800E2F5BC /* KPKDeletedNode.m */,
|
||||
4C1842C7179BF6A100E2F5BC /* KPKKdbHeader.h */,
|
||||
4CFC8739179DEDF3000DFC03 /* KPKMetaData.h */,
|
||||
4CFC873A179DEDF3000DFC03 /* KPKMetaData.m */,
|
||||
4CFC873C179DF200000DFC03 /* KPKTimeInfo.h */,
|
||||
4CFC873D179DF200000DFC03 /* KPKTimeInfo.m */,
|
||||
4CFC873F179DF295000DFC03 /* KPKTimerecording.h */,
|
||||
4CFC8740179DF7A3000DFC03 /* KPKUndoing.h */,
|
||||
);
|
||||
path = Core;
|
||||
sourceTree = "<group>";
|
||||
@@ -1493,23 +1537,31 @@
|
||||
4CD3ABB5178F71B50073F5C5 /* IO */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C70D0FB1790924700652EE9 /* KPKTreeLoader.h */,
|
||||
4C70D0FC1790924700652EE9 /* KPKTreeLoader.m */,
|
||||
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 */,
|
||||
4C1842B9179B3A1700E2F5BC /* KPKHeaderFields.h */,
|
||||
4C1842BA179B434C00E2F5BC /* KPKXmlCipherInformation.h */,
|
||||
4C1842BB179B434C00E2F5BC /* KPKXmlCipherInformation.m */,
|
||||
4C1842C4179BF51F00E2F5BC /* KPKBinaryCipherInformation.h */,
|
||||
4C1842C5179BF52000E2F5BC /* KPKBinaryCipherInformation.m */,
|
||||
4C1842B0179B28C400E2F5BC /* KPKLegacyTreeReader.h */,
|
||||
4C1842B1179B28C400E2F5BC /* KPKLegacyTreeReader.m */,
|
||||
4C1842B3179B28D400E2F5BC /* KPKLegacyTreeWriter.h */,
|
||||
4C1842B4179B28D400E2F5BC /* KPKLegacyTreeWriter.m */,
|
||||
4C1842C4179BF51F00E2F5BC /* KPKLegacyHeaderReader.h */,
|
||||
4C1842C5179BF52000E2F5BC /* KPKLegacyHeaderReader.m */,
|
||||
4C1842CE179C64DC00E2F5BC /* KPKLegacyTreeCryptor.h */,
|
||||
4C1842CF179C64DD00E2F5BC /* KPKLegacyTreeCryptor.m */,
|
||||
4C1842D4179C6DE400E2F5BC /* KPKHeaderReading.h */,
|
||||
4C1842D5179C6F1800E2F5BC /* KPKHeaderWriting.h */,
|
||||
4CCEDE2F179F550D008402BE /* KPKTreeReading.h */,
|
||||
4CCEDE30179F5B6C008402BE /* KPKDataStreamer.h */,
|
||||
4CCEDE31179F5B6C008402BE /* KPKDataStreamer.m */,
|
||||
);
|
||||
path = IO;
|
||||
sourceTree = "<group>";
|
||||
@@ -1707,7 +1759,7 @@
|
||||
4C52A88F1788628B00868229 /* 13_KeysTemplate.pdf in Resources */,
|
||||
4C52A8901788628B00868229 /* 18_DisplayTemplate.pdf in Resources */,
|
||||
4C52A892178863B000868229 /* 68_PhoneTemplate.pdf in Resources */,
|
||||
4C3F28581791F04F00703281 /* LocalizableErrors.strings in Resources */,
|
||||
4C18816C179E06920045C5B7 /* TrashBar.xib in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -1738,7 +1790,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;
|
||||
};
|
||||
@@ -1898,7 +1951,6 @@
|
||||
4CD3ABC2178F72720073F5C5 /* KPKGroup.m in Sources */,
|
||||
4C591B57178F897A0080B16B /* KPKAttachment.m in Sources */,
|
||||
4C39B3F5178FEFAE0027DC7C /* KPKNode.m in Sources */,
|
||||
4C70D0FD1790924700652EE9 /* KPKTreeLoader.m in Sources */,
|
||||
4C70D100179092F200652EE9 /* KPKPassword.m in Sources */,
|
||||
4C8A173D1790AA41008B5C17 /* NSData+Keyfile.m in Sources */,
|
||||
4C3F28541791EDFD00703281 /* KPKErrors.m in Sources */,
|
||||
@@ -1920,12 +1972,20 @@
|
||||
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 */,
|
||||
4C1842BC179B434C00E2F5BC /* KPKXmlCipherInformation.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 */,
|
||||
4C1842C6179BF52100E2F5BC /* KPKBinaryCipherInformation.m in Sources */,
|
||||
4C1842C6179BF52100E2F5BC /* KPKLegacyHeaderReader.m in Sources */,
|
||||
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 */,
|
||||
4CCEDE32179F5B6C008402BE /* KPKDataStreamer.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
@@ -471,7 +471,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>
|
||||
@@ -493,7 +493,7 @@
|
||||
<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 +562,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 +605,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 +622,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 +639,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 +673,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"/>
|
||||
@@ -1575,7 +1575,7 @@
|
||||
<reference key="parent" ref="276578969"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">834</int>
|
||||
<int key="objectID">843</int>
|
||||
<reference key="object" ref="244975730"/>
|
||||
<reference key="parent" ref="163272962"/>
|
||||
</object>
|
||||
@@ -1735,13 +1735,13 @@
|
||||
<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>
|
||||
<string key="843.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>
|
||||
<int key="maxID">843</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
@@ -1759,6 +1759,7 @@
|
||||
<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>
|
||||
@@ -1768,6 +1769,7 @@
|
||||
<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">
|
||||
@@ -1778,6 +1780,10 @@
|
||||
<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>
|
||||
@@ -1814,6 +1820,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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
17
MacPass/MPDatabaseSettingsDelegate.h
Normal file
17
MacPass/MPDatabaseSettingsDelegate.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// MPDatabaseSettingsDelegate.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 21.07.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@protocol MPDatabaseSettingsDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
- (void)didCancelDatabaseSettings;
|
||||
- (void)didSaveDatabaseSettings;
|
||||
|
||||
@end
|
||||
@@ -7,6 +7,7 @@
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "MPDatabaseSettingsDelegate.h"
|
||||
|
||||
typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
||||
MPDatabaseSettingsTabGeneral,
|
||||
@@ -22,6 +23,8 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
||||
|
||||
@interface MPDatabaseSettingsWindowController : NSWindowController <NSTextFieldDelegate, NSTabViewDelegate>
|
||||
|
||||
@property (nonatomic,weak) id<MPDatabaseSettingsDelegate> delegate;
|
||||
|
||||
@property (weak) IBOutlet NSTabView *sectionTabView;
|
||||
@property (weak) IBOutlet NSButton *saveButton;
|
||||
@property (weak) IBOutlet NSButton *cancelButton;
|
||||
@@ -65,4 +68,7 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
||||
|
||||
- (void)update;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@@ -57,14 +57,24 @@
|
||||
NSAssert(_document != nil, @"Document needs to be present");
|
||||
|
||||
[self.saveButton bind:NSEnabledBinding toObject:self withKeyPath:@"hasValidPasswordOrKey" options:nil];
|
||||
[self.cancelButton bind:NSEnabledBinding toObject:self withKeyPath:@"hasValidPasswordOrKey" options:nil];
|
||||
|
||||
|
||||
[self.sectionTabView setDelegate:self];
|
||||
|
||||
|
||||
[self update];
|
||||
}
|
||||
|
||||
- (void)setDelegate:(id<MPDatabaseSettingsDelegate>)delegate {
|
||||
if(_delegate != delegate) {
|
||||
if([delegate conformsToProtocol:@protocol(MPDatabaseSettingsDelegate)]) {
|
||||
_delegate = delegate;
|
||||
}
|
||||
else{
|
||||
NSAssert(NO, @"Delegate needs to conform to MPDatabaseSettingsDelegate protocoll");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)save:(id)sender {
|
||||
|
||||
/* Protection */
|
||||
@@ -110,14 +120,26 @@
|
||||
[defaults setBool:protectUsername forKey:kMPSettingsKeyLegacyHideUsername];
|
||||
[defaults synchronize];
|
||||
}
|
||||
|
||||
/* Close to finish */
|
||||
[self close:nil];
|
||||
[self closeDidSave:YES];
|
||||
}
|
||||
|
||||
- (IBAction)close:(id)sender {
|
||||
- (IBAction)cancel:(id)sender {
|
||||
[self closeDidSave:NO];
|
||||
}
|
||||
- (void)closeDidSave:(BOOL)didSave {
|
||||
/* Remove the window first */
|
||||
[NSApp endSheet:[self window]];
|
||||
[[self window] orderOut:nil];
|
||||
|
||||
/* Then notify the delegate */
|
||||
if(self.delegate) {
|
||||
if(didSave && [self.delegate respondsToSelector:@selector(didSaveDatabaseSettings)]) {
|
||||
[self.delegate didSaveDatabaseSettings];
|
||||
}
|
||||
else if(!didSave && [self.delegate respondsToSelector:@selector(didCancelDatabaseSettings)]) {
|
||||
[self.delegate didCancelDatabaseSettings];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -296,6 +318,32 @@
|
||||
|
||||
}
|
||||
|
||||
- (void)_updateFirstResponder {
|
||||
NSTabViewItem *selected = [self.sectionTabView selectedTabViewItem];
|
||||
MPDatabaseSettingsTab tab = [[self.sectionTabView tabViewItems] indexOfObject:selected];
|
||||
|
||||
switch(tab) {
|
||||
case MPDatabaseSettingsTabAdvanced:
|
||||
[[self window] makeFirstResponder:self.databaseNameTextField];
|
||||
break;
|
||||
|
||||
case MPDatabaseSettingsTabDisplay:
|
||||
[[self window] makeFirstResponder:self.protectTitleCheckButton];
|
||||
break;
|
||||
|
||||
case MPDatabaseSettingsTabGeneral:
|
||||
[[self window] makeFirstResponder:self.databaseNameTextField];
|
||||
break;
|
||||
|
||||
case MPDatabaseSettingsTabPassword:
|
||||
[[self window] makeFirstResponder:self.passwordTextField];
|
||||
break;
|
||||
|
||||
case MPDatabaseSettingsTemplatesTab:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)_updateTrashFolders:(Kdb4Tree *)tree {
|
||||
NSMenu *menu = [self _buildTrashTreeMenu:tree];
|
||||
[self.selectRecycleBinGroupPopUpButton setMenu:menu];
|
||||
|
||||
@@ -80,17 +80,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)saveAttachmentFromEntry:(KdbEntry *)anEntry toLocation:(NSURL *)location {
|
||||
if([anEntry isKindOfClass:[Kdb3Entry class]]) {
|
||||
Kdb3Entry *entry = (Kdb3Entry *)anEntry;
|
||||
NSError *error = nil;
|
||||
if(! [entry.binary writeToURL:location options:NSDataWritingWithoutOverwriting error:&error] ) {
|
||||
[NSApp presentError:error];
|
||||
}
|
||||
}
|
||||
return; //
|
||||
}
|
||||
|
||||
- (void)removeAttachment:(BinaryRef *)reference fromEntry:(KdbEntry *)anEntry {
|
||||
if(self.version != MPDatabaseVersion4) {
|
||||
return; // Wrong Database version;
|
||||
@@ -125,22 +114,35 @@
|
||||
return [filteredBinary lastObject];
|
||||
}
|
||||
|
||||
- (void)saveAttachment:(BinaryRef *)reference toLocation:(NSURL *)location {
|
||||
Binary *binary = [self findBinary:reference];
|
||||
NSData *rawData = nil;
|
||||
if(binary) {
|
||||
if(binary.compressed) {
|
||||
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSUTF8StringEncoding]];
|
||||
rawData = [rawData gzipInflate];
|
||||
}
|
||||
else {
|
||||
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSUTF8StringEncoding]];
|
||||
}
|
||||
- (void)saveAttachmentForItem:(id)item toLocation:(NSURL *)location {
|
||||
if([item isKindOfClass:[Kdb3Entry class]]) {
|
||||
Kdb3Entry *entry = (Kdb3Entry *)item;
|
||||
NSError *error = nil;
|
||||
if( ![rawData writeToURL:location options:0 error:&error] ) {
|
||||
if(! [entry.binary writeToURL:location options:NSDataWritingAtomic error:&error] ) {
|
||||
[NSApp presentError:error];
|
||||
}
|
||||
}
|
||||
else if([item isKindOfClass:[BinaryRef class]]) {
|
||||
Binary *binary = [self findBinary:item];
|
||||
NSData *rawData = nil;
|
||||
if(binary) {
|
||||
if(binary.compressed) {
|
||||
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSUTF8StringEncoding]];
|
||||
rawData = [rawData gzipInflate];
|
||||
}
|
||||
else {
|
||||
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSUTF8StringEncoding]];
|
||||
}
|
||||
NSError *error = nil;
|
||||
if( ![rawData writeToURL:location options:NSDataWritingAtomic error:&error] ) {
|
||||
[NSApp presentError:error];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
NSAssert(NO, @"Item is neither BinaryRef nor Kdb3Entry");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSUInteger)nextBinaryId {
|
||||
|
||||
@@ -11,14 +11,20 @@
|
||||
|
||||
|
||||
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;
|
||||
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;
|
||||
@@ -50,6 +56,15 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
|
||||
@property (assign, readonly) MPDatabaseVersion version;
|
||||
@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
|
||||
@@ -91,15 +106,17 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
|
||||
- (void)deleteGroup:(KdbGroup *)group;
|
||||
- (void)deleteEntry:(KdbEntry *)entry;
|
||||
|
||||
- (void)emptyTrash:(id)sender;
|
||||
- (IBAction)emptyTrash:(id)sender;
|
||||
|
||||
@end
|
||||
|
||||
@interface MPDocument (Attachments)
|
||||
|
||||
- (void)addAttachment:(NSURL *)location toEntry:(KdbEntry *)anEntry;
|
||||
- (void)saveAttachmentFromEntry:(KdbEntry *)anEntry toLocation:(NSURL *)location;
|
||||
- (void)saveAttachment:(BinaryRef *)reference toLocation:(NSURL *)location;
|
||||
/**
|
||||
item can be either a BinaryRef or an Kdb3Entry.
|
||||
*/
|
||||
- (void)saveAttachmentForItem:(id)item toLocation:(NSURL *)location;
|
||||
- (void)removeAttachment:(BinaryRef *)reference fromEntry:(KdbEntry *)anEntry;
|
||||
- (void)removeAttachmentFromEntry:(KdbEntry *)anEntry;
|
||||
- (NSUInteger)nextBinaryId;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#import "MPIconHelper.h"
|
||||
#import "MPActionHelper.h"
|
||||
#import "MPSettingsHelper.h"
|
||||
#import "MPNotifications.h"
|
||||
|
||||
#import "KdbLib.h"
|
||||
#import "Kdb3Node.h"
|
||||
@@ -37,14 +38,14 @@
|
||||
|
||||
#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 MPDocumentDidAddGroupNotification = @"com.hicknhack.macpass.MPDocumentDidAddGroupNotification";
|
||||
NSString *const MPDocumentDidAddEntryNotification = @"com.hicknhack.macpass.MPDocumentDidAddEntryNotification";
|
||||
NSString *const MPDocumentDidRevertNotifiation = @"com.hicknhack.macpass.MPDocumentDidRevertNotifiation";
|
||||
NSString *const MPDocumentRequestPasswordSaveNotification = @"com.hicknhack.macpass.MPDocumentRequestPasswordSaveNotification";
|
||||
|
||||
NSString *const MPDocumentEntryKey = @"MPDocumentEntryKey";
|
||||
NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
|
||||
|
||||
NSString *const MPDocumentEntryKey = @"MPDocumentEntryKey";
|
||||
NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
|
||||
|
||||
|
||||
@interface MPDocument () {
|
||||
@@ -238,17 +239,42 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)saveDocument:(id)sender {
|
||||
if(self.hasPasswordOrKey) {
|
||||
[super saveDocument:sender];
|
||||
}
|
||||
else {
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPDocumentRequestPasswordSaveNotification object:self userInfo:nil];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)prepareSavePanel:(NSSavePanel *)savePanel {
|
||||
if(self.hasPasswordOrKey) {
|
||||
[savePanel setAccessoryView:nil];
|
||||
return YES;
|
||||
}
|
||||
if(!self.warningView) {
|
||||
[[NSBundle mainBundle] loadNibNamed:@"UnprotectedWarningView" owner:self topLevelObjects:nil];
|
||||
[self.warningViewImage setImage:[NSImage imageNamed:NSImageNameCaution]];
|
||||
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];
|
||||
}
|
||||
[savePanel setAccessoryView:self.warningView];
|
||||
return YES;
|
||||
}
|
||||
|
||||
#pragma mark Data Accesors
|
||||
@@ -418,6 +444,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
|
||||
else {
|
||||
[entry deleteUndoable];
|
||||
}
|
||||
self.selectedEntry = nil;
|
||||
}
|
||||
|
||||
- (void)deleteGroup:(KdbGroup *)group {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "MPDatabaseSettingsDelegate.h"
|
||||
|
||||
@class MPViewController;
|
||||
@class MPEntryViewController;
|
||||
@@ -17,21 +18,13 @@
|
||||
@class KdbGroup;
|
||||
@class KdbEntry;
|
||||
|
||||
APPKIT_EXTERN NSString *const MPCurrentItemChangedNotification;
|
||||
|
||||
@interface MPDocumentWindowController : NSWindowController <NSWindowDelegate>
|
||||
@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
|
||||
|
||||
@@ -19,19 +19,15 @@
|
||||
#import "MPConstants.h"
|
||||
#import "MPSettingsHelper.h"
|
||||
|
||||
NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCurrentItemChangedNotification";
|
||||
|
||||
@interface MPDocumentWindowController () {
|
||||
@private
|
||||
id _firstResponder;
|
||||
BOOL _saveAfterPasswordEdit; // Flag to indicat that the document needs to be saved after password edit did finish
|
||||
}
|
||||
|
||||
@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;
|
||||
@@ -53,10 +49,7 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
|
||||
_outlineViewController = [[MPOutlineViewController alloc] init];
|
||||
_entryViewController = [[MPEntryViewController alloc] init];
|
||||
_inspectorViewController = [[MPInspectorViewController alloc] init];
|
||||
_currentItem = nil;
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateCurrentItem:) name:MPOutlineViewDidChangeGroupSelection object:_outlineViewController];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateCurrentItem:) name:MPDidChangeSelectedEntryNotification object:_entryViewController];
|
||||
_saveAfterPasswordEdit = NO;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -69,6 +62,7 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
|
||||
- (void)windowDidLoad {
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didRevertDocument:) name:MPDocumentDidRevertNotifiation object:[self document]];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_setPasswordAndSave) name:MPDocumentRequestPasswordSaveNotification object:[self document]];
|
||||
|
||||
[_entryViewController setupNotifications:self];
|
||||
[_inspectorViewController setupNotifications:self];
|
||||
@@ -97,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];
|
||||
@@ -142,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];
|
||||
@@ -193,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 );
|
||||
@@ -209,19 +182,19 @@ 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:
|
||||
return document.hasPasswordOrKey;
|
||||
|
||||
|
||||
case MPActionToggleInspector:
|
||||
return (nil != [_splitView superview]);
|
||||
|
||||
|
||||
default:
|
||||
return YES;
|
||||
}
|
||||
@@ -238,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:
|
||||
@@ -266,11 +239,11 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
|
||||
}
|
||||
|
||||
- (void)editPassword:(id)sender {
|
||||
[self _showDatabaseSetting:MPDatabaseSettingsTabPassword];
|
||||
[self _showDatabaseSetting:MPDatabaseSettingsTabPassword saveDocument:NO];
|
||||
}
|
||||
|
||||
- (void)showDatabaseSettings:(id)sender {
|
||||
[self _showDatabaseSetting:MPDatabaseSettingsTabGeneral];
|
||||
[self _showDatabaseSetting:MPDatabaseSettingsTabGeneral saveDocument:NO];
|
||||
}
|
||||
|
||||
- (IBAction)lock:(id)sender {
|
||||
@@ -378,35 +351,38 @@ 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 ]];
|
||||
}
|
||||
#pragma mark MPDatabaseSettingsDelegate
|
||||
- (void)didCancelDatabaseSettings {
|
||||
_saveAfterPasswordEdit = NO; // Just Reset the flag
|
||||
}
|
||||
|
||||
- (void)windowDidBecomeKey:(NSNotification *)notification {
|
||||
MPDocument *document = [self document];
|
||||
if(!document.hasPasswordOrKey && document.decrypted) {
|
||||
[self performSelector:@selector(editPassword:) withObject:nil afterDelay:0.5];
|
||||
- (void)didSaveDatabaseSettings {
|
||||
if (_saveAfterPasswordEdit) {
|
||||
_saveAfterPasswordEdit = NO;
|
||||
}
|
||||
[[self document] saveDocument:nil];
|
||||
}
|
||||
|
||||
#pragma mark Helper
|
||||
|
||||
- (void)_showDatabaseSetting:(MPDatabaseSettingsTab)tab {
|
||||
- (void)_setPasswordAndSave {
|
||||
_saveAfterPasswordEdit = YES;
|
||||
[self editPassword:nil];
|
||||
}
|
||||
|
||||
- (void)_showDatabaseSetting:(MPDatabaseSettingsTab)tab saveDocument:(BOOL)save{
|
||||
if(!self.documentSettingsWindowController) {
|
||||
_documentSettingsWindowController = [[MPDatabaseSettingsWindowController alloc] initWithDocument:[self document]];
|
||||
[_documentSettingsWindowController setDelegate:self];
|
||||
}
|
||||
[self.documentSettingsWindowController update];
|
||||
[self.documentSettingsWindowController showSettingsTab:tab];
|
||||
[[NSApplication sharedApplication] beginSheet:[self.documentSettingsWindowController window] modalForWindow:[self window] modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
|
||||
[[NSApplication sharedApplication] beginSheet:[self.documentSettingsWindowController window]
|
||||
modalForWindow:[self window]
|
||||
modalDelegate:nil
|
||||
didEndSelector:NULL
|
||||
contextInfo:NULL];
|
||||
|
||||
}
|
||||
|
||||
- (NSSearchField *)locateToolbarSearchField {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,45 +234,52 @@ 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;
|
||||
}
|
||||
/*
|
||||
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 {
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#import "MPSelectedAttachmentTableCellView.h"
|
||||
#import "MPAttachmentTableViewDelegate.h"
|
||||
#import "MPCustomFieldTableViewDelegate.h"
|
||||
#import "MPNotifications.h"
|
||||
|
||||
#import "NSDate+Humanized.h"
|
||||
|
||||
@@ -35,12 +36,12 @@
|
||||
#import "NSMutableData+Base64.h"
|
||||
|
||||
#import "HNHGradientView.h"
|
||||
#import "HNHScrollView.h"
|
||||
#import "HNHTableRowView.h"
|
||||
#import "HNHRoundedSecureTextField.h"
|
||||
|
||||
enum {
|
||||
MPGeneralTab,
|
||||
MPNotesTab,
|
||||
MPAttachmentsTab,
|
||||
MPCustomFieldsTab
|
||||
};
|
||||
@@ -66,6 +67,7 @@ enum {
|
||||
|
||||
@property (nonatomic, assign) NSUInteger activeTab;
|
||||
@property (weak) IBOutlet NSTabView *tabView;
|
||||
@property (strong) IBOutlet NSView *generalView;
|
||||
|
||||
- (IBAction)addCustomField:(id)sender;
|
||||
- (IBAction)removeCustomField:(id)sender;
|
||||
@@ -105,6 +107,38 @@ enum {
|
||||
}
|
||||
|
||||
- (void)didLoadView {
|
||||
|
||||
HNHScrollView *scrollView = [[HNHScrollView alloc] init];
|
||||
scrollView.actAsFlipped = NO;
|
||||
[scrollView setHasVerticalScroller:YES];
|
||||
[scrollView setDrawsBackground:NO];
|
||||
[scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||
NSView *clipView = [scrollView contentView];
|
||||
|
||||
NSView *tabView = [[self.tabView tabViewItemAtIndex:MPGeneralTab] view];
|
||||
/*
|
||||
DO NEVER SET setTranslatesAutoresizingMaskIntoConstraints on NSTabViewItem's view
|
||||
[tabView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||
*/
|
||||
[scrollView setDocumentView:self.generalView];
|
||||
[tabView addSubview:scrollView];
|
||||
|
||||
NSDictionary *views = NSDictionaryOfVariableBindings(_generalView, scrollView);
|
||||
[[scrollView superview] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|"
|
||||
options:0
|
||||
metrics:nil
|
||||
views:views ]];
|
||||
[[scrollView superview] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-3-[scrollView]-50-|"
|
||||
options:0
|
||||
metrics:nil
|
||||
views:views]];
|
||||
[clipView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_generalView]|"
|
||||
options:0
|
||||
metrics:nil
|
||||
views:views]];
|
||||
[[self view] layoutSubtreeIfNeeded];
|
||||
|
||||
|
||||
//[self.scrollContentView setAutoresizingMask:NSViewWidthSizable];
|
||||
[[self.itemImageView cell] setBackgroundStyle:NSBackgroundStyleRaised];
|
||||
[self.itemImageView setTarget:self];
|
||||
@@ -129,11 +163,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 {
|
||||
@@ -290,7 +324,6 @@ enum {
|
||||
[self.URLTextField setEnabled:enabled];
|
||||
[self.generatePasswordButton setEnabled:enabled];
|
||||
|
||||
[self.infoTabControl setEnabled:enabled forSegment:MPNotesTab];
|
||||
[self.infoTabControl setEnabled:enabled forSegment:MPAttachmentsTab];
|
||||
|
||||
enabled &= [self.selectedEntry isKindOfClass:[Kdb4Entry class]];
|
||||
@@ -350,18 +383,26 @@ enum {
|
||||
}
|
||||
|
||||
- (IBAction)saveAttachment:(id)sender {
|
||||
Kdb4Entry *entry = (Kdb4Entry *)self.selectedEntry;
|
||||
BinaryRef *reference = entry.binaries[[sender tag]];
|
||||
|
||||
BOOL isVersion4 = [self.selectedEntry isKindOfClass:[Kdb4Entry class]];
|
||||
id item = self.selectedEntry;
|
||||
NSString *fileName = nil;
|
||||
if(isVersion4) {
|
||||
Kdb4Entry *entry= (Kdb4Entry *)self.selectedEntry;
|
||||
item = entry.binaries[[sender tag]];
|
||||
fileName = ((BinaryRef *)item).key;
|
||||
}
|
||||
else {
|
||||
fileName = ((Kdb3Entry *)item).binaryDesc;
|
||||
}
|
||||
|
||||
NSSavePanel *savePanel = [NSSavePanel savePanel];
|
||||
[savePanel setCanCreateDirectories:YES];
|
||||
[savePanel setNameFieldStringValue:reference.key];
|
||||
[savePanel setNameFieldStringValue:fileName];
|
||||
|
||||
[savePanel beginSheetModalForWindow:[[self windowController] window] completionHandler:^(NSInteger result) {
|
||||
if(result == NSFileHandlingPanelOKButton) {
|
||||
MPDocument *document = [[self windowController] document];
|
||||
[document saveAttachment:reference toLocation:[savePanel URL]];
|
||||
[document saveAttachmentForItem:item toLocation:[savePanel URL]];
|
||||
}
|
||||
}];
|
||||
}
|
||||
@@ -401,28 +442,37 @@ enum {
|
||||
|
||||
- (IBAction)finishEdit:(id)sender {
|
||||
NSUndoManager *undoManger = [[[self windowController] document] undoManager];
|
||||
[undoManger setActionName:@"Edit"];
|
||||
if([undoManger canUndo]) {
|
||||
[undoManger setActionName:@"Edit"];
|
||||
}
|
||||
[undoManger endUndoGrouping];
|
||||
[self.titleTextField setEditable:NO];
|
||||
[self.titleTextField setSelectable:YES];
|
||||
[self.usernameTextField setEditable:NO];
|
||||
[self.usernameTextField setSelectable:YES];
|
||||
|
||||
}
|
||||
|
||||
#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
17
MacPass/MPNotifications.h
Normal 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
12
MacPass/MPNotifications.m
Normal 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
13
MacPass/MPOutlineView.h
Normal 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
21
MacPass/MPOutlineView.m
Normal 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
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -44,11 +44,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.3.6</string>
|
||||
<string>0.3.8</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2517</string>
|
||||
<string>2524</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1070</int>
|
||||
<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>
|
||||
@@ -381,8 +381,8 @@
|
||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="608946496">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
<int key="NSCellFlags2">272630784</int>
|
||||
<int key="NSCellFlags">-2075131840</int>
|
||||
<int key="NSCellFlags2">-1874852864</int>
|
||||
<string key="NSContents"/>
|
||||
<reference key="NSSupport" ref="510117885"/>
|
||||
<string key="NSCellIdentifier">_NS:9</string>
|
||||
@@ -1189,6 +1189,7 @@
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">183</int>
|
||||
<reference key="object" ref="608946496"/>
|
||||
<array class="NSMutableArray" key="children"/>
|
||||
<reference key="parent" ref="240019321"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
@@ -1987,7 +1988,7 @@
|
||||
<nil key="activeLocalization"/>
|
||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">623</int>
|
||||
<int key="maxID">626</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
@@ -2003,11 +2004,16 @@
|
||||
<string key="className">MPPasswordCreatorViewController</string>
|
||||
<string key="superclassName">MPViewController</string>
|
||||
<dictionary class="NSMutableDictionary" key="actions">
|
||||
<string key="_cancel:">id</string>
|
||||
<string key="_generatePassword:">id</string>
|
||||
<string key="_toggleCharacters:">id</string>
|
||||
<string key="_usePassword:">id</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="actionInfosByName">
|
||||
<object class="IBActionInfo" key="_cancel:">
|
||||
<string key="name">_cancel:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
</object>
|
||||
<object class="IBActionInfo" key="_generatePassword:">
|
||||
<string key="name">_generatePassword:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
@@ -2022,7 +2028,6 @@
|
||||
</object>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="outlets">
|
||||
<string key="_cancel">NSButton</string>
|
||||
<string key="addPasswordToPasteboardButton">NSButton</string>
|
||||
<string key="customButton">NSButton</string>
|
||||
<string key="customCharactersTextField">NSTextField</string>
|
||||
@@ -2035,10 +2040,6 @@
|
||||
<string key="upperCaseButton">NSButton</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<object class="IBToOneOutletInfo" key="_cancel">
|
||||
<string key="name">_cancel</string>
|
||||
<string key="candidateClassName">NSButton</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="addPasswordToPasteboardButton">
|
||||
<string key="name">addPasswordToPasteboardButton</string>
|
||||
<string key="candidateClassName">NSButton</string>
|
||||
@@ -2105,9 +2106,9 @@
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
||||
<integer value="1070" key="NS.object.0"/>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
||||
<real value="4600" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
|
||||
377
MacPass/TrashBar.xib
Normal file
377
MacPass/TrashBar.xib
Normal 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>
|
||||
@@ -58,9 +58,13 @@ Copyright \'a92013, {\field{\*\fldinst{HYPERLINK "http://stackoverflow.com/users
|
||||
Basierend auf dem Code im CocoaDev Wiki\
|
||||
\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
|
||||
{\field{\*\fldinst{HYPERLINK "https://github.com/karelia/SecurityInterface"}}{\fldrslt \cf3 KSPasswordField}}\kerning1\expnd0\expndtw3
|
||||
{\field{\*\fldinst{HYPERLINK "https://github.com/karelia/SecurityInterface"}}{\fldrslt \cf3 KSPasswordField}}\cf3 \kerning1\expnd0\expndtw3
|
||||
\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
|
||||
\cf3 \kerning1\expnd0\expndtw0 Quelltext wird in HNHRoundedSecureTextField verwendet\kerning1\expnd0\expndtw3
|
||||
\cf3 \kerning1\expnd0\expndtw0 Quelltext wird in HNHRoundedSecureTextField verwendet\cf3 \kerning1\expnd0\expndtw3
|
||||
\
|
||||
\kerning1\expnd0\expndtw0 Copyright \'a92012 Mike Abdullah, Karelia Software. Alle Rechte vorbehalten.}
|
||||
\cf3 \kerning1\expnd0\expndtw0 Copyright \'a92012 Mike Abdullah, Karelia Software. Alle Rechte vorbehalten.\
|
||||
\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
|
||||
{\field{\*\fldinst{HYPERLINK "https://github.com/AlanQuatermain/aqtoolkit"}}{\fldrslt \cf3 NSData+CommonCrypto}}\
|
||||
Copyright \'a92008-2009 Jim Dovey, Alle Rechte vorbehalten.}
|
||||
Binary file not shown.
@@ -11,9 +11,8 @@
|
||||
|
||||
\b \
|
||||
License:\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
|
||||
|
||||
\b0 \cf0 MacPass KeePass compatible client for OS X\
|
||||
\b0 MacPass KeePass compatible client for OS X\
|
||||
Copyright (c) 2012-2013 Michael Starke, HicknHack Software GmbH\
|
||||
\
|
||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by\
|
||||
@@ -64,4 +63,8 @@ Extracted from code on the CocoaDev Wiki\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
|
||||
{\field{\*\fldinst{HYPERLINK "https://github.com/karelia/SecurityInterface"}}{\fldrslt \cf3 KSPasswordField}}\
|
||||
Code reused in HNHRoundedSecureTextField\
|
||||
Copyright \'a92012 Mike Abdullah, Karelia Software. All rights reserved.}
|
||||
Copyright \'a92012 Mike Abdullah, Karelia Software. All rights reserved.\
|
||||
\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
|
||||
{\field{\*\fldinst{HYPERLINK "https://github.com/AlanQuatermain/aqtoolkit"}}{\fldrslt \cf3 NSData+CommonCrypto}}\
|
||||
Copyright \'a92008-2009 Jim Dovey, All rights reserved.}
|
||||
Binary file not shown.
@@ -10,7 +10,7 @@
|
||||
|
||||
@class KPKPassword;
|
||||
|
||||
@interface KPKTreeLoadingTest : SenTestCase {
|
||||
@interface KPKLegacyLoadingTest : SenTestCase {
|
||||
@private
|
||||
NSData *_data;
|
||||
KPKPassword *_password;
|
||||
@@ -6,15 +6,15 @@
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "KPKTreeLoadingTest.h"
|
||||
#import "KPKTreeLoader.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];
|
||||
}
|
||||
@@ -25,9 +25,9 @@
|
||||
}
|
||||
|
||||
- (void)testLoading {
|
||||
KPKTreeLoader *loader = [[KPKTreeLoader alloc] initWithData:_data password:_password];
|
||||
KPKTree *tree = [loader loadTree:NULL];
|
||||
STAssertNil(tree, @"Loading should broken");
|
||||
KPKTreeCryptor *cryptor = [KPKTreeCryptor treeCryptorWithData:_data password:_password];
|
||||
KPKTree *tree = [cryptor decryptTree:NULL];
|
||||
STAssertNotNil(tree, @"Loading should result in a tree object");
|
||||
}
|
||||
|
||||
@end
|
||||
18
MacPassTests/KPKXmlLoadingTest.h
Normal file
18
MacPassTests/KPKXmlLoadingTest.h
Normal 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
|
||||
33
MacPassTests/KPKXmlLoadingTest.m
Normal file
33
MacPassTests/KPKXmlLoadingTest.m
Normal 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
|
||||
@@ -83,3 +83,5 @@ This Project is based upon the following work:
|
||||
[CocoaHTTPServer](https://github.com/robbiehanson/CocoaHTTPServer ) Copyright 2011, Deusty, LLC. All rights reserved.
|
||||
|
||||
[KSPasswordField](https://github.com/karelia/SecurityInterface) Copyright 2012 Mike Abdullah, Karelia Software. All rights reserved.
|
||||
|
||||
See submodules for additional Licenses
|
||||
|
||||
Reference in New Issue
Block a user