18 Commits

Author SHA1 Message Date
michael starke
1f94a626bb Create new on activate disabled. There's a annoying bug in there :( 2013-07-21 14:22:44 +02:00
michael starke
a6afe0bcf4 Fixed #29 Application now stores the last open database by itself. If window restoration in OS X is disabled, the app also reopens the last db. 2013-07-21 14:14:05 +02:00
michael starke
1fd89bfab6 Updated submodules 2013-07-21 04:29:22 +02:00
michael starke
db0640840f Updated Submodules 2013-07-21 01:01:23 +02:00
michael starke
fb735d9e41 Reduced PDF file sizes 2013-07-21 00:54:19 +02:00
michael starke
862cbe839e Updated Submodule 2013-07-20 20:00:16 +02:00
michael starke
cb5a71dfee Updated submodule 2013-07-20 19:46:31 +02:00
michael starke
30697648b9 Updated localization
Fixed an issue that automatically set the first group to be the trashcan
2013-07-20 17:04:13 +02:00
michael starke
e5e8d01dff Removed unused Code 2013-07-20 16:42:35 +02:00
michael starke
030dbd5be7 Fixed #46 Binaries get now deleted when entries are delete on trans cleaning
MenuEntries are validated and disabled to fix #58. Model still doesn't do any testing
2013-07-20 16:31:20 +02:00
michael starke
e306b2b3f2 Updated submodule 2013-07-20 12:26:53 +02:00
michael starke
0fe99cda97 Updated Submodules 2013-07-20 12:23:19 +02:00
michael starke
c207b2b24a Experiments with token filed in Inspector 2013-07-20 03:23:18 +02:00
michael starke
dc51c60c19 Attachments on Kdb1 Entries are now supported. Saving not implemented. Attach/detach works. 2013-07-19 23:30:45 +02:00
michael starke
86d983f776 Subbed Kdb3 Entry attachment handling. 2013-07-19 22:45:04 +02:00
michael starke
efa727eaba Settings now work with KDB1 Files and do not trap the Application in the modal dialog
Added user base settings to hide/show passwords at KDB1 field. The settings are stored but not considered ;)
2013-07-19 22:25:40 +02:00
michael starke
5e6d2bed3d Removed commented code 2013-07-19 18:42:18 +02:00
michael starke
5e6e31fb47 Fixed Issue with non-initalized password repeat filed on first load of the databaseSettings window 2013-07-19 18:26:42 +02:00
46 changed files with 2007 additions and 388 deletions

View File

