From 07dae46b4c79505d56bd7a2e77e1be493a70d8d1 Mon Sep 17 00:00:00 2001 From: michael starke Date: Sun, 28 Jul 2013 13:31:37 +0200 Subject: [PATCH] Fixed #39 Overall search behavior ironed out. Fixed #71 Added A simple entropy calculation for purely random generated passwords Added separate Views for Group and Entry Inspector Added "no Selection" view for Inpsector --- MacPass.xcodeproj/project.pbxproj | 62 +- MacPass/Base.lproj/InspectorView.xib | 5849 +++------------------ MacPass/Base.lproj/PasswordInputView.xib | 2 +- MacPass/DatePickingView.xib | 659 +++ MacPass/EntryInspectorView.xib | 5203 +++++++++++++++++- MacPass/GroupInspectorView.xib | 1148 +++- MacPass/KdbEntry+Undo.m | 2 +- MacPass/MPAppDelegate.m | 44 +- MacPass/MPAttachmentTableViewDelegate.h | 4 +- MacPass/MPAttachmentTableViewDelegate.m | 19 +- MacPass/MPCustomFieldTableViewDelegate.h | 2 +- MacPass/MPCustomFieldTableViewDelegate.m | 9 +- MacPass/MPDatePickingViewController.h | 13 + MacPass/MPDatePickingViewController.m | 29 + MacPass/MPDocument.m | 9 + MacPass/MPEntryInspectorViewController.h | 26 +- MacPass/MPEntryInspectorViewController.m | 271 +- MacPass/MPEntryViewController.m | 53 +- MacPass/MPGroupInspectorViewController.h | 7 + MacPass/MPGroupInspectorViewController.m | 65 +- MacPass/MPInspectorViewController.h | 31 +- MacPass/MPInspectorViewController.m | 450 +- MacPass/MPNotifications.h | 2 +- MacPass/MPNotifications.m | 2 +- MacPass/MPOutlineView.m | 20 +- MacPass/MPOutlineViewController.m | 2 +- MacPass/MPPasswordCreatorViewController.h | 2 +- MacPass/MPPasswordCreatorViewController.m | 34 +- MacPass/MPPasswordInputController.m | 2 + MacPass/MPTableView.m | 20 +- MacPass/MPUniqueCharactersFormatter.m | 22 + MacPass/NSString+MPPasswordCreation.h | 24 +- MacPass/NSString+MPPasswordCreation.m | 11 + MacPass/PasswordCreatorView.xib | 804 ++- MacPass/UnprotectedWarningView.xib | 39 +- MacPass/de.lproj/Localizable.strings | Bin 11178 -> 11178 bytes MacPass/en.lproj/Localizable.strings | Bin 12298 -> 12298 bytes MacPassTests/KPKXmlLoadingTest.m | 6 +- 38 files changed, 9013 insertions(+), 5934 deletions(-) create mode 100644 MacPass/DatePickingView.xib create mode 100644 MacPass/MPDatePickingViewController.h create mode 100644 MacPass/MPDatePickingViewController.m diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 0676b141..88b0b773 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -99,6 +99,13 @@ 4C46E09E17673A0A00DA62E8 /* HNHShadowBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C46E09D17673A0A00DA62E8 /* HNHShadowBox.m */; }; 4C4A100F176286FD00BBF2CA /* MPTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4A100E176286FD00BBF2CA /* MPTableView.m */; }; 4C4A101217629DA900BBF2CA /* KdbGroup+KVOAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4A101117629DA900BBF2CA /* KdbGroup+KVOAdditions.m */; }; + 4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EE717A45EC5000234C7 /* MPDatePickingViewController.m */; }; + 4C4B7EEA17A45EC6000234C7 /* DatePickingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C4B7EE817A45EC5000234C7 /* DatePickingView.xib */; }; + 4C4B7EEE17A467E1000234C7 /* MPGroupInspectorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EEC17A467E1000234C7 /* MPGroupInspectorViewController.m */; }; + 4C4B7EEF17A467E1000234C7 /* GroupInspectorView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C4B7EED17A467E1000234C7 /* GroupInspectorView.xib */; }; + 4C4B7EF317A467FC000234C7 /* MPEntryInspectorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EF117A467FC000234C7 /* MPEntryInspectorViewController.m */; }; + 4C4B7EF417A467FC000234C7 /* EntryInspectorView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C4B7EF217A467FC000234C7 /* EntryInspectorView.xib */; }; + 4C4B7EF817A4B335000234C7 /* MPUniqueCharactersFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EF717A4B335000234C7 /* MPUniqueCharactersFormatter.m */; }; 4C4FCE15177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */; }; 4C4FCE18177D03D700BBF7AE /* Kdb4Entry+KVOAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4FCE17177D03D700BBF7AE /* Kdb4Entry+KVOAdditions.m */; }; 4C52A244177D7B9F0000D88F /* HNHScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C52A243177D7B9F0000D88F /* HNHScrollView.m */; }; @@ -214,7 +221,7 @@ 4CC3AABD175F4983003EF01B /* HNHRoundedTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC3AAB9175F4983003EF01B /* HNHRoundedTextFieldCell.m */; }; 4CC672791781D0C0006DEDCF /* KdbGroup+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC672781781D0C0006DEDCF /* KdbGroup+MPAdditions.m */; }; 4CC6727C1781D0D2006DEDCF /* KdbEntry+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6727B1781D0D2006DEDCF /* KdbEntry+MPAdditions.m */; }; - 4CC7EA1B17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7EA1A17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m */; }; + 4CC7EA1B17807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7EA1A17807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.m */; }; 4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE29179F203B008402BE /* MPOutlineView.m */; }; 4CCEDE2E179F213B008402BE /* MPNotifications.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE2D179F213B008402BE /* MPNotifications.m */; }; 4CCEDE32179F5B6C008402BE /* KPKDataStreamer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE31179F5B6C008402BE /* KPKDataStreamer.m */; }; @@ -432,6 +439,17 @@ 4C4A100E176286FD00BBF2CA /* MPTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTableView.m; sourceTree = ""; }; 4C4A101017629DA900BBF2CA /* KdbGroup+KVOAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KdbGroup+KVOAdditions.h"; sourceTree = ""; }; 4C4A101117629DA900BBF2CA /* KdbGroup+KVOAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KdbGroup+KVOAdditions.m"; sourceTree = ""; }; + 4C4B7EE617A45EC5000234C7 /* MPDatePickingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDatePickingViewController.h; sourceTree = ""; }; + 4C4B7EE717A45EC5000234C7 /* MPDatePickingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDatePickingViewController.m; sourceTree = ""; }; + 4C4B7EE817A45EC5000234C7 /* DatePickingView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DatePickingView.xib; sourceTree = ""; }; + 4C4B7EEB17A467E1000234C7 /* MPGroupInspectorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGroupInspectorViewController.h; sourceTree = ""; }; + 4C4B7EEC17A467E1000234C7 /* MPGroupInspectorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGroupInspectorViewController.m; sourceTree = ""; }; + 4C4B7EED17A467E1000234C7 /* GroupInspectorView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GroupInspectorView.xib; sourceTree = ""; }; + 4C4B7EF017A467FC000234C7 /* MPEntryInspectorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEntryInspectorViewController.h; sourceTree = ""; }; + 4C4B7EF117A467FC000234C7 /* MPEntryInspectorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEntryInspectorViewController.m; sourceTree = ""; }; + 4C4B7EF217A467FC000234C7 /* EntryInspectorView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EntryInspectorView.xib; sourceTree = ""; }; + 4C4B7EF617A4B335000234C7 /* MPUniqueCharactersFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUniqueCharactersFormatter.h; sourceTree = ""; }; + 4C4B7EF717A4B335000234C7 /* MPUniqueCharactersFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUniqueCharactersFormatter.m; sourceTree = ""; }; 4C4FCE13177CFE6B00BBF7AE /* MPCustomFieldTableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCustomFieldTableCellView.h; sourceTree = ""; }; 4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCustomFieldTableCellView.m; sourceTree = ""; }; 4C4FCE16177D03D700BBF7AE /* Kdb4Entry+KVOAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Kdb4Entry+KVOAdditions.h"; sourceTree = ""; }; @@ -653,8 +671,8 @@ 4CC672781781D0C0006DEDCF /* KdbGroup+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KdbGroup+MPAdditions.m"; sourceTree = ""; }; 4CC6727A1781D0D2006DEDCF /* KdbEntry+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KdbEntry+MPAdditions.h"; sourceTree = ""; }; 4CC6727B1781D0D2006DEDCF /* KdbEntry+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KdbEntry+MPAdditions.m"; sourceTree = ""; }; - 4CC7EA1917807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HNHRoundendTextFieldCellHelper.h; sourceTree = ""; }; - 4CC7EA1A17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HNHRoundendTextFieldCellHelper.m; sourceTree = ""; }; + 4CC7EA1917807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HNHRoundedTextFieldCellHelper.h; sourceTree = ""; }; + 4CC7EA1A17807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HNHRoundedTextFieldCellHelper.m; sourceTree = ""; }; 4CCA7EEC1797866F00B0B55E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/GeneralSettings.strings; sourceTree = ""; }; 4CCA7EEE1797867200B0B55E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/GeneralSettings.strings; sourceTree = ""; }; 4CCEDE28179F203B008402BE /* MPOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineView.h; sourceTree = ""; }; @@ -768,9 +786,10 @@ 4CF78061176E752E0032EE71 /* PasswordInputs */, 4C3FFD9D16DAF60600DF9186 /* FilterBar.xib */, 4C18816B179E06920045C5B7 /* TrashBar.xib */, - 4C76156F1764C0E20015A1A6 /* InspectorView.xib */, + 4C4B7EF517A46815000234C7 /* Inspector */, 4CE39AC016ECE359000FE29D /* IconSelection.xib */, 4C2C8B331787500E009649F3 /* UnprotectedWarningView.xib */, + 4C4B7EE817A45EC5000234C7 /* DatePickingView.xib */, 4C74DD05177BD1640034A9DB /* MPCustomFieldView.h */, 4C74DD06177BD1640034A9DB /* MPCustomFieldView.m */, 4CE8247316E2F2B900573141 /* MPOverlayView.h */, @@ -1055,6 +1074,8 @@ 4CA23359176DBFE100F0B6AC /* MPLockDaemon.m */, 4C16BA6017879A3C002B42BD /* MPPasswordStringFormatter.h */, 4C16BA6117879A3C002B42BD /* MPPasswordStringFormatter.m */, + 4C4B7EF617A4B335000234C7 /* MPUniqueCharactersFormatter.h */, + 4C4B7EF717A4B335000234C7 /* MPUniqueCharactersFormatter.m */, ); name = Helper; sourceTree = ""; @@ -1137,6 +1158,16 @@ name = "Supporting Files"; sourceTree = ""; }; + 4C4B7EF517A46815000234C7 /* Inspector */ = { + isa = PBXGroup; + children = ( + 4C76156F1764C0E20015A1A6 /* InspectorView.xib */, + 4C4B7EED17A467E1000234C7 /* GroupInspectorView.xib */, + 4C4B7EF217A467FC000234C7 /* EntryInspectorView.xib */, + ); + name = Inspector; + sourceTree = ""; + }; 4C586F9C16D07ABD00E7DB57 /* Icons */ = { isa = PBXGroup; children = ( @@ -1358,10 +1389,16 @@ 4CDF01A216D1B76700D0AC08 /* MPEntryViewController.m */, 4C61EA0116D2FD0800AC519E /* MPOutlineViewController.h */, 4C61EA0216D2FD0800AC519E /* MPOutlineViewController.m */, - 4C77547316E55FE800970E02 /* MPInspectorViewController.h */, - 4C77547416E55FE800970E02 /* MPInspectorViewController.m */, 4CE39ABD16ECE34A000FE29D /* MPIconSelectViewController.h */, 4CE39ABE16ECE34A000FE29D /* MPIconSelectViewController.m */, + 4C4B7EE617A45EC5000234C7 /* MPDatePickingViewController.h */, + 4C4B7EE717A45EC5000234C7 /* MPDatePickingViewController.m */, + 4C77547316E55FE800970E02 /* MPInspectorViewController.h */, + 4C77547416E55FE800970E02 /* MPInspectorViewController.m */, + 4C4B7EEB17A467E1000234C7 /* MPGroupInspectorViewController.h */, + 4C4B7EEC17A467E1000234C7 /* MPGroupInspectorViewController.m */, + 4C4B7EF017A467FC000234C7 /* MPEntryInspectorViewController.h */, + 4C4B7EF117A467FC000234C7 /* MPEntryInspectorViewController.m */, ); name = "View Controller"; sourceTree = ""; @@ -1425,8 +1462,8 @@ children = ( 4C46E09C17673A0A00DA62E8 /* HNHShadowBox.h */, 4C46E09D17673A0A00DA62E8 /* HNHShadowBox.m */, - 4CC7EA1917807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.h */, - 4CC7EA1A17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m */, + 4CC7EA1917807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.h */, + 4CC7EA1A17807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.m */, 4C79DF28176685870083708F /* HNHRoundedTextField.h */, 4C79DF29176685870083708F /* HNHRoundedTextField.m */, 4CD6C5AC1789FDE6000891F6 /* HNHRoundedSecureTextField.h */, @@ -1751,6 +1788,9 @@ 4C52A892178863B000868229 /* 68_PhoneTemplate.pdf in Resources */, 4C18816C179E06920045C5B7 /* TrashBar.xib in Resources */, 4C96D15417A12E4F00D931FA /* 99_CreatedTemplate.pdf in Resources */, + 4C4B7EEA17A45EC6000234C7 /* DatePickingView.xib in Resources */, + 4C4B7EEF17A467E1000234C7 /* GroupInspectorView.xib in Resources */, + 4C4B7EF417A467FC000234C7 /* EntryInspectorView.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1926,7 +1966,7 @@ 4C4FCE18177D03D700BBF7AE /* Kdb4Entry+KVOAdditions.m in Sources */, 4C52A244177D7B9F0000D88F /* HNHScrollView.m in Sources */, 4C3E1CC0177DEFB3003BD9BD /* StringField+Undo.m in Sources */, - 4CC7EA1B17807E7E0089D4F3 /* HNHRoundendTextFieldCellHelper.m in Sources */, + 4CC7EA1B17807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.m in Sources */, 4CC672791781D0C0006DEDCF /* KdbGroup+MPAdditions.m in Sources */, 4CC6727C1781D0D2006DEDCF /* KdbEntry+MPAdditions.m in Sources */, 4C5FE9AE17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m in Sources */, @@ -1976,6 +2016,10 @@ 4CCEDE32179F5B6C008402BE /* KPKDataStreamer.m in Sources */, 4C17D8E517A1C780006C8C1E /* MPDocumentWindowDelegate.m in Sources */, 4C63B8FB17A3154D0091BD72 /* MPContextToolbarButton.m in Sources */, + 4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */, + 4C4B7EEE17A467E1000234C7 /* MPGroupInspectorViewController.m in Sources */, + 4C4B7EF317A467FC000234C7 /* MPEntryInspectorViewController.m in Sources */, + 4C4B7EF817A4B335000234C7 /* MPUniqueCharactersFormatter.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MacPass/Base.lproj/InspectorView.xib b/MacPass/Base.lproj/InspectorView.xib index b8fc0510..e9503c88 100644 --- a/MacPass/Base.lproj/InspectorView.xib +++ b/MacPass/Base.lproj/InspectorView.xib @@ -12,26 +12,14 @@ IBNSLayoutConstraint - NSButton - NSButtonCell NSCustomObject NSCustomView NSImageCell NSImageView - NSScrollView - NSScroller - NSSecureTextField - NSSecureTextFieldCell - NSSegmentedCell - NSSegmentedControl NSTabView NSTabViewItem - NSTableCellView - NSTableColumn - NSTableView NSTextField NSTextFieldCell - NSTextView NSView @@ -51,48 +39,91 @@ NSApplication - + - 256 + 268 - - + + + 268 + {{57, 409}, {204, 17}} + + + + _NS:1535 + {249, 750} + YES + + 67108928 + 272636224 + Label + + LucidaGrande + 13 + 1044 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{20, 401}, {32, 32}} + + + + _NS:9 + YES + + 134217728 + 33554432 + + NSImage + NSActionTemplate + + _NS:9 + 0 + 3 + 0 + NO + + NO + YES + + + 268 - - - 268 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{138, 7}, {16, 16}} - - - _NS:9 - YES - - 134217728 - 33554432 - - NSImage - 07_NotepadTemplate - - _NS:9 - 0 - 0 - 0 - NO - - NO - YES - - + 268 Apple PDF pasteboard type @@ -103,7 +134,7 @@ NeXT TIFF v4.0 pasteboard type {{20, 7}, {16, 16}} - + _NS:9 @@ -124,111 +155,113 @@ NO YES + + + 268 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{131, 7}, {16, 16}} + + + + _NS:9 + YES + + 134217728 + 33554432 + + NSImage + 07_NotepadTemplate + + _NS:9 + 0 + 0 + 0 + NO + + NO + YES + - {293, 30} - + {278, 30} + _NS:9 HNHGradientView - - - 268 - {{85, 496}, {124, 25}} - - - - _NS:9 - YES - - 67108864 - 0 - - LucidaGrande - 13 - 1044 - - _NS:9 - - - - 40 - - NSImage - 00_PasswordTemplate - - YES - 0 - - - 40 - - NSImage - 04_KlipperTemplate - - 1 - 0 - - - 40 - - NSImage - NSActionTemplate - - 0 - - - 4 - - NO - - - + + 12 - {{0, 31}, {293, 466}} - + {{0, 30}, {278, 369}} + + _NS:9 - - 1 - + + 2 + 256 + {278, 369} + + _NS:28 + + Entry + + + + + 1 + + + 256 + + {278, 369} + + _NS:11 + + Group + + + + + + + 256 - - + + 268 - {{17, 28}, {259, 14}} - - + {{77, 173}, {125, 24}} + + + _NS:1535 YES - + 68157504 - 272892928 - Created - + 272630784 + No Selection + LucidaGrande - 11 - 3100 + 20 + 16 _NS:1535 - - + + + 6 System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - disabledControlTextColor + controlShadowColor 3 MC4zMzMzMzMzMzMzAA @@ -237,892 +270,33 @@ NO - - - 268 - {{17, 9}, {259, 11}} - - - _NS:1535 - YES - - 68157504 - 272892928 - Modified - - _NS:1535 - - - - - NO - - {293, 466} - - _NS:11 - - General - - - - - - - 256 - - - - 268 - {{241, 429}, {32, 19}} - - - _NS:9 - YES - - -2080374784 - 134250496 - - - LucidaGrande - 12 - 16 - - _NS:9 - - -2033434624 - 164 - - NSImage - NSAddTemplate - - - - 400 - 75 - - NO - - - - 268 - {{17, 432}, {79, 14}} - - - _NS:1535 - YES - - 68157504 - 272630784 - Attachments - - _NS:1535 - - - - - NO - - - - 268 - - - - 2304 - - - - 256 - - {251, 399} - - - _NS:13 - YES - NO - YES - - - -2147483392 - {{224, 0}, {16, 17}} - - _NS:19 - - - - 248 - 40 - 1000 - - 75497536 - 2048 - - - - 3 - MC4zMzMzMzI5ODU2AA - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 337641536 - 2048 - Text Cell - - - - 6 - System - controlBackgroundColor - - - - 6 - System - controlTextColor - - - - 3 - YES - YES - - - - 3 - 2 - - 6 - System - alternateSelectedControlTextColor - - 3 - MQA - - - - 6 - System - gridColor - - 3 - MC41AA - - - 36 - -700448768 - - - 4 - 15 - 0 - YES - 0 - 1 - - - {{1, 1}, {251, 399}} - - - _NS:11 - - - 2 - - - - -2147483392 - {{37, 1}, {16, 2}} - - - _NS:58 - NO - - _doScroller: - 0.99333333333333329 - - - - -2147483392 - {{1, 147}, {52, 16}} - - - _NS:60 - NO - 1 - - _doScroller: - 0.99487179487179489 - - - {{20, 20}, {253, 401}} - - - _NS:9 - 133682 - - - - QSAAAEEgAABCGAAAQhgAAA - 0.25 - 4 - 1 - - - {293, 466} - - - Attachments - - - - - - - 256 - - - - 268 - {{241, 429}, {32, 19}} - - - - _NS:9 - YES - - -2080374784 - 134250496 - - - _NS:9 - - -2033958912 - 164 - - - - 400 - 75 - - NO - - - - 268 - {{17, 432}, {80, 14}} - - - - _NS:1535 - YES - - 68157504 - 272761856 - Custom Fields - - _NS:1535 - - - - - NO - - - - 268 - - - - 2304 - - - - 256 - - {259, 400} - - - - _NS:13 - YES - NO - YES - - - -2147483392 - {{224, 0}, {16, 17}} - - _NS:19 - - - - 256 - 40 - 1000 - - 75497536 - 2048 - - - - 3 - MC4zMzMzMzI5ODU2AA - - - - - 337641536 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 3 - 2 - - - 54 - -1774190592 - - - 4 - 15 - 0 - YES - -1 - 0 - 1 - - - {{1, 1}, {259, 400}} - - - - _NS:11 - - - 2 - - - - -2147483392 - {{224, 17}, {15, 102}} - - - - _NS:58 - NO - - _doScroller: - 0.99702380952380953 - - - - -2147483392 - {{1, 119}, {223, 15}} - - - - _NS:60 - NO - 1 - - _doScroller: - 0.99615384615384617 - - - {{16, 20}, {261, 402}} - - - - _NS:9 - 133681 - - - - QSAAAEEgAABCYAAAQmAAAA - 0.25 - 4 - 1 - - - {293, 466} - + {278, 369} + - + - Fields + NoSelection - + - - + + 6 YES + YES - + - {293, 529} + {278, 443} - - _NS:11 - - - - 268 - - - - 268 - {{17, 288}, {35, 14}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Notes - - _NS:1535 - - - - - NO - - - - 256 - - - - 2304 - - - - 2322 - - Apple HTML pasteboard type - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - Apple URL pasteboard type - CorePasteboardFlavorType 0x6D6F6F76 - NSColor pasteboard type - NSFilenamesPboardType - NSStringPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT RTFD pasteboard type - NeXT Rich Text Format v1.0 pasteboard type - NeXT TIFF v4.0 pasteboard type - NeXT font pasteboard type - NeXT ruler pasteboard type - WebURLsWithTitlesPboardType - public.url - - {210, 258} - - - - _NS:13 - - - - - - - - - - - - 166 - - - - 210 - 1 - - - 67121027 - 0 - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - {8, -8} - 13 - - - - - - 1 - - 6 - {463, 10000000} - - - - {{1, 1}, {210, 258}} - - - - _NS:11 - - - - {4, 5} - - 79691776 - - - - - - file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff - - - - - 3 - MCAwAA - - - - 4 - - - - 256 - {{195, 1}, {16, 258}} - - - _NS:83 - NO - - _doScroller: - 0.9916666666666667 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - - _NS:33 - NO - 1 - - _doScroller: - 1 - 0.94565218687057495 - - - {{20, 20}, {212, 260}} - - - - _NS:9 - 133138 - - - - 0.25 - 4 - 1 - - - - 268 - {{201, 334}, {31, 25}} - - - - _NS:22 - YES - - 67108864 - 134217728 - - - _NS:22 - - -926662656 - 163 - - NSImage - NSQuickLookTemplate - - - - 400 - 75 - - NO - - - - 268 - {{20, 336}, {173, 22}} - - - - _NS:9 - YES - - 342884416 - 272630848 - - - _NS:9 - - YES - - 6 - System - textBackgroundColor - - - - 6 - System - textColor - - - - NSAllRomanInputSourcesLocaleIdentifier - - - NO - - - - 268 - {{20, 309}, {212, 19}} - - - - _NS:9 - {250, 750} - YES - - -2080374784 - 134217728 - Generate - - _NS:9 - - -2038153216 - 164 - - - 400 - 75 - - NO - - - - 268 - {{17, 366}, {58, 14}} - - - - _NS:1535 - YES - - 68157504 - 272761856 - Password - - _NS:1535 - - - - - NO - - - - 268 - {{17, 418}, {25, 14}} - - - - _NS:1535 - YES - - 68157504 - 272761856 - URL - - _NS:1535 - - - - - NO - - - - 268 - {{20, 388}, {212, 22}} - - - - _NS:9 - YES - - -1804599231 - 272631040 - - - _NS:9 - - YES - - - - NO - - - - 268 - {{20, 440}, {212, 22}} - - - - _NS:9 - YES - - -1805647807 - 272632064 - - - _NS:9 - - YES - - - - NO - - - - 268 - {{17, 470}, {58, 14}} - - - - _NS:1535 - YES - - 68157504 - 272761856 - Username - - _NS:1535 - - - - - NO - - - - 268 - {{20, 492}, {212, 22}} - - - - _NS:9 - YES - - -1805647807 - 272632064 - - - _NS:9 - - YES - - - - NO - - - - 268 - {{17, 522}, {35, 14}} - - - - _NS:1535 - YES - - 68157504 - 272761856 - Name - - _NS:1535 - - - - - NO - - - {252, 553} - - - + _NS:9 - HNHScrollDocumentViewAdapter + NSView @@ -1131,177 +305,9 @@ view - + - 525 - - - - bottomBar - - - - 711 - - - - infoTabControl - - - - 1553 - - - - tabView - - - - 1556 - - - - createdTextField - - - - 1939 - - - - modifiedTextField - - - - 1940 - - - - attachmentTableView - - - - 1554 - - - - customFieldsTextField - - - - 2005 - - - - addCustomField: - - - - 2006 - - - - customFieldsTableView - - - - 2068 - - - - addAttachment: - - - - 2244 - - - - titleOrNameLabel - - - - 1317 - - - - titleTextField - - - - 1318 - - - - usernameTextField - - - - 1288 - - - - URLTextField - - - - 1287 - - - - _popUpPasswordGenerator: - - - - 1276 - - - - generatePasswordButton - - - - 1282 - - - - passwordTextField - - - - 2279 - - - - togglePassword - - - - 2280 - - - - notesTextView - - - - 1555 - - - - generalView - - - - 2561 - - - - createdImageView - - - - 2661 + 2976 @@ -1313,388 +319,51 @@ - imageView - - - 274 - - - - 268 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{3, 2}, {32, 32}} - - - _NS:11 - YES - - 134217728 - 33554432 - - _NS:11 - 0 - 0 - 0 - NO - - NO - YES - - - - 266 - {{40, 10}, {208, 17}} - - - _NS:20 - {250, 750} - YES - - 67108928 - 272631808 - Table View Cell - - _NS:20 - - - - - NO - - - {{1, 1}, {248, 36}} - - _NS:9 - - + createdImageView + + - 1570 + 2661 - textField - - + noSelectionInfo + + - 1571 + 2993 - valueTextField - - - 274 - - - - 268 - {{3, 10}, {212, 22}} - - - _NS:9 - YES - - -1805647871 - 272629760 - - - Value - _NS:9 - - YES - - - - NO - - - - 268 - {{0, 40}, {258, 14}} - - - _NS:9 - YES - - -1808793535 - 272761856 - - - Title - _NS:9 - - - - - NO - - - - 268 - {{223, 11}, {32, 19}} - - - _NS:9 - YES - - -2080374784 - 134217728 - - - _NS:9 - - -2033434624 - 164 - - NSImage - NSRemoveTemplate - - - - 400 - 75 - - NO - - - {{1, 1}, {256, 54}} - - - + tabView + + - 2069 + 2994 - labelTextField - - + bottomBar + + - 2070 + 2995 - removeButton - - + itemImageView + + - 2173 + 3024 - imageView - - - 274 - - - - 268 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{3, 2}, {32, 32}} - - - _NS:11 - YES - - 134217728 - 33554432 - - _NS:11 - 0 - 0 - 0 - NO - - NO - YES - - - - 266 - {{40, 10}, {128, 17}} - - - _NS:20 - {250, 750} - YES - - 67108928 - 272631808 - Table View Cell - - _NS:20 - - - - - NO - - - - 268 - {{213, 8}, {32, 19}} - - - _NS:9 - YES - - -2080374784 - 134217728 - - - _NS:9 - - -2033434624 - 164 - - - - 400 - 75 - - NO - - - - 268 - {{173, 8}, {32, 19}} - - - _NS:9 - YES - - -2080374784 - 134217728 - - - _NS:9 - - -2033958912 - 164 - - NSImage - 26_FileSaveTemplate - - - - 400 - 75 - - NO - - - {{1, 39}, {248, 36}} - - _NS:9 - - + itemNameTextField + + - 2214 - - - - textField - - - - 2215 - - - - saveButton - - - - 2259 - - - - removeButton - - - - 2260 - - - - valueTextField - - - 274 - - - - 268 - {{3, 10}, {250, 22}} - - - _NS:9 - YES - - -1805647871 - 272629760 - - - Value - _NS:9 - - YES - - - - NO - - - - 268 - {{0, 40}, {258, 14}} - - - _NS:9 - YES - - -1808793535 - 272761856 - - - Title - _NS:9 - - - - - NO - - - {{1, 57}, {256, 54}} - - - - - 2365 - - - - labelTextField - - - - 2366 + 3025 @@ -1724,223 +393,303 @@ Application - 455 - + 2894 + - - + + 4 0 - + 4 1 0.0 1000 - - 8 - 29 + + 9 + 40 + 3 + + + + 3 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 9 + 40 3 - + 6 0 - + 6 1 0.0 1000 - + 8 29 3 - + 5 0 - + 5 1 0.0 1000 - + 8 29 3 - - - 9 + + + 6 0 - - 9 + + 6 1 - - 0.0 + + 20 1000 - + 9 40 - 2 - - - - 3 - 0 - - 3 - 1 - - 9 - - 1000 - - 3 - 9 3 - - + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 9 + 40 + 3 + + + 10 0 - + 10 1 0.0 1000 - - 5 - 22 + + 6 + 24 2 - - - 4 + + + 3 0 - - 4 + + 3 1 - 31 + 44 1000 - - 9 - 40 + + 3 + 9 3 - - + + 6 0 - + 6 1 0.0 1000 - + 8 29 3 - - + + 5 0 - + 5 1 0.0 1000 - + 8 29 3 - - - + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 9 + 40 + 3 + + + + 3 + 0 + + 3 + 1 + + 10 + + 1000 + + 3 + 9 + 3 + + + + + - 662 - + 2895 + + + + + + + + + + 2896 + + + + + + + + 2897 + + + + + + + + 2898 + + + + + 2899 + + + + + + 2925 + + + + + 2929 + + + + + 2930 + - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 5 - 22 - 2 - 9 0 - + 9 1 0.0 1000 - + + 5 + 22 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + 5 22 2 - + 4 0 - + 4 1 0.0 1000 - + 6 24 2 @@ -1949,20 +698,36 @@ 5 0 - + 5 1 20 1000 - + 8 29 3 + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + - + 8 0 @@ -1972,7 +737,7 @@ 30 1000 - + 9 40 1 @@ -1980,2874 +745,86 @@ - + - 663 + 2946 - + - 667 + 2947 - + - 669 + 2949 - + - 1349 - - + 2951 + + - 1352 - + 2953 + + + + + 2974 + - + - + - 1353 - - - - - 1393 - + 2975 + - - - - - - - - 1394 - - - - - - - - 1397 - - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 4 - 0 - - 4 - 1 - - 9 - - 1000 - - 3 - 9 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - - - - - 1884 - - - - - - - - 1885 - - - - - 1910 - - - - - 1929 - - - - - - 8 - 0 - - 0 - 1 - - 11 - - 1000 - - 3 - 9 - 1 - - - - - - 1930 - - - - - 1938 - - - - - 1945 - - - - - - - - 1946 - - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 45 - - 1000 - - 3 - 9 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - - - - - - 1947 - - - - - - - - 1948 - - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 16 - - 1000 - - 9 - 40 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 16 - - 1000 - - 9 - 40 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - - - - - - 1473 - - - - - - - - - - 1477 - - - - - 1475 - - - - - 1474 - - - - - - - - 1478 - - - - - - - - - - 1565 - - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 6 - 0 - - 6 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - + + 10 0 - + 10 1 0.0 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - + 5 22 2 - - - 5 + + + 9 0 - - 5 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - - - - - - 1481 - - - - - 1567 - - - - - - - - 1566 - - - - - 8 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - 7 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - - - - 1569 - - - - - 1568 - - - - - 1512 - - - - - 7 - 0 - - 0 - 1 - - 73 - - 1000 - - 3 - 9 - 1 - - - - - - - 1543 - - - - - 1513 - - - - - 1959 - - - - - 1990 - - - - - - - - 1991 - - - - - 1996 - - - - - 1406 - - - - - 1402 - - - - - 1405 - - - - - 2009 - - - - - - - - - - 2010 - - - - - - - - 2011 - - - - - 2013 - - - - - 2014 - - - - - - - - - - 2017 - - - - - 2024 - - - - - 6 - 0 - - 6 - 1 - - 1 - - 1000 - - 9 - 40 - 3 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 9 - 40 - 3 - - - - 10 - 0 - - 10 + + 9 1 0.0 1000 - - 6 - 24 - 2 - - - - 4 - 0 - - 4 - 1 - - 10 - - 1000 - - 9 - 40 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 9 - 40 - 3 - - - - 5 - 0 - - 5 - 1 - - 3 - - 1000 - - 9 - 40 - 3 - - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 9 - 40 - 3 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - - - - - - - 2042 - - - - - - 7 - 1 - - 0 - 1 - - 50 - - 1000 - - 9 - 40 - 1 - - - - 8 - 0 - - 0 - 1 - - 22 - - 1000 - - 9 - 40 - 1 - - - - - - 2043 - - - - - 2047 - - - - - - 8 - 0 - - 0 - 1 - - 14 - - 1000 - - 9 - 40 - 1 - - - - - - 2049 - - - - - 2098 - - - - - 2100 - - - - - 2134 - - - - - 2136 - - - - - 2141 - - - - - 2142 - - - - - 2144 - - - - - - 7 - 0 - - 0 - 1 - - 32 - - 1000 - - 9 - 40 - 1 - - - - - - 2145 - - - - - 2147 - - - - - 2152 - - - - - 2165 - - - - - 2180 - - - - - 2181 - - - - - 2182 - - - - - 2183 - - - - - 2184 - - - - - 2185 - - - - - 2198 - - - - - 2199 - - - - - 2202 - - - - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 6 - 0 - - 6 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - + 5 22 2 - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - + - - - - 2203 - - - - - - 7 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - 8 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - - - 2204 - - - - - - - - 2209 - - - - - 2210 - - - - - 2211 - - - - - 2213 - - - - - 2234 - - - - - - 7 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - - - 2235 - - - - - 2246 - - - - - 2249 - - - - - - 7 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - - - 2250 - - - - - 2255 - - - - - 2345 - - - - - - - 6 - 0 - - 6 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - - 4 - 0 - - 4 - 1 - - 10 - - 1000 - - 9 - 40 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 9 - 40 - 3 - - - - 5 - 0 - - 5 - 1 - - 3 - - 1000 - - 9 - 40 - 3 - - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 9 - 40 - 3 - - - - 5 - 0 - - 5 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - - - - 2347 - - - - - 7 - 1 - - 0 - 1 - - 50 - - 1000 - - 9 - 40 - 1 - - - - 8 - 0 - - 0 - 1 - - 22 - - 1000 - - 9 - 40 - 1 - - - - - - - 2348 - - - - - 7 - 0 - - 0 - 1 - - 252 - - 1000 - - 3 - 9 - 1 - - - - 8 - 0 - - 0 - 1 - - 14 - - 1000 - - 9 - 40 - 1 - - - - - - - 2349 - - - - - 2351 - - - - - 2352 - - - - - 2353 - - - - - 2354 - - - - - 2358 - - - - - 2359 - - - - - 2360 - - - - - 2361 - - - - - 2362 - - - - - 1985 - - - - - - 7 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - - - 2021 - - - - - 2004 - - - - - 1986 - - - - - 2002 - - - - - 1995 - - - - - 2200 - - - - - 1958 - - - - - 1580 - - - - - - 7 - 0 - - 0 - 1 - - 32 - - 1000 - - 3 - 9 - 1 - - - - - - 2201 - - - - - 2193 - - - - - 1581 - - - - - 2449 - - - - - 2455 - - - - - 1988 - - - - - 2090 - - - - - 2477 - - - - - 2478 - - - - - - - - - - - - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 9 - 40 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 17 - - 1000 - - 9 - 40 - 3 - - - - - - - - 1239 - - - - - - - - 1266 - - - - - 1235 - - - - - - - - 1270 - - - - - 1238 - - - - - - - - 1267 - - - - - 1234 - - - - - - - - 1271 - - - - - 1233 - - - - - - - - 1272 - - - - - 1237 - - - - - - - - 1268 - - - - - 1236 - - - - - - - - 1269 - - - - - 1231 - - - - - - - - 1274 - - - - - 2263 - - - - - - - - 2264 - - - - - 2273 - - - - - - - - 2274 - - - - - 2481 - - - - - 2482 - - - - - 2483 - - - - - 2484 - - - - - 2485 - - - - - 2487 - - - - - 2489 - - - - - 2491 - - - - - 2493 - - - - - 2495 - - - - - 2496 - - - - - 2497 - - - - - 2498 - - - - - 2499 - - - - - 2500 - - - - - 2501 - - - - - 2503 - - - - - 2504 - - - - - 2505 - - - - - 2506 - - - - - 2507 - - - - - 2508 - - - - - 2509 - - - - - 2510 - - - - - 2511 - - - - - 2512 - - - - - 2526 - - - - - 2527 - - - - - 2528 - - - - - 1492 - - - - - 8 - 1 - - 0 - 1 - - 150 - - 1000 - - 9 - 40 - 1 - - - - - - - - - 1557 - - - - - 1495 - - - - - 1494 - - - - - 1493 - - - - - 1526 - - - - - - - - 1529 - - - - - 2551 - - - - - 2552 - - - - - 2553 - - - - - 2555 - - - - - 2557 - - - - - 2559 - - - - - 2459 - - - - - 2409 - - - - - 2205 - - - - - 1577 - - - - - 1575 - - - - - 2252 - - - - - 2253 - - - - - 2251 - - - - - 2207 - - - - - 2369 - - - - - 2156 - - - - - 2153 - - - - - 2022 - - - - - 2370 - - - - - 2175 - - - - - 2020 - - - Horizontal Space - Scroll View - Table View - View - - - 2087 - - - - - 2212 - - - - - 2237 - - - - - 2258 - - - - - 2256 - - - - - 1952 - - - - - 2632 - - - - - - 8 - 0 - - 0 - 1 - - 16 - - 1000 - - 3 - 9 - 1 - - - - 7 - 0 - - 0 - 1 - - 16 - - 1000 - - 3 - 9 - 1 - - - - - - 2633 - - - - - 2646 - - - - - 2648 - - - - - 2649 - - + 2651 + 7 @@ -4864,14 +841,8 @@ 9 1 - - - - - 2652 - - + 2654 @@ -4879,24 +850,210 @@ - 2655 - - + 2652 + + - 2656 - - + 2979 + + - 2657 - - + 2632 + + + + + 7 + 0 + + 0 + 1 + + 16 + + 1000 + + 3 + 9 + 1 + + + + 8 + 0 + + 0 + 1 + + 16 + + 1000 + + 3 + 9 + 1 + + + + - 2658 + 2646 + + + + + 2648 + + + + + 2633 + + + + + 2981 - + + + + 2982 + + + + + 2983 + + + + + 2984 + + + + + 2985 + + + + + + + + 2986 + + + + + 2998 + + + + + + 8 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 9 + 40 + 1 + + + + + + 2999 + + + + + 3013 + + + + + + + + 3014 + + + + + 2991 + + + + + 3023 + + + + + 3027 + + + + + 3028 + + + + + 3068 + + + + + 3069 + + + + + 3072 + + + + + 3073 + + + + + 3076 + + + + + 3075 + + @@ -4904,411 +1061,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - HNHRoundedTextField - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - HNHRoundedTextFieldCell - com.apple.InterfaceBuilder.CocoaPlugin - HNHRoundedTextFieldCell - com.apple.InterfaceBuilder.CocoaPlugin - HNHRoundedTextFieldCell - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - HNHScrollView - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - NormalCell - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - HNHScrollView - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - MPCustomFieldTableCellView - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - SelectedCell - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - HNHRoundedTextFieldCell - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - MPSelectedAttachmentTableCellView - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - SelectedCell - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - HNHRoundedSecureTextField - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - MPCustomFieldTableCellView - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - NormalCell - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - HNHRoundedTextFieldCell - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -5318,7 +1070,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -5326,43 +1077,93 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - + + + + + + + + + - + + - - - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin + + InitialTabViewItem + + InitialTabViewItem + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + MPPopupImageView + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - 2662 + 3078 @@ -5374,163 +1175,21 @@ ./Classes/HNHGradientView.h - - HNHRoundedSecureTextField - NSSecureTextField - - toggleDisplay: - id - - - toggleDisplay: - - toggleDisplay: - id - - - - IBProjectSource - ./Classes/HNHRoundedSecureTextField.h - - - - HNHRoundedTextField - NSTextField - - IBProjectSource - ./Classes/HNHRoundedTextField.h - - - - HNHRoundedTextFieldCell - NSTextFieldCell - - IBProjectSource - ./Classes/HNHRoundedTextFieldCell.h - - - - HNHScrollDocumentViewAdapter - NSView - - IBProjectSource - ./Classes/HNHScrollDocumentViewAdapter.h - - - - HNHScrollView - NSScrollView - - IBProjectSource - ./Classes/HNHScrollView.h - - - - MPCustomFieldTableCellView - NSTableCellView - - NSTextField - NSButton - NSTextField - - - - labelTextField - NSTextField - - - removeButton - NSButton - - - valueTextField - NSTextField - - - - IBProjectSource - ./Classes/MPCustomFieldTableCellView.h - - MPInspectorViewController MPViewController - - id - id - id - id - id - id - id - id - - - - _popUpPasswordGenerator: - id - - - addAttachment: - id - - - addCustomField: - id - - - edit: - id - - - finishEdit: - id - - - removeAttachment: - id - - - removeCustomField: - id - - - saveAttachment: - id - - - NSTextField - NSTableView HNHGradientView NSImageView NSTextField - NSTableView - NSTextField - NSView - NSButton - NSSegmentedControl MPPopupImageView - NSTextField + NSTextField NSImageView NSTextField - NSTextView - HNHRoundedSecureTextField + NSTextField NSTabView - NSTextField - NSTextField - NSButton - NSTextField - - URLTextField - NSTextField - - - attachmentTableView - NSTableView - bottomBar HNHGradientView @@ -5543,32 +1202,12 @@ createdTextField NSTextField - - customFieldsTableView - NSTableView - - - customFieldsTextField - NSTextField - - - generalView - NSView - - - generatePasswordButton - NSButton - - - infoTabControl - NSSegmentedControl - itemImageView MPPopupImageView - - itemNameTextfield + + itemNameTextField NSTextField @@ -5579,34 +1218,14 @@ modifiedTextField NSTextField - - notesTextView - NSTextView - - - passwordTextField - HNHRoundedSecureTextField + + noSelectionInfo + NSTextField tabView NSTabView - - titleOrNameLabel - NSTextField - - - titleTextField - NSTextField - - - togglePassword - NSButton - - - usernameTextField - NSTextField - IBProjectSource @@ -5621,28 +1240,6 @@ ./Classes/MPPopupImageView.h - - MPSelectedAttachmentTableCellView - NSTableCellView - - NSButton - NSButton - - - - removeButton - NSButton - - - saveButton - NSButton - - - - IBProjectSource - ./Classes/MPSelectedAttachmentTableCellView.h - - MPViewController NSViewController @@ -5666,15 +1263,9 @@ YES 3 - {128, 128} - {128, 128} {128, 128} - {128, 128} {128, 128} {15, 15} - {8, 8} - {21, 16} - {8, 8} YES diff --git a/MacPass/Base.lproj/PasswordInputView.xib b/MacPass/Base.lproj/PasswordInputView.xib index 428561c5..4861f3fb 100644 --- a/MacPass/Base.lproj/PasswordInputView.xib +++ b/MacPass/Base.lproj/PasswordInputView.xib @@ -1205,7 +1205,7 @@ - 497 + 507 diff --git a/MacPass/DatePickingView.xib b/MacPass/DatePickingView.xib new file mode 100644 index 00000000..eb64bf2e --- /dev/null +++ b/MacPass/DatePickingView.xib @@ -0,0 +1,659 @@ + + + + 1070 + 12E55 + 3084 + 1187.39 + 626.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSButton + NSButtonCell + NSCustomObject + NSCustomView + NSDatePicker + NSDatePickerCell + NSMenu + NSMenuItem + NSPopUpButton + NSPopUpButtonCell + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + MPDatePickingViewController + + + FirstResponder + + + NSApplication + + + + 268 + + + + 268 + {{20, 18}, {56, 25}} + + + + _NS:22 + YES + + -2080374784 + 134217728 + Cancel + + LucidaGrande + 13 + 1044 + + _NS:22 + + -2038153216 + 163 + + + 400 + 75 + + NO + + + + 268 + {{89, 18}, {70, 25}} + + + + _NS:22 + YES + + -2080374784 + 134217728 + Use Date + + _NS:22 + + -2038153216 + 163 + + + 400 + 75 + + NO + + + + 268 + {{18, 59}, {144, 26}} + + + + _NS:9 + YES + + -2076180416 + 2048 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + 1 Week + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + + + 1 Month + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 1 Year + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + -1 + 1 + YES + YES + 2 + + NO + + + + 268 + {{20, 91}, {139, 148}} + + + + _NS:9 + YES + + 71303168 + 0 + + -595929600 + + US/Pacific + + VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ +y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ +5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g +8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ +AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg +DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ +HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g +KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ +OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg +Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ +VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg +Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ +cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg +f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + + + %Y-%m-%d %H:%M:%S %z + + + _NS:9 + + 0.0 + 224 + 1 + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + {179, 259} + + + + NSView + + + + + + + view + + + + 2 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + 3 + + + + + + + + 4 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + + + + 16 + + + + + + + + 17 + + + + + + + + + + 18 + + + + + 19 + + + + + 20 + + + + + 21 + + + + + 22 + + + + + 24 + + + + + 25 + + + + + + + + 26 + + + + + 27 + + + + + 29 + + + + + + + + 30 + + + + + 35 + + + + + 36 + + + + + 37 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 37 + + + + + MPDatePickingViewController + MPViewController + + IBProjectSource + ./Classes/MPDatePickingViewController.h + + + + MPViewController + NSViewController + + IBProjectSource + ./Classes/MPViewController.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/MacPass/EntryInspectorView.xib b/MacPass/EntryInspectorView.xib index 55b029db..9b720d43 100644 --- a/MacPass/EntryInspectorView.xib +++ b/MacPass/EntryInspectorView.xib @@ -2,17 +2,39 @@ 1070 - 12A79 - 2142 - 1147 - 592.00 + 12E55 + 3084 + 1187.39 + 626.00 com.apple.InterfaceBuilder.CocoaPlugin - 2142 + 3084 - NSCustomView + IBNSLayoutConstraint + NSButton + NSButtonCell NSCustomObject + NSCustomView + NSImageCell + NSImageView + NSScrollView + NSScroller + NSSecureTextField + NSSecureTextFieldCell + NSSegmentedCell + NSSegmentedControl + NSTabView + NSTabViewItem + NSTableCellView + NSTableColumn + NSTableView + NSTextField + NSTextFieldCell + NSTextView + NSTokenField + NSTokenFieldCell + NSView com.apple.InterfaceBuilder.CocoaPlugin @@ -31,14 +53,1049 @@ NSApplication - + - 268 - {480, 272} + 256 + + + + 268 + {{67, 505}, {159, 19}} + + + + _NS:9 + YES + + 67108864 + 131072 + + LucidaGrande + 11 + 3100 + + _NS:9 + + + + General + YES + 0 + + + Files + 1 + 0 + + + Custom + 0 + + + 4 + + NO + + + + 12 + {293, 503} + + + + _NS:9 + + + 1 + + + 256 + + {293, 503} + + + + _NS:11 + + General + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + + + + + 256 + + + + 268 + {{241, 466}, {32, 19}} + + + _NS:9 + YES + + -2080374784 + 134250496 + + + LucidaGrande + 12 + 16 + + _NS:9 + + -2033434624 + 164 + + NSImage + NSAddTemplate + + + + 400 + 75 + + NO + + + + 268 + {{17, 469}, {79, 14}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Attachments + + _NS:1535 + + + + 6 + System + disabledControlTextColor + + 3 + MC4zMzMzMzMzMzMzAA + + + + NO + + + + 268 + + + + 2304 + + + + 256 + + {251, 430} + + + _NS:13 + YES + NO + YES + + + -2147483392 + {{224, 0}, {16, 17}} + + _NS:19 + + + + 248 + 40 + 1000 + + 75497536 + 2048 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337641536 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + + 3 + 2 + + 6 + System + alternateSelectedControlTextColor + + 3 + MQA + + + + 6 + System + gridColor + + 3 + MC41AA + + + 36 + -700448768 + + + 4 + 15 + 0 + YES + 0 + 1 + + + {{1, 1}, {251, 430}} + + + _NS:11 + + + 2 + + + + -2147483392 + {{37, 1}, {16, 2}} + + + _NS:58 + NO + + _doScroller: + 0.99333333333333329 + + + + -2147483392 + {{1, 147}, {52, 16}} + + + _NS:60 + NO + 1 + + _doScroller: + 0.99487179487179489 + + + {{20, 26}, {253, 432}} + + + _NS:9 + 133682 + + + + QSAAAEEgAABCGAAAQhgAAA + 0.25 + 4 + 1 + + + {293, 503} + + + Attachments + + + + + + + 256 + + + + 268 + {{241, 466}, {32, 19}} + + + _NS:9 + YES + + -2080374784 + 134250496 + + + _NS:9 + + -2033958912 + 164 + + + + 400 + 75 + + NO + + + + 268 + {{17, 469}, {80, 14}} + + + _NS:1535 + YES + + 68157504 + 272761856 + Custom Fields + + _NS:1535 + + + + + NO + + + + 268 + + + + 2304 + + + + 256 + + {259, 431} + + + _NS:13 + YES + NO + YES + + + -2147483392 + {{224, 0}, {16, 17}} + + _NS:19 + + + + 256 + 40 + 1000 + + 75497536 + 2048 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 337641536 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 54 + -1774190592 + + + 4 + 15 + 0 + YES + -1 + 0 + 1 + + + {{1, 1}, {259, 431}} + + + _NS:11 + + + 2 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + _NS:58 + NO + + _doScroller: + 0.99702380952380953 + + + + -2147483392 + {{1, 119}, {223, 15}} + + + _NS:60 + NO + 1 + + _doScroller: + 0.99615384615384617 + + + {{16, 26}, {261, 433}} + + + _NS:9 + 133681 + + + + QSAAAEEgAABCYAAAQmAAAA + 0.25 + 4 + 1 + + + {293, 503} + + + Fields + + + + + + + 6 + YES + + + + + + {293, 529} - - NSView + + _NS:11 + + + + 268 + + + + 268 + {{17, 105}, {30, 14}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Tags + + _NS:1535 + + + + + NO + + + + 268 + + NSStringPboardType + + {{20, 20}, {212, 77}} + + + + _NS:9 + YES + + 341835776 + 0 + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + + + + 0.0 + 0 + + NO + 2 + + + + 268 + {{169, 124}, {63, 19}} + + + + _NS:9 + YES + + -2080374784 + 134217728 + Set Date + + _NS:9 + + -2038153216 + 164 + + + 400 + 75 + + NO + + + + 268 + {{18, 125}, {69, 18}} + + + + _NS:9 + YES + + -2080374784 + 268435456 + Expires + + _NS:9 + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + NO + + + + 268 + {{17, 419}, {35, 14}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Notes + + _NS:1535 + + + + + NO + + + + 256 + + + + 2304 + + + + 2322 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + NeXT font pasteboard type + NeXT ruler pasteboard type + WebURLsWithTitlesPboardType + public.url + + {210, 258} + + + + _NS:13 + + + + + + + + + + + + 166 + + + + 210 + 1 + + + 67121027 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + 1 + + 6 + {463, 10000000} + + + + {{1, 1}, {210, 258}} + + + + _NS:11 + + + + {4, 5} + + 79691776 + + + + + + file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{195, 1}, {16, 258}} + + + + _NS:83 + NO + + _doScroller: + 0.9916666666666667 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + + _NS:33 + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{20, 151}, {212, 260}} + + + + _NS:9 + 133138 + + + + 0.25 + 4 + 1 + + + + 268 + {{201, 465}, {31, 25}} + + + + _NS:22 + YES + + 67108864 + 134217728 + + + _NS:22 + + -926662656 + 163 + + NSImage + NSQuickLookTemplate + + + + 400 + 75 + + NO + + + + 268 + {{20, 467}, {173, 22}} + + + + _NS:9 + YES + + 342884416 + 272630848 + + + _NS:9 + + YES + + + 6 + System + textColor + + + + NSAllRomanInputSourcesLocaleIdentifier + + + NO + + + + 268 + {{20, 440}, {212, 19}} + + + + _NS:9 + {250, 750} + YES + + -2080374784 + 134217728 + Generate + + _NS:9 + + -2038153216 + 164 + + + 400 + 75 + + NO + + + + 268 + {{17, 497}, {58, 14}} + + + + _NS:1535 + YES + + 68157504 + 272761856 + Password + + _NS:1535 + + + + + NO + + + + 268 + {{17, 549}, {25, 14}} + + + + _NS:1535 + YES + + 68157504 + 272761856 + URL + + _NS:1535 + + + + + NO + + + + 268 + {{20, 519}, {212, 22}} + + + + _NS:9 + YES + + -1804599231 + 272631104 + + + _NS:9 + + YES + + + + NO + + + + 268 + {{20, 571}, {212, 22}} + + + + _NS:9 + YES + + -1805647807 + 272632128 + + + _NS:9 + + YES + + + + NO + + + + 268 + {{17, 601}, {58, 14}} + + + + _NS:1535 + YES + + 68157504 + 272761856 + Username + + _NS:1535 + + + + + NO + + + + 268 + {{20, 623}, {212, 22}} + + + + _NS:9 + YES + + -1805647807 + 272632128 + + + _NS:9 + + YES + + + + NO + + + + 268 + {{17, 653}, {28, 14}} + + + + _NS:1535 + YES + + 68157504 + 272761856 + Title + + _NS:1535 + + + + + NO + + + {252, 672} + + + + _NS:9 + HNHScrollDocumentViewAdapter @@ -47,9 +1104,517 @@ view - + - 2 + 250 + + + + titleTextField + + + + 260 + + + + usernameTextField + + + + 261 + + + + URLTextField + + + + 262 + + + + passwordTextField + + + + 263 + + + + infoTabControl + + + + 264 + + + + attachmentTableView + + + + 265 + + + + customFieldsTableView + + + + 266 + + + + notesTextView + + + + 267 + + + + togglePassword + + + + 268 + + + + tabView + + + + 269 + + + + generalView + + + + 270 + + + + addAttachment: + + + + 271 + + + + _popUpPasswordGenerator: + + + + 272 + + + + addCustomField: + + + + 273 + + + + generatePasswordButton + + + + 282 + + + + imageView + + + 274 + + + + 268 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{3, 2}, {32, 32}} + + + _NS:11 + YES + + 134217728 + 33554432 + + NSImage + NSActionTemplate + + _NS:11 + 0 + 0 + 0 + NO + + NO + YES + + + + 266 + {{40, 10}, {128, 17}} + + + _NS:20 + {250, 750} + YES + + 67108928 + 272631808 + Table View Cell + + _NS:20 + + + + + NO + + + + 268 + {{213, 8}, {32, 19}} + + + _NS:9 + YES + + -2080374784 + 134217728 + + + _NS:9 + + -2033434624 + 164 + + NSImage + NSRemoveTemplate + + + + 400 + 75 + + NO + + + + 268 + {{173, 8}, {32, 19}} + + + _NS:9 + YES + + -2080374784 + 134217728 + + + _NS:9 + + -2033958912 + 164 + + NSImage + 26_FileSaveTemplate + + + + 400 + 75 + + NO + + + {{1, 39}, {248, 36}} + + _NS:9 + + + + 244 + + + + textField + + + + 245 + + + + saveButton + + + + 246 + + + + removeButton + + + + 247 + + + + imageView + + + 274 + + + + 268 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{3, 2}, {32, 32}} + + + _NS:11 + YES + + 134217728 + 33554432 + + _NS:11 + 0 + 0 + 0 + NO + + NO + YES + + + + 266 + {{40, 10}, {208, 17}} + + + _NS:20 + {250, 750} + YES + + 67108928 + 272631808 + Table View Cell + + _NS:20 + + + + + NO + + + {{1, 1}, {248, 36}} + + _NS:9 + + + + 239 + + + + textField + + + + 240 + + + + valueTextField + + + 274 + + + + 268 + {{3, 10}, {250, 22}} + + + _NS:9 + YES + + -1805647871 + 272629760 + + + Value + _NS:9 + + YES + + + + NO + + + + 268 + {{0, 40}, {258, 14}} + + + _NS:9 + YES + + -1808793535 + 272761856 + + + Title + _NS:9 + + + + + NO + + + {{1, 57}, {256, 54}} + + + + + 248 + + + + labelTextField + + + + 249 + + + + valueTextField + + + 274 + + + + 268 + {{3, 10}, {212, 22}} + + + _NS:9 + YES + + -1805647871 + 272629760 + + + Value + _NS:9 + + YES + + + + NO + + + + 268 + {{0, 40}, {258, 14}} + + + _NS:9 + YES + + -1808793535 + 272761856 + + + Title + _NS:9 + + + + + NO + + + + 268 + {{223, 11}, {32, 19}} + + + _NS:9 + YES + + -2080374784 + 134217728 + + + _NS:9 + + -2033434624 + 164 + + + + 400 + 75 + + NO + + + {{1, 1}, {256, 54}} + + + + + 241 + + + + labelTextField + + + + 242 + + + + removeButton + + + + 243 @@ -79,34 +1644,3628 @@ Application - 1 - + 3 + + + + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + + + + 3 + 0 + + 3 + 1 + + 5 + + 1000 + + 9 + 40 + 3 + + + + 3 + 0 + + 3 + 1 + + 26 + + 1000 + + 3 + 9 + 3 + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 8 + 29 + 3 + + + + 4 + + + + + + + + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 5 + + 1000 + + 9 + 40 + 3 + + + + + + + + + + + + + + + + 5 + + + + + 8 + 0 + + 0 + 1 + + 77 + + 1000 + + 3 + 9 + 1 + + + + + + + 6 + + + + + + + + 7 + + + + + + + + 8 + + + + + + + + 9 + + + + + + + + 8 + 1 + + 0 + 1 + + 150 + + 1000 + + 9 + 40 + 1 + + + + + + 10 + + + + + + + + 11 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + 19 + + + + + 20 + + + + + 21 + + + + + 22 + + + + + 23 + + + + + 24 + + + + + 25 + + + + + 26 + + + + + 27 + + + + + 28 + + + + + 29 + + + + + 30 + + + + + 31 + + + + + 32 + + + + + 33 + + + + + 34 + + + + + 35 + + + + + 36 + + + + + 37 + + + + + 38 + + + + + 39 + + + + + 40 + + + + + 41 + + + + + 42 + + + + + 43 + + + + + 44 + + + + + 45 + + + + + 46 + + + + + 47 + + + + + 48 + + + + + 49 + + + + + 50 + + + + + 51 + + + + + 52 + + + + + + + + 53 + + + + + + + + 54 + + + + + + + + 55 + + + + + + + + 56 + + + + + + + + 57 + + + + + + + + 58 + + + + + + + + 59 + + + + + + + + 60 + + + + + + + + 61 + + + + + + + + 62 + + + + + 63 + + + + + 64 + + + + + 65 + + + + + 66 + + + + + 67 + + + + + 68 + + + + + 69 + + + + + 70 + + + + + 71 + + + + + 72 + + + + + 73 + + + + + 74 + + + + + 75 + + + + + 76 + + + + + 77 + + + + + 78 + + + + + 79 + + + + + 80 + + + + + 81 + + + + + 82 + + + + + + + + 83 + + + + + + + + + + 85 + + + + + 86 + + + + + 89 + + + + + 90 + + + + + 108 + + + + + + + + 109 + + + + + + + + 110 + + + + + + + + 111 + + + + + + 123 + + + + + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 26 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 45 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + 124 + + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + + + + 125 + + + + + + + + + + 126 + + + + + + 7 + 0 + + 0 + 1 + + 73 + + 1000 + + 3 + 9 + 1 + + + + + + 127 + + + + + 128 + + + + + 129 + + + + + 130 + + + + + 131 + + + + + 133 + + + + + 134 + + + + + 135 + + + + + 136 + + + + + 137 + + + + + + + + 138 + + + + + 139 + + + + + 140 + + + + + + + + + + 141 + + + + + + + 5 + 0 + + 5 + 1 + + 3 + + 1000 + + 8 + 29 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 5 + 22 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 3 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + + + + + 142 + + + + + 143 + + + + + + + 5 + 0 + + 5 + 1 + + 3 + + 1000 + + 8 + 29 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 5 + 22 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 3 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + + + 144 + + + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + 8 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + + + 145 + + + + + + + + 146 + + + + + 147 + + + + + 148 + + + + + 149 + + + + + 150 + + + + + 151 + + + + + 152 + + + + + 153 + + + + + 154 + + + + + 155 + + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + + + + 156 + + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + + + + 157 + + + + + 158 + + + + + 159 + + + + + 160 + + + + + 161 + + + + + 162 + + + + + 163 + + + + + 164 + + + + + 165 + + + + + 166 + + + + + + + + 167 + + + + + 8 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + + + + 168 + + + + + 169 + + + + + 170 + + + + + 171 + + + + + 172 + + + + + 173 + + + + + 174 + + + + + 175 + + + + + 176 + + + + + 177 + + + + + 178 + + + + + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 26 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 16 + + 1000 + + 9 + 40 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 16 + + 1000 + + 9 + 40 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + 179 + + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 3 + 9 + 1 + + + + + + + 180 + + + + + + + + + + 181 + + + + + + + + 182 + + + + + 183 + + + + + 184 + + + Horizontal Space - Scroll View - Table View - View + + + 185 + + + + + 186 + + + + + 188 + + + + + 189 + + + + + 190 + + + + + 191 + + + + + 192 + + + + + 193 + + + + + + + + 194 + + + + + + + + + + 195 + + + + + 5 + 0 + + 5 + 1 + + 3 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 9 + 40 + 3 + + + + 5 + 0 + + 5 + 1 + + 3 + + 1000 + + 9 + 40 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 9 + 40 + 3 + + + + 4 + 0 + + 4 + 1 + + 10 + + 1000 + + 9 + 40 + 3 + + + + 6 + 0 + + 6 + 1 + + 3 + + 1000 + + 8 + 29 + 3 + + + + + + + + 196 + + + + + + + + 5 + 0 + + 5 + 1 + + 3 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 9 + 40 + 3 + + + + 5 + 0 + + 5 + 1 + + 3 + + 1000 + + 9 + 40 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 9 + 40 + 3 + + + + 4 + 0 + + 4 + 1 + + 10 + + 1000 + + 9 + 40 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 9 + 40 + 3 + + + + 6 + 0 + + 6 + 1 + + 1 + + 1000 + + 9 + 40 + 3 + + + + + + 197 + + + + + 198 + + + + + 7 + 0 + + 0 + 1 + + 32 + + 1000 + + 9 + 40 + 1 + + + + + + + 199 + + + + + 8 + 0 + + 0 + 1 + + 22 + + 1000 + + 9 + 40 + 1 + + + + 7 + 1 + + 0 + 1 + + 50 + + 1000 + + 9 + 40 + 1 + + + + + + + 200 + + + + + 8 + 0 + + 0 + 1 + + 14 + + 1000 + + 9 + 40 + 1 + + + + + + + 201 + + + + + 202 + + + + + 203 + + + + + 204 + + + + + 205 + + + + + 206 + + + + + 207 + + + + + 208 + + + + + 209 + + + + + 210 + + + + + 211 + + + + + 212 + + + + + 213 + + + + + 214 + + + + + 215 + + + + + 216 + + + + + 217 + + + + + 218 + + + + + 219 + + + + + 220 + + + + + 221 + + + + + 222 + + + + + 223 + + + + + + 8 + 0 + + 0 + 1 + + 14 + + 1000 + + 9 + 40 + 1 + + + + 7 + 0 + + 0 + 1 + + 252 + + 1000 + + 3 + 9 + 1 + + + + + + 224 + + + + + + 8 + 0 + + 0 + 1 + + 22 + + 1000 + + 9 + 40 + 1 + + + + 7 + 1 + + 0 + 1 + + 50 + + 1000 + + 9 + 40 + 1 + + + + + + 225 + + + + + 226 + + + + + 227 + + + + + 228 + + + + + 229 + + + + + 230 + + + + + 231 + + + + + 232 + + + + + 238 + + + + + 254 + + + + + 279 + + + + + 280 + + + + + 281 + + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + HNHScrollView + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + MPSelectedAttachmentTableCellView + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + SelectedCell + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + NormalCell + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + HNHScrollView + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + MPCustomFieldTableCellView + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + NormalCell + MPCustomFieldTableCellView + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + SelectedCell + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedTextFieldCell + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedTextFieldCell + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedTextField + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedSecureTextField + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedTextFieldCell + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedTextFieldCell + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedTextFieldCell + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + InitialTabViewItem + + InitialTabViewItem + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - 2 + 285 + + HNHRoundedSecureTextField + NSSecureTextField + + toggleDisplay: + id + + + toggleDisplay: + + toggleDisplay: + id + + + + IBProjectSource + ./Classes/HNHRoundedSecureTextField.h + + + + HNHRoundedTextField + NSTextField + + IBProjectSource + ./Classes/HNHRoundedTextField.h + + + + HNHRoundedTextFieldCell + NSTextFieldCell + + IBProjectSource + ./Classes/HNHRoundedTextFieldCell.h + + + + HNHScrollDocumentViewAdapter + NSView + + IBProjectSource + ./Classes/HNHScrollDocumentViewAdapter.h + + + + HNHScrollView + NSScrollView + + IBProjectSource + ./Classes/HNHScrollView.h + + + + MPCustomFieldTableCellView + NSTableCellView + + NSTextField + NSButton + NSTextField + + + + labelTextField + NSTextField + + + removeButton + NSButton + + + valueTextField + NSTextField + + + + IBProjectSource + ./Classes/MPCustomFieldTableCellView.h + + MPEntryInspectorViewController - NSViewController + MPViewController + + NSTextField + NSTableView + NSTextField + NSTableView + NSView + NSButton + NSSegmentedControl + NSTextField + NSTextView + HNHRoundedSecureTextField + NSTabView + NSTextField + NSButton + NSTextField + + + + URLTextField + NSTextField + + + attachmentTableView + NSTableView + + + createdTextField + NSTextField + + + customFieldsTableView + NSTableView + + + generalView + NSView + + + generatePasswordButton + NSButton + + + infoTabControl + NSSegmentedControl + + + modifiedTextField + NSTextField + + + notesTextView + NSTextView + + + passwordTextField + HNHRoundedSecureTextField + + + tabView + NSTabView + + + titleTextField + NSTextField + + + togglePassword + NSButton + + + usernameTextField + NSTextField + + IBProjectSource ./Classes/MPEntryInspectorViewController.h + + MPSelectedAttachmentTableCellView + NSTableCellView + + NSButton + NSButton + + + + removeButton + NSButton + + + saveButton + NSButton + + + + IBProjectSource + ./Classes/MPSelectedAttachmentTableCellView.h + + + + MPViewController + NSViewController + + IBProjectSource + ./Classes/MPViewController.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + 0 @@ -117,6 +5276,14 @@ YES 3 + + {128, 128} + {15, 15} + {8, 8} + {21, 16} + {8, 8} + {15, 15} + YES diff --git a/MacPass/GroupInspectorView.xib b/MacPass/GroupInspectorView.xib index ec3575c4..12cc9641 100644 --- a/MacPass/GroupInspectorView.xib +++ b/MacPass/GroupInspectorView.xib @@ -2,17 +2,26 @@ 1070 - 12A79 - 2142 - 1147 - 592.00 + 12E55 + 3084 + 1187.39 + 626.00 com.apple.InterfaceBuilder.CocoaPlugin - 2142 + 3084 - NSCustomView + IBNSLayoutConstraint + NSButton + NSButtonCell NSCustomObject + NSCustomView + NSScrollView + NSScroller + NSTextField + NSTextFieldCell + NSTextView + NSView com.apple.InterfaceBuilder.CocoaPlugin @@ -31,25 +40,478 @@ NSApplication - + 268 - {480, 272} + + + + 268 + {{18, 127}, {130, 18}} + + + + _NS:9 + YES + + -2080374784 + 268435456 + Include in Search + + LucidaGrande + 13 + 1044 + + _NS:9 + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + NO + + + + 268 + {{174, 150}, {63, 19}} + + + + _NS:9 + YES + + -2080374784 + 134217728 + Set Date + + LucidaGrande + 12 + 16 + + _NS:9 + + -2038153216 + 164 + + + 400 + 75 + + NO + + + + 268 + {{18, 151}, {69, 18}} + + + + _NS:9 + YES + + -2080374784 + 268435456 + Expires + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{17, 445}, {35, 14}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Notes + + LucidaGrande + 11 + 3100 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + disabledControlTextColor + + 3 + MC4zMzMzMzMzMzMzAA + + + + NO + + + + 256 + + + + 2304 + + + + 2322 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + NeXT font pasteboard type + NeXT ruler pasteboard type + WebURLsWithTitlesPboardType + public.url + + {215, 258} + + + + _NS:13 + + + + + + + + + + + + 166 + + + + 215 + 1 + + + 67121027 + 0 + + + 3 + MQA + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + 3 + MAA + + + + + + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + 1 + + 6 + {463, 10000000} + + + + {{1, 1}, {215, 258}} + + + + _NS:11 + + + + {4, 5} + + 79691776 + + + + + + file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{200, 1}, {16, 258}} + + + + _NS:83 + NO + + _doScroller: + 0.9916666666666667 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + + _NS:33 + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{20, 177}, {217, 260}} + + + + _NS:9 + {750, 750} + 133138 + + + + 0.25 + 4 + 1 + + + + 268 + {{20, 467}, {217, 22}} + + + + _NS:9 + YES + + -1804599231 + 272631104 + + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + + + 6 + System + textColor + + + + NO + + + + 268 + {{17, 497}, {35, 14}} + + + + _NS:1535 + YES + + 68157504 + 272761856 + Name + + _NS:1535 + + + + + NO + + + {257, 516} - - NSView + + _NS:9 + HNHScrollDocumentViewAdapter + + + + 268 + + + + 2304 + + + + 274 + + {255, 421} + + + + _NS:13 + + + {255, 421} + + + + _NS:11 + + + 4 + + + + -2147483392 + {{-100, -100}, {16, 413}} + + + + _NS:15 + NO + + _doScroller: + 1 + 0.96363627910614014 + + + + 256 + {{0, 405}, {255, 16}} + + + + _NS:26 + NO + 1 + + _doScroller: + 0.50602412223815918 + + + {255, 421} + + + + _NS:9 + 133152 + + + + 0.25 + 4 + 1 + + + titleTextField + + + + 35 + + + + notesTextView + + + + 36 + view - + - 2 + 45 + + + + contentView + + + + 46 @@ -79,34 +541,682 @@ Application - 1 - + 37 + + + + + + + + 38 + + + + + + 39 + + + + + 40 + + + + + 3 + + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 129 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 5 + + 1000 + + 9 + 40 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + + + 24 + + + + + + + + 25 + + + + + 23 + + + + + + + + 26 + + + + + 12 + + + + + 11 + + + + + 10 + + + + + 9 + + + + + 7 + + + + + 8 + 1 + + 0 + 1 + + 150 + + 1000 + + 9 + 40 + 1 + + + + + + + + + 17 + + + + + 15 + + + + + 30 + + + + + 29 + + + + + 28 + + + + + 27 + + + + + 6 + + + + + + + + 16 + + + + + 14 + + + + + 13 + + + + + 31 + + + + + 5 + + + + + + + + 18 + + + + + 32 + + + + + 4 + + + + + + + + 20 + + + + + 19 + + + + + 33 + + + + + 48 + + + + + 75 + + + + + + + + 76 + + + + + 102 + + + + + 104 + + + + + 107 + + + + + 108 + + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + HNHRoundedTextFieldCell + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + HNHScrollView + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - 2 + 109 + + HNHRoundedTextFieldCell + NSTextFieldCell + + IBProjectSource + ./Classes/HNHRoundedTextFieldCell.h + + + + HNHScrollDocumentViewAdapter + NSView + + IBProjectSource + ./Classes/HNHScrollDocumentViewAdapter.h + + + + HNHScrollView + NSScrollView + + IBProjectSource + ./Classes/HNHScrollView.h + + MPGroupInspectorViewController - NSViewController + MPViewController + + NSView + NSTextView + NSTextField + + + + contentView + NSView + + + notesTextView + NSTextView + + + titleTextField + NSTextField + + IBProjectSource ./Classes/MPGroupInspectorViewController.h + + MPViewController + NSViewController + + IBProjectSource + ./Classes/MPViewController.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + 0 @@ -117,6 +1227,10 @@ YES 3 + + NSSwitch + {15, 15} + YES diff --git a/MacPass/KdbEntry+Undo.m b/MacPass/KdbEntry+Undo.m index d0c78ed3..aa79da7e 100644 --- a/MacPass/KdbEntry+Undo.m +++ b/MacPass/KdbEntry+Undo.m @@ -77,7 +77,7 @@ if(![[self undoManager] isUndoing]) {\ MPSetActionName(@"SET_PASSWORT", "Undo set password"); if(![[self undoManager] isUndoing]) { - [[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")]; + [[self undoManager] setActionName:NSLocalizedString(@"SET_PASSWORD", "Set Password")]; } [self setLastModificationTime:[NSDate date]]; diff --git a/MacPass/MPAppDelegate.m b/MacPass/MPAppDelegate.m index 616f6ff0..5d5b6647 100644 --- a/MacPass/MPAppDelegate.m +++ b/MacPass/MPAppDelegate.m @@ -21,6 +21,7 @@ @private MPServerDaemon *serverDaemon; MPLockDaemon *lockDaemon; + BOOL _restoredWindows; } @property (strong, nonatomic) MPSettingsWindowController *settingsController; @@ -49,6 +50,7 @@ - (void)applicationWillFinishLaunching:(NSNotification *)notification { BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch]; + _restoredWindows = NO; if(reopen) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_applicationDidFinishRestoringWindows:) @@ -61,6 +63,30 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification { serverDaemon = [[MPServerDaemon alloc] init]; lockDaemon = [[MPLockDaemon alloc] init]; + + BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch]; + if(reopen && !_restoredWindows) { + NSDocumentController *documentController = [NSDocumentController sharedDocumentController]; + NSArray *documents = [documentController documents]; + if([documents count] > 0) { + return; // There's a document open + } + + NSArray *recentDocuments = [documentController recentDocumentURLs]; + 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) {}]; + + } + } } - (NSString *)applicationName { @@ -111,23 +137,7 @@ - (void)_applicationDidFinishRestoringWindows:(NSNotification *)notification { NSDocumentController *documentController = [NSDocumentController sharedDocumentController]; NSArray *documents = [documentController documents]; - NSArray *recentDocuments = [documentController recentDocumentURLs]; - 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) {}]; - - } + _restoredWindows = [documents count] > 0; } @end diff --git a/MacPass/MPAttachmentTableViewDelegate.h b/MacPass/MPAttachmentTableViewDelegate.h index 7797aae4..0a01296e 100644 --- a/MacPass/MPAttachmentTableViewDelegate.h +++ b/MacPass/MPAttachmentTableViewDelegate.h @@ -8,10 +8,8 @@ #import -@class MPInspectorViewController; - @interface MPAttachmentTableViewDelegate : NSObject -@property (nonatomic, weak) MPInspectorViewController *viewController; +@property (nonatomic, weak) id viewController; @end diff --git a/MacPass/MPAttachmentTableViewDelegate.m b/MacPass/MPAttachmentTableViewDelegate.m index 699dfee7..1d550a5a 100644 --- a/MacPass/MPAttachmentTableViewDelegate.m +++ b/MacPass/MPAttachmentTableViewDelegate.m @@ -8,7 +8,7 @@ #import "MPAttachmentTableViewDelegate.h" -#import "MPInspectorViewController.h" +#import "MPDocument.h" #import "MPSelectedAttachmentTableCellView.h" #import "Kdb4Node.h" @@ -20,14 +20,15 @@ - (void)tableViewSelectionDidChange:(NSNotification *)notification { NSTableView *tableView = [notification object]; + MPDocument *document = [[[tableView window] windowController] document]; NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[tableView tableColumns] count])]; - if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) { - Kdb4Entry *entryv4 = (Kdb4Entry *)self.viewController.selectedEntry; + if([document.selectedEntry isKindOfClass:[Kdb4Entry class]]) { + Kdb4Entry *entryv4 = (Kdb4Entry *)document.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; + if([document.selectedEntry isKindOfClass:[Kdb3Entry class]]) { + Kdb3Entry *entryv3 = (Kdb3Entry *)document.selectedEntry; NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, (entryv3.binary ? 1 : 0 ))]; [tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns]; } @@ -35,6 +36,7 @@ - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { /* Decide what view to use */ + MPDocument *document = [[[tableView window] windowController] document]; NSIndexSet *selectedIndexes = [tableView selectedRowIndexes]; NSTableCellView *view; if([selectedIndexes containsIndex:row]) { @@ -44,6 +46,7 @@ [cellView.saveButton setTarget:self.viewController]; [cellView.removeButton setTag:row]; [cellView.removeButton setAction:@selector(removeAttachment:)]; + [cellView.removeButton setTarget:nil]; [cellView.removeButton setTarget:self.viewController]; view = cellView; } @@ -51,14 +54,14 @@ view = [tableView makeViewWithIdentifier:@"NormalCell" owner:tableView]; } /* Bind view */ - if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) { - Kdb4Entry *entry = (Kdb4Entry *)self.viewController.selectedEntry; + if([document.selectedEntry isKindOfClass:[Kdb4Entry class]]) { + Kdb4Entry *entry = (Kdb4Entry *)document.selectedEntry; BinaryRef *binaryRef = entry.binaries[row]; [[view textField] bind:NSValueBinding toObject:binaryRef withKeyPath:@"key" options:nil]; [[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[binaryRef.key pathExtension]]]; } else { - Kdb3Entry *entry= (Kdb3Entry *)self.viewController.selectedEntry; + Kdb3Entry *entry= (Kdb3Entry *)document.selectedEntry; [[view textField] bind:NSValueBinding toObject:entry withKeyPath:@"binaryDesc" options:nil]; [[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[entry.binaryDesc pathExtension]]]; } diff --git a/MacPass/MPCustomFieldTableViewDelegate.h b/MacPass/MPCustomFieldTableViewDelegate.h index a64d791a..f1cec8b6 100644 --- a/MacPass/MPCustomFieldTableViewDelegate.h +++ b/MacPass/MPCustomFieldTableViewDelegate.h @@ -12,6 +12,6 @@ @interface MPCustomFieldTableViewDelegate : NSObject -@property (nonatomic, weak) MPInspectorViewController *viewController; +@property (weak, nonatomic) id viewController; @end diff --git a/MacPass/MPCustomFieldTableViewDelegate.m b/MacPass/MPCustomFieldTableViewDelegate.m index 89f7e231..e9aa55d1 100644 --- a/MacPass/MPCustomFieldTableViewDelegate.m +++ b/MacPass/MPCustomFieldTableViewDelegate.m @@ -7,7 +7,7 @@ // #import "MPCustomFieldTableViewDelegate.h" -#import "MPInspectorViewController.h" +#import "MPDocument.h" #import "MPCustomFieldTableCellView.h" #import "Kdb4Node.h" @@ -16,13 +16,14 @@ @implementation MPCustomFieldTableViewDelegate - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - if(![self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) { + MPDocument *document = [[[tableView window] windowController] document]; + if(![document.selectedEntry isKindOfClass:[Kdb4Entry class]]) { return nil; } - Kdb4Entry *entry = (Kdb4Entry *)self.viewController.selectedEntry; + Kdb4Entry *entry = (Kdb4Entry *)document.selectedEntry; MPCustomFieldTableCellView *view = [tableView makeViewWithIdentifier:@"SelectedCell" owner:tableView]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_customFieldFrameChanged:) name:NSViewFrameDidChangeNotification object:view]; - if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) { + if([document.selectedEntry isKindOfClass:[Kdb4Entry class]]) { StringField *stringField = entry.stringFields[row]; NSDictionary *validateOptions = @{ NSValidatesImmediatelyBindingOption: @YES }; [view.labelTextField bind:NSValueBinding toObject:stringField withKeyPath:MPStringFieldKeyUndoableKey options:validateOptions]; diff --git a/MacPass/MPDatePickingViewController.h b/MacPass/MPDatePickingViewController.h new file mode 100644 index 00000000..bce65af3 --- /dev/null +++ b/MacPass/MPDatePickingViewController.h @@ -0,0 +1,13 @@ +// +// MPDatePickingViewController.h +// MacPass +// +// Created by Michael Starke on 27.07.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import "MPViewController.h" + +@interface MPDatePickingViewController : MPViewController + +@end diff --git a/MacPass/MPDatePickingViewController.m b/MacPass/MPDatePickingViewController.m new file mode 100644 index 00000000..46767ed7 --- /dev/null +++ b/MacPass/MPDatePickingViewController.m @@ -0,0 +1,29 @@ +// +// MPDatePickingViewController.m +// MacPass +// +// Created by Michael Starke on 27.07.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import "MPDatePickingViewController.h" + +@interface MPDatePickingViewController () + +@end + +@implementation MPDatePickingViewController + +- (id)init { + self = [self initWithNibName:@"DatePickingView" bundle:nil]; + return self; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + } + return self; +} + +@end diff --git a/MacPass/MPDocument.m b/MacPass/MPDocument.m index bbae8ed6..a0a072ee 100644 --- a/MacPass/MPDocument.m +++ b/MacPass/MPDocument.m @@ -38,6 +38,10 @@ #import "DDXMLNode.h" +#import "KPKPassword.h" +#import "KPKTreeCryptor.h" +#import "KPKTree.h" + NSString *const MPDocumentDidAddGroupNotification = @"com.hicknhack.macpass.MPDocumentDidAddGroupNotification"; NSString *const MPDocumentDidAddEntryNotification = @"com.hicknhack.macpass.MPDocumentDidAddEntryNotification"; NSString *const MPDocumentDidRevertNotifiation = @"com.hicknhack.macpass.MPDocumentDidRevertNotifiation"; @@ -187,6 +191,11 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey #pragma mark Lock/Unlock/Decrypt - (BOOL)unlockWithPassword:(NSString *)password keyFileURL:(NSURL *)keyFileURL { +// KPKPassword *pwd = [[KPKPassword alloc] initWithPassword:password key:nil]; +// +// KPKTreeCryptor *cryptor = [KPKTreeCryptor treeCryptorWithData:_fileData password:pwd]; +// KPKTree *tree = [cryptor decryptTree:NULL]; + self.key = keyFileURL; self.password = [password length] > 0 ? password : nil; @try { diff --git a/MacPass/MPEntryInspectorViewController.h b/MacPass/MPEntryInspectorViewController.h index d8ac5194..caf01cc6 100644 --- a/MacPass/MPEntryInspectorViewController.h +++ b/MacPass/MPEntryInspectorViewController.h @@ -8,6 +8,30 @@ #import "MPViewController.h" -@interface MPEntryInspectorViewController : MPViewController +@class KdbEntry; +@class HNHRoundedSecureTextField; +@class MPDocument; + +@interface MPEntryInspectorViewController : MPViewController + +@property (weak) IBOutlet NSTextField *titleTextField; +@property (weak) IBOutlet NSTextField *usernameTextField; +@property (weak) IBOutlet NSTextField *URLTextField; +@property (weak) IBOutlet HNHRoundedSecureTextField *passwordTextField; + +@property (weak) IBOutlet NSTextField *createdTextField; +@property (weak) IBOutlet NSTextField *modifiedTextField; + +@property (weak) IBOutlet NSSegmentedControl *infoTabControl; +@property (weak) IBOutlet NSTableView *attachmentTableView; +@property (weak) IBOutlet NSTableView *customFieldsTableView; +@property (unsafe_unretained) IBOutlet NSTextView *notesTextView; +@property (weak) IBOutlet NSButton *generatePasswordButton; +@property (weak) IBOutlet NSButton *togglePassword; + +@property (weak) IBOutlet NSTabView *tabView; +@property (strong) IBOutlet NSView *generalView; + +- (void)setupBindings:(MPDocument *)document; @end diff --git a/MacPass/MPEntryInspectorViewController.m b/MacPass/MPEntryInspectorViewController.m index 906f4483..e1c9874c 100644 --- a/MacPass/MPEntryInspectorViewController.m +++ b/MacPass/MPEntryInspectorViewController.m @@ -7,21 +7,282 @@ // #import "MPEntryInspectorViewController.h" +#import "MPAttachmentTableViewDelegate.h" +#import "MPCustomFieldTableViewDelegate.h" +#import "MPPasswordCreatorViewController.h" -@interface MPEntryInspectorViewController () +#import "MPDocument.h" +#import "MPIconHelper.h" + +#import "Kdb.h" +#import "Kdb3Node.h" +#import "Kdb4Node.h" +#import "KdbEntry+Undo.h" + +#import "HNHScrollView.h" +#import "HNHRoundedSecureTextField.h" + +typedef NS_ENUM(NSUInteger, MPEntryTab) { + MPEntryTabGeneral, + MPEntryTabFiles, + MPEntryTabCustomFields +}; + +@interface MPEntryInspectorViewController () { +@private + NSArrayController *_attachmentsController; + NSArrayController *_customFieldsController; + MPAttachmentTableViewDelegate *_attachmentTableDelegate; + MPCustomFieldTableViewDelegate *_customFieldTableDelegate; +} + +@property (nonatomic, assign) BOOL showPassword; +@property (nonatomic, assign) MPEntryTab activeTab; +@property (strong) NSPopover *activePopover; + +@property (nonatomic, weak) KdbEntry *entry; @end @implementation MPEntryInspectorViewController -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ +- (id)init { + return [self initWithNibName:@"EntryInspectorView" bundle:nil]; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { - // Initialization code here. + _showPassword = NO; + _attachmentsController = [[NSArrayController alloc] init]; + _customFieldsController = [[NSArrayController alloc] init]; + _attachmentTableDelegate = [[MPAttachmentTableViewDelegate alloc] init]; + _customFieldTableDelegate = [[MPCustomFieldTableViewDelegate alloc] init]; + _attachmentTableDelegate.viewController = self; + _customFieldTableDelegate.viewController = self; + _activeTab = MPEntryTabGeneral; } - return self; } +- (void)didLoadView { + + /* ScrollView setup for the General Tab */ + + HNHScrollView *scrollView = [[HNHScrollView alloc] init]; + scrollView.actAsFlipped = NO; + scrollView.showBottomShadow = NO; + [scrollView setHasVerticalScroller:YES]; + [scrollView setDrawsBackground:NO]; + [scrollView setTranslatesAutoresizingMaskIntoConstraints:NO]; + NSView *clipView = [scrollView contentView]; + + NSView *tabView = [[self.tabView tabViewItemAtIndex:MPEntryTabGeneral] view]; + /* + DO NEVER SET setTranslatesAutoresizingMaskIntoConstraints on NSTabViewItem's view + [tabView setTranslatesAutoresizingMaskIntoConstraints:NO]; + */ + [scrollView setDocumentView:self.generalView]; + [tabView addSubview:scrollView]; + + NSDictionary *views = NSDictionaryOfVariableBindings(_generalView, scrollView); + [[scrollView superview] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" + options:0 + metrics:nil + views:views ]]; + [[scrollView superview] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" + options:0 + metrics:nil + views:views]]; + [clipView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_generalView]|" + options:0 + metrics:nil + views:views]]; + [[self view] layoutSubtreeIfNeeded]; + + [_infoTabControl bind:NSSelectedIndexBinding toObject:self withKeyPath:@"activeTab" options:nil]; + [_tabView bind:NSSelectedIndexBinding toObject:self withKeyPath:@"activeTab" options:nil]; + + /* Set background to clearcolor so we can draw in the scrollview */ + [_attachmentTableView setBackgroundColor:[NSColor clearColor]]; + [_attachmentTableView bind:NSContentBinding toObject:_attachmentsController withKeyPath:@"arrangedObjects" options:nil]; + [_attachmentTableView setDelegate:_attachmentTableDelegate]; + /* Set background to clearcolor so we can draw in the scrollview */ + [_customFieldsTableView setBackgroundColor:[NSColor clearColor]]; + [_customFieldsTableView bind:NSContentBinding toObject:_customFieldsController withKeyPath:@"arrangedObjects" options:nil]; + [_customFieldsTableView setDelegate:_customFieldTableDelegate]; + + [self.passwordTextField bind:@"showPassword" toObject:self withKeyPath:@"showPassword" options:nil]; + [self.togglePassword bind:NSValueBinding toObject:self withKeyPath:@"showPassword" options:nil]; +} + +- (void)setupBindings:(MPDocument *)document { + [self bind:@"entry" toObject:document withKeyPath:@"selectedEntry" options:nil]; +} + +- (void)setEntry:(KdbEntry *)entry { + if(_entry != entry) { + _entry = entry; + [self _updateContent]; + } +} + +#pragma mark - +#pragma mark Actions + +- (IBAction)addCustomField:(id)sender { + MPDocument *document = [[self windowController] document]; + [document createStringField:self.entry]; +} +- (IBAction)removeCustomField:(id)sender { + MPDocument *document = [[self windowController] document]; + NSUInteger index = [sender tag]; + Kdb4Entry *entry = (Kdb4Entry *)self.entry; + [document removeStringField:(entry.stringFields)[index] formEntry:entry]; +} + +- (IBAction)saveAttachment:(id)sender { + BOOL isVersion4 = [self.entry isKindOfClass:[Kdb4Entry class]]; + id item = self.entry; + NSString *fileName = nil; + if(isVersion4) { + Kdb4Entry *entry= (Kdb4Entry *)self.entry; + item = entry.binaries[[sender tag]]; + fileName = ((BinaryRef *)item).key; + } + else { + fileName = ((Kdb3Entry *)item).binaryDesc; + } + + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setCanCreateDirectories:YES]; + [savePanel setNameFieldStringValue:fileName]; + + [savePanel beginSheetModalForWindow:[[self windowController] window] completionHandler:^(NSInteger result) { + if(result == NSFileHandlingPanelOKButton) { + MPDocument *document = [[self windowController] document]; + [document saveAttachmentForItem:item toLocation:[savePanel URL]]; + } + }]; +} + +- (IBAction)addAttachment:(id)sender { + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + [openPanel setAllowsMultipleSelection:YES]; + [openPanel beginSheetModalForWindow:[[self windowController] window] completionHandler:^(NSInteger result) { + if(result == NSFileHandlingPanelOKButton) { + MPDocument *document = [[self windowController] document]; + for (NSURL *attachmentURL in [openPanel URLs]) { + [document addAttachment:attachmentURL toEntry:self.entry]; + } + } + }]; +} + +- (IBAction)removeAttachment:(id)sender { + MPDocument *document = [[self windowController] document]; + if(document.version == MPDatabaseVersion3) { + [document removeAttachmentFromEntry:self.entry]; + } + else if(document.version == MPDatabaseVersion4) { + Kdb4Entry *entry = (Kdb4Entry *)self.entry; + BinaryRef *reference = entry.binaries[[sender tag]]; + [document removeAttachment:reference fromEntry:self.entry]; + } +} + +#pragma mark - +#pragma mark Popovers + +//- (void)_showImagePopup:(id)sender { +// [self _showPopopver:[[MPIconSelectViewController alloc] init] atView:self.itemImageView onEdge:NSMinYEdge]; +//} +// +- (IBAction)_popUpPasswordGenerator:(id)sender { + [self.generatePasswordButton setEnabled:NO]; + [self _showPopopver:[[MPPasswordCreatorViewController alloc] init] atView:self.passwordTextField onEdge:NSMinYEdge]; +} + +- (void)_showPopopver:(NSViewController *)viewController atView:(NSView *)view onEdge:(NSRectEdge)edge { + if(_activePopover.contentViewController == viewController) { + return; // Do nothing, we already did show the controller + } + [_activePopover close]; + NSAssert(_activePopover == nil, @"Popover hast to be niled out"); + _activePopover = [[NSPopover alloc] init]; + _activePopover.delegate = self; + _activePopover.behavior = NSPopoverBehaviorTransient; + _activePopover.contentViewController = viewController; + [_activePopover showRelativeToRect:NSZeroRect ofView:view preferredEdge:edge]; +} + +- (void)popoverDidClose:(NSNotification *)notification { + /* We do not enable the button all the time, but it's wokring find this way */ + [self.generatePasswordButton setEnabled:YES]; + id controller = _activePopover.contentViewController; + /* Check for password wizzard */ + if([controller respondsToSelector:@selector(generatedPassword)]) { + NSString *password = [controller generatedPassword]; + /* We should only use the password if there is actally one */ + if([password length] > 0) { + self.entry.passwordUndoable = [controller generatedPassword]; + } + } + /* TODO: Check for Icon wizzard */ + + _activePopover = nil; +} + +#pragma mark - +#pragma mark Entry Selection +- (void)_updateContent { + [self _bindEntry]; + [self _bindAttachments]; + [self _bindCustomFields]; +} + +- (void)_bindEntry { + + if(self.entry) { + [self.titleTextField bind:NSValueBinding toObject:self.entry withKeyPath:@"titleUndoable" options:nil]; + //[self.itemImageView setImage:[MPIconHelper icon:(MPIconType)self.entry.image ]]; + [self.passwordTextField bind:NSValueBinding toObject:self.entry withKeyPath:@"passwordUndoable" options:nil]; + [self.usernameTextField bind:NSValueBinding toObject:self.entry withKeyPath:@"usernameUndoable" options:nil]; + [self.URLTextField bind:NSValueBinding toObject:self.entry withKeyPath:@"urlUndoable" options:nil]; + [self.notesTextView bind:NSValueBinding toObject:self.entry withKeyPath:@"notesUndoable" options:nil]; + + BOOL isKdbx = [self.entry isKindOfClass:[Kdb4Entry class]]; + [self.infoTabControl setEnabled:isKdbx forSegment:MPEntryTabCustomFields]; + } + else { + [self.titleTextField unbind:NSValueBinding]; + [self.passwordTextField unbind:NSValueBinding]; + [self.usernameTextField unbind:NSValueBinding]; + [self.URLTextField unbind:NSValueBinding]; + [self.notesTextView unbind:NSValueBinding]; + } +} + +- (void)_bindAttachments { + if(self.entry) { + [_attachmentsController bind:NSContentArrayBinding toObject:self.entry withKeyPath:@"binaries" options:nil]; + } + else if([_attachmentsController content] != nil){ + [_attachmentsController unbind:NSContentArrayBinding]; + [_attachmentsController setContent:nil]; + } +} + +- (void)_bindCustomFields { + if(self.entry && [self.entry isKindOfClass:[Kdb4Entry class]]) { + [_customFieldsController bind:NSContentArrayBinding toObject:self.entry withKeyPath:@"stringFields" options:nil]; + } + else if([_customFieldsController content] != nil){ + [_customFieldsController unbind:NSContentArrayBinding]; + [_customFieldsController setContent:nil]; + } +} + @end diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index 283fb91a..ff3146f7 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -139,7 +139,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; //[self.entryTable registerForDraggedTypes:@[MPPasteBoardType]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didBecomFirstResponder:) - name:MPDidBecomeFirstResonderNotification + name:MPDidActivateViewNotification object:_entryTable]; [self _setupEntryMenu]; @@ -278,7 +278,13 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; - (void)_didBecomFirstResponder:(NSNotification *)notification { MPDocument *document = [[self windowController] document]; - document.selectedItem = document.selectedEntry; + if(document.selectedEntry.parent == document.selectedGroup + || [self _showsFilterBar]) { + document.selectedItem = document.selectedEntry; + } + else { + document.selectedEntry = nil; + } } @@ -309,27 +315,32 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; } - (void)updateFilter { - [self _showFilterBarAnimated]; + //[self _showFilterBarAnimated]; if(![self hasFilter]) { return; } dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(backgroundQueue, ^{ - - NSMutableArray *prediactes = [NSMutableArray arrayWithCapacity:3]; - if( [self _shouldFilterTitles] ) { - [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.title CONTAINS[cd] %@", self.filter]]; - } - if( [self _shouldFilterUsernames] ) { - [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.username CONTAINS[cd] %@", self.filter]]; - } - if( [self _shouldFilterURLs] ) { - [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.url CONTAINS[cd] %@", self.filter]]; - } - NSPredicate *fullFilter = [NSCompoundPredicate orPredicateWithSubpredicates:prediactes]; MPDocument *document = [[self windowController] document]; - self.filteredEntries = [[document.root childEntries] filteredArrayUsingPredicate:fullFilter]; + if([self hasFilter]) { + NSMutableArray *prediactes = [NSMutableArray arrayWithCapacity:3]; + if( [self _shouldFilterTitles] ) { + [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.title CONTAINS[cd] %@", self.filter]]; + } + if( [self _shouldFilterUsernames] ) { + [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.username CONTAINS[cd] %@", self.filter]]; + } + if( [self _shouldFilterURLs] ) { + [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.url CONTAINS[cd] %@", self.filter]]; + } + NSPredicate *fullFilter = [NSCompoundPredicate orPredicateWithSubpredicates:prediactes]; + self.filteredEntries = [[document.root childEntries] filteredArrayUsingPredicate:fullFilter]; + } + + else { + self.filteredEntries = [document.root childEntries]; + } dispatch_sync(dispatch_get_main_queue(), ^{ document.selectedEntry = nil; @@ -384,14 +395,14 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; NSView *scrollView = [_entryTable enclosingScrollView]; NSDictionary *views = NSDictionaryOfVariableBindings(scrollView, _filterBar); - [self.view layout]; - [self.view addSubview:self.filterBar]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_filterBar]|" options:0 metrics:nil views:views]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_filterBar(==30)]-0-[scrollView]" options:0 metrics:nil views:views]]; + [[self view] addSubview:self.filterBar]; + + [[self view] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_filterBar]|" options:0 metrics:nil views:views]]; + [[self view] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_filterBar(==30)]-0-[scrollView]" options:0 metrics:nil views:views]]; [[self view] layoutSubtreeIfNeeded]; - [self.view removeConstraint:self.tableToTopConstraint]; + [[self view] removeConstraint:self.tableToTopConstraint]; self.filterbarTopConstraint = [NSLayoutConstraint constraintWithItem:self.filterBar attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual diff --git a/MacPass/MPGroupInspectorViewController.h b/MacPass/MPGroupInspectorViewController.h index cb5f8c48..91cf2293 100644 --- a/MacPass/MPGroupInspectorViewController.h +++ b/MacPass/MPGroupInspectorViewController.h @@ -7,7 +7,14 @@ // #import "MPViewController.h" +@class MPDocument; @interface MPGroupInspectorViewController : MPViewController +@property (strong) IBOutlet NSView *contentView; +@property (weak) IBOutlet NSTextField *titleTextField; +@property (unsafe_unretained) IBOutlet NSTextView *notesTextView; + +- (void)setupBindings:(MPDocument *)document; + @end diff --git a/MacPass/MPGroupInspectorViewController.m b/MacPass/MPGroupInspectorViewController.m index b9103880..c4eb7083 100644 --- a/MacPass/MPGroupInspectorViewController.m +++ b/MacPass/MPGroupInspectorViewController.m @@ -7,21 +7,78 @@ // #import "MPGroupInspectorViewController.h" +#import "MPDocument.h" + +#import "Kdb.h" +#import "Kdb4Node.h" + +#import "HNHScrollView.h" @interface MPGroupInspectorViewController () +@property (nonatomic, weak) KdbGroup *group; + @end @implementation MPGroupInspectorViewController -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ +- (id)init { + return [self initWithNibName:@"GroupInspectorView" bundle:nil]; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { - // Initialization code here. } - return self; } +- (void)didLoadView { + HNHScrollView *scrollView = (HNHScrollView *)[self view]; + + scrollView.actAsFlipped = NO; + scrollView.showBottomShadow = NO; + [scrollView setHasVerticalScroller:YES]; + [scrollView setDrawsBackground:NO]; + [scrollView setTranslatesAutoresizingMaskIntoConstraints:NO]; + NSView *clipView = [scrollView contentView]; + + [scrollView setDocumentView:self.contentView]; + + NSDictionary *views = NSDictionaryOfVariableBindings(_contentView); + [clipView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_contentView]|" + options:0 + metrics:nil + views:views]]; + [[self view] layoutSubtreeIfNeeded]; +} + +- (void)setupBindings:(MPDocument *)document { + [self bind:@"group" toObject:document withKeyPath:@"selectedGroup" options:nil]; +} + +- (void)setGroup:(KdbGroup *)group { + if(_group != group) { + _group = group; + [self _updateBindings]; + } +} + +- (void)_updateBindings { + if(self.group) { + [self.titleTextField bind:NSValueBinding toObject:self.group withKeyPath:@"name" options:nil]; + if([self.group respondsToSelector:@selector(notes:)]) { + [self.notesTextView bind:NSValueBinding toObject:self.group withKeyPath:@"notes" options:nil]; + } + else { + [self.notesTextView unbind:NSValueBinding]; + [self.notesTextView setString:@""]; + } + } + else { + [self.titleTextField unbind:NSValueBinding]; + [self.notesTextView unbind:NSValueBinding]; + } +} + @end diff --git a/MacPass/MPInspectorViewController.h b/MacPass/MPInspectorViewController.h index 1aba807a..ee65fc44 100644 --- a/MacPass/MPInspectorViewController.h +++ b/MacPass/MPInspectorViewController.h @@ -8,40 +8,21 @@ #import "MPViewController.h" -@class MPPopupImageView; -@class KdbEntry; -@class KdbGroup; @class HNHGradientView; -@class HNHRoundedSecureTextField; -@class MPDocumentWindowController; +@class MPPopupImageView; -@interface MPInspectorViewController : MPViewController +@interface MPInspectorViewController : MPViewController -@property (weak) IBOutlet MPPopupImageView *itemImageView; -@property (weak) IBOutlet NSTextField *itemNameTextfield; - -@property (weak) IBOutlet NSTextField *titleTextField; -@property (weak) IBOutlet NSTextField *usernameTextField; -@property (weak) IBOutlet NSTextField *URLTextField; -@property (weak) IBOutlet HNHRoundedSecureTextField *passwordTextField; -@property (weak) IBOutlet NSTextField *titleOrNameLabel; @property (weak) IBOutlet HNHGradientView *bottomBar; @property (weak) IBOutlet NSTextField *createdTextField; @property (weak) IBOutlet NSTextField *modifiedTextField; -@property (weak) IBOutlet NSSegmentedControl *infoTabControl; -@property (weak) IBOutlet NSTableView *attachmentTableView; -@property (weak) IBOutlet NSTableView *customFieldsTableView; -@property (unsafe_unretained) IBOutlet NSTextView *notesTextView; -@property (weak) IBOutlet NSTextField *customFieldsTextField; -@property (weak) IBOutlet NSButton *togglePassword; @property (weak) IBOutlet NSImageView *modifiedImageView; @property (weak) IBOutlet NSImageView *createdImageView; - - -@property (weak, nonatomic, readonly) KdbEntry *selectedEntry; -@property (weak, nonatomic, readonly) KdbGroup *selectedGroup; +@property (weak) IBOutlet NSTextField *noSelectionInfo; +@property (weak) IBOutlet MPPopupImageView *itemImageView; +@property (weak) IBOutlet NSTextField *itemNameTextField; /* Seperate call to ensure alle registered objects are in place */ -- (void)setupNotifications:(MPDocumentWindowController *)windowController; +- (void)setupNotifications:(NSWindowController *)windowController; @end diff --git a/MacPass/MPInspectorViewController.m b/MacPass/MPInspectorViewController.m index 64ef00e2..f7c2a130 100644 --- a/MacPass/MPInspectorViewController.m +++ b/MacPass/MPInspectorViewController.m @@ -7,21 +7,10 @@ // #import "MPInspectorViewController.h" -#import "MPEntryViewController.h" -#import "MPPasswordCreatorViewController.h" -#import "MPShadowBox.h" #import "MPIconHelper.h" -#import "MPPopupImageView.h" -#import "MPIconSelectViewController.h" -#import "MPDocumentWindowController.h" -#import "MPOutlineViewController.h" +#import "MPEntryInspectorViewController.h" +#import "MPGroupInspectorViewController.h" #import "MPDocument.h" -#import "MPCustomFieldView.h" -#import "MPDatabaseVersion.h" -#import "MPCustomFieldTableCellView.h" -#import "MPSelectedAttachmentTableCellView.h" -#import "MPAttachmentTableViewDelegate.h" -#import "MPCustomFieldTableViewDelegate.h" #import "MPNotifications.h" #import "NSDate+Humanized.h" @@ -29,53 +18,26 @@ #import "KdbLib.h" #import "Kdb4Node.h" #import "Kdb3Node.h" -#import "KdbGroup+Undo.h" -#import "KdbEntry+Undo.h" -#import "StringField+Undo.h" -#import "Kdb4Entry+KVOAdditions.h" -#import "NSMutableData+Base64.h" #import "HNHGradientView.h" -#import "HNHScrollView.h" -#import "HNHTableRowView.h" -#import "HNHRoundedSecureTextField.h" +#import "MPPopupImageView.h" -enum { - MPGeneralTab, - MPAttachmentsTab, - MPCustomFieldsTab +typedef NS_ENUM(NSUInteger, MPContentTab) { + MPEntryTab, + MPGroupTab, + MPEmptyTab }; @interface MPInspectorViewController () { - BOOL _visible; - NSArrayController *_attachmentsController; - NSArrayController *_customFieldsController; - MPAttachmentTableViewDelegate *_attachmentTableDelegate; - MPCustomFieldTableViewDelegate *_customFieldTableDelegate; + MPEntryInspectorViewController *_entryViewController; + MPGroupInspectorViewController *_groupViewController; } -@property (weak, nonatomic) KdbEntry *selectedEntry; -@property (weak, nonatomic) KdbGroup *selectedGroup; - -@property (strong) NSPopover *activePopover; -@property (weak) IBOutlet NSButton *generatePasswordButton; - @property (nonatomic, strong) NSDate *modificationDate; @property (nonatomic, strong) NSDate *creationDate; -@property (nonatomic, assign) BOOL showPassword; - @property (nonatomic, assign) NSUInteger activeTab; @property (weak) IBOutlet NSTabView *tabView; -@property (strong) IBOutlet NSView *generalView; - -- (IBAction)addCustomField:(id)sender; -- (IBAction)removeCustomField:(id)sender; -- (IBAction)saveAttachment:(id)sender; -- (IBAction)addAttachment:(id)sender; -- (IBAction)removeAttachment:(id)sender; -- (IBAction)edit:(id)sender; -- (IBAction)finishEdit:(id)sender; @end @@ -88,16 +50,9 @@ enum { - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { - _showPassword = NO; - _selectedEntry = nil; - _selectedGroup = nil; - _attachmentsController = [[NSArrayController alloc] init]; - _customFieldsController = [[NSArrayController alloc] init]; - _attachmentTableDelegate = [[MPAttachmentTableViewDelegate alloc] init]; - _attachmentTableDelegate.viewController = self; - _customFieldTableDelegate = [[MPCustomFieldTableViewDelegate alloc] init]; - _customFieldTableDelegate.viewController = self; - _activeTab = MPGeneralTab; + _activeTab = MPEmptyTab; + _entryViewController = [[MPEntryInspectorViewController alloc] init]; + _groupViewController = [[MPGroupInspectorViewController alloc] init]; } return self; } @@ -107,74 +62,43 @@ enum { } - (void)didLoadView { + [_bottomBar setBorderType:HNHBorderTop]; + [[self.noSelectionInfo cell] setBackgroundStyle:NSBackgroundStyleRaised]; + [[self.itemImageView cell] setBackgroundStyle:NSBackgroundStyleRaised]; + [self.tabView bind:NSSelectedIndexBinding toObject:self withKeyPath:@"activeTab" options:nil]; - /* ScrollView setup for the General Tab */ + NSView *entryView = [_entryViewController view]; + NSView *groupView = [_groupViewController view]; - HNHScrollView *scrollView = [[HNHScrollView alloc] init]; - scrollView.actAsFlipped = NO; - [scrollView setHasVerticalScroller:YES]; - [scrollView setDrawsBackground:NO]; - [scrollView setTranslatesAutoresizingMaskIntoConstraints:NO]; - NSView *clipView = [scrollView contentView]; + NSView *entryTabView = [[self.tabView tabViewItemAtIndex:MPEntryTab] view]; + [entryTabView addSubview:entryView]; + NSDictionary *views = NSDictionaryOfVariableBindings(entryView, groupView); + [entryTabView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[entryView]|" options:0 metrics:nil views:views]]; + [entryTabView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[entryView]|" options:0 metrics:nil views:views]]; - NSView *tabView = [[self.tabView tabViewItemAtIndex:MPGeneralTab] view]; - /* - DO NEVER SET setTranslatesAutoresizingMaskIntoConstraints on NSTabViewItem's view - [tabView setTranslatesAutoresizingMaskIntoConstraints:NO]; - */ - [scrollView setDocumentView:self.generalView]; - [tabView addSubview:scrollView]; + NSView *groupTabView = [[self.tabView tabViewItemAtIndex:MPGroupTab] view]; + [groupTabView addSubview:groupView]; + [groupTabView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[groupView]|" options:0 metrics:nil views:views]]; + [groupTabView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[groupView]|" options:0 metrics:nil views:views]]; + + [_groupViewController updateResponderChain]; + [_entryViewController updateResponderChain]; - NSDictionary *views = NSDictionaryOfVariableBindings(_generalView, scrollView); - [[scrollView superview] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" - options:0 - metrics:nil - views:views ]]; - [[scrollView superview] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-3-[scrollView]-50-|" - options:0 - metrics:nil - views:views]]; - [clipView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_generalView]|" - options:0 - metrics:nil - views:views]]; [[self view] layoutSubtreeIfNeeded]; - - /* Setup ImageView Background styles */ - [[self.itemImageView cell] setBackgroundStyle:NSBackgroundStyleRaised]; - [self.itemImageView setTarget:self]; - [[self.createdImageView cell] setBackgroundStyle:NSBackgroundStyleRaised]; - [[self.modifiedImageView cell] setBackgroundStyle:NSBackgroundStyleRaised]; - [_bottomBar setBorderType:HNHBorderTop]; - - - - - [_infoTabControl bind:NSSelectedIndexBinding toObject:self withKeyPath:@"activeTab" options:nil]; - [_tabView bind:NSSelectedIndexBinding toObject:self withKeyPath:@"activeTab" options:nil]; - - /* Set background to clearcolor so we can draw in the scrollview */ - [_attachmentTableView setBackgroundColor:[NSColor clearColor]]; - [_attachmentTableView bind:NSContentBinding toObject:_attachmentsController withKeyPath:@"arrangedObjects" options:nil]; - [_attachmentTableView setDelegate:_attachmentTableDelegate]; - /* Set background to clearcolor so we can draw in the scrollview */ - [_customFieldsTableView setBackgroundColor:[NSColor clearColor]]; - [_customFieldsTableView bind:NSContentBinding toObject:_customFieldsController withKeyPath:@"arrangedObjects" options:nil]; - [_customFieldsTableView setDelegate:_customFieldTableDelegate]; - - [self.passwordTextField bind:@"showPassword" toObject:self withKeyPath:@"showPassword" options:nil]; - [self.togglePassword bind:NSValueBinding toObject:self withKeyPath:@"showPassword" options:nil]; - - [self _clearContent]; + [self _updateItemBindings:nil]; } -- (void)setupNotifications:(MPDocumentWindowController *)windowController { +- (void)setupNotifications:(NSWindowController *)windowController { MPDocument *document = [windowController document]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didChangeCurrentItem:) name:MPCurrentItemChangedNotification object:document]; + + [_entryViewController setupBindings:document]; + [_groupViewController setupBindings:document]; + } - (void)setModificationDate:(NSDate *)modificationDate { @@ -206,282 +130,50 @@ enum { } -- (void)_updateContent { - if(self.selectedEntry) { - [self _showEntry]; +#pragma mark - +#pragma mark Item Binding + +- (void)_updateItemBindings:(id)item { + if(!item) { + [self.itemNameTextField unbind:NSValueBinding]; + [self.itemNameTextField setHidden:YES]; + [self.itemImageView unbind:NSValueBinding]; + [self.itemImageView setHidden:YES]; + + return; } - else if(self.selectedGroup) { - [self _showGroup]; + + [self.itemImageView bind:NSValueBinding toObject:item withKeyPath:@"icon" options:nil]; + + if([item respondsToSelector:@selector(title)]) { + [self.itemNameTextField bind:NSValueBinding toObject:item withKeyPath:@"title" options:nil]; } - else { - [self _clearContent]; + else if( [item respondsToSelector:@selector(name)]) { + [self.itemNameTextField bind:NSValueBinding toObject:item withKeyPath:@"name" options:nil]; } - [self _updateAttachments]; - [self _updateCustomFields]; -} - -- (void)_updateAttachments { - if(self.selectedEntry) { - if([self.selectedEntry isKindOfClass:[Kdb4Entry class]]) { - [_attachmentsController bind:NSContentArrayBinding toObject:self.selectedEntry withKeyPath:@"binaries" options:nil]; - } - else { - [_attachmentsController bind:NSContentArrayBinding toObject:self.selectedEntry withKeyPath:@"binaries" options:nil]; - } - } - else if([_attachmentsController content] != nil){ - [_attachmentsController unbind:NSContentArrayBinding]; - [_attachmentsController setContent:nil]; - - } -} - -- (void)_updateCustomFields { - if(self.selectedEntry && [self.selectedEntry isKindOfClass:[Kdb4Entry class]]) { - [_customFieldsController bind:NSContentArrayBinding toObject:self.selectedEntry withKeyPath:@"stringFields" options:nil]; - } - else if([_customFieldsController content] != nil){ - [_customFieldsController unbind:NSContentArrayBinding]; - [_customFieldsController setContent:nil]; - } -} - -- (void)_showEntry { - - [self bind:@"modificationDate" toObject:self.selectedEntry withKeyPath:@"lastModificationTime" options:nil]; - [self bind:@"creationDate" toObject:self.selectedEntry withKeyPath:@"creationTime" options:nil]; - - [self.itemNameTextfield bind:NSValueBinding toObject:self.selectedEntry withKeyPath:MPEntryTitleUndoableKey options:nil]; - [self.itemImageView setImage:[MPIconHelper icon:(MPIconType)self.selectedEntry.image ]]; - [self.passwordTextField bind:NSValueBinding toObject:self.selectedEntry withKeyPath:MPEntryPasswordUndoableKey options:nil]; - [self.usernameTextField bind:NSValueBinding toObject:self.selectedEntry withKeyPath:MPEntryUsernameUndoableKey options:nil]; - [self.titleOrNameLabel setStringValue:NSLocalizedString(@"TITLE",@"")]; - [self.titleTextField bind:NSValueBinding toObject:self.selectedEntry withKeyPath:MPEntryTitleUndoableKey options:nil]; - [self.URLTextField bind:NSValueBinding toObject:self.selectedEntry withKeyPath:MPEntryUrlUndoableKey options:nil]; - [self.notesTextView bind:NSValueBinding toObject:self.selectedEntry withKeyPath:MPEntryNotesUndoableKey options:nil]; - - [self _setInputEnabled:YES]; -} - -- (void)_showGroup { - - [self bind:@"modificationDate" toObject:self.selectedGroup withKeyPath:@"lastModificationTime" options:nil]; - [self bind:@"creationDate" toObject:self.selectedGroup withKeyPath:@"creationTime" options:nil]; - - [self.itemNameTextfield bind:NSValueBinding toObject:self.selectedGroup withKeyPath:MPGroupNameUndoableKey options:nil]; - [self.itemImageView setImage:[MPIconHelper icon:(MPIconType)self.selectedGroup.image ]]; - [self.titleOrNameLabel setStringValue:NSLocalizedString(@"NAME",@"")]; - [self.titleTextField bind:NSValueBinding toObject:self.selectedGroup withKeyPath:MPGroupNameUndoableKey options:nil]; - - // Clear other bindins - [self.passwordTextField unbind:NSValueBinding]; - [self.usernameTextField unbind:NSValueBinding]; - [self.URLTextField unbind:NSValueBinding]; - - // Reset Fields - [self.passwordTextField setStringValue:@""]; - [self.usernameTextField setStringValue:@""]; - [self.URLTextField setStringValue:@""]; - - // Reste toggle. Do not call setter on control or the bindings wont update - self.activeTab = MPGeneralTab; - [self _setInputEnabled:YES]; -} - -- (void)_clearContent { - - [self _setInputEnabled:NO]; - - [self.itemNameTextfield unbind:NSValueBinding]; - [self.passwordTextField unbind:NSValueBinding]; - [self.usernameTextField unbind:NSValueBinding]; - [self.titleTextField unbind:NSValueBinding]; - [self.URLTextField unbind:NSValueBinding]; - [self.notesTextView unbind:NSValueBinding]; - - [self.itemNameTextfield setStringValue:NSLocalizedString(@"INSPECTOR_NO_SELECTION", @"No item selected in inspector")]; - [self.itemImageView setImage:[NSImage imageNamed:NSImageNameActionTemplate]]; - - [self.itemNameTextfield setStringValue:@""]; - [self.passwordTextField setStringValue:@""]; - [self.usernameTextField setStringValue:@""]; - [self.titleTextField setStringValue:@""]; - [self.URLTextField setStringValue:@""]; - [self.notesTextView setString:@""]; - - [self.createdTextField setStringValue:@""]; - [self.modifiedTextField setStringValue:@""]; - -} - -- (void)_setInputEnabled:(BOOL)enabled { - - [self.itemImageView setAction: enabled ? @selector(_showImagePopup:) : NULL ]; - [self.itemImageView setEnabled:enabled]; - [self.itemNameTextfield setTextColor: enabled ? [NSColor controlTextColor] : [NSColor disabledControlTextColor] ]; - [self.itemNameTextfield setEnabled:enabled]; - [self.titleTextField setEnabled:enabled]; - [self.infoTabControl setEnabled:enabled forSegment:MPGeneralTab]; - - - enabled &= (self.selectedEntry != nil); - [self.passwordTextField setEnabled:enabled]; - [self.togglePassword setEnabled:enabled]; - [self.usernameTextField setEnabled:enabled]; - [self.URLTextField setEnabled:enabled]; - [self.generatePasswordButton setEnabled:enabled]; - - [self.infoTabControl setEnabled:enabled forSegment:MPAttachmentsTab]; - - enabled &= [self.selectedEntry isKindOfClass:[Kdb4Entry class]]; - [self.infoTabControl setEnabled:enabled forSegment:MPCustomFieldsTab]; -} - -#pragma mark Popovers -- (void)_showImagePopup:(id)sender { - [self _showPopopver:[[MPIconSelectViewController alloc] init] atView:self.itemImageView onEdge:NSMinYEdge]; -} - -- (IBAction)_popUpPasswordGenerator:(id)sender { - [self.generatePasswordButton setEnabled:NO]; - [self _showPopopver:[[MPPasswordCreatorViewController alloc] init] atView:self.passwordTextField onEdge:NSMinYEdge]; -} - -- (void)_showPopopver:(NSViewController *)viewController atView:(NSView *)view onEdge:(NSRectEdge)edge { - if(_activePopover.contentViewController == viewController) { - return; // Do nothing, we already did show the controller - } - [_activePopover close]; - NSAssert(_activePopover == nil, @"Popover hast to be niled out"); - _activePopover = [[NSPopover alloc] init]; - _activePopover.delegate = self; - _activePopover.behavior = NSPopoverBehaviorTransient; - _activePopover.contentViewController = viewController; - [_activePopover showRelativeToRect:NSZeroRect ofView:view preferredEdge:edge]; -} - -- (void)popoverDidClose:(NSNotification *)notification { - /* We do not enable the button all the time, but it's wokring find this way */ - [self.generatePasswordButton setEnabled:YES]; - id controller = _activePopover.contentViewController; - /* Check for password wizzard */ - if([controller respondsToSelector:@selector(generatedPassword)]) { - NSString *password = [controller generatedPassword]; - /* We should only use the password if there is actally one */ - if([password length] > 0) { - [self.selectedEntry setPasswordUndoable:[controller generatedPassword]]; - } - } - /* TODO: Check for Icon wizzard */ - - _activePopover = nil; -} - -#pragma mark Actions -- (IBAction)addCustomField:(id)sender { - MPDocument *document = [[self windowController] document]; - [document createStringField:self.selectedEntry]; -} -- (IBAction)removeCustomField:(id)sender { - MPDocument *document = [[self windowController] document]; - NSUInteger index = [sender tag]; - Kdb4Entry *entry = (Kdb4Entry *)self.selectedEntry; - [document removeStringField:(entry.stringFields)[index] formEntry:entry]; -} - -- (IBAction)saveAttachment:(id)sender { - BOOL isVersion4 = [self.selectedEntry isKindOfClass:[Kdb4Entry class]]; - id item = self.selectedEntry; - NSString *fileName = nil; - if(isVersion4) { - Kdb4Entry *entry= (Kdb4Entry *)self.selectedEntry; - item = entry.binaries[[sender tag]]; - fileName = ((BinaryRef *)item).key; - } - else { - fileName = ((Kdb3Entry *)item).binaryDesc; - } - - NSSavePanel *savePanel = [NSSavePanel savePanel]; - [savePanel setCanCreateDirectories:YES]; - [savePanel setNameFieldStringValue:fileName]; - - [savePanel beginSheetModalForWindow:[[self windowController] window] completionHandler:^(NSInteger result) { - if(result == NSFileHandlingPanelOKButton) { - MPDocument *document = [[self windowController] document]; - [document saveAttachmentForItem:item toLocation:[savePanel URL]]; - } - }]; -} - -- (IBAction)addAttachment:(id)sender { - NSOpenPanel *openPanel = [NSOpenPanel openPanel]; - [openPanel setCanChooseDirectories:NO]; - [openPanel setCanChooseFiles:YES]; - [openPanel setAllowsMultipleSelection:YES]; - [openPanel beginSheetModalForWindow:[[self windowController] window] completionHandler:^(NSInteger result) { - if(result == NSFileHandlingPanelOKButton) { - MPDocument *document = [[self windowController] document]; - for (NSURL *attachmentURL in [openPanel URLs]) { - [document addAttachment:attachmentURL toEntry:self.selectedEntry]; - } - } - }]; -} - -- (IBAction)removeAttachment:(id)sender { - MPDocument *document = [[self windowController] document]; - if(document.version == MPDatabaseVersion3) { - [document removeAttachmentFromEntry:self.selectedEntry]; - } - else if(document.version == MPDatabaseVersion4) { - Kdb4Entry *entry = (Kdb4Entry *)self.selectedEntry; - BinaryRef *reference = entry.binaries[[sender tag]]; - [document removeAttachment:reference fromEntry:self.selectedEntry]; - } -} - -- (IBAction)edit:(id)sender { - [self.titleTextField setEditable:YES]; - [self.usernameTextField setEditable:YES]; - [[[[self windowController] document] undoManager] beginUndoGrouping]; -} - -- (IBAction)finishEdit:(id)sender { - NSUndoManager *undoManger = [[[self windowController] document] undoManager]; - if([undoManger canUndo]) { - [undoManger setActionName:@"Edit"]; - } - [undoManger endUndoGrouping]; - [self.titleTextField setEditable:NO]; - [self.titleTextField setSelectable:YES]; - [self.usernameTextField setEditable:NO]; - [self.usernameTextField setSelectable:YES]; - + [self.itemImageView setHidden:NO]; + [self.itemNameTextField setHidden:NO]; } +#pragma mark - #pragma mark Notificiations + - (void)_didChangeCurrentItem:(NSNotification *)notification { - /** - Remove double handling. - Just call for documents properties when neede - */ - MPDocument *document = [[self windowController] document]; + MPDocument *document = [notification object]; if(!document.selectedItem) { - self.selectedGroup = nil; - self.selectedEntry = nil; + self.activeTab = MPEmptyTab; } - BOOL isGroup = document.selectedItem == document.selectedGroup; - BOOL isEntry = document.selectedItem == document.selectedEntry; - if(isGroup) { - self.selectedEntry = nil; - self.selectedGroup = document.selectedItem; + else { + BOOL isGroup = document.selectedItem == document.selectedGroup; + BOOL isEntry = document.selectedItem == document.selectedEntry; + if(isGroup) { + self.activeTab = MPGroupTab; + } + else if(isEntry) { + self.activeTab = MPEntryTab; + } } - else if(isEntry) { - self.selectedGroup = nil; - self.selectedEntry = document.selectedItem; - } - [self _updateContent]; + [self _updateItemBindings:document.selectedItem]; } -@end +@end \ No newline at end of file diff --git a/MacPass/MPNotifications.h b/MacPass/MPNotifications.h index 926903a1..b4771c30 100644 --- a/MacPass/MPNotifications.h +++ b/MacPass/MPNotifications.h @@ -11,7 +11,7 @@ #import -FOUNDATION_EXPORT NSString *const MPDidBecomeFirstResonderNotification; +FOUNDATION_EXPORT NSString *const MPDidActivateViewNotification; FOUNDATION_EXPORT NSString *const MPCurrentItemChangedNotification; #endif diff --git a/MacPass/MPNotifications.m b/MacPass/MPNotifications.m index 0d4efde2..e9b4c267 100644 --- a/MacPass/MPNotifications.m +++ b/MacPass/MPNotifications.m @@ -8,5 +8,5 @@ #import "MPNotifications.h" -NSString *const MPDidBecomeFirstResonderNotification = @"com.hicknhack.macpass.MPDidBecomeFirstResonderNotification"; +NSString *const MPDidActivateViewNotification = @"com.hicknhack.macpass.MPDidBecomeFirstResonderNotification"; NSString *const MPCurrentItemChangedNotification = @"com.hicknhack.macpass.MPCurrentItemChangedNotification"; \ No newline at end of file diff --git a/MacPass/MPOutlineView.m b/MacPass/MPOutlineView.m index e25d4899..56473753 100644 --- a/MacPass/MPOutlineView.m +++ b/MacPass/MPOutlineView.m @@ -9,12 +9,26 @@ #import "MPOutlineView.h" #import "MPNotifications.h" +@interface MPOutlineView () { + BOOL _didBecomeFirstResponder; +} + +@end + @implementation MPOutlineView +- (void)mouseDown:(NSEvent *)theEvent { + [super mouseDown:theEvent]; + if(_didBecomeFirstResponder) { + [[NSNotificationCenter defaultCenter] postNotificationName:MPDidActivateViewNotification + object:self + userInfo:nil]; + } + _didBecomeFirstResponder = NO; +} + - (BOOL)becomeFirstResponder { - [[NSNotificationCenter defaultCenter] postNotificationName:MPDidBecomeFirstResonderNotification - object:self - userInfo:nil]; + _didBecomeFirstResponder = YES; return YES; } diff --git a/MacPass/MPOutlineViewController.m b/MacPass/MPOutlineViewController.m index b001f071..e8f0c93c 100644 --- a/MacPass/MPOutlineViewController.m +++ b/MacPass/MPOutlineViewController.m @@ -74,7 +74,7 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell"; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didBecomeFirstResponder:) - name:MPDidBecomeFirstResonderNotification + name:MPDidActivateViewNotification object:_outlineView]; } diff --git a/MacPass/MPPasswordCreatorViewController.h b/MacPass/MPPasswordCreatorViewController.h index 03dd8b74..adfa3db6 100644 --- a/MacPass/MPPasswordCreatorViewController.h +++ b/MacPass/MPPasswordCreatorViewController.h @@ -10,6 +10,6 @@ @interface MPPasswordCreatorViewController : MPViewController -@property (strong, readonly) NSString *generatedPassword; +@property (copy, readonly) NSString *generatedPassword; @end diff --git a/MacPass/MPPasswordCreatorViewController.m b/MacPass/MPPasswordCreatorViewController.m index 81fd8205..1cbe12a9 100644 --- a/MacPass/MPPasswordCreatorViewController.m +++ b/MacPass/MPPasswordCreatorViewController.m @@ -9,16 +9,24 @@ #import "MPPasswordCreatorViewController.h" #import "MPPasteBoardController.h" #import "NSString+MPPasswordCreation.h" +#import "MPUniqueCharactersFormatter.h" + +typedef NS_ENUM(NSUInteger, MPPasswordRating) { + MPPasswordTerrible, + MPPasswordWeak, + MPPasswordOk, + MPPasswordGood, + MPPasswordStrong +}; #define MIN_PASSWORD_LENGTH 1 #define MAX_PASSWORD_LENGTH 64 - @interface MPPasswordCreatorViewController () { MPPasswordCharacterFlags _characterFlags; } -@property (strong) NSString *password; -@property (strong) NSString *generatedPassword; +@property (nonatomic, copy) NSString *password; +@property (copy) NSString *generatedPassword; @property (weak) IBOutlet NSTextField *passwordTextField; @property (weak) IBOutlet NSTextField *passwordLengthTextField; @@ -30,9 +38,12 @@ @property (weak) IBOutlet NSButton *numbersButton; @property (weak) IBOutlet NSButton *symbolsButton; @property (weak) IBOutlet NSButton *customButton; +@property (weak) IBOutlet NSTextField *entropyTextField; +@property (weak) IBOutlet NSLevelIndicator *entropyIndicator; @property (assign, nonatomic) BOOL useCustomString; @property (assign, nonatomic) NSUInteger passwordLength; +@property (assign, nonatomic) CGFloat entropy; - (IBAction)_generatePassword:(id)sender; - (IBAction)_toggleCharacters:(id)sender; @@ -50,6 +61,7 @@ _passwordLength = 12; _characterFlags = MPPasswordCharactersAll; _useCustomString = NO; + _entropy = 0.0; } return self; } @@ -60,10 +72,17 @@ [self.passwordLengthSlider setMaxValue:MAX_PASSWORD_LENGTH]; [self.passwordLengthSlider setContinuous:YES]; /* Value Transformer */ + + id formatter = [[MPUniqueCharactersFormatter alloc] init]; + [self. customCharactersTextField setFormatter:formatter]; + [self.passwordLengthSlider bind:NSValueBinding toObject:self withKeyPath:@"passwordLength" options:nil]; [self.passwordLengthTextField bind:NSValueBinding toObject:self withKeyPath:@"passwordLength" options:nil]; [self.passwordTextField bind:NSValueBinding toObject:self withKeyPath:@"password" options:nil]; + [self.entropyIndicator bind:NSValueBinding toObject:self withKeyPath:@"entropy" options:nil]; + [self.entropyTextField bind:NSValueBinding toObject:self withKeyPath:@"entropy" options:nil]; + [_customButton bind:NSValueBinding toObject:self withKeyPath:@"useCustomString" options:nil]; [_numbersButton setTag:MPPasswordCharactersNumbers]; [_upperCaseButton setTag:MPPasswordCharactersUpperCase]; @@ -89,6 +108,7 @@ _characterFlags ^= [sender tag]; self.useCustomString = NO; [self _resetCharacters]; + [self _generatePassword:nil]; } - (IBAction)_usePassword:(id)sender { @@ -106,6 +126,14 @@ } +- (void)setPassword:(NSString *)password { + if(![_password isEqualToString:password]) { + _password = [password copy]; + NSString *customString = _useCustomString ? [_customCharactersTextField stringValue] : nil; + self.entropy = [password entropyWhithPossibleCharacterSet:_characterFlags orCustomCharacters:customString]; + } +} + - (void)setUseCustomString:(BOOL)useCustomString { if(_useCustomString != useCustomString) { _useCustomString = useCustomString; diff --git a/MacPass/MPPasswordInputController.m b/MacPass/MPPasswordInputController.m index 1ec20bd8..5ff8ac9c 100644 --- a/MacPass/MPPasswordInputController.m +++ b/MacPass/MPPasswordInputController.m @@ -21,6 +21,7 @@ @property (weak) IBOutlet NSImageView *errorImageView; @property (weak) IBOutlet NSTextField *errorInfoTextField; @property (weak) IBOutlet NSButton *togglePasswordButton; + @property (assign) BOOL showPassword; - (IBAction)_decrypt:(id)sender; @@ -97,4 +98,5 @@ [self.errorImageView setHidden:NO]; [self.errorInfoTextField setHidden:NO]; } + @end diff --git a/MacPass/MPTableView.m b/MacPass/MPTableView.m index 72e6fc10..7f8f98d1 100644 --- a/MacPass/MPTableView.m +++ b/MacPass/MPTableView.m @@ -9,12 +9,26 @@ #import "MPTableView.h" #import "MPNotifications.h" +@interface MPTableView () { + BOOL _didBecomeFirstResponder; +} + +@end + @implementation MPTableView +- (void)mouseDown:(NSEvent *)theEvent { + [super mouseDown:theEvent]; + if(_didBecomeFirstResponder) { + [[NSNotificationCenter defaultCenter] postNotificationName:MPDidActivateViewNotification + object:self + userInfo:nil]; + } + _didBecomeFirstResponder = NO; +} + - (BOOL)becomeFirstResponder { - [[NSNotificationCenter defaultCenter] postNotificationName:MPDidBecomeFirstResonderNotification - object:self - userInfo:nil]; + _didBecomeFirstResponder = YES; return YES; } diff --git a/MacPass/MPUniqueCharactersFormatter.m b/MacPass/MPUniqueCharactersFormatter.m index 4ad70f07..770fc3d4 100644 --- a/MacPass/MPUniqueCharactersFormatter.m +++ b/MacPass/MPUniqueCharactersFormatter.m @@ -10,4 +10,26 @@ @implementation MPUniqueCharactersFormatter +- (NSString *)stringForObjectValue:(id)obj { + if([obj isKindOfClass:[NSString class]]) { + return obj; + } + return nil; +} + +- (BOOL)getObjectValue:(out id *)obj forString:(NSString *)string errorDescription:(out NSString **)error { + *obj = string; + return YES; +} + +- (BOOL)isPartialStringValid:(NSString **)partialStringPtr + proposedSelectedRange:(NSRangePointer)proposedSelRangePtr + originalString:(NSString *)origString + originalSelectedRange:(NSRange)origSelRange + errorDescription:(NSString **)error { + return YES; +} + + + @end diff --git a/MacPass/NSString+MPPasswordCreation.h b/MacPass/NSString+MPPasswordCreation.h index 7eec0e66..697a8ff2 100644 --- a/MacPass/NSString+MPPasswordCreation.h +++ b/MacPass/NSString+MPPasswordCreation.h @@ -18,29 +18,33 @@ typedef NS_OPTIONS(NSUInteger, MPPasswordCharacterFlags) { @interface NSString (MPPasswordCreation) -/* - Generates a new password with the allowed charaters an the requests lenght +/** @param array with allowed NSChractersSets for creation @param lenght lenght of the password to create + @returns a new password with the allowed charaters an the requests lenght */ + (NSString *)passwordWithCharactersets:(MPPasswordCharacterFlags)allowedCharacters length:(NSUInteger)theLength; -/* - Generates a new password with the given length and allowed characters +/** @param Source string of allowed characters @param lenght Lenght of the password to create - @return Password + @return a new password with the given length and allowed characters */ + (NSString *)passwordFromString:(NSString *)source length:(NSUInteger)length; -/* - Creates a password containing only the characters in the string - @param Lenght of the password +/** + @param Length of the password + @returns a password containing only the characters in the string */ - (NSString *)passwordWithLength:(NSUInteger)length; -/* - Returns a random Character from the String +/** + @returns a random Character from the String */ - (NSString *)randomCharacter; +/** + @param allowedCharacters Characters that where allowed for the cration of the password + @returns entrpy in bits taking into account, the creation was purely random. Do not use this to estimate user generated passswords + */ +- (CGFloat)entropyWhithPossibleCharacterSet:(MPPasswordCharacterFlags)allowedCharacters orCustomCharacters:(NSString *)customCharacters; @end diff --git a/MacPass/NSString+MPPasswordCreation.m b/MacPass/NSString+MPPasswordCreation.m index 54e5aa89..8b5cb925 100644 --- a/MacPass/NSString+MPPasswordCreation.m +++ b/MacPass/NSString+MPPasswordCreation.m @@ -72,4 +72,15 @@ static NSString *allowedCharactersString(MPPasswordCharacterFlags flags) { return [self substringWithRange:NSMakeRange(randomIndex % [self length], 1)]; } +- (CGFloat)entropyWhithPossibleCharacterSet:(MPPasswordCharacterFlags)allowedCharacters orCustomCharacters:(NSString *)customCharacters { + if(nil != customCharacters) { + return 0; // We need a sophisticated parser here! + } + + NSString *stringSet = allowedCharactersString(allowedCharacters); + CGFloat alphabetCount = [stringSet length]; + CGFloat passwordLegnth = [self length]; + return passwordLegnth * ( log10(alphabetCount) / log10(2) ); +} + @end diff --git a/MacPass/PasswordCreatorView.xib b/MacPass/PasswordCreatorView.xib index 7d667f4b..5c0f8786 100644 --- a/MacPass/PasswordCreatorView.xib +++ b/MacPass/PasswordCreatorView.xib @@ -17,6 +17,9 @@ NSButtonCell NSCustomObject NSCustomView + NSLevelIndicator + NSLevelIndicatorCell + NSNumberFormatter NSSlider NSSliderCell NSTextField @@ -43,10 +46,139 @@ 268 + + + 268 + {{283, 174}, {46, 17}} + + + + _NS:1535 + YES + + 67108928 + -1874851840 + 25000 + + LucidaGrande + 13 + 1044 + + + + + + + # bit + -∞ + + + # bit + +∞ + + # bit + # bit + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + , + . + NO + YES + YES + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + {{28, 174}, {57, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Entropy: + + _NS:1535 + + + + + NO + + + + 268 + {{90, 174}, {188, 16}} + + + + _NS:9 + YES + + 0 + 0 + _NS:9 + + 2 + 2 + 2 + 2 + 1 + + NO + 268 - {{158, 18}, {56, 25}} + {{162, 18}, {56, 25}} @@ -56,11 +188,7 @@ -2080374784 134217728 Cancel - - LucidaGrande - 13 - 1044 - + _NS:22 -2038153216 @@ -75,7 +203,7 @@ 268 - {{294, 203}, {28, 25}} + {{298, 231}, {28, 25}} @@ -104,7 +232,7 @@ 268 - {{18, 56}, {211, 18}} + {{18, 52}, {211, 18}} @@ -136,9 +264,10 @@ 268 - {{222, 18}, {100, 25}} + {{226, 18}, {100, 25}} + _NS:22 YES @@ -168,7 +297,7 @@ 268 - {{18, 19}, {270, 22}} + {{18, 19}, {274, 22}} @@ -195,10 +324,7 @@ 6 System textColor - - 3 - MAA - + NO @@ -337,14 +463,14 @@ NO - {{1, 1}, {306, 78}} + {{1, 1}, {310, 78}} _NS:11 - {{17, 76}, {308, 94}} + {{17, 72}, {312, 94}} @@ -374,10 +500,10 @@ 268 - {{294, 175}, {28, 22}} + {{298, 203}, {28, 22}} - + _NS:9 YES @@ -396,7 +522,7 @@ 268 - {{17, 178}, {48, 17}} + {{33, 206}, {52, 17}} @@ -405,32 +531,19 @@ 68157504 272630784 - Length + Length: _NS:1535 - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - + + NO 268 - {{68, 176}, {220, 21}} + {{88, 204}, {204, 21}} @@ -456,7 +569,7 @@ 268 - {{86, 205}, {200, 22}} + {{90, 231}, {200, 24}} @@ -466,7 +579,11 @@ -2074083263 272631808 - + + Menlo-Regular + 13 + 16 + _NS:9 YES @@ -478,7 +595,7 @@ 268 - {{17, 207}, {64, 17}} + {{17, 237}, {68, 17}} @@ -487,7 +604,7 @@ 68157504 272630784 - Password + Password: _NS:1535 @@ -497,7 +614,7 @@ NO - {342, 247} + {346, 275} @@ -674,6 +791,22 @@ 623 + + + entropyTextField + + + + 675 + + + + entropyIndicator + + + + 676 + @@ -721,22 +854,6 @@ 24 3 - - - 3 - 1 - - 4 - 1 - - 16 - - 1000 - - 9 - 40 - 3 - 6 @@ -769,6 +886,22 @@ 40 3 + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + 3 @@ -813,8 +946,8 @@ 1000 - 6 - 24 + 9 + 40 3 @@ -833,22 +966,6 @@ 29 3 - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - 6 @@ -897,6 +1014,70 @@ 40 3 + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 9 + 40 + 3 + + + + 6 + 1 + + 6 + 1 + + 20 + + 1000 + + 9 + 40 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + 4 @@ -913,6 +1094,22 @@ 29 3 + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + 5 @@ -929,11 +1126,43 @@ 29 3 - - + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + 3 0 - + 4 1 @@ -941,10 +1170,90 @@ 1000 + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + 9 40 3 + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 9 + 40 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + 5 @@ -977,68 +1286,20 @@ 40 3 - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 9 - 40 - 3 - - - + + 3 0 - - 4 - 1 - - 8 - - 1000 - - 9 - 40 - 3 - - - - 5 - 0 - 5 + 3 1 - - 20 + + 84 1000 - 9 - 40 + 3 + 9 3 @@ -1057,22 +1318,6 @@ 40 2 - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - 11 @@ -1109,12 +1354,15 @@ - - - + + + + + + @@ -1173,11 +1421,6 @@ - - 181 - - - 182 @@ -1470,11 +1713,6 @@ - - 335 - - - 338 @@ -1644,21 +1882,11 @@ - - 503 - - - 504 - - 505 - - - 509 @@ -1708,11 +1936,6 @@ - - 522 - - - 576 @@ -1738,11 +1961,6 @@ - - 602 - - - 585 @@ -1753,22 +1971,6 @@ - - - 7 - 0 - - 0 - 1 - - 58 - - 1000 - - 9 - 40 - 1 - @@ -1787,11 +1989,6 @@ - - 605 - - - 149 @@ -1821,14 +2018,126 @@ - 620 + 621 + + + + + 635 + + + + + + + + 636 + + + + + 642 + + + + + 643 + + + + + 646 + + + + + + + + 647 + + + + + 648 + + + + + 651 + + + + + 652 + + + + + + + + 653 + + + + + + + + 657 + + + + + 658 + + + + + 659 + + + + + 655 + + + + + 669 + + + + + 670 + + + + + 671 + + + + + 672 + + + + + 679 + + + + + 680 - 621 - - + 681 + + @@ -1839,35 +2148,39 @@ - - - - - + - + + + + + + + + + + + + + - + - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1886,7 +2199,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1915,7 +2227,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1955,9 +2266,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -1968,30 +2277,61 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + HNHLevelIndicatorCell + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin - 626 + 681 + + HNHLevelIndicatorCell + NSLevelIndicatorCell + + IBProjectSource + ./Classes/HNHLevelIndicatorCell.h + + HNHRoundedTextFieldCell NSTextFieldCell @@ -2031,6 +2371,8 @@ NSButton NSButton NSTextField + NSLevelIndicator + NSTextField NSButton NSButton NSSlider @@ -2052,6 +2394,14 @@ customCharactersTextField NSTextField + + entropyIndicator + NSLevelIndicator + + + entropyTextField + NSTextField + lowerCaseButton NSButton diff --git a/MacPass/UnprotectedWarningView.xib b/MacPass/UnprotectedWarningView.xib index 2a86a6fe..8b5ab359 100644 --- a/MacPass/UnprotectedWarningView.xib +++ b/MacPass/UnprotectedWarningView.xib @@ -53,7 +53,6 @@ {{36, 19}, {32, 32}} - _NS:9 YES @@ -78,8 +77,6 @@ 268 {{73, 27}, {162, 17}} - - _NS:1535 YES @@ -117,7 +114,6 @@ {307, 71} - NSView @@ -387,40 +383,7 @@ 43 - - - - MPDocument - NSDocument - - NSView - NSImageView - - - - warningView - NSView - - - warningViewImage - NSImageView - - - - IBProjectSource - ./Classes/MPDocument.h - - - - NSLayoutConstraint - NSObject - - IBProjectSource - ./Classes/NSLayoutConstraint.h - - - - + 0 IBCocoaFramework YES diff --git a/MacPass/de.lproj/Localizable.strings b/MacPass/de.lproj/Localizable.strings index 260b0631944defcb96d7c58b152fc3bc78007bff..2468a48b721d4f3a31f2e36edbf5cd21a0591092 100644 GIT binary patch delta 16 YcmZ1#zAAjf6P3vcY;v2KR9CP806$3vS^xk5 delta 18 acmZ1#zAAjf6BWjg$%$;To0(KsumJ!{6b7#V diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 71b2cb35400e643d53f241beb33e71c411bce559..864b35eb0efd9e666f9464b171682c0d0c148daa 100644 GIT binary patch delta 20 bcmeB5=t|gdPie9O8_#4PWv