@@ -13,6 +13,15 @@
4C055E74179620BF00BD2BAB /* NSString+CommandString.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C055E73179620BF00BD2BAB /* NSString+CommandString.m */; };
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C10412B178CDD44001B5239 /* NSDate+Humanized.m */; };
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 */; };
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 */; };
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 */; };
@@ -57,6 +66,9 @@
4C2E381F16D11FF900037A9D /* 05_LanguagesTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C2E381C16D11FF900037A9D /* 05_LanguagesTemplate.pdf */; };
4C2E382316D1421B00037A9D /* MPIconHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2E382216D1421B00037A9D /* MPIconHelper.m */; };
4C2E382616D1470200037A9D /* MPViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2E382516D1470200037A9D /* MPViewController.m */; };
4C305F36179A0BD70082334F /* KPKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C305F35179A0BD70082334F /* KPKIcon.m */; };
4C305F3C179A19F90082334F /* KPKIconLoading.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C305F3B179A19F90082334F /* KPKIconLoading.m */; };
4C305F3E179A1A760082334F /* image.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C305F3D179A1A760082334F /* image.png */; };
4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3666401787327E00B249F1 /* MPDocument+Attachments.m */; };
4C366643178748F500B249F1 /* 99_HarddiskTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C366642178748F500B249F1 /* 99_HarddiskTemplate.pdf */; };
4C36E5B4177CD4FB00152132 /* Kdb4Tree+KVOAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C36E5B3177CD4FB00152132 /* Kdb4Tree+KVOAdditions.m */; };
@@ -147,7 +159,7 @@
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 /* KPKParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C70D0FC1790924700652EE9 /* KPKParser.m */; };
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 */; };
@@ -181,6 +193,7 @@
4CA0B2FC15BCAF8600654E32 /* MPSettingsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA0B2FB15BCAF8600654E32 /* MPSettingsWindowController.m */; };
4CA0E3A7176FAF99004D18CB /* MPDocumentQueryService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA0E3A6176FAF99004D18CB /* MPDocumentQueryService.m */; };
4CA2335A176DBFE100F0B6AC /* MPLockDaemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA23359176DBFE100F0B6AC /* MPLockDaemon.m */; };
4CA7C36C179A98140099C34B /* NSString+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA7C36B179A98140099C34B /* NSString+Base64.m */; };
4CAD747B15B887FD00104512 /* DDXMLElementAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAD745715B887FD00104512 /* DDXMLElementAdditions.m */; };
4CAD747C15B887FD00104512 /* NSString+DDXML.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAD745A15B887FD00104512 /* NSString+DDXML.m */; };
4CAD747D15B887FD00104512 /* DDXMLDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAD745D15B887FD00104512 /* DDXMLDocument.m */; };
@@ -232,6 +245,7 @@
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 */; };
4CFEB36E1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFEB36D1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.m */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -247,6 +261,26 @@
4C10412B178CDD44001B5239 /* NSDate+Humanized.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+Humanized.m"; sourceTree = "<group>"; };
4C16BA6017879A3C002B42BD /* MPPasswordStringFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordStringFormatter.h; sourceTree = "<group>"; };
4C16BA6117879A3C002B42BD /* MPPasswordStringFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordStringFormatter.m; sourceTree = "<group>"; };
4C1842A9179B027700E2F5BC /* KPKDeletedNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKDeletedNode.h; sourceTree = "<group>"; };
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>"; };
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>"; };
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>"; };
@@ -329,6 +363,11 @@
4C2E382216D1421B00037A9D /* MPIconHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPIconHelper.m; sourceTree = "<group>"; };
4C2E382416D1470200037A9D /* MPViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPViewController.h; sourceTree = "<group>"; };
4C2E382516D1470200037A9D /* MPViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPViewController.m; sourceTree = "<group>"; };
4C305F34179A0BD70082334F /* KPKIcon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKIcon.h; sourceTree = "<group>"; };
4C305F35179A0BD70082334F /* KPKIcon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKIcon.m; sourceTree = "<group>"; };
4C305F3A179A19F90082334F /* KPKIconLoading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKIconLoading.h; sourceTree = "<group>"; };
4C305F3B179A19F90082334F /* KPKIconLoading.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKIconLoading.m; sourceTree = "<group>"; };
4C305F3D179A1A760082334F /* image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = image.png; path = Images/image.png; sourceTree = "<group>"; };
4C3666401787327E00B249F1 /* MPDocument+Attachments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Attachments.m"; sourceTree = "<group>"; };
4C366642178748F500B249F1 /* 99_HarddiskTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 99_HarddiskTemplate.pdf; sourceTree = "<group>"; };
4C36E5B2177CD4FB00152132 /* Kdb4Tree+KVOAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Kdb4Tree+KVOAdditions.h"; sourceTree = "<group>"; };
@@ -495,8 +534,8 @@
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 /* KPKParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KPKParser.h; sourceTree = "<group>"; };
4C70D0FC1790924700652EE9 /* KPKParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKParser.m; 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>"; };
@@ -563,6 +602,8 @@
4CA0E3A6176FAF99004D18CB /* MPDocumentQueryService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDocumentQueryService.m; sourceTree = "<group>"; };
4CA23358176DBFE100F0B6AC /* MPLockDaemon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLockDaemon.h; sourceTree = "<group>"; };
4CA23359176DBFE100F0B6AC /* MPLockDaemon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLockDaemon.m; sourceTree = "<group>"; };
4CA7C36A179A98140099C34B /* NSString+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Base64.h"; sourceTree = "<group>"; };
4CA7C36B179A98140099C34B /* NSString+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Base64.m"; sourceTree = "<group>"; };
4CAAFDD51787AED60013FCF9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = "<group>"; };
4CAD745615B887FD00104512 /* DDXMLElementAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDXMLElementAdditions.h; sourceTree = "<group>"; };
4CAD745715B887FD00104512 /* DDXMLElementAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDXMLElementAdditions.m; sourceTree = "<group>"; };
@@ -621,8 +662,8 @@
4CD78ABA16D155FF00768A1D /* 10_ContactTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 10_ContactTemplate.pdf; sourceTree = "<group>"; };
4CD78ABB16D155FF00768A1D /* 11_CameraTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 11_CameraTemplate.pdf; sourceTree = "<group>"; };
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; name = "KPKTree+Serializing.h"; path = "../Core/KPKTree+Serializing.h"; sourceTree = "<group>"; };
4CDB5C411794AA4F0017667E /* KPKTree+Serializing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "KPKTree+Serializing.m"; path = "../Core/KPKTree+Serializing.m"; 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>"; };
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>"; };
@@ -659,6 +700,8 @@
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>"; };
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>"; };
/* End PBXFileReference section */
@@ -904,6 +947,8 @@
4C2724D917790E7C00FD8456 /* NSMutableData+Base64.m */,
4C801AFA179310E2002821E3 /* NSString+Hexdata.h */,
4C801AFB179310E2002821E3 /* NSString+Hexdata.m */,
4CA7C36A179A98140099C34B /* NSString+Base64.h */,
4CA7C36B179A98140099C34B /* NSString+Base64.m */,
);
name = Categories;
sourceTree = "<group>";
@@ -933,6 +978,8 @@
4C36E5B3177CD4FB00152132 /* Kdb4Tree+KVOAdditions.m */,
4C4FCE16177D03D700BBF7AE /* Kdb4Entry+KVOAdditions.h */,
4C4FCE17177D03D700BBF7AE /* Kdb4Entry+KVOAdditions.m */,
4CFEB36C1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.h */,
4CFEB36D1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.m */,
4C83F4A81774B155006C5FC0 /* Kdb3Tree+NewTree.h */,
4C83F4A91774B155006C5FC0 /* Kdb3Tree+NewTree.m */,
4C83F4AB1774B25F006C5FC0 /* Kdb4Tree+NewTree.h */,
@@ -969,6 +1016,14 @@
name = Helper;
sourceTree = "<group>";
};
4C305F3F179A1A790082334F /* Images */ = {
isa = PBXGroup;
children = (
4C305F3D179A1A760082334F /* image.png */,
);
name = Images;
sourceTree = "<group>";
};
4C37A84115B8B47D005EF8EE /* Delegates */ = {
isa = PBXGroup;
children = (
@@ -1016,6 +1071,7 @@
4C45FB1E178E09ED0010007D /* MacPassTests */ = {
isa = PBXGroup;
children = (
4C305F3F179A1A790082334F /* Images */,
4C18F9AC178E123200890BCE /* Databases */,
4C45FB2B178E0BCB0010007D /* MPDatabaseLoading.h */,
4C45FB2C178E0BCB0010007D /* MPDatabaseLoading.m */,
@@ -1024,6 +1080,10 @@
4C19E501178E2871002F2CD0 /* MPDatabasePasswordAndKeyfile.h */,
4C19E502178E2871002F2CD0 /* MPDatabasePasswordAndKeyfile.m */,
4C45FB1F178E09ED0010007D /* Supporting Files */,
4C305F3A179A19F90082334F /* KPKIconLoading.h */,
4C305F3B179A19F90082334F /* KPKIconLoading.m */,
4C1842B6179B348600E2F5BC /* KPKTreeLoadingTest.h */,
4C1842B7179B348600E2F5BC /* KPKTreeLoadingTest.m */,
);
path = MacPassTests;
sourceTree = "<group>";
@@ -1385,14 +1445,16 @@
4CD3ABAF178F71B50073F5C5 /* Categories */ = {
isa = PBXGroup;
children = (
4C1842BE179B5BFD00E2F5BC /* NSData+CommonCrypto.h */,
4C1842BF179B5BFD00E2F5BC /* NSData+CommonCrypto.m */,
4C2724D51778FF1A00FD8456 /* NSUUID+KeePassKit.h */,
4C2724D61778FF1A00FD8456 /* NSUUID+KeePassKit.m */,
4C8A173B1790AA41008B5C17 /* NSData+Keyfile.h */,
4C8A173C1790AA41008B5C17 /* NSData+Keyfile.m */,
4CDB5C401794AA4F0017667E /* KPKTree+Serializing.h */,
4CDB5C411794AA4F0017667E /* KPKTree+Serializing.m */,
4C055E72179620BF00BD2BAB /* NSString+CommandString.h */,
4C055E73179620BF00BD2BAB /* NSString+CommandString.m */,
4C1842C1179B69E600E2F5BC /* NSData+HashedData.h */,
4C1842C2179B69E700E2F5BC /* NSData+HashedData.m */,
);
path = Categories;
sourceTree = "<group>";
@@ -1402,8 +1464,6 @@
children = (
4C70D0FE179092F200652EE9 /* KPKPassword.h */,
4C70D0FF179092F200652EE9 /* KPKPassword.m */,
4C70D0FB1790924700652EE9 /* KPKParser.h */,
4C70D0FC1790924700652EE9 /* KPKParser.m */,
4C4436751792BE810099E220 /* KPKFormat.h */,
4C4436761792BE810099E220 /* KPKFormat.m */,
4CD3ABB2178F71B50073F5C5 /* KPKVersion.h */,
@@ -1421,8 +1481,11 @@
4C3F28531791EDFD00703281 /* KPKErrors.m */,
4CF62B84179385D700B660B6 /* KPKAttribute.h */,
4CF62B85179385D700B660B6 /* KPKAttribute.m */,
4C5AA58F179549A1008ECAD7 /* KPKXmlTreeWriter.h */,
4C5AA590179549A1008ECAD7 /* KPKXmlTreeWriter.m */,
4C305F34179A0BD70082334F /* KPKIcon.h */,
4C305F35179A0BD70082334F /* KPKIcon.m */,
4C1842A9179B027700E2F5BC /* KPKDeletedNode.h */,
4C1842AA179B027800E2F5BC /* KPKDeletedNode.m */,
4C1842C7179BF6A100E2F5BC /* KPKKdbHeader.h */,
);
path = Core;
sourceTree = "<group>";
@@ -1430,6 +1493,23 @@
4CD3ABB5178F71B50073F5C5 /* IO */ = {
isa = PBXGroup;
children = (
4C70D0FB1790924700652EE9 /* KPKTreeLoader.h */,
4C70D0FC1790924700652EE9 /* KPKTreeLoader.m */,
4CDB5C401794AA4F0017667E /* KPKTree+Serializing.h */,
4CDB5C411794AA4F0017667E /* KPKTree+Serializing.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 */,
);
path = IO;
sourceTree = "<group>";
@@ -1576,6 +1656,7 @@
4C45FB23178E09ED0010007D /* InfoPlist.strings in Resources */,
4C18F9AB178E122500890BCE /* Test_Password_1234.kdb in Resources */,
4C19E500178E26EF002F2CD0 /* Test_Password_1234.kdbx in Resources */,
4C305F3E179A1A760082334F /* image.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1656,6 +1737,8 @@
4C45FB2D178E0BCB0010007D /* MPDatabaseLoading.m in Sources */,
4C45FB30178E0CE20010007D /* MPDatabaseCreation.m in Sources */,
4C19E503178E2871002F2CD0 /* MPDatabasePasswordAndKeyfile.m in Sources */,
4C305F3C179A19F90082334F /* KPKIconLoading.m in Sources */,
4C1842B8179B348600E2F5BC /* KPKTreeLoadingTest.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1815,7 +1898,7 @@
4CD3ABC2178F72720073F5C5 /* KPKGroup.m in Sources */,
4C591B57178F897A0080B16B /* KPKAttachment.m in Sources */,
4C39B3F5178FEFAE0027DC7C /* KPKNode.m in Sources */,
4C70D0FD1790924700652EE9 /* KPKParser.m in Sources */,
4C70D0FD1790924700652EE9 /* KPKTreeLoader.m in Sources */,
4C70D100179092F200652EE9 /* KPKPassword.m in Sources */,
4C8A173D1790AA41008B5C17 /* NSData+Keyfile.m in Sources */,
4C3F28541791EDFD00703281 /* KPKErrors.m in Sources */,
@@ -1832,6 +1915,17 @@
4C67D33317981ABA00A7BDFC /* HNHTokenFieldCell.m in Sources */,
4C4510091798C53700219998 /* StringField+Validation.m in Sources */,
4C45100C1798C65C00219998 /* Kdb4Entry+MPAdditions.m in Sources */,
4CFEB36E1799D9CF00AF1868 /* Kdb3Entry+KVOAdditions.m in Sources */,
4C305F36179A0BD70082334F /* KPKIcon.m in Sources */,
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 */,
4C1842C0179B5BFD00E2F5BC /* NSData+CommonCrypto.m in Sources */,
4C1842C3179B69E700E2F5BC /* NSData+HashedData.m in Sources */,
4C1842C6179BF52100E2F5BC /* KPKBinaryCipherInformation.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@@ -45,42 +45,121 @@
<reference key="NSNextResponder"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="145041823">
<object class="NSBox" id="996160987">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{18, 177}, {241, 18}}</string>
<int key="NSvFlags">12</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSView" id="589191611">
<reference key="NSNextResponder" ref="996160987"/>
<int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="145041823">
<reference key="NSNextResponder" ref="589191611"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{16, 12}, {241, 18}}</string>
<reference key="NSSuperview" ref="589191611"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="60918609"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSHuggingPriority">{250, 252}</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="168279901">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">268435456</int>
<string key="NSContents">Reopen last Database after Launch</string>
<object class="NSFont" key="NSSupport" id="874940307">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
</object>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="145041823"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage" id="125685135">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSSwitch</string>
</object>
<object class="NSButtonImageSource" key="NSAlternateImage" id="765261007">
<string key="NSImageName">NSSwitch</string>
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="366343837">
<reference key="NSNextResponder" ref="589191611"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{16, 32}, {228, 18}}</string>
<reference key="NSSuperview" ref="589191611"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="145041823"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSHuggingPriority">{250, 252}</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="480309686">
<int key="NSCellFlags">-1543503872</int>
<int key="NSCellFlags2">268435456</int>
<string key="NSContents">Create new Database if activated</string>
<reference key="NSSupport" ref="874940307"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="366343837"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="125685135"/>
<reference key="NSAlternateImage" ref="765261007"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{1, 1}, {364, 58}}</string>
<reference key="NSSuperview" ref="996160987"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="366343837"/>
<string key="NSReuseIdentifierKey">_NS:11</string>
</object>
</array>
<string key="NSFrame">{{17, 157}, {366, 74}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="60918609"/>
<reference key="NSNextKeyView" ref="589191611"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSHuggingPriority">{250, 252}</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="168279901">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">268435456</int>
<string key="NSContents">Reopen last Database after Launch</string>
<object class="NSFont" key="NSSupport" id="874940307">
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Startup</string>
<object class="NSFont" key="NSSupport" id="26">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
<double key="NSSize">11</double>
<int key="NSfFlags">3100</int>
</object>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="145041823"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage" id="125685135">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSSwitch</string>
<object class="NSColor" key="NSBackgroundColor" id="116323791">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
</object>
<object class="NSButtonImageSource" key="NSAlternateImage" id="765261007">
<string key="NSImageName">NSSwitch</string>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxMTkAA</bytes>
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSContentView" ref="589191611"/>
<int key="NSBorderType">1</int>
<int key="NSBoxType">0</int>
<int key="NSTitlePosition">2</int>
<bool key="NSTransparent">NO</bool>
</object>
<object class="NSBox" id="60918609">
<reference key="NSNextResponder" ref="1005"/>
@@ -93,7 +172,7 @@
<object class="NSTextField" id="958810247">
<reference key="NSNextResponder" ref="731672371"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 96}, {124, 17}}</string>
<string key="NSFrame">{{15, 93}, {124, 17}}</string>
<reference key="NSSuperview" ref="731672371"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="222890410"/>
@@ -130,7 +209,7 @@
<object class="NSPopUpButton" id="222890410">
<reference key="NSNextResponder" ref="731672371"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{179, 92}, {170, 23}}</string>
<string key="NSFrame">{{179, 90}, {170, 22}}</string>
<reference key="NSSuperview" ref="731672371"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="326334884"/>
@@ -220,7 +299,7 @@
<object class="NSButton" id="326334884">
<reference key="NSNextResponder" ref="731672371"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{31, 72}, {172, 18}}</string>
<string key="NSFrame">{{31, 69}, {172, 18}}</string>
<reference key="NSSuperview" ref="731672371"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="982397212"/>
@@ -377,14 +456,14 @@
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{1, 1}, {364, 124}}</string>
<string key="NSFrame">{{1, 1}, {364, 121}}</string>
<reference key="NSSuperview" ref="60918609"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="958810247"/>
<string key="NSReuseIdentifierKey">_NS:11</string>
</object>
</array>
<string key="NSFrame">{{17, 16}, {366, 140}}</string>
<string key="NSFrame">{{17, 16}, {366, 137}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="731672371"/>
@@ -396,20 +475,8 @@
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Security</string>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">11</double>
<int key="NSfFlags">3100</int>
</object>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
</object>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="116323791"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxMTkAA</bytes>
@@ -422,10 +489,10 @@
<bool key="NSTransparent">NO</bool>
</object>
</array>
<string key="NSFrameSize">{400, 230}</string>
<string key="NSFrameSize">{400, 251}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="145041823"/>
<reference key="NSNextKeyView" ref="996160987"/>
<string key="NSClassName">NSView</string>
</object>
</array>
@@ -479,6 +546,14 @@
</object>
<int key="connectionID">878</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">createUntitledOnActivation</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="366343837"/>
</object>
<int key="connectionID">920</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@@ -510,22 +585,6 @@
<int key="objectID">1</int>
<reference key="object" ref="1005"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="505875569">
<reference key="firstItem" ref="60918609"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1005"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">74</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="213536579">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">4</int>
@@ -542,6 +601,22 @@
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="871081113">
<reference key="firstItem" ref="60918609"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="996160987"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="484547610">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">6</int>
@@ -574,24 +649,40 @@
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="119736576">
<reference key="firstItem" ref="145041823"/>
<object class="IBNSLayoutConstraint" id="198070882">
<reference key="firstItem" ref="996160987"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1005"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">37</double>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="689860785">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="996160987"/>
<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">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="1065146703">
<reference key="firstItem" ref="145041823"/>
<reference key="firstItem" ref="996160987"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1005"/>
@@ -606,7 +697,7 @@
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="250630005">
<object class="IBNSLayoutConstraint" id="557216379">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">8</int>
<int key="relation">0</int>
@@ -614,7 +705,7 @@
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">230</double>
<double key="value">251</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
@@ -638,8 +729,8 @@
<float key="scoringTypeFloat">40</float>
<int key="contentType">1</int>
</object>
<reference ref="996160987"/>
<reference ref="60918609"/>
<reference ref="145041823"/>
</array>
<reference key="parent" ref="0"/>
</object>
@@ -679,6 +770,22 @@
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="217416544">
<reference key="firstItem" ref="222890410"/>
<int key="firstAttribute">4</int>
<int key="relation">0</int>
<reference key="secondItem" ref="958810247"/>
<int key="secondAttribute">4</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="60918609"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="459585909">
<reference key="firstItem" ref="222890410"/>
<int key="firstAttribute">5</int>
@@ -855,22 +962,6 @@
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="1014678196">
<reference key="firstItem" ref="958810247"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="222890410"/>
<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="60918609"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="891799107">
<reference key="firstItem" ref="958810247"/>
<int key="firstAttribute">5</int>
@@ -1027,24 +1118,6 @@
<reference key="object" ref="891799107"/>
<reference key="parent" ref="60918609"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">530</int>
<reference key="object" ref="145041823"/>
<array class="NSMutableArray" key="children">
<reference ref="168279901"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">531</int>
<reference key="object" ref="168279901"/>
<reference key="parent" ref="145041823"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">532</int>
<reference key="object" ref="1065146703"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">584</int>
<reference key="object" ref="272904029"/>
@@ -1105,11 +1178,6 @@
<reference key="object" ref="871797750"/>
<reference key="parent" ref="326334884"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">784</int>
<reference key="object" ref="1014678196"/>
<reference key="parent" ref="60918609"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">789</int>
<reference key="object" ref="311160635"/>
@@ -1125,11 +1193,6 @@
<reference key="object" ref="484547610"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">798</int>
<reference key="object" ref="1063893674"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">801</int>
<reference key="object" ref="806133159"/>
@@ -1163,26 +1226,6 @@
<reference key="object" ref="772519144"/>
<reference key="parent" ref="60918609"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">840</int>
<reference key="object" ref="213536579"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">845</int>
<reference key="object" ref="119736576"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">846</int>
<reference key="object" ref="505875569"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">847</int>
<reference key="object" ref="250630005"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">861</int>
<reference key="object" ref="1037442692"/>
@@ -1233,6 +1276,186 @@
<reference key="object" ref="777025190"/>
<reference key="parent" ref="222890410"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">888</int>
<reference key="object" ref="996160987"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="680904412">
<reference key="firstItem" ref="996160987"/>
<int key="firstAttribute">4</int>
<int key="relation">0</int>
<reference key="secondItem" ref="145041823"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">11</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="996160987"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="700397535">
<reference key="firstItem" ref="145041823"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="366343837"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">6</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="996160987"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="32139976">
<reference key="firstItem" ref="145041823"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="996160987"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">16</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="996160987"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="255254776">
<reference key="firstItem" ref="366343837"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="996160987"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">16</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="996160987"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="650293569">
<reference key="firstItem" ref="366343837"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="996160987"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">25</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="996160987"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<reference ref="366343837"/>
<reference ref="145041823"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">891</int>
<reference key="object" ref="1065146703"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">893</int>
<reference key="object" ref="689860785"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">530</int>
<reference key="object" ref="145041823"/>
<array class="NSMutableArray" key="children">
<reference ref="168279901"/>
</array>
<reference key="parent" ref="996160987"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">531</int>
<reference key="object" ref="168279901"/>
<reference key="parent" ref="145041823"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">894</int>
<reference key="object" ref="32139976"/>
<reference key="parent" ref="996160987"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">879</int>
<reference key="object" ref="366343837"/>
<array class="NSMutableArray" key="children">
<reference ref="480309686"/>
</array>
<reference key="parent" ref="996160987"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">880</int>
<reference key="object" ref="480309686"/>
<reference key="parent" ref="366343837"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">896</int>
<reference key="object" ref="650293569"/>
<reference key="parent" ref="996160987"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">897</int>
<reference key="object" ref="255254776"/>
<reference key="parent" ref="996160987"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">903</int>
<reference key="object" ref="198070882"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">901</int>
<reference key="object" ref="680904412"/>
<reference key="parent" ref="996160987"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">898</int>
<reference key="object" ref="700397535"/>
<reference key="parent" ref="996160987"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">906</int>
<reference key="object" ref="871081113"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">916</int>
<reference key="object" ref="217416544"/>
<reference key="parent" ref="60918609"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">917</int>
<reference key="object" ref="213536579"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">918</int>
<reference key="object" ref="1063893674"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">919</int>
<reference key="object" ref="557216379"/>
<reference key="parent" ref="1005"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -1241,13 +1464,14 @@
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="1.IBNSViewMetadataConstraints">
<reference ref="1063893674"/>
<reference ref="250630005"/>
<reference ref="557216379"/>
<reference ref="1065146703"/>
<reference ref="119736576"/>
<reference ref="689860785"/>
<reference ref="198070882"/>
<reference ref="989429017"/>
<reference ref="484547610"/>
<reference ref="871081113"/>
<reference ref="213536579"/>
<reference ref="505875569"/>
</array>
<boolean value="NO" key="1.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/>
<boolean value="NO" key="1.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
@@ -1275,9 +1499,8 @@
<boolean value="NO" key="447.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="447.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="448.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="465.IBNSViewMetadataConstraints">
<array class="NSMutableArray" key="465.IBNSViewMetadataConstraints">
<reference ref="891799107"/>
<reference ref="1014678196"/>
<reference ref="432174165"/>
<reference ref="933426524"/>
<reference ref="236685633"/>
@@ -1289,6 +1512,7 @@
<reference ref="311160635"/>
<reference ref="437525640"/>
<reference ref="459585909"/>
<reference ref="217416544"/>
<reference ref="920770187"/>
<reference ref="771059501"/>
</array>
@@ -1300,7 +1524,6 @@
<boolean value="NO" key="530.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="530.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="531.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="532.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="584.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="584.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="585.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1312,21 +1535,15 @@
<string key="630.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="631.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="773.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="784.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="788.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="789.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="792.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="798.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="801.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="803.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="804.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="805.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="805.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="806.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="840.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="845.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="846.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="847.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="861.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="862.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="867.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1337,12 +1554,37 @@
<string key="875.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="876.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="877.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="879.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="879.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="880.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="888.IBNSViewMetadataConstraints">
<reference ref="650293569"/>
<reference ref="255254776"/>
<reference ref="32139976"/>
<reference ref="700397535"/>
<reference ref="680904412"/>
</array>
<boolean value="NO" key="888.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="888.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="891.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="893.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="894.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="896.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="897.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="898.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="901.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="903.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="906.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="916.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="917.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="918.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="919.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">878</int>
<int key="maxID">920</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -1352,6 +1594,7 @@
<dictionary class="NSMutableDictionary" key="outlets">
<string key="clearPasteboardOnQuitCheckButton">NSButton</string>
<string key="clearPasteboardTimeoutPopup">NSPopUpButton</string>
<string key="createUntitledOnActivation">NSButton</string>
<string key="idleTimeOutPopup">NSPopUpButton</string>
<string key="lockOnSleepCheckButton">NSButton</string>
<string key="reopenLastDatabase">NSButton</string>
@@ -1365,6 +1608,10 @@
<string key="name">clearPasteboardTimeoutPopup</string>
<string key="candidateClassName">NSPopUpButton</string>
</object>
<object class="IBToOneOutletInfo" key="createUntitledOnActivation">
<string key="name">createUntitledOnActivation</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="idleTimeOutPopup">
<string key="name">idleTimeOutPopup</string>
<string key="candidateClassName">NSPopUpButton</string>

View File

@@ -32,6 +32,8 @@
<string>NSTextField</string>
<string>NSTextFieldCell</string>
<string>NSTextView</string>
<string>NSTokenField</string>
<string>NSTokenFieldCell</string>
<string>NSView</string>
</array>
<array key="IBDocument.PluginDependencies">
@@ -202,13 +204,13 @@
<string key="NSFrame">{{0, 31}, {293, 399}}</string>
<reference key="NSSuperview" ref="87082330"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="177600245"/>
<reference key="NSNextKeyView" ref="726109125"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<array class="NSMutableArray" key="NSTabViewItems">
<object class="NSTabViewItem" id="1002013291">
<string key="NSIdentifier">1</string>
<object class="NSView" key="NSView" id="726109125">
<nil key="NSNextResponder"/>
<reference key="NSNextResponder" ref="166081160"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="734056912">
@@ -216,6 +218,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 365}, {35, 14}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="909883915"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -248,6 +251,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{20, 335}, {253, 22}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="328122838"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -282,6 +286,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 313}, {58, 14}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="800408621"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -302,6 +307,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{20, 283}, {253, 22}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="428053603"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -323,6 +329,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{20, 231}, {253, 22}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="279643156"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -344,6 +351,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 261}, {25, 14}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="484293743"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -364,6 +372,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 209}, {58, 14}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="685310174"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -384,7 +393,8 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{20, 152}, {253, 19}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSNextKeyView" ref="13391205"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1027186598"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSHuggingPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
@@ -413,6 +423,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 35}, {259, 11}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="212627618"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -437,7 +448,8 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 16}, {259, 11}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSNextKeyView" ref="816254670"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="894571713"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="72260846">
@@ -457,6 +469,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{20, 179}, {214, 22}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1035439471"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -481,6 +494,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{242, 177}, {31, 25}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="172507372"/>
<string key="NSReuseIdentifierKey">_NS:22</string>
<bool key="NSEnabled">YES</bool>
@@ -504,8 +518,58 @@
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTokenField" id="908063476">
<reference key="NSNextResponder" ref="726109125"/>
<int key="NSvFlags">268</int>
<set class="NSMutableSet" key="NSDragTypes">
<string>NSStringPboardType</string>
</set>
<string key="NSFrame">{{20, 73}, {253, 50}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="13391205"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTokenFieldCell" key="NSCell" id="416219844">
<int key="NSCellFlags">337641472</int>
<int key="NSCellFlags2">32768</int>
<reference key="NSSupport" ref="323604925"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="908063476"/>
<reference key="NSBackgroundColor" ref="955209345"/>
<reference key="NSTextColor" ref="345368012"/>
<reference key="NSDelegate" ref="908063476"/>
<double key="NSCompletionDelay">0.0</double>
<int key="NSTokenStyle">0</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSTokenFieldVersion">2</int>
</object>
<object class="NSTextField" id="1027186598">
<reference key="NSNextResponder" ref="726109125"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 131}, {38, 14}}</string>
<reference key="NSSuperview" ref="726109125"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="908063476"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="391470272">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">272761856</int>
<string key="NSContents">Tags</string>
<reference key="NSSupport" ref="26"/>
<string key="NSCellIdentifier">_NS:1535</string>
<reference key="NSControlView" ref="1027186598"/>
<reference key="NSBackgroundColor" ref="533509460"/>
<reference key="NSTextColor" ref="1062890562"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrameSize">{293, 399}</string>
<reference key="NSSuperview" ref="166081160"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="734056912"/>
<string key="NSReuseIdentifierKey">_NS:11</string>
</object>
@@ -624,7 +688,6 @@
<int key="NSvFlags">256</int>
<string key="NSFrame">{{236, 1}, {16, 332}}</string>
<reference key="NSSuperview" ref="850153963"/>
<reference key="NSNextKeyView" ref="816254670"/>
<string key="NSReuseIdentifierKey">_NS:83</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="850153963"/>
@@ -893,7 +956,7 @@
</object>
<object class="NSTabViewItem" id="800410412">
<object class="NSView" key="NSView" id="177600245">
<reference key="NSNextResponder" ref="166081160"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="966066653">
@@ -901,7 +964,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{241, 362}, {32, 19}}</string>
<reference key="NSSuperview" ref="177600245"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="892620201"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -927,7 +989,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 365}, {80, 14}}</string>
<reference key="NSSuperview" ref="177600245"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="966066653"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -957,7 +1018,6 @@
<array class="NSMutableArray" key="NSSubviews"/>
<string key="NSFrameSize">{259, 333}</string>
<reference key="NSSuperview" ref="236190992"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="291769955"/>
<string key="NSReuseIdentifierKey">_NS:13</string>
<bool key="NSEnabled">YES</bool>
@@ -1020,7 +1080,6 @@
</array>
<string key="NSFrame">{{1, 1}, {259, 333}}</string>
<reference key="NSSuperview" ref="892620201"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="441697535"/>
<string key="NSReuseIdentifierKey">_NS:11</string>
<reference key="NSDocView" ref="441697535"/>
@@ -1032,7 +1091,6 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
<reference key="NSSuperview" ref="892620201"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1045948787"/>
<string key="NSReuseIdentifierKey">_NS:58</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -1045,8 +1103,6 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 119}, {223, 15}}</string>
<reference key="NSSuperview" ref="892620201"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="894571713"/>
<string key="NSReuseIdentifierKey">_NS:60</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
@@ -1057,7 +1113,6 @@
</array>
<string key="NSFrame">{{16, 20}, {261, 335}}</string>
<reference key="NSSuperview" ref="177600245"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="236190992"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="NSsFlags">133681</int>
@@ -1071,8 +1126,6 @@
</object>
</array>
<string key="NSFrameSize">{293, 399}</string>
<reference key="NSSuperview" ref="166081160"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="40836012"/>
</object>
<string key="NSLabel">Fields</string>
@@ -1080,13 +1133,13 @@
<reference key="NSTabView" ref="166081160"/>
</object>
</array>
<reference key="NSSelectedTabViewItem" ref="800410412"/>
<reference key="NSSelectedTabViewItem" ref="1002013291"/>
<reference key="NSFont" ref="308723166"/>
<int key="NSTvFlags">6</int>
<bool key="NSAllowTruncatedLabels">YES</bool>
<bool key="NSDrawsBackground">YES</bool>
<array class="NSMutableArray" key="NSSubviews">
<reference ref="177600245"/>
<reference ref="726109125"/>
</array>
</object>
</array>
@@ -2279,7 +2332,7 @@
<reference key="firstItem" ref="13391205"/>
<int key="firstAttribute">3</int>
<int key="relation">1</int>
<reference key="secondItem" ref="172507372"/>
<reference key="secondItem" ref="908063476"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
@@ -2355,6 +2408,86 @@
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="1016066557">
<reference key="firstItem" ref="908063476"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1027186598"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="726109125"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="565410329">
<reference key="firstItem" ref="908063476"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="726109125"/>
<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="726109125"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="20584493">
<reference key="firstItem" ref="726109125"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="908063476"/>
<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="726109125"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="833644028">
<reference key="firstItem" ref="1027186598"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="172507372"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="726109125"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="517799648">
<reference key="firstItem" ref="1027186598"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="726109125"/>
<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="726109125"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="319543535">
<reference key="firstItem" ref="172507372"/>
<int key="firstAttribute">3</int>
@@ -2751,6 +2884,8 @@
<reference ref="212627618"/>
<reference ref="1035439471"/>
<reference ref="685310174"/>
<reference ref="1027186598"/>
<reference ref="908063476"/>
</array>
<reference key="parent" ref="1002013291"/>
</object>
@@ -4624,11 +4759,6 @@
<reference key="object" ref="849686715"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2322</int>
<reference key="object" ref="775474818"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2345</int>
<reference key="object" ref="511009648"/>
@@ -4874,6 +5004,104 @@
<reference key="object" ref="346165127"/>
<reference key="parent" ref="511009648"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2371</int>
<reference key="object" ref="908063476"/>
<array class="NSMutableArray" key="children">
<reference ref="416219844"/>
<object class="IBNSLayoutConstraint" id="462547709">
<reference key="firstItem" ref="908063476"/>
<int key="firstAttribute">8</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">50</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="908063476"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2372</int>
<reference key="object" ref="416219844"/>
<reference key="parent" ref="908063476"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2380</int>
<reference key="object" ref="775474818"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2384</int>
<reference key="object" ref="1027186598"/>
<array class="NSMutableArray" key="children">
<reference ref="391470272"/>
<object class="IBNSLayoutConstraint" id="707273412">
<reference key="firstItem" ref="1027186598"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">32</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1027186598"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2385</int>
<reference key="object" ref="391470272"/>
<reference key="parent" ref="1027186598"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2388</int>
<reference key="object" ref="20584493"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2389</int>
<reference key="object" ref="565410329"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2391</int>
<reference key="object" ref="707273412"/>
<reference key="parent" ref="1027186598"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2397</int>
<reference key="object" ref="517799648"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2398</int>
<reference key="object" ref="833644028"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2400</int>
<reference key="object" ref="1016066557"/>
<reference key="parent" ref="726109125"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2401</int>
<reference key="object" ref="462547709"/>
<reference key="parent" ref="908063476"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -4955,6 +5183,11 @@
<reference ref="806657697"/>
<reference ref="404436173"/>
<reference ref="319543535"/>
<reference ref="517799648"/>
<reference ref="833644028"/>
<reference ref="20584493"/>
<reference ref="565410329"/>
<reference ref="1016066557"/>
<reference ref="1048935945"/>
<reference ref="849686715"/>
<reference ref="989194529"/>
@@ -5253,7 +5486,6 @@
<string key="2275.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2276.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2278.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2322.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2345.CustomClassName">MPCustomFieldTableCellView</string>
<array key="2345.IBNSViewMetadataConstraints">
<reference ref="283957064"/>
@@ -5290,6 +5522,26 @@
<string key="2362.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2369.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2370.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="2371.IBNSViewMetadataConstraints">
<reference ref="462547709"/>
</array>
<boolean value="NO" key="2371.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="2371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2380.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="2384.IBNSViewMetadataConstraints">
<reference ref="707273412"/>
</array>
<boolean value="NO" key="2384.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="2384.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2385.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2388.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2389.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2391.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2397.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2398.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2400.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2401.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="455.IBNSViewMetadataConstraints">
<reference ref="222939184"/>
<reference ref="1058743908"/>
@@ -5336,7 +5588,7 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">2370</int>
<int key="maxID">2401</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">

View File

@@ -235,6 +235,15 @@
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="919874146">
<reference key="NSMenu" ref="720053764"/>
<string key="NSTitle">Lock</string>
<string key="NSKeyEquiv">L</string>
<int key="NSKeyEquivModMask">262144</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="776162233">
<reference key="NSMenu" ref="720053764"/>
<string key="NSTitle">Close</string>
@@ -828,6 +837,14 @@
</object>
<int key="connectionID">1260</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">lock:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="919874146"/>
</object>
<int key="connectionID">1263</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showPreferences:</string>
@@ -932,6 +949,7 @@
<reference ref="544639599"/>
<reference ref="663106531"/>
<reference ref="438377242"/>
<reference ref="919874146"/>
</array>
<reference key="parent" ref="379814623"/>
</object>
@@ -1272,6 +1290,11 @@
<reference key="object" ref="438377242"/>
<reference key="parent" ref="720053764"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1261</int>
<reference key="object" ref="919874146"/>
<reference key="parent" ref="720053764"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -1291,6 +1314,7 @@
<string key="125.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1259.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="126.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1261.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="129.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="130.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="131.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1346,7 +1370,7 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">1260</int>
<int key="maxID">1263</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -1407,6 +1431,7 @@
<dictionary class="NSMutableDictionary" key="actions">
<string key="editPassword:">id</string>
<string key="exportDatabase:">id</string>
<string key="lock:">id</string>
<string key="showDatabaseSettings:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
@@ -1418,6 +1443,10 @@
<string key="name">exportDatabase:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="lock:">
<string key="name">lock:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="showDatabaseSettings:">
<string key="name">showDatabaseSettings:</string>
<string key="candidateClassName">id</string>

View File

@@ -100,7 +100,7 @@
<string key="NSFrame">{{13, 41}, {520, 246}}</string>
<reference key="NSSuperview" ref="1006"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="830804879"/>
<reference key="NSNextKeyView" ref="777708215"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<array class="NSMutableArray" key="NSTabViewItems">
<object class="NSTabViewItem" id="993610707">
@@ -212,7 +212,7 @@
<int key="NSvFlags">2322</int>
<string key="NSFrameSize">{278, 121}</string>
<reference key="NSSuperview" ref="401924003"/>
<reference key="NSNextKeyView" ref="580592620"/>
<reference key="NSNextKeyView" ref="670917793"/>
<string key="NSReuseIdentifierKey">_NS:13</string>
<object class="NSTextContainer" key="NSTextContainer" id="411354001">
<object class="NSLayoutManager" key="NSLayoutManager">
@@ -304,7 +304,7 @@
<int key="NSvFlags">256</int>
<string key="NSFrame">{{263, 1}, {16, 121}}</string>
<reference key="NSSuperview" ref="781083309"/>
<reference key="NSNextKeyView" ref="86072074"/>
<reference key="NSNextKeyView" ref="115846238"/>
<string key="NSReuseIdentifierKey">_NS:83</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="781083309"/>
@@ -328,7 +328,7 @@
</array>
<string key="NSFrame">{{136, 17}, {280, 123}}</string>
<reference key="NSSuperview" ref="161117556"/>
<reference key="NSNextKeyView" ref="401924003"/>
<reference key="NSNextKeyView" ref="580592620"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="NSsFlags">133138</int>
<reference key="NSVScroller" ref="670917793"/>
@@ -349,7 +349,7 @@
</object>
<object class="NSTabViewItem" id="961038136">
<object class="NSView" key="NSView" id="830804879">
<reference key="NSNextResponder" ref="86072074"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="156220187">
@@ -357,7 +357,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{111, 140}, {68, 17}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="2005807"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -382,7 +381,6 @@
</set>
<string key="NSFrame">{{181, 74}, {170, 26}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="118397594"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -407,7 +405,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{128, 78}, {51, 17}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="562503982"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -428,8 +425,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{184, 51}, {164, 19}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<reference key="NSNextKeyView" ref="115846238"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="861795155">
@@ -457,7 +453,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{356, 136}, {31, 25}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="813042737"/>
<string key="NSReuseIdentifierKey">_NS:22</string>
<bool key="NSEnabled">YES</bool>
@@ -486,7 +481,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{356, 75}, {31, 25}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="484114537"/>
<string key="NSReuseIdentifierKey">_NS:22</string>
<bool key="NSEnabled">YES</bool>
@@ -515,7 +509,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{184, 138}, {164, 22}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="548323424"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -540,7 +533,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{127, 108}, {52, 17}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="113779232"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -561,7 +553,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{184, 106}, {164, 22}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="323392534"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
@@ -586,7 +577,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{198, 168}, {137, 17}}</string>
<reference key="NSSuperview" ref="830804879"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="156220187"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -611,8 +601,6 @@
</object>
</array>
<string key="NSFrame">{{10, 33}, {500, 200}}</string>
<reference key="NSSuperview" ref="86072074"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="682548872"/>
</object>
<string key="NSLabel">Password</string>
@@ -738,7 +726,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{138, 38}, {107, 18}}</string>
<reference key="NSSuperview" ref="915152531"/>
<reference key="NSNextKeyView" ref="86072074"/>
<reference key="NSNextKeyView" ref="115846238"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="621059375">
@@ -829,7 +817,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{112, 37}, {187, 18}}</string>
<reference key="NSSuperview" ref="627437575"/>
<reference key="NSNextKeyView" ref="86072074"/>
<reference key="NSNextKeyView" ref="115846238"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="310504693">
@@ -1049,14 +1037,129 @@
<reference key="NSColor" ref="537570538"/>
<reference key="NSTabView" ref="86072074"/>
</object>
<object class="NSTabViewItem" id="1002849227">
<object class="NSView" key="NSView" id="777708215">
<reference key="NSNextResponder" ref="86072074"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="823681835">
<reference key="NSNextResponder" ref="777708215"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{97, 114}, {121, 17}}</string>
<reference key="NSSuperview" ref="777708215"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="551388189"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="960215238">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Default Username:</string>
<reference key="NSSupport" ref="481048132"/>
<string key="NSCellIdentifier">_NS:1535</string>
<reference key="NSControlView" ref="823681835"/>
<reference key="NSBackgroundColor" ref="537570538"/>
<reference key="NSTextColor" ref="873531869"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="551388189">
<reference key="NSNextResponder" ref="777708215"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{223, 111}, {178, 22}}</string>
<reference key="NSSuperview" ref="777708215"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="849532305"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="521558761">
<int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="481048132"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="551388189"/>
<bool key="NSDrawsBackground">YES</bool>
<reference key="NSBackgroundColor" ref="572503014"/>
<reference key="NSTextColor" ref="791279855"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="849532305">
<reference key="NSNextResponder" ref="777708215"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{220, 79}, {184, 26}}</string>
<reference key="NSSuperview" ref="777708215"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="412708114"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="99236567">
<int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">2048</int>
<reference key="NSSupport" ref="481048132"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="849532305"/>
<int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
<nil key="NSMenuItem"/>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="357478954">
<string key="NSTitle">OtherViews</string>
<array class="NSMutableArray" key="NSMenuItems"/>
<reference key="NSMenuFont" ref="481048132"/>
</object>
<int key="NSSelectedIndex">-1</int>
<int key="NSPreferredEdge">1</int>
<bool key="NSUsesItemFromMenu">YES</bool>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">2</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="412708114">
<reference key="NSNextResponder" ref="777708215"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{107, 84}, {110, 17}}</string>
<reference key="NSSuperview" ref="777708215"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="115846238"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="562890440">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Template Group:</string>
<reference key="NSSupport" ref="481048132"/>
<string key="NSCellIdentifier">_NS:1535</string>
<reference key="NSControlView" ref="412708114"/>
<reference key="NSBackgroundColor" ref="537570538"/>
<reference key="NSTextColor" ref="873531869"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrame">{{10, 33}, {500, 200}}</string>
<reference key="NSSuperview" ref="86072074"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="823681835"/>
</object>
<string key="NSLabel">Templates</string>
<reference key="NSColor" ref="537570538"/>
<reference key="NSTabView" ref="86072074"/>
</object>
</array>
<reference key="NSSelectedTabViewItem" ref="961038136"/>
<reference key="NSSelectedTabViewItem" ref="1002849227"/>
<reference key="NSFont" ref="481048132"/>
<int key="NSTvFlags">0</int>
<bool key="NSAllowTruncatedLabels">YES</bool>
<bool key="NSDrawsBackground">YES</bool>
<array class="NSMutableArray" key="NSSubviews">
<reference ref="830804879"/>
<reference ref="777708215"/>
</array>
</object>
<object class="NSButton" id="115846238">
@@ -1090,7 +1193,7 @@
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="86072074"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
@@ -1281,6 +1384,22 @@
</object>
<int key="connectionID">1202</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">defaultUsernameTextField</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="551388189"/>
</object>
<int key="connectionID">1261</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">templateGroupPopUpButton</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="849532305"/>
</object>
<int key="connectionID">1262</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@@ -1480,6 +1599,7 @@
<reference ref="5938958"/>
<reference ref="557419307"/>
<reference ref="961038136"/>
<reference ref="1002849227"/>
</array>
<reference key="parent" ref="1006"/>
</object>
@@ -2540,11 +2660,6 @@
<reference key="object" ref="604885400"/>
<reference key="parent" ref="915152531"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">520</int>
<reference key="object" ref="759147937"/>
<reference key="parent" ref="915152531"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">488</int>
<reference key="object" ref="270539620"/>
@@ -3502,6 +3617,301 @@
<reference key="object" ref="42085920"/>
<reference key="parent" ref="830804879"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1209</int>
<reference key="object" ref="759147937"/>
<reference key="parent" ref="915152531"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1210</int>
<reference key="object" ref="1002849227"/>
<array class="NSMutableArray" key="children">
<reference ref="777708215"/>
</array>
<reference key="parent" ref="86072074"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1211</int>
<reference key="object" ref="777708215"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="109508741">
<reference key="firstItem" ref="849532305"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="412708114"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="777708215"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="810910961">
<reference key="firstItem" ref="849532305"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="551388189"/>
<int key="secondAttribute">6</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="777708215"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="155929422">
<reference key="firstItem" ref="849532305"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="551388189"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="777708215"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="755457557">
<reference key="firstItem" ref="551388189"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="777708215"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">67</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="777708215"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="20370934">
<reference key="firstItem" ref="551388189"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="823681835"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="777708215"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="809019904">
<reference key="firstItem" ref="551388189"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="823681835"/>
<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="777708215"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="975528360">
<reference key="firstItem" ref="412708114"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="849532305"/>
<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="777708215"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="622407355">
<reference key="firstItem" ref="823681835"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="777708215"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">100</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="777708215"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<reference ref="823681835"/>
<reference ref="551388189"/>
<reference ref="849532305"/>
<reference ref="412708114"/>
</array>
<reference key="parent" ref="1002849227"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1212</int>
<reference key="object" ref="823681835"/>
<array class="NSMutableArray" key="children">
<reference ref="960215238"/>
</array>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1213</int>
<reference key="object" ref="960215238"/>
<reference key="parent" ref="823681835"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1216</int>
<reference key="object" ref="551388189"/>
<array class="NSMutableArray" key="children">
<reference ref="521558761"/>
<object class="IBNSLayoutConstraint" id="525800113">
<reference key="firstItem" ref="551388189"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">178</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="551388189"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1217</int>
<reference key="object" ref="521558761"/>
<reference key="parent" ref="551388189"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1225</int>
<reference key="object" ref="809019904"/>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1227</int>
<reference key="object" ref="525800113"/>
<reference key="parent" ref="551388189"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1228</int>
<reference key="object" ref="20370934"/>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1230</int>
<reference key="object" ref="849532305"/>
<array class="NSMutableArray" key="children">
<reference ref="99236567"/>
<object class="IBNSLayoutConstraint" id="884669610">
<reference key="firstItem" ref="849532305"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">179</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="849532305"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1231</int>
<reference key="object" ref="99236567"/>
<array class="NSMutableArray" key="children">
<reference ref="357478954"/>
</array>
<reference key="parent" ref="849532305"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1232</int>
<reference key="object" ref="357478954"/>
<array class="NSMutableArray" key="children"/>
<reference key="parent" ref="99236567"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1239</int>
<reference key="object" ref="412708114"/>
<array class="NSMutableArray" key="children">
<reference ref="562890440"/>
</array>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1240</int>
<reference key="object" ref="562890440"/>
<reference key="parent" ref="412708114"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1253</int>
<reference key="object" ref="155929422"/>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1255</int>
<reference key="object" ref="884669610"/>
<reference key="parent" ref="849532305"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1256</int>
<reference key="object" ref="810910961"/>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1257</int>
<reference key="object" ref="975528360"/>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1258</int>
<reference key="object" ref="109508741"/>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1259</int>
<reference key="object" ref="755457557"/>
<reference key="parent" ref="777708215"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1260</int>
<reference key="object" ref="622407355"/>
<reference key="parent" ref="777708215"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -3578,6 +3988,49 @@
<string key="1195.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1197.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1199.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1209.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1210.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="1211.IBNSViewMetadataConstraints">
<reference ref="622407355"/>
<reference ref="975528360"/>
<reference ref="809019904"/>
<reference ref="20370934"/>
<reference ref="755457557"/>
<reference ref="155929422"/>
<reference ref="810910961"/>
<reference ref="109508741"/>
</array>
<string key="1211.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="1212.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="1212.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1213.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1216.CustomClassName">HNHRoundedTextField</string>
<array class="NSMutableArray" key="1216.IBNSViewMetadataConstraints">
<reference ref="525800113"/>
</array>
<boolean value="NO" key="1216.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="1216.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1217.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1225.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1227.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1228.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="1230.IBNSViewMetadataConstraints">
<reference ref="884669610"/>
</array>
<boolean value="NO" key="1230.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="1230.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1231.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1232.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="1239.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="1239.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1240.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1253.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1255.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1256.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1257.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1258.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1259.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1260.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="189.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="189.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="190.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3647,7 +4100,7 @@
</array>
<string key="369.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="370.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="371.IBNSViewMetadataConstraints">
<array key="371.IBNSViewMetadataConstraints">
<reference ref="270539620"/>
<reference ref="943243543"/>
<reference ref="604885400"/>
@@ -3685,7 +4138,6 @@
<string key="513.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="514.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="516.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="520.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="521.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="525.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="527.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3807,7 +4259,7 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">1202</int>
<int key="maxID">1262</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -3830,27 +4282,46 @@
<string key="minorKey">./Classes/HNHRoundedSecureTextField.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">HNHRoundedTextField</string>
<string key="superclassName">NSTextField</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/HNHRoundedTextField.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPDatabaseSettingsWindowController</string>
<string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="clearKey:">id</string>
<string key="close:">id</string>
<string key="generateKey:">id</string>
<string key="save:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="clearKey:">
<string key="name">clearKey:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="close:">
<string key="name">close:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="generateKey:">
<string key="name">generateKey:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="save:">
<string key="name">save:</string>
<string key="candidateClassName">id</string>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="cancelButton">NSButton</string>
<string key="databaseDescriptionTextView">NSTextView</string>
<string key="databaseNameTextField">NSTextField</string>
<string key="defaultUsernameTextField">HNHRoundedTextField</string>
<string key="emptyRecycleBinOnQuitCheckButton">NSButton</string>
<string key="enableRecycleBinCheckButton">NSButton</string>
<string key="errorTextField">NSTextField</string>
@@ -3865,6 +4336,7 @@
<string key="saveButton">NSButton</string>
<string key="sectionTabView">NSTabView</string>
<string key="selectRecycleBinGroupPopUpButton">NSPopUpButton</string>
<string key="templateGroupPopUpButton">NSPopUpButton</string>
<string key="togglePasswordButton">NSButton</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
@@ -3880,6 +4352,10 @@
<string key="name">databaseNameTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="defaultUsernameTextField">
<string key="name">defaultUsernameTextField</string>
<string key="candidateClassName">HNHRoundedTextField</string>
</object>
<object class="IBToOneOutletInfo" key="emptyRecycleBinOnQuitCheckButton">
<string key="name">emptyRecycleBinOnQuitCheckButton</string>
<string key="candidateClassName">NSButton</string>
@@ -3936,6 +4412,10 @@
<string key="name">selectRecycleBinGroupPopUpButton</string>
<string key="candidateClassName">NSPopUpButton</string>
</object>
<object class="IBToOneOutletInfo" key="templateGroupPopUpButton">
<string key="name">templateGroupPopUpButton</string>
<string key="candidateClassName">NSPopUpButton</string>
</object>
<object class="IBToOneOutletInfo" key="togglePasswordButton">
<string key="name">togglePasswordButton</string>
<string key="candidateClassName">NSButton</string>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,18 @@
//
// Kdb3Entry+KVOAdditions.h
// MacPass
//
// Created by Michael Starke on 19.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb3Node.h"
@interface Kdb3Entry (KVOAdditions)
- (NSUInteger)countOfBinaries;
- (id)objectInBinariesAtIndex:(NSUInteger)index;
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index;
- (void)insertObject:(id)binary inBinariesAtIndex:(NSUInteger)index;
@end

View File

@@ -0,0 +1,31 @@
//
// Kdb3Entry+KVOAdditions.m
// MacPass
//
// Created by Michael Starke on 19.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb3Entry+KVOAdditions.h"
@implementation Kdb3Entry (KVOAdditions)
- (NSUInteger)countOfBinaries {
return (self.binary != nil ? 1 : 0);
}
- (id)objectInBinariesAtIndex:(NSUInteger)index {
return self.binary;
}
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index {
if(self.binary ) {
self.binary = nil;
self.binaryDesc = nil;
}
}
- (void)insertObject:(id)binary inBinariesAtIndex:(NSUInteger)index {
return;//
}
@end

View File

@@ -20,4 +20,6 @@
/* Returns the group with the UUID */
- (KdbGroup *)groupForUUID:(UUID *)uuid;
- (BOOL)isAnchestorOfGroup:(KdbGroup *)group;
@end

View File

@@ -49,4 +49,18 @@
return [filteredGroups lastObject];
}
- (BOOL)isAnchestorOfGroup:(KdbGroup *)group {
if(group == nil) {
return NO;
}
KdbGroup *ancestor = self.parent;
while(ancestor.parent) {
if(group == self) {
return YES;
}
ancestor = ancestor.parent;
}
return NO;
}
@end

View File

@@ -9,9 +9,9 @@
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSUInteger, MPActionType) {
MPUnkownAction, // Netural element to be used for returns
MPActionAddEntry, // Add an new entry
MPActionAddGroup, // Add a new group
MPActionEdit, // Edit entry or group
MPActionDelete, // Delete entry or group
MPActionCopyUsername, // copy username to pasteboard
MPActionCopyPassword, // copy password to pasteboard
@@ -25,5 +25,6 @@ typedef NS_ENUM(NSUInteger, MPActionType) {
@interface MPActionHelper : NSObject
+ (SEL)actionOfType:(MPActionType)type;
+ (MPActionType)typeForAction:(SEL)action;
@end

View File

@@ -10,25 +10,42 @@
@implementation MPActionHelper
+ (SEL)actionOfType:(MPActionType)type {
+ (NSDictionary *)_actionDictionary {
static NSDictionary *actionDict;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
actionDict = @{
@(MPActionAddEntry) : @"createEntry:",
@(MPActionAddGroup) : @"createGroup:",
@(MPActionCopyPassword) : @"copyPassword:",
@(MPActionCopyURL) : @"copyURL:",
@(MPActionCopyUsername) : @"copyUsername:",
@(MPActionDelete) : @"deleteNode:",
@(MPActionEdit) : @"editEntry:",
@(MPActionOpenURL) : @"openURL:",
@(MPActionToggleInspector) : @"toggleInspector:",
@(MPActionLock) : @"lock:",
@(MPActionEmptyTrash) : @"emptyTrash:"
};
@(MPActionAddEntry) : @"createEntry:",
@(MPActionAddGroup) : @"createGroup:",
@(MPActionCopyPassword) : @"copyPassword:",
@(MPActionCopyURL) : @"copyURL:",
@(MPActionCopyUsername) : @"copyUsername:",
@(MPActionDelete) : @"deleteNode:",
@(MPActionOpenURL) : @"openURL:",
@(MPActionToggleInspector) : @"toggleInspector:",
@(MPActionLock) : @"lock:",
@(MPActionEmptyTrash) : @"emptyTrash:"
};
});
return actionDict;
}
+ (SEL)actionOfType:(MPActionType)type {
NSDictionary *actionDict = [self _actionDictionary];
return NSSelectorFromString(actionDict[@(type)]);
}
+ (MPActionType)typeForAction:(SEL)action {
NSString *selectorString = NSStringFromSelector(action);
NSArray *selectors = [[self _actionDictionary] allValues];
NSUInteger index = [selectors indexOfObject:selectorString];
if(index == NSNotFound) {
return MPUnkownAction;
}
NSArray *keys = [[self _actionDictionary] allKeysForObject:selectorString];
NSAssert([keys count] == 1, @"There should only be one object for the specified key");
return [[keys lastObject] integerValue];
}
@end

View File

@@ -112,11 +112,21 @@
NSDocumentController *documentController = [NSDocumentController sharedDocumentController];
NSArray *documents = [documentController documents];
NSArray *recentDocuments = [documentController recentDocumentURLs];
if([documents count] == 0 && [recentDocuments count] > 0) {
NSURL *url = recentDocuments[0];
[documentController openDocumentWithContentsOfURL:url display:YES completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {
// do nothing
}];
if([documents count] > 0 ) {
return; // There's already a document restored
}
NSURL *documentUrl;
if([recentDocuments count] > 0) {
documentUrl = recentDocuments[0];
}
else {
NSString *lastPath = [[NSUserDefaults standardUserDefaults] stringForKey:kMPSettingsKeyLastDatabasePath];
documentUrl = [NSURL URLWithString:lastPath];
}
if([documentUrl isFileURL]) {
[documentController openDocumentWithContentsOfURL:documentUrl display:YES
completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {}];
}
}

View File

@@ -12,6 +12,7 @@
#import "MPSelectedAttachmentTableCellView.h"
#import "Kdb4Node.h"
#import "Kdb3Node.h"
#import "HNHTableRowView.h"
@@ -20,9 +21,16 @@
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
NSTableView *tableView = [notification object];
NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[tableView tableColumns] count])];
Kdb4Entry *entryv4 = (Kdb4Entry *)self.viewController.selectedEntry;
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [entryv4.binaries count] )];
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) {
Kdb4Entry *entryv4 = (Kdb4Entry *)self.viewController.selectedEntry;
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [entryv4.binaries count] )];
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
}
if([self.viewController.selectedEntry isKindOfClass:[Kdb3Entry class]]) {
Kdb3Entry *entryv3 = (Kdb3Entry *)self.viewController.selectedEntry;
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, (entryv3.binary ? 1 : 0 ))];
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
}
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
@@ -50,7 +58,9 @@
[[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[binaryRef.key pathExtension]]];
}
else {
// Create view to support only one binary!
Kdb3Entry *entry= (Kdb3Entry *)self.viewController.selectedEntry;
[[view textField] bind:NSValueBinding toObject:entry withKeyPath:@"binaryDesc" options:nil];
[[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[entry.binaryDesc pathExtension]]];
}
return view;
}

View File

@@ -12,13 +12,15 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
MPDatabaseSettingsTabGeneral,
MPDatabaseSettingsTabPassword,
MPDatabaseSettingsTabDisplay,
MPDatabaseSettingsTabAdvanced
MPDatabaseSettingsTabAdvanced,
MPDatabaseSettingsTemplatesTab,
};
@class MPDocument;
@class HNHRoundendTextField;
@class HNHRoundedSecureTextField;
@interface MPDatabaseSettingsWindowController : NSWindowController <NSTextFieldDelegate>
@interface MPDatabaseSettingsWindowController : NSWindowController <NSTextFieldDelegate, NSTabViewDelegate>
@property (weak) IBOutlet NSTabView *sectionTabView;
@property (weak) IBOutlet NSButton *saveButton;
@@ -51,6 +53,12 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
@property (weak) IBOutlet NSButton *emptyRecycleBinOnQuitCheckButton;
@property (weak) IBOutlet NSPopUpButton *selectRecycleBinGroupPopUpButton;
/* Templates Tab */
@property (weak) IBOutlet HNHRoundendTextField *defaultUsernameTextField;
@property (weak) IBOutlet NSPopUpButton *templateGroupPopUpButton;
- (id)initWithDocument:(MPDocument *)document;
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab;

View File

@@ -11,7 +11,9 @@
#import "MPDocumentWindowController.h"
#import "MPDatabaseVersion.h"
#import "MPIconHelper.h"
#import "MPSettingsHelper.h"
#import "HNHRoundedTextField.h"
#import "HNHRoundedSecureTextField.h"
#import "NSString+Empty.h"
@@ -22,6 +24,7 @@
@interface MPDatabaseSettingsWindowController () {
MPDocument *_document;
NSString *_missingFeature;
}
@property (nonatomic,assign) BOOL trashEnabled;
@@ -43,6 +46,7 @@
_document = document;
_showPassword = NO;
_hasValidPasswordOrKey = NO;
_missingFeature = NSLocalizedString(@"KDBX_ONLX_FEATURE", "Feature only available in kdbx databases");
}
return self;
}
@@ -55,16 +59,10 @@
[self.saveButton bind:NSEnabledBinding toObject:self withKeyPath:@"hasValidPasswordOrKey" options:nil];
[self.cancelButton bind:NSEnabledBinding toObject:self withKeyPath:@"hasValidPasswordOrKey" options:nil];
Kdb4Tree *tree = _document.treeV4;
if( tree ) {
[self _setupDatabase:tree];
[self _setupProtectionTab:tree];
[self _setupAdvancedTab:tree];
[self _setupPasswordTab:tree];
}
else {
// Switch to KdbV3 View
}
[self.sectionTabView setDelegate:self];
[self update];
}
- (IBAction)save:(id)sender {
@@ -81,15 +79,37 @@
/* Advanced */
_document.treeV4.recycleBinEnabled = self.trashEnabled;
NSMenuItem *menuItem = [self.selectRecycleBinGroupPopUpButton selectedItem];
KdbGroup *group = [menuItem representedObject];
[_document useGroupAsTrash:group];
NSMenuItem *trashMenuItem = [self.selectRecycleBinGroupPopUpButton selectedItem];
KdbGroup *trashGroup = [trashMenuItem representedObject];
[_document useGroupAsTrash:trashGroup];
_document.treeV4.protectNotes = [self.protectNotesCheckButton state] == NSOnState;
_document.treeV4.protectPassword = [self.protectPasswortCheckButton state] == NSOnState;
_document.treeV4.protectTitle = [self.protectTitleCheckButton state] == NSOnState;
_document.treeV4.protectUrl = [self.protectURLCheckButton state] == NSOnState;
_document.treeV4.protectUserName = [self.protectUserNameCheckButton state] == NSOnState;
NSMenuItem *templateMenuItem = [self.templateGroupPopUpButton selectedItem];
KdbGroup *templateGroup = [templateMenuItem representedObject];
[_document useGroupAsTemplate:templateGroup];
BOOL protectNotes = [self.protectNotesCheckButton state] == NSOnState;
BOOL protectPassword = [self.protectPasswortCheckButton state] == NSOnState;
BOOL protectTitle = [self.protectTitleCheckButton state] == NSOnState;
BOOL protectURL = [self.protectURLCheckButton state] == NSOnState;
BOOL protectUsername = [self.protectUserNameCheckButton state] == NSOnState;
if(_document.version == MPDatabaseVersion4) {
_document.treeV4.protectNotes = protectNotes;
_document.treeV4.protectPassword = protectPassword;
_document.treeV4.protectTitle = protectTitle;
_document.treeV4.protectUrl = protectURL;
_document.treeV4.protectUserName = protectUsername;
}
else {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:protectNotes forKey:kMPSettingsKeyLegacyHideNotes];
[defaults setBool:protectPassword forKey:kMPSettingsKeyLegacyHidePassword];
[defaults setBool:protectTitle forKey:kMPSettingsKeyLegacyHideTitle];
[defaults setBool:protectURL forKey:kMPSettingsKeyLegacyHideURL];
[defaults setBool:protectUsername forKey:kMPSettingsKeyLegacyHideUsername];
[defaults synchronize];
}
/* Close to finish */
[self close:nil];
@@ -104,16 +124,27 @@
- (void)update {
/* Update all stuff that might have changed */
Kdb4Tree *tree = _document.treeV4;
if(tree) {
[self _setupDatabase:tree];
[self _setupProtectionTab:tree];
[self _setupAdvancedTab:tree];
[self _setupPasswordTab:tree];
}
[self _setupPasswordTab:tree];
[self _setupDatabase:tree];
[self _setupProtectionTab:tree];
[self _setupAdvancedTab:tree];
[self _setupTemplatesTab:tree];
}
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab {
/*
We need to make sure the window is loaded
so we just call the the getter and led teh loading commence
*/
if(![self window]) {
return;
}
self.showPassword = NO;
NSTabViewItem *tabViewItem = [self.sectionTabView tabViewItemAtIndex:tab];
BOOL canSelectTab = [self tabView:self.sectionTabView shouldSelectTabViewItem:tabViewItem];
if(!canSelectTab) {
[self.sectionTabView selectTabViewItemAtIndex:MPDatabaseSettingsTabPassword];
}
[self.sectionTabView selectTabViewItemAtIndex:tab];
}
@@ -139,11 +170,29 @@
- (IBAction)generateKey:(id)sender {
}
#pragma makr NSTextFieldDelegate
#pragma mark NSTextFieldDelegate
- (void)controlTextDidChange:(NSNotification *)obj {
[self _verifyPasswordAndKey];
}
#pragma mark NSTableViewDelegate
- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem {
NSUInteger index = [tabView indexOfTabViewItem:tabViewItem];
switch ((MPDatabaseSettingsTab)index) {
case MPDatabaseSettingsTabPassword:
case MPDatabaseSettingsTabDisplay:
return YES;
case MPDatabaseSettingsTabAdvanced:
case MPDatabaseSettingsTabGeneral:
case MPDatabaseSettingsTemplatesTab:
return (_document.version == MPDatabaseVersion4);
default:
return NO;
}
}
#pragma mark Private Helper
- (void)_verifyPasswordAndKey {
NSString *password = [self.passwordTextField stringValue];
@@ -153,7 +202,7 @@
if(hasKey) {
keyOk = [self.keyURL checkResourceIsReachableAndReturnError:nil];
}
BOOL hasPassword = ![password isEmpty];
BOOL hasPassword = ![NSString isEmptyString:password];
BOOL passwordOk = YES;
if(hasPassword ) {
passwordOk = [password isEqualToString:repeat] || self.showPassword;
@@ -180,28 +229,53 @@
}
- (void)_setupDatabase:(Kdb4Tree *)tree {
[self.databaseNameTextField setStringValue:tree.databaseName];
[self.databaseDescriptionTextView setString:tree.databaseDescription];
BOOL isKdbx = (nil != tree);
[self.databaseDescriptionTextView setEditable:isKdbx];
[self.databaseNameTextField setEnabled:isKdbx];
if(isKdbx) {
[self.databaseNameTextField setStringValue:tree.databaseName];
[self.databaseDescriptionTextView setString:tree.databaseDescription];
}
else {
[self.databaseNameTextField setStringValue:_missingFeature];
[self.databaseDescriptionTextView setString:_missingFeature];
}
}
- (void)_setupProtectionTab:(Kdb4Tree *)tree {
[self.protectNotesCheckButton setState:tree.protectNotes ? NSOnState : NSOffState ];
[self.protectNotesCheckButton setState:tree.protectPassword ? NSOnState : NSOffState];
[self.protectTitleCheckButton setState:tree.protectTitle ? NSOnState : NSOffState];
[self.protectURLCheckButton setState:tree.protectUrl ? NSOnState : NSOffState];
[self.protectUserNameCheckButton setState:tree.protectUserName ? NSOnState : NSOffState];
BOOL isKdbX = (nil != tree);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL protectNotes = isKdbX ? tree.protectNotes : [defaults boolForKey:kMPSettingsKeyLegacyHideNotes];
BOOL protectPassword = isKdbX ? tree.protectPassword : [defaults boolForKey:kMPSettingsKeyLegacyHidePassword];
BOOL protectTitle = isKdbX ? tree.protectTitle : [defaults boolForKey:kMPSettingsKeyLegacyHideTitle];
BOOL protectUrl = isKdbX ? tree.protectUrl : [defaults boolForKey:kMPSettingsKeyLegacyHideURL];
BOOL protectUsername = isKdbX ? tree.protectUserName : [defaults boolForKey:kMPSettingsKeyLegacyHideUsername];
[self.protectNotesCheckButton setState:protectNotes ? NSOnState : NSOffState ];
[self.protectPasswortCheckButton setState:protectPassword ? NSOnState : NSOffState];
[self.protectTitleCheckButton setState:protectTitle ? NSOnState : NSOffState];
[self.protectURLCheckButton setState:protectUrl ? NSOnState : NSOffState];
[self.protectUserNameCheckButton setState:protectUsername ? NSOnState : NSOffState];
}
- (void)_setupAdvancedTab:(Kdb4Tree *)tree {
self.trashEnabled = tree.recycleBinEnabled;
BOOL isKdbX = (nil != tree);
self.trashEnabled = isKdbX ? tree.recycleBinEnabled : NO;
[self.enableRecycleBinCheckButton bind:NSValueBinding toObject:self withKeyPath:@"trashEnabled" options:nil];
[self.enableRecycleBinCheckButton setEnabled:isKdbX];
[self.selectRecycleBinGroupPopUpButton bind:NSEnabledBinding toObject:self withKeyPath:@"trashEnabled" options:nil];
[self _updateTrashFolders:tree];
if(isKdbX) {
[self _updateTrashFolders:tree];
}
}
- (void)_setupPasswordTab:(Kdb4Tree *)tree {
[self.passwordTextField setStringValue:_document.password ? _document.password : @""];
[self.passwordRepeatTextField setStringValue:[self.passwordRepeatTextField stringValue]];
[self.passwordRepeatTextField setStringValue:[self.passwordTextField stringValue]];
self.keyURL = _document.key;
NSDictionary *negateOption = @{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName };
@@ -218,11 +292,44 @@
[self _verifyPasswordAndKey];
}
- (void)_setupTemplatesTab:(Kdb4Tree *)tree {
}
- (void)_updateTrashFolders:(Kdb4Tree *)tree {
NSMenu *menu = [self _buildTreeMenu:tree];
NSMenu *menu = [self _buildTrashTreeMenu:tree];
[self.selectRecycleBinGroupPopUpButton setMenu:menu];
}
- (void)_updateTemplateGroup:(Kdb4Tree *)tree {
//
}
- (NSMenu *)_buildTrashTreeMenu:(Kdb4Tree *)tree {
NSMenu *menu = [self _buildTreeMenu:tree];
NSMenuItem *selectItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOCREATE_TRASH_FOLDER", @"Menu item for automatic trash creation")
action:NULL
keyEquivalent:@""];
[selectItem setEnabled:YES];
[menu insertItem:selectItem atIndex:0];
return menu;
}
- (NSMenu *)_buildTemplateTreeMenu:(Kdb4Tree *)tree {
NSMenu *menu = [self _buildTreeMenu:tree];
NSMenuItem *selectItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"NO_TEMPLATE_GROUP", @"Menu item to reset the template groups")
action:NULL
keyEquivalent:@""];
[selectItem setEnabled:YES];
[menu insertItem:selectItem atIndex:0];
return menu;
}
- (NSMenu *)_buildTreeMenu:(Kdb4Tree *)tree {
NSMenu *menu = [[NSMenu alloc] init];
[menu setAutoenablesItems:NO];
@@ -238,10 +345,7 @@
}
[menu addItem:groupItem];
}
NSMenuItem *selectItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SELECT_RECYCLEBIN", @"Menu item if no reycleBin is selected") action:NULL keyEquivalent:@""];
[selectItem setEnabled:YES];
[menu insertItem:selectItem atIndex:0];
return menu;
}
@end

View File

@@ -12,6 +12,7 @@
#import "NSData+Gzip.h"
#import "Kdb3Node.h"
#import "Kdb3Entry+KVOAdditions.h"
#import "Kdb4Node.h"
#import "Kdb4Entry+KVOAdditions.h"
@@ -31,6 +32,7 @@
}
entry.binary = binaryData;
entry.binaryDesc = fileName;
[entry insertObject:@"" inBinariesAtIndex:1];
}
if( [anEntry isKindOfClass:[Kdb4Entry class]]) {
Kdb4Entry *entry = (Kdb4Entry *)anEntry;
@@ -68,7 +70,7 @@
else {
encodedData = fileData;
}
binary.data = [[NSString alloc] initWithData:encodedData encoding:NSASCIIStringEncoding];
binary.data = [[NSString alloc] initWithData:encodedData encoding:NSUTF8StringEncoding];
[self.treeV4.binaries addObject:binary];
BinaryRef *ref = [[BinaryRef alloc] init];
@@ -103,6 +105,14 @@
[self.treeV4.binaries removeObject:binary];
}
- (void)removeAttachmentFromEntry:(KdbEntry *)anEntry {
if(self.version != MPDatabaseVersion3) {
return;
}
Kdb3Entry *entry = (Kdb3Entry *)anEntry;
[entry removeObjectFromBinariesAtIndex:0];
}
- (Binary *)findBinary:(BinaryRef *)reference {
if(self.version != MPDatabaseVersion4) {
return nil;
@@ -120,11 +130,11 @@
NSData *rawData = nil;
if(binary) {
if(binary.compressed) {
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSASCIIStringEncoding]];
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSUTF8StringEncoding]];
rawData = [rawData gzipInflate];
}
else {
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSASCIIStringEncoding]];
rawData = [NSMutableData mutableDataWithBase64DecodedData:[binary.data dataUsingEncoding:NSUTF8StringEncoding]];
}
NSError *error = nil;
if( ![rawData writeToURL:location options:0 error:&error] ) {

View File

@@ -42,6 +42,7 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
@property (strong, readonly, nonatomic) KdbTree *tree;
@property (weak, readonly, nonatomic) KdbGroup *root;
@property (readonly, strong) MPRootAdapter *rootAdapter;
@property (weak, readonly) KdbGroup *trash;
@property (nonatomic, copy) NSString *password;
@property (nonatomic, strong) NSURL *key;
@@ -66,6 +67,9 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
- (Kdb3Tree *)treeV3;
- (void)useGroupAsTrash:(KdbGroup *)group;
- (void)useGroupAsTemplate:(KdbGroup *)group;
- (BOOL)isItemTrashed:(id)item;
#pragma mark Export
- (void)writeXMLToURL:(NSURL *)url;
@@ -79,7 +83,6 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
/*
All non-setter undoable actions
*/
- (BOOL)group:(KdbGroup *)group isMoveableToGroup:(KdbGroup *)target;
/* TODO in UNDO auslagen */
- (void)addStringField:(StringField *)field toEntry:(Kdb4Entry *)entry atIndex:(NSUInteger)index;
@@ -98,6 +101,7 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
- (void)saveAttachmentFromEntry:(KdbEntry *)anEntry toLocation:(NSURL *)location;
- (void)saveAttachment:(BinaryRef *)reference toLocation:(NSURL *)location;
- (void)removeAttachment:(BinaryRef *)reference fromEntry:(KdbEntry *)anEntry;
- (void)removeAttachmentFromEntry:(KdbEntry *)anEntry;
- (NSUInteger)nextBinaryId;
- (Binary *)findBinary:(BinaryRef *)reference;

View File

@@ -13,6 +13,7 @@
#import "MPRootAdapter.h"
#import "MPIconHelper.h"
#import "MPActionHelper.h"
#import "MPSettingsHelper.h"
#import "KdbLib.h"
#import "Kdb3Node.h"
@@ -65,7 +66,6 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
@property (strong) NSURL *lockFileURL;
@property (readonly) BOOL useTrash;
@property (weak, readonly) KdbGroup *trash;
@property (strong) IBOutlet NSView *warningView;
@property (weak) IBOutlet NSImageView *warningViewImage;
@@ -166,6 +166,13 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
- (void)close {
[self _cleanupLock];
/*
We store the last url. Restored windows are automatically handeld.
If closeAllDocuments is set, all docs get this messgae
*/
if([[self fileURL] isFileURL]) {
[[NSUserDefaults standardUserDefaults] setObject:[self.fileURL absoluteString] forKey:kMPSettingsKeyLastDatabasePath];
}
[super close];
}
@@ -307,6 +314,26 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
return nil;
}
- (BOOL)isItemTrashed:(id)item {
BOOL validItem = [item isKindOfClass:[KdbEntry class]] || [item isKindOfClass:[KdbGroup class]];
if(!item) {
return NO;
}
if(item == self.trash) {
return NO; // No need to look further as this is the trashcan
}
if(validItem) {
BOOL isTrashed = NO;
id parent = [item parent];
while( parent && !isTrashed ) {
isTrashed = (parent == self.trash);
parent = [parent parent];
}
return isTrashed;
}
return NO;
}
- (void)useGroupAsTrash:(KdbGroup *)group {
if(self.useTrash) {
Kdb4Group *groupv4 = (Kdb4Group *)group;
@@ -316,11 +343,24 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
}
}
- (void)useGroupAsTemplate:(KdbGroup *)group {
Kdb4Group *groupv4 = (Kdb4Group *)group;
if([self.treeV4.entryTemplatesGroup isEqual:groupv4.uuid]) {
self.treeV4.entryTemplatesGroup = groupv4.uuid;
}
}
#pragma mark Data manipulation
- (KdbEntry *)createEntry:(KdbGroup *)parent {
if(!parent) {
return nil; // No parent
}
if(parent == self.trash) {
return nil; // no new Groups in trash
}
if([self isItemTrashed:parent]) {
return nil;
}
KdbEntry *newEntry = [self.tree createEntry:parent];
newEntry.title = NSLocalizedString(@"DEFAULT_ENTRY_TITLE", @"Title for a newly created entry");
if(self.treeV4 && ([self.treeV4.defaultUserName length] > 0)) {
@@ -336,6 +376,12 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
if(!parent) {
return nil; // no parent!
}
if(parent == self.trash) {
return nil; // no new Groups in trash
}
if([self isItemTrashed:parent]) {
return nil;
}
KdbGroup *newGroup = [self.tree createGroup:parent];
newGroup.name = NSLocalizedString(@"DEFAULT_GROUP_NAME", @"Title for a newly created group");
newGroup.image = MPIconFolder;
@@ -359,47 +405,14 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
return newStringField;
}
- (void)moveGroup:(KdbGroup *)group toGroup:(KdbGroup *)target index:(NSInteger)index {
NSInteger oldIndex = [group.parent.groups indexOfObject:group];
if(group.parent == target && oldIndex == index) {
return; // No changes
}
[[[self undoManager] prepareWithInvocationTarget:self] moveGroup:group toGroup:group.parent index:oldIndex];
if(self.trash == target) {
[[self undoManager] setActionName:@"UNDO_DELETE_GROUP"];
}
else {
[[self undoManager] setActionName:@"MOVE_GROUP"];
}
[group.parent removeObjectFromGroupsAtIndex:oldIndex];
if(index < 0 || index > [target.groups count] ) {
index = [target.groups count];
}
[target insertObject:group inGroupsAtIndex:index];
}
- (BOOL)group:(KdbGroup *)group isMoveableToGroup:(KdbGroup *)target {
if(target == nil) {
return NO;
}
BOOL isMovable = YES;
KdbGroup *ancestor = target.parent;
while(ancestor.parent) {
if(ancestor == group) {
isMovable = NO;
break;
}
ancestor = ancestor.parent;
}
return isMovable;
}
- (void)deleteEntry:(KdbEntry *)entry {
if(self.useTrash) {
if(!self.trash) {
[self _createTrashGroup];
}
if([self isItemTrashed:entry]) {
return; // Entry is already trashed
}
[entry moveToTrashUndoable:self.trash atIndex:[self.trash.entries count]];
}
else {
@@ -412,6 +425,9 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
if(!self.trash) {
[self _createTrashGroup];
}
if( (group == self.trash) || [self isItemTrashed:group] ) {
return; //Groups already trashed cannot be deleted
}
[group moveToTrashUndoable:self.trash atIndex:[self.trash.groups count]];
}
else {
@@ -442,6 +458,9 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
#pragma mark Actions
- (void)emptyTrash:(id)sender {
if(self.version != MPDatabaseVersion4) {
return; // We have no trash on those file types
}
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSWarningAlertStyle];
[alert setMessageText:NSLocalizedString(@"WARNING_ON_EMPTY_TRASH_TITLE", "")];
@@ -467,6 +486,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
BOOL hasEntries = [self.trash.entries count] > 0;
return (hasEntries || hasGroups);
}
return [super validateUserInterfaceItem:anItem];
}
@@ -510,7 +530,24 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
for(KdbGroup *group in [self.trash childGroups]) {
[[self undoManager] removeAllActionsWithTarget:group];
}
[self _cleanTrashedBinaries];
[self.trash clear];
}
- (void)_cleanTrashedBinaries {
NSMutableSet *clearKeys = [[NSMutableSet alloc] initWithCapacity:20];
NSMutableArray *clearBinaries = [[NSMutableArray alloc] initWithCapacity:[self.treeV4.binaries count]];
for(Kdb4Entry *entry in [self.trash childEntries]) {
for(BinaryRef *binaryRef in entry.binaries) {
[clearKeys addObject:@(binaryRef.ref)];
}
}
for(Binary *binary in self.treeV4.binaries) {
if([clearKeys containsObject:@(binary.binaryId)]) {
[clearBinaries addObject:binary];
}
}
[self.treeV4.binaries removeObjectsInArray:clearBinaries];
}
@end

View File

@@ -32,6 +32,12 @@ APPKIT_EXTERN NSString *const MPCurrentItemChangedNotification;
@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
@returns YES if the action is valid, NO otherwise
*/
- (BOOL)validateAction:(SEL)action forItem:(id)item;
- (void)showEntries;
- (void)showPasswordInput;
@@ -40,7 +46,7 @@ APPKIT_EXTERN NSString *const MPCurrentItemChangedNotification;
- (IBAction)showDatabaseSettings:(id)sender;
- (IBAction)exportDatabase:(id)sender;
- (void)lock:(id)sender;
- (IBAction)lock:(id)sender;
- (void)createGroup:(id)sender;
- (void)toggleInspector:(id)sender;

View File

@@ -192,6 +192,9 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
if(itemAction == @selector(exportDatabase:)) {
enabled = (nil != document.treeV4);
}
if(itemAction == [MPActionHelper actionOfType:MPActionDelete]) {
enabled &= (nil != _currentItem) && (_currentItem != document.trash);
}
enabled &= !( !document.decrypted || document.isLocked || document.isReadOnly );
return enabled;
@@ -202,20 +205,55 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
if(!document.decrypted || document.isLocked || document.isReadOnly) {
return NO;
}
SEL itemAction = [theItem action];
if( itemAction == [MPActionHelper actionOfType:MPActionLock]) {
return document.hasPasswordOrKey;
MPActionType actionType = [MPActionHelper typeForAction:[theItem action]];
switch (actionType) {
case MPActionAddGroup:
case MPActionAddEntry:
return (nil != _outlineViewController.selectedGroup);
case MPActionDelete: {
BOOL valid = (nil != _currentItem);
valid &= (_currentItem != document.trash);
valid &= ![document isItemTrashed:_currentItem];
return valid;
}
case MPActionLock:
return document.hasPasswordOrKey;
case MPActionToggleInspector:
return (nil != [_splitView superview]);
default:
return YES;
}
if(itemAction == [MPActionHelper actionOfType:MPActionAddEntry]) {
return (nil != _outlineViewController.selectedGroup);
return YES;
}
- (BOOL)validateAction:(SEL)action forItem:(id)item {
MPDocument *document = [self document];
if(!document.decrypted || document.isLocked || document.isReadOnly) {
return NO;
}
if(itemAction == [MPActionHelper actionOfType:MPActionDelete]) {
return (nil != _currentItem);
MPActionType actionType = [MPActionHelper typeForAction:action];
switch (actionType) {
case MPActionAddGroup:
case MPActionAddEntry:
// test if Group is in trash
return (nil != _outlineViewController.selectedGroup);
case MPActionDelete: {
BOOL valid = (nil != _currentItem);
valid &= (_currentItem != document.trash);
valid &= ![document isItemTrashed:_currentItem];
return valid;
}
case MPActionLock:
return document.hasPasswordOrKey;
case MPActionToggleInspector:
return (nil != [_splitView superview]);
default:
return YES;
}
if(itemAction == [MPActionHelper actionOfType:MPActionToggleInspector]) {
return (nil != [_splitView superview]);
}
return YES;
}
@@ -235,7 +273,7 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
[self _showDatabaseSetting:MPDatabaseSettingsTabGeneral];
}
- (void)lock:(id)sender {
- (IBAction)lock:(id)sender {
MPDocument *document = [self document];
if(!document.hasPasswordOrKey) {
return; // Document needs a password/keyfile to be lockable
@@ -349,7 +387,7 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
}
_firstResponder = firstResonder;
if([_firstResponder isKindOfClass:[NSView class]]) {
//self _updateCurrentItem:[NSNotification notificationWithName:@"dummy" object:_firstResponder ]];
[self _updateCurrentItem:[NSNotification notificationWithName:@"dummy" object:_firstResponder ]];
}
}
@@ -363,12 +401,12 @@ NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCur
#pragma mark Helper
- (void)_showDatabaseSetting:(MPDatabaseSettingsTab)tab {
if(!self.documentSettingsWindowController) {
_documentSettingsWindowController = [[MPDatabaseSettingsWindowController alloc] initWithDocument:[self document]];
}
[self.documentSettingsWindowController update];
if(!self.documentSettingsWindowController) {
_documentSettingsWindowController = [[MPDatabaseSettingsWindowController alloc] initWithDocument:[self document]];
}
[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 {

View File

@@ -513,6 +513,11 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
[document deleteEntry:entry];
}
#pragma mark Validation
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
return YES;
}
- (void)_toggleFilterSpace:(id)sender {
NSButton *button = sender;
NSNumber *value = self.filterButtonToMode[[button identifier]];

View File

@@ -17,5 +17,6 @@
@property (weak) IBOutlet NSPopUpButton *idleTimeOutPopup;
@property (weak) IBOutlet NSButton *lockOnSleepCheckButton;
@property (weak) IBOutlet NSButton *reopenLastDatabase;
@property (weak) IBOutlet NSButton *createUntitledOnActivation;
@end

View File

@@ -33,6 +33,7 @@ NSString *const MPGeneralSetingsIdentifier = @"GeneralSettingsTab";
- (void)didLoadView {
NSUserDefaultsController *defaultsController = [NSUserDefaultsController sharedUserDefaultsController];
NSString *reopenLastFilePath = [NSString stringWithFormat:@"values.%@", kMPSettingsKeyReopenLastDatabaseOnLaunch];
//NSString *createUntitledOnActivatePaht = [NSString stringWithFormat:@"values.%@", kMPSettingsKeyOpenEmptyDatabaseOnLaunch];
NSString *clearPasteboardKeyPath = [NSString stringWithFormat:@"values.%@", kMPSettingsKeyClearPasteboardOnQuit];
NSString *clearPasteboardTimeOutKeyPath = [NSString stringWithFormat:@"values.%@", kMPSettingsKeyPasteboardClearTimeout];
NSString *idleTimeOutKeyPath = [NSString stringWithFormat:@"values.%@", kMPSettingsKeyIdleLockTimeOut];
@@ -42,5 +43,7 @@ NSString *const MPGeneralSetingsIdentifier = @"GeneralSettingsTab";
[self.lockOnSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:lockOnSleepKeyPath options:nil];
[self.idleTimeOutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:idleTimeOutKeyPath options:nil];
[self.reopenLastDatabase bind:NSValueBinding toObject:defaultsController withKeyPath:reopenLastFilePath options:nil];
[self.createUntitledOnActivation setState:NSOffState];
//[self.createUntitledOnActivation bind:NSValueBinding toObject:defaultsController withKeyPath:createUntitledOnActivatePaht options:nil];
}
@end

View File

@@ -59,8 +59,8 @@ enum {
@property (strong) NSPopover *activePopover;
@property (weak) IBOutlet NSButton *generatePasswordButton;
@property (nonatomic, weak) NSDate *modificationDate;
@property (nonatomic, weak) NSDate *creationDate;
@property (nonatomic, strong) NSDate *modificationDate;
@property (nonatomic, strong) NSDate *creationDate;
@property (nonatomic, assign) BOOL showPassword;
@@ -137,25 +137,32 @@ enum {
}
- (void)setModificationDate:(NSDate *)modificationDate {
NSString *modificationString = [NSDateFormatter localizedStringFromDate:modificationDate
dateStyle:NSDateFormatterShortStyle
timeStyle:NSDateFormatterShortStyle];
modificationString = [modificationDate humanized];
NSString *modifedAtTemplate = NSLocalizedString(@"MODIFED_AT_%@", @"Modifed at template string. %@ is replaced by locaized date and time");
[self.modifiedTextField setStringValue:[NSString stringWithFormat:modifedAtTemplate, modificationString]];
_modificationDate = modificationDate;
[self _updateDateStrings];
}
- (void)setCreationDate:(NSDate *)creationDate {
NSString *creationString = [NSDateFormatter localizedStringFromDate:creationDate
dateStyle:NSDateFormatterShortStyle
timeStyle:NSDateFormatterShortStyle];
creationString = [creationDate humanized];
_creationDate = creationDate;
[self _updateDateStrings];
}
- (void)_updateDateStrings {
if(!self.creationDate || !self.modificationDate ) {
[self.modifiedTextField setStringValue:@""];
[self.createdTextField setStringValue:@""];
return; // No dates, just clear
}
NSString *creationString = [self.creationDate humanized];
NSString *modificationString = [self.modificationDate humanized];
NSString *modifedAtTemplate = NSLocalizedString(@"MODIFED_AT_%@", @"Modifed at template string. %@ is replaced by locaized date and time");
NSString *createdAtTemplate = NSLocalizedString(@"CREATED_AT_%@", @"Created at template string. %@ is replaced by locaized date and time");
[self.modifiedTextField setStringValue:[NSString stringWithFormat:modifedAtTemplate, modificationString]];
[self.createdTextField setStringValue:[NSString stringWithFormat:createdAtTemplate, creationString]];
}
- (void)_updateContent {
@@ -178,7 +185,7 @@ enum {
[_attachmentsController bind:NSContentArrayBinding toObject:self.selectedEntry withKeyPath:@"binaries" options:nil];
}
else {
/* Use binary from Kdb3Entry */
[_attachmentsController bind:NSContentArrayBinding toObject:self.selectedEntry withKeyPath:@"binaries" options:nil];
}
}
else if([_attachmentsController content] != nil){
@@ -377,9 +384,9 @@ enum {
- (IBAction)removeAttachment:(id)sender {
MPDocument *document = [[self windowController] document];
if(document.version == MPDatabaseVersion3) {
// Uhhhh :D
[document removeAttachmentFromEntry:self.selectedEntry];
}
if(document.version == MPDatabaseVersion4) {
else if(document.version == MPDatabaseVersion4) {
Kdb4Entry *entry = (Kdb4Entry *)self.selectedEntry;
BinaryRef *reference = entry.binaries[[sender tag]];
[document removeAttachment:reference fromEntry:self.selectedEntry];

View File

@@ -77,8 +77,7 @@
accepted &= index != NSOutlineViewDropOnItemIndex;
accepted &= index != [_draggedItem.parent.groups indexOfObject:_draggedItem];
}
MPDocument *document = [[[outlineView window] windowController] document];
accepted = [document group:_draggedItem isMoveableToGroup:target];
accepted = ![_draggedItem isAnchestorOfGroup:target];
if( accepted ) {
[_draggedItem moveToGroupUndoable:target atIndex:index];
}

View File

@@ -19,7 +19,7 @@ APPKIT_EXTERN NSString *const MPOutlineViewDidChangeGroupSelection;
@property (readonly, weak) NSOutlineView *outlineView;
@property (weak) IBOutlet HNHGradientView *bottomBar;
@property (weak, readonly) KdbGroup *selectedGroup;
@property (weak, readonly, nonatomic) KdbGroup *selectedGroup;
- (void)clearSelection;
- (void)showOutline;

View File

@@ -33,7 +33,7 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
}
@property (weak) IBOutlet NSOutlineView *outlineView;
@property (weak) IBOutlet NSButton *addGroupButton;
@property (weak) KdbGroup *selectedGroup;
@property (nonatomic, weak) KdbGroup *selectedGroup;
@property (strong) NSTreeController *treeController;
@property (strong) MPOutlineDataSource *datasource;
@@ -89,6 +89,29 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
[_outlineView expandItem:node expandChildren:YES];
}
#pragma mark Custom Setter/Getter
- (void)setDatabaseNameWrapper:(NSString *)databaseNameWrapper {
if(![_databaseNameWrapper isEqualToString:databaseNameWrapper]) {
if([databaseNameWrapper length] == 0) {
_databaseNameWrapper = NSLocalizedString(@"DATABASE", "Default name database");
}
else {
_databaseNameWrapper= [databaseNameWrapper copy];
}
}
}
//- (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]];
@@ -114,14 +137,26 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
}
}
- (void)setDatabaseNameWrapper:(NSString *)databaseNameWrapper {
if(![_databaseNameWrapper isEqualToString:databaseNameWrapper]) {
if([databaseNameWrapper length] == 0) {
_databaseNameWrapper = NSLocalizedString(@"DATABASE", "Default name database");
}
else {
_databaseNameWrapper= [databaseNameWrapper copy];
#pragma mark Validation
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
MPActionType actionType = [MPActionHelper typeForAction:[menuItem action]];
switch(actionType) {
case MPActionAddEntry:
case MPActionAddGroup:
case MPActionDelete: {
MPDocument *document = [[self windowController] document];
id selected = [self _clickedOrSelectedGroup];
if(!selected) {
return NO;
}
if(selected == document.trash) {
return NO;
}
return ![document isItemTrashed:selected];
}
default:
return YES; // We are only validated for three targets
}
}

View File

@@ -26,10 +26,23 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyShowMenuItem;
APPKIT_EXTERN NSString *const kMPSettingsKeyLockOnSleep;
APPKIT_EXTERN NSString *const kMPSettingsKeyIdleLockTimeOut;
/* Autosaving states */
APPKIT_EXTERN NSString *const kMPSettingsKeyShowInspector;
/* Kdb Hide/Show settings */
APPKIT_EXTERN NSString *const kMPSettingsKeyLegacyHideTitle;
APPKIT_EXTERN NSString *const kMPSettingsKeyLegacyHideUsername;
APPKIT_EXTERN NSString *const kMPSettingsKeyLegacyHidePassword;
APPKIT_EXTERN NSString *const kMPSettingsKeyLegacyHideNotes;
APPKIT_EXTERN NSString *const kMPSettingsKeyLegacyHideURL;
/* Document/Key Location store */
APPKIT_EXTERN NSString *const kMPSettingsKeyLastDatabasePath;
/*
APPKIT_EXTERN NSString *const kMPSettingsKeyLastKeyURL;
APPKIT_EXTERN NSString *const kMPSettingsKeyRememberLastKey;
*/
typedef NS_ENUM(NSUInteger, MPPasswordEncoding) {
MPPasswordEncodingUTF8,
MPPasswordEncodingASCII,

View File

@@ -19,6 +19,14 @@ NSString *const kMPSettingsKeyLockOnSleep = @"LockOnSleep";
NSString *const kMPSettingsKeyIdleLockTimeOut = @"IdleLockTimeOut";
NSString *const kMPSettingsKeyShowInspector = @"ShowInspector";
NSString *const kMPSettingsKeyLegacyHideTitle = @"LegacyHideTitle";
NSString *const kMPSettingsKeyLegacyHideUsername = @"LegacyHideUsername ";
NSString *const kMPSettingsKeyLegacyHidePassword = @"LegacyHidePassword";
NSString *const kMPSettingsKeyLegacyHideNotes = @"LegacyHideNotes";
NSString *const kMPSettingsKeyLegacyHideURL = @"LegacyHideURL";
NSString *const kMPSettingsKeyLastDatabasePath = @"MPLastDatabasePath";
@implementation MPSettingsHelper
+ (void)setupDefaults {
@@ -36,7 +44,12 @@ NSString *const kMPSettingsKeyShowInspector = @"ShowInspector";
kMPSettingsKeyEnableHttpServer: @NO,
kMPSettingsKeyShowMenuItem: @YES,
kMPSettingsKeyLockOnSleep: @YES,
kMPSettingsKeyIdleLockTimeOut: @0 // 5 minutes
kMPSettingsKeyIdleLockTimeOut: @0, // 5 minutes
kMPSettingsKeyLegacyHideNotes: @NO,
kMPSettingsKeyLegacyHidePassword: @YES,
kMPSettingsKeyLegacyHideTitle: @NO,
kMPSettingsKeyLegacyHideURL: @NO,
kMPSettingsKeyLegacyHideUsername: @NO
};
}

View File

@@ -17,7 +17,6 @@
NSString *const MPToolbarItemLock = @"TOOLBAR_LOCK";
NSString *const MPToolbarItemAddGroup = @"TOOLBAR_ADD_GROUP";
NSString *const MPToolbarItemAddEntry = @"TOOLBAR_ADD_ENTRY";
NSString *const MPToolbarItemEdit = @"TOOLBAR_EDIT";
NSString *const MPToolbarItemDelete =@"TOOLBAR_DELETE";
NSString *const MPToolbarItemAction = @"TOOLBAR_ACTION";
NSString *const MPToolbarItemInspector = @"TOOLBAR_INSPECTOR";
@@ -135,7 +134,6 @@ NSString *const MPToolbarItemInspector = @"TOOLBAR_INSPECTOR";
MPToolbarItemAddEntry: NSLocalizedString(@"ADD_ENTRY", @""),
MPToolbarItemAddGroup: NSLocalizedString(@"ADD_GROUP", @""),
MPToolbarItemDelete: NSLocalizedString(@"DELETE", @""),
MPToolbarItemEdit: NSLocalizedString(@"EDIT", @""),
MPToolbarItemInspector: NSLocalizedString(@"INSPECTOR", @"")
};
return labelDict[identifier];
@@ -146,7 +144,6 @@ NSString *const MPToolbarItemInspector = @"TOOLBAR_INSPECTOR";
MPToolbarItemAddEntry: @(MPActionAddEntry),
MPToolbarItemAddGroup: @(MPActionAddGroup),
MPToolbarItemDelete: @(MPActionDelete),
MPToolbarItemEdit: @(MPActionEdit),
MPToolbarItemInspector: @(MPActionToggleInspector)
};
MPActionType actionType = (MPActionType)[actionDict[identifier] integerValue];

View File

@@ -44,11 +44,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.3.5</string>
<string>0.3.6</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>2516</string>
<string>2517</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>

View File

@@ -16,15 +16,38 @@
- (NSString *)humanized {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSMinuteCalendarUnit|NSHourCalendarUnit|NSDayCalendarUnit fromDate:self toDate:[NSDate date] options:0];
if([components day] > 1) {
NSDateComponents *components = [calendar components:NSMinuteCalendarUnit|NSHourCalendarUnit|NSDayCalendarUnit|NSWeekCalendarUnit|NSMonthCalendarUnit fromDate:self toDate:[NSDate date] options:0];
/* More than one month in the past, give full date */
if([components month] > 1) {
return [NSDateFormatter localizedStringFromDate:self
dateStyle:NSDateFormatterShortStyle
timeStyle:NSDateFormatterShortStyle];
}
if([components day] == 1) {
NSUInteger weeks = [components week];
/* More than one week, less than a month */
if(weeks > 1) {
NSString *weekTemplate = NSLocalizedString(@"%ld_WEEKS_AGO", "% Weeks ago");
return [NSString stringWithFormat:weekTemplate, weeks];
}
/* One week or more */
if( weeks == 1) {
return NSLocalizedString(@"ONE_WEEK_AGO", "one week ago");
}
/* Last week */
NSUInteger days = [components day];
if(days > 3) {
return NSLocalizedString(@"LAST_WEEK", "last week");
}
/* 1-3 days */
if(days > 1 ) {
NSString *daysTemplate = NSLocalizedString(@"%ld_DAYS_AGO", "% days ago");
return [NSString stringWithFormat:daysTemplate, days];
}
/* Yesterday */
if(days == 1) {
return NSLocalizedString(@"YESTERDAY", "Yesterday");
}
/* Hours ago */
if([components hour] > 1) {
NSString *hourTemplate = NSLocalizedString(@"%ld_HOURS_AGO", "% Hours ago");
return [NSString stringWithFormat:hourTemplate, [components hour]];

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

View File

@@ -0,0 +1,16 @@
//
// KPKIconLoading.h
// MacPass
//
// Created by Michael Starke on 20.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <SenTestingKit/SenTestingKit.h>
@interface KPKIconLoading : SenTestCase {
NSImage *_image;
NSData *_imageData;
}
@end

View File

@@ -0,0 +1,43 @@
//
// KPKIconLoading.m
// MacPass
//
// Created by Michael Starke on 20.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KPKIconLoading.h"
#import "KPKIcon.h"
@implementation KPKIconLoading
- (void)setUp {
NSBundle *myBundle = [NSBundle bundleForClass:[self class]];
_image = [myBundle imageForResource:@"image.png"];
_imageData = [[[_image representations] lastObject] representationUsingType:NSPNGFileType properties:nil];
}
- (void)tearDown {
_image = nil;
_imageData = nil;
}
- (void)testLoading {
NSBundle *myBundle = [NSBundle bundleForClass:[self class]];
NSURL *imageURL = [myBundle URLForImageResource:@"image.png"];
KPKIcon *icon = [[KPKIcon alloc] initWithImageAtURL:imageURL];
STAssertNotNil(icon, @"Icon should have been loaded");
NSString *iconString = [icon encodedString];
KPKIcon *iconFromString = [[KPKIcon alloc] initWithUUID:[NSUUID UUID] encodedString:iconString];
STAssertTrue([iconString isEqualToString:[iconFromString encodedString]], @"Encoding and Decoding should result in the same string");
Class repClass = [NSBitmapImageRep class];
NSImageRep *imageRep = [[icon.image representations] lastObject];
STAssertNotNil(imageRep, @"One image rep shoudl be there");
STAssertTrue([imageRep isKindOfClass:repClass], @"Representation should be bitmap");
NSBitmapImageRep *bitmapRep = (NSBitmapImageRep *)imageRep;
NSData *pngData = [bitmapRep representationUsingType:NSPNGFileType properties:nil];
STAssertTrue([pngData isEqualToData:_imageData], @"Image and PNG data shoudl be identical");
}
@end

View File

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

View File

@@ -0,0 +1,33 @@
//
// KPKTreeLoadingTest.m
// MacPass
//
// Created by Michael Starke on 20.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KPKTreeLoadingTest.h"
#import "KPKTreeLoader.h"
#import "KPKPassword.h"
@implementation KPKTreeLoadingTest
- (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 {
KPKTreeLoader *loader = [[KPKTreeLoader alloc] initWithData:_data password:_password];
KPKTree *tree = [loader loadTree:NULL];
STAssertNil(tree, @"Loading should broken");
}
@end