142 Commits

Author SHA1 Message Date
dhannema
eb4a554509 Added more NL translations (#1313) 2025-05-07 15:16:04 +02:00
Michael Starke
b5fe8b6442 moved security preferences into separate tab. 2025-04-11 14:11:07 +02:00
Michael Starke
e861a59118 fix: Bind to preferences for screenshots to reflect changes directly in running application 2025-04-11 10:58:09 +02:00
Michael Starke
e7cafbff48 fix(Xcode): Fixed build issues with Xcode 15 2025-04-10 19:51:54 +02:00
Deniz Türkoglu
37f0ab1f8c Add flag to enable/disable screenshots (#1301)
* Bump TransformerKit to fix compile

Fixes build issue with Xcode 15 by raising minimum deployment target
to 10.13

* Add flag to disable screenshots

Make it possible to disable/enable screenshots, this is disabled
by default, to enable use:
$ defaults write com.hicknhacksoftware.MacPass AllowScreenshots YES
and to disable it use:
$ defaults write com.hicknhacksoftware.MacPass AllowScreenshots NO

---------

Co-authored-by: Michael Starke <michael.starke@hicknhack-software.com>
2025-04-10 19:50:37 +02:00
Deniz Türkoglu
a97353ef7b Fix and improve nightly builds (#1307)
* ci: (nightly) bump TransformerKit to fix compile

Fixes build issue with Xcode 15 by raising minimum deployment target
to 10.13

* ci: (nightly) bump dependencies to latest versions

This ensures the build no longer fails with error code 65

* ci: (nightly) use github_token for carthage rate limit

If we don't use the token the build can sometimes fail as it is
rate limited, this ensures we can build more with less restrictions.

* ci: (nightly) add empty sign identity

* ci: (nightly) add code sign entitlements flag

* build: make copyfiles first task to fix build cycle

* ci: (nightly) bump gh action checkout to v4

* ci: (nightly) format github actions yaml

* ci: (nightly) bump agent to use macos-latest

* ci: (nightly) bump gh-release action to v2

* ci: fix algorithm name in hash
2025-03-20 12:58:06 +01:00
Michael Starke
e1e86ac2fb fix: removed custom deployment target for view since we do not use merged cells 2023-08-31 18:46:02 +02:00
Michael Starke
904b4b9223 Merge branch 'feature/enhance-password-change-settings-ux' 2023-08-31 18:43:32 +02:00
Michael Starke
7263704fd6 feature: added info text displaying the last time the database key was changed 2023-08-31 18:43:07 +02:00
Michael Starke
debd5d7a79 WIP on reworking settings layout 2023-08-30 11:39:21 +02:00
Michael Starke
7cbed0fcd9 updated to current Xcode version 2023-08-28 12:42:23 +02:00
Michael Starke
265de273f2 fixed: compiler warning 2023-08-15 13:46:06 +02:00
Marc66
1cafe65bb9 Updated Translation (FR) (#1268)
* Update AutotypeCandidateSelectionView.strings

* Update DuplicateEntryOptionsWindow.strings

* Update EntryInspectorView.strings

* Update GeneralPreferences.strings

* Update InfoPlist.strings

* Update InspectorView.strings

* Update IntegrationPreferences.strings

* Update Localizable.strings

* Update MainMenu.strings

* Update PickcharsView.strings

* Update PickcharsView.strings

* Update PluginPreferences.strings

* Update PluginRepositoryBrowserView.strings

* Update SavePanelAccessoryView.strings

* Update GeneralPreferences.strings

* Update InspectorView.strings

* Update Localizable.strings

* Update GeneralPreferences.strings

* Update WorkflowPreferences.strings
2023-04-22 07:42:04 +02:00
Dietrich
478b1498cb fix typo (#1263) 2023-02-24 10:20:47 +01:00
Michael Starke
c123120882 feature(TouchId): use new key storage dictionary instead of a lot of file based default keys 2023-02-23 23:07:12 +01:00
Michael Starke
78f2de9393 feature(touchIdSettings): Migrate touchID settings correctly to hashed databasefilenames 2023-02-23 14:44:18 +01:00
Michael Starke
fb7c55b651 Fix typos in documentation 2023-02-23 11:39:56 +01:00
Michael Starke
bee3766f09 shortened relaunch NSTask invocation 2022-11-24 00:25:45 +01:00
Michael Starke
29756c00b3 added double-click copy action to TOTP column
we no longer copy empty stuff to the pasteboard on double-click
2022-11-23 16:30:00 +01:00
Michael Starke
05ba068632 Added TOTP Column to entry table view 2022-11-23 16:16:15 +01:00
Michael Starke
69ec359e87 Merge branch 'feature/sparkle-upgrade' 2022-11-22 11:41:47 +01:00
Michael Starke
45e2402e5f updated to Sparkle 2 2022-11-17 20:36:33 +01:00
Michael Starke
bc833640e4 updated to current sparkle version 2022-11-14 09:57:15 +01:00
Michael Starke
59f4fd0ae0 adde re-selection of groups when exiting search. 2022-11-14 09:42:53 +01:00
Michael Starke
289a27c7e7 reduced code complexity
added usage of storage typdef instead of AppKit values
2022-10-12 00:33:14 +02:00
Michael Starke
24164d501e remove unnecessary code duplication 2022-10-07 11:20:30 +02:00
Michael Starke
a162c19264 Merge branch 'fix-totp-wizzard-issues' 2022-10-06 14:45:25 +02:00
Michael Starke
05a5d3821e updated to current Xcode 2022-10-06 14:44:04 +02:00
Michael Starke
ef1876bf53 fix #1241: Wrong german localisation in workflow preferences 2022-10-06 10:53:40 +02:00
Michael Starke
2b318fc91f Updated to Xcode 14 2022-09-14 17:22:09 +02:00
Michael Starke
87fd55e5ae Added migration to new format of touchId key store 2022-09-07 00:19:43 +02:00
Michael Starke
49326013fb Refactored naming. Added better handling of settings for touchID 2022-09-01 23:45:03 +02:00
Michael Starke
76adcf74d4 Merge branch 'master' of https://github.com/MacPass/MacPass 2022-08-31 21:33:35 +02:00
Michael Starke
f6e784b1de Fixed missing breaks in key storage.
Added popup to set touchId in favour of checkbox
2022-08-31 21:32:45 +02:00
Wolfgang Rheinschmitt
663b55bfff Fix typo (#1237)
Thank you very much
2022-08-31 14:37:30 +02:00
Michael Starke
d601d6ed3f Refactored touchID codebase to be more in line with the rest.
Fixed a lot of potential memory leaks
Fixed all issues reported analyzer
2022-08-30 13:13:12 +02:00
Michael Starke
04e36bd013 Raised runner to 10.12 2022-08-23 11:19:45 +02:00
Michael Starke
0af2a2258f Automatic signing 2022-07-08 00:53:16 +02:00
Michael Starke
f31b33fadc Codestyle 2022-07-08 00:53:07 +02:00
Michael Starke
68b8a5906a Merge branch 'feature/feature-touchidunlock'
# Conflicts:
#	MacPass.xcodeproj/project.pbxproj
#	MacPass/Base.lproj/PasswordInputView.xib
#	MacPass/MPDocument.m
2022-07-07 19:52:19 +02:00
Michael Starke
57433b8cc0 Commit any open editing session in the popup before saving 2022-05-24 20:10:51 +02:00
Michael Starke
360eb23692 Fixed broken QR code parsing in TOTP wizzard 2022-05-24 16:12:59 +02:00
Michael Starke
cbb4cea9cf Fixed issue when trying to store key files for drafted documents 2022-05-24 11:46:17 +02:00
Michael Starke
8be69ca779 Fixed #1208 Password field did not scroll when moving cursor out of view 2022-02-21 11:35:20 +01:00
Michael Starke
e985d23fa5 Fixed crash when saving files with ChaCha chipher 2022-02-10 21:36:31 +01:00
Michael Starke
b690d6051e Bumped Version to 0.8 2022-02-10 16:23:33 +01:00
Michael Starke
fe7b4e2746 Added current plugin definitions 2022-02-10 16:05:42 +01:00
Michael Starke
5b211bb519 Xcode updates 2022-02-10 13:56:03 +01:00
Michael Starke
0a6ba80f01 Fixed #1206 that would cancel version browsing in time machine if the key file open panel is shown 2022-02-09 15:53:41 +01:00
Michael Starke
43e667a157 Enabled version browsing when database is locked 2022-02-09 15:52:49 +01:00
Michael Starke
2956a2e7c1 Updated to current KeePassKit and Sparkle versions 2022-02-03 14:10:38 +01:00
Michael Starke
af960b0b38 WIP on supporting more than one recent document when OS document history is disabled 2022-01-05 17:29:27 +01:00
Michael Starke
c1155bd061 Disabled single line mode 2021-12-20 13:15:34 +01:00
Michael Starke
9c9f6f0bf5 Scroll input fields to allow to navigate in them 2021-12-20 12:53:10 +01:00
Michael Starke
66ad8cee17 Only store last document, when MacPass is terminating
Moved code from MPDocument to MPDocumentController
2021-12-15 11:37:28 +01:00
Michael Starke
7376a5c887 Wired up tags in group inspector 2021-12-06 11:04:14 +01:00
Michael Starke
4bf130232f Added tags input to group inspector 2021-12-03 20:45:17 +01:00
Michael Starke
89268ef88e Made scrollview in groups inspector tab actually work 2021-12-03 20:43:21 +01:00
Chester Liu
59c37e696f Update zh-hans localization (#1179)
* Update zh-hans localization

* More zh-Hans loc string
2021-12-03 18:56:16 +01:00
Jiří Škorpil
e2d6a7ddad Added Czech localization (#1194) 2021-12-02 21:39:47 +01:00
Michael Starke
e6a7992084 Fixed KissXML signing since it's not nested anymore 2021-12-01 00:58:18 +01:00
Michael Starke
ca31d4638f Fixed wrong wiring of benchmark for key derivation parameters 2021-12-01 00:37:01 +01:00
Michael Starke
a40049a425 Extracted general settings into separate view controller 2021-11-24 15:26:45 +01:00
Michael Starke
2ec0945a51 Added UI to edit Argon2id key derivation settings 2021-11-23 23:26:21 +01:00
Michael Starke
fccc0921b7 Fixed typo 2021-11-15 21:56:46 +01:00
Michael Starke
1e78d3b0ae Enabled localization for TOTP views 2021-11-12 10:26:42 +01:00
Michael Starke
4f2888b759 Extracted URL open functionality in preparation of launch arguments for incognito mode 2021-11-11 11:09:45 +01:00
Michael Starke
9d032dcbf4 Updated german localisation 2021-11-10 21:19:34 +01:00
Michael Starke
07fba98d64 Removed obsolete localisations. Updated english localisation. 2021-11-10 21:13:00 +01:00
Michael Starke
95184ed2ec Added option to display passwords as clear text in entry list view. Fixes #347 2021-11-10 20:38:03 +01:00
Michael Starke
5d4d0a626b Prepared incognito mode preferences 2021-11-10 19:32:29 +01:00
Michael Starke
bb38973fa7 Fixed wrong bottom spacing 2021-11-10 13:55:10 +01:00
Michael Starke
dc4cbc6777 Added checkbox to enable search after unlock 2021-11-08 16:44:38 +01:00
Michael Starke
12406bf10f Added option to show search after unlocking the database 2021-11-08 16:34:44 +01:00
Michael Starke
096fdc4384 Fixed typo in API 2021-11-08 14:19:02 +01:00
Michael Starke
29d349a0a0 Prevent password autofill popup 2021-11-05 14:26:31 +01:00
Michael Starke
7c9c75e103 Create XMLv2 key files for all KDBX >3.1 databases 2021-11-05 14:26:16 +01:00
Michael Starke
7198b0cbf7 Codestyle 2021-11-05 13:56:38 +01:00
Michael Starke
6b7fdc081b Defaulting to unified toolbar on Big Sur and above.
Search item now stays in the toolbar for the longest
2021-11-04 14:23:19 +01:00
Michael Starke
43bc4d7ae1 Removed API check since we are at least on macOS 10.13 2021-11-04 14:22:36 +01:00
Michael Starke
31b062423a Extracted template menu creation in preperation to include it in the items menu 2021-11-04 13:37:13 +01:00
Michael Starke
6dcd03f6f2 Display a red icon if the entry or group is expired 2021-11-04 13:33:34 +01:00
Michael Starke
eedc804558 Fixed hotkeys being unregistered when changing tabs. Fixes #883 2021-11-03 00:26:30 +01:00
Michael Starke
65f2582e3c Added copy action to TOTP editor. Fixes #1186 2021-11-02 14:57:31 +01:00
Michael Starke
2e46d7c121 Removed unneeded property. Changed how search tracks updates when file structure changes. Fixes #721 2021-11-02 14:05:36 +01:00
Michael Starke
59b28b4872 Added require call to super 2021-11-02 13:24:47 +01:00
Michael Starke
d1e99c6bc7 Fixed second call to disable undo registration 2021-11-02 10:52:50 +01:00
Michael Starke
2181898acd Fixed missing updates when setting the time slice attribute 2021-11-01 23:47:53 +01:00
Michael Starke
466ca92757 Re-added undo support for notes fields. Fixes #1180 2021-11-01 15:45:56 +01:00
Michael Starke
3ea8937d11 Moved custom TOTP setup code into place where all the editors will reside 2021-11-01 15:45:19 +01:00
Michael Starke
cc0a855712 Updated to current HNHUi 2021-10-30 00:39:45 +02:00
Michael Starke
3ea790eeb3 Fixed using TOTP instead of SteamOTP generator when using entry as source for view 2021-10-29 14:49:54 +02:00
Michael Starke
f1bf8ab9f6 Fixed issue re-selection selected groups when exiting search.
This fix is rather ugly but works for now. It should get re-evaluated when the whole selection and search model is being refactored
2021-10-29 14:41:27 +02:00
Michael Starke
1ee3bc13be Reverted split for sort descriptor coding since it's broken. 2021-10-29 14:40:25 +02:00
Michael Starke
05d4381045 Fixed missing selection update, when search yields results 2021-10-29 14:21:11 +02:00
Michael Starke
fb27d330d6 Fixed deprecation warning on 10.14 an higher on NSUnarchiveFromDataTransformerName 2021-10-28 01:12:22 +02:00
Michael Starke
d83332a92d Updated to Xcode 13.1 2021-10-27 15:20:41 +02:00
Michael Starke
299b48870d Extended Attribute View Controller to work for custom attributes
Added toggle password button
Added remove attribute button
2021-10-24 01:55:43 +02:00
Michael Starke
fc186aaf2c Added node expiration view controller 2021-10-23 23:31:43 +02:00
Michael Starke
98730e7f24 Added support for type changes 2021-10-22 14:59:18 +02:00
Michael Starke
8d5006ba34 Added support for type changes 2021-10-22 14:59:09 +02:00
Michael Starke
1873032d3c Added expired editor for inspector 2021-10-22 13:44:53 +02:00
Michael Starke
3cf0e5644e Steam OTP display added. 2021-10-21 16:19:09 +02:00
Michael Starke
8b9c998ec7 Updated to KeePassKit 3.1.0 2021-10-21 11:41:19 +02:00
Michael Starke
f0e530bda5 OTP setup dialog now updates and stores attributes to entries 2021-10-20 16:32:16 +02:00
Michael Starke
a34c0eed4e Filling the OTP Setup view works
QR Image parsing and update works as well.
Save to entry and other updates still missing
2021-10-20 15:26:09 +02:00
Michael Starke
83f8158b21 Added view to edit and display entry passwords 2021-10-19 00:57:11 +02:00
Michael Starke
f28bcb527a Started rework of inspector layout using separate view controllers for attribute editiors 2021-10-15 14:54:22 +02:00
Michael Starke
6cd443278f Added notification observation for binding-less inpspector updates 2021-10-13 17:55:32 +02:00
Michael Starke
ea2796dd28 Updated to KeePassKit 3.0
Updated code to reflect changes in APIs for key creation and base32 decoding
2021-10-12 15:26:40 +02:00
Michael Starke
0b681f8d40 Layout change to xib file 2021-10-11 12:06:02 +02:00
Michael Starke
d4fc747d72 Moved to custom TransformerKit fork to prevent double-quoted-header include warnings 2021-10-01 13:28:56 +02:00
Michael Starke
33a4188bba Fixed squashed password input field 2021-10-01 13:28:28 +02:00
Michael Starke
16be427a92 Used scoped tooling from KeePassKit 2021-10-01 10:23:44 +02:00
Michael Starke
48fc70018e Added UI setting to control toolbar style 2021-09-30 17:03:54 +02:00
Michael Starke
adcf77f1d7 Fixed minor layout issues 2021-09-30 17:03:54 +02:00
Michael Starke
32b31a3ea8 Only leave one autotype notification in the stacke to prevent polution. 2021-09-30 17:03:54 +02:00
Michael Starke
f1d0d410f1 Updated to current HNHUi to fix missing attribute transferal 2021-09-30 17:03:54 +02:00
Michael Starke
af63b0ec4d Do not wrap after characters since this is not ideal for most use cases in MacPass 2021-09-30 17:03:54 +02:00
Michael Starke
85e55626b0 Fixed clipped popup button in workflow settings 2021-09-30 17:03:54 +02:00
Michael Starke
3c4eac6707 Updated to modern Obj-C 2021-09-30 17:03:54 +02:00
Michael Starke
84f35d6005 Minor codestyle updates 2021-09-30 17:03:54 +02:00
Michael Starke
9e14e8301d Started converting MPPastBoardController API to use more flexible interface. 2021-09-30 17:03:54 +02:00
Michael Starke
1b04e5cfa2 Disable and enable the UI according to type settings 2021-09-30 17:03:54 +02:00
Michael Starke
8884e61e10 Minor refactoring 2021-09-30 17:03:54 +02:00
Michael Starke
781234ef8c Updated font display 2021-09-30 17:03:54 +02:00
Michael Starke
08a49121b0 Updated visual styles of buttons to look ok on Big Sur 2021-09-30 17:03:54 +02:00
Michael Starke
92592a8049 Added type as change source 2021-09-30 17:03:54 +02:00
Michael Starke
5b6483fdab More layout work for TOTP Setup dialog 2021-09-30 17:03:54 +02:00
Michael Starke
3b4d05f676 Fixed typo in Info.plist. Updated copyright year to 2021 and changed OS X to macOS 2021-09-30 17:03:54 +02:00
Michael Starke
7d5edd1c98 WIP on updating the UI correctly 2021-09-30 17:03:54 +02:00
Michael Starke
5652abfb1e Fixed compiler warnings and typos 2021-09-23 22:23:43 +02:00
Michael Starke
b478b47d3d Fixed typo 2021-09-20 21:05:02 +02:00
Michael Starke
8cc4c2717a Removed tip action since it only runs on linux 2021-08-26 14:22:35 +02:00
Michael Starke
f3815f7fa4 Changed action to push release 2021-08-26 14:12:15 +02:00
Michael Starke
93f6a62bb5 Fixed wrong tag name 2021-08-26 10:27:43 +02:00
Michael Starke
174d9c2650 Added explicit tag name 2021-08-25 16:14:37 +02:00
Michael Starke
0b240d3ade Added tag filter to make releases work 2021-08-25 16:11:22 +02:00
Michael Starke
b30279e42e Update nightly.yml 2021-08-24 18:09:17 +02:00
Michael Starke
ef896468bb Update nightly.yml 2021-08-24 17:53:48 +02:00
Michael Starke
b3ad2df29e Update nightly.yml 2021-08-24 17:38:46 +02:00
Mirko Caserta
3cfbbb1f16 fixed autofill on big sur for password field (#1125)
Co-authored-by: Michael Starke <nomad@hicknhack.com>
2021-06-17 17:54:44 +02:00
203 changed files with 7671 additions and 2095 deletions

View File

@@ -6,20 +6,22 @@ on:
#pull_request:
# branches: [ master ]
schedule:
- cron: '0 23 * * *'
- cron: "0 23 * * *"
workflow_dispatch:
jobs:
nightly:
runs-on: macos-10.15
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Bootstrap Carthage
env:
GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: carthage bootstrap --platform macOS
- name: Install xcpretty
@@ -29,4 +31,49 @@ jobs:
run: |
set -o pipefail
xcodebuild clean
xcodebuild build -configuration release -project MacPass.xcodeproj -scheme MacPass CODE_SIGNING_REQUIRED=NO -derivedDataPath ./build | xcpretty -c
xcodebuild build -configuration release -project MacPass.xcodeproj -scheme MacPass CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" -derivedDataPath ./build | xcpretty -c
- name: Export Localizations
run: |
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage de
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage en
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage es
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage fr
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage it
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage nl
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage ru
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage sv-SE
xcodebuild -project MacPass.xcodeproj -exportLocalizations -localizationPath Localisations -exportLanguage zh-Hans
- name: Zip Localizations
run: zip -9ry Localisations.zip Localisations
- name: Package Release
run: |
cd ./build/Build/Products/Release
zip -9ry MacPass-continuous.zip MacPass.app
- name: Create SHA256 Hash
run: |
cd ./build/Build/Products/Release
shasum -a 256 MacPass-continuous.zip > MacPass-continuous.zip.sha256
#- name: Release
# uses: eine/tip@master
# with:
# token: ${{ secrets.GITHUB_TOKEN }}
# tag: continuous
# files: |
# Localisations.zip
# ./build/Build/Products/Release/MacPass-continuous.zip
# ./build/Build/Products/Release/MacPass-continuous.zip.sha256
- name: Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
tag_name: continuous
files: |
Localisations.zip
./build/Build/Products/Release/MacPass-continuous.zip
./build/Build/Products/Release/MacPass-continuous.zip.sha256

View File

@@ -1,4 +1,4 @@
github "sparkle-project/Sparkle" ~> 1.22
github "mattt/TransformerKit" ~> 1.1.1
github "MacPass/KeePassKit" "76e6ecda942f9e328efde7883ad75aed7290b632"
github "mstarke/HNHUi" ~> 4.0
binary "https://sparkle-project.org/Carthage/Sparkle.json"
github "MacPass/TransformerKit" "3232b04c568df7f98b33ceb21a2090a9ccbc2065"
github "MacPass/KeePassKit" ~> 3.3.2
github "mstarke/HNHUi" ~> 6.0.1

View File

@@ -1,5 +1,5 @@
github "MacPass/KeePassKit" "76e6ecda942f9e328efde7883ad75aed7290b632"
github "mattt/TransformerKit" "1.1.1"
github "mstarke/HNHUi" "4.0.3"
github "robbiehanson/KissXML" "5.3.3"
github "sparkle-project/Sparkle" "1.24.0"
binary "https://sparkle-project.org/Carthage/Sparkle.json" "2.6.4"
github "MacPass/KeePassKit" "3.3.2"
github "MacPass/KissXML" "503fc012b73a4507965019720cbf1c157e849657"
github "MacPass/TransformerKit" "3232b04c568df7f98b33ceb21a2090a9ccbc2065"
github "mstarke/HNHUi" "6.0.1"

View File

@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@@ -28,6 +28,7 @@
4C0F647B17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0F647A17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m */; };
4C10207F1B750E2F00BFCD59 /* MPTestAutotype.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C10207E1B750E2F00BFCD59 /* MPTestAutotype.m */; };
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C10412B178CDD44001B5239 /* NSDate+Humanized.m */; };
4C11BE6928B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C11BE6828B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m */; };
4C15B74618BCA3B1003F8008 /* MPDocument+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C15B74518BCA3B1003F8008 /* MPDocument+Search.m */; };
4C17D11E2250EFBC00C650C4 /* SavePanelAccessoryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C17D1202250EFBC00C650C4 /* SavePanelAccessoryView.xib */; };
4C17D8E517A1C780006C8C1E /* MPDocumentWindowDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C17D8E417A1C780006C8C1E /* MPDocumentWindowDelegate.m */; };
@@ -49,7 +50,6 @@
4C25D58716CF0FAA00F6806C /* EntryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58616CF0FAA00F6806C /* EntryView.xib */; };
4C26C33F18D8C92100CF1A1C /* MPTemporaryFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C26C33E18D8C92100CF1A1C /* MPTemporaryFileStorage.m */; };
4C2892A8257103F9003C7732 /* MPTOTPViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2892A6257103F9003C7732 /* MPTOTPViewController.m */; };
4C2892A9257103F9003C7732 /* MPTOTPViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C2892A7257103F9003C7732 /* MPTOTPViewController.xib */; };
4C2E381D16D11FF900037A9D /* 03_ServerTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C2E381A16D11FF900037A9D /* 03_ServerTemplate.pdf */; };
4C2E381E16D11FF900037A9D /* 04_KlipperTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C2E381B16D11FF900037A9D /* 04_KlipperTemplate.pdf */; };
4C2E381F16D11FF900037A9D /* 05_LanguagesTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C2E381C16D11FF900037A9D /* 05_LanguagesTemplate.pdf */; };
@@ -60,7 +60,6 @@
4C349A00218852160055AF45 /* MPKeyTyper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3499FF218852160055AF45 /* MPKeyTyper.m */; };
4C35664025824C0A00CAB95B /* NSImage+MPQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C35663F25824C0A00CAB95B /* NSImage+MPQRCode.m */; };
4C356645258259AA00CAB95B /* MPTOTPSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C356643258259AA00CAB95B /* MPTOTPSetupViewController.m */; };
4C356646258259AA00CAB95B /* MPTOTPSetupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C356644258259AA00CAB95B /* MPTOTPSetupViewController.xib */; };
4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3666401787327E00B249F1 /* MPDocument+Attachments.m */; };
4C370EFE215B76CB00703AAE /* MPOutlineTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C370EFD215B76CB00703AAE /* MPOutlineTableCellView.m */; };
4C37A84015B8B474005EF8EE /* MPOutlineDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C37A83F15B8B474005EF8EE /* MPOutlineDataSource.m */; };
@@ -134,6 +133,7 @@
4C4F72D118DF704400E8D378 /* DDHotKeyTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F72CF18DF704400E8D378 /* DDHotKeyTextField.m */; };
4C4FCE15177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */; };
4C50CC041F6C18830095629D /* MPCollectionViewItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C50CC031F6C18830095629D /* MPCollectionViewItem.m */; };
4C521981273D192C00C719D3 /* MPOpenURLHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C521980273D192C00C719D3 /* MPOpenURLHandler.m */; };
4C52A88E1788628B00868229 /* 06_BlockDeviceTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C52A88B1788628B00868229 /* 06_BlockDeviceTemplate.pdf */; };
4C52A88F1788628B00868229 /* 13_KeysTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C52A88C1788628B00868229 /* 13_KeysTemplate.pdf */; };
4C52A8901788628B00868229 /* 18_DisplayTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C52A88D1788628B00868229 /* 18_DisplayTemplate.pdf */; };
@@ -147,6 +147,8 @@
4C586FA216D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C586FA116D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf */; };
4C58A4A32192EC1600B13370 /* NSIndexPath+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C58A4A22192EC1600B13370 /* NSIndexPath+MPAdditions.m */; };
4C58A4A82192EEBE00B13370 /* MPTestIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C58A4A72192EEBE00B13370 /* MPTestIndexPathAdditions.m */; };
4C59AC9D2722C12200F54B20 /* MPNodeExpirationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C59AC9B2722C12200F54B20 /* MPNodeExpirationViewController.m */; };
4C59AC9E2722C12200F54B20 /* MPNodeExpirationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C59AC9C2722C12200F54B20 /* MPNodeExpirationViewController.xib */; };
4C5A11FE1708DE8700223D8A /* MPPasswordCreatorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5A11FC1708DE8700223D8A /* MPPasswordCreatorViewController.m */; };
4C5EF816218CA03F0003C00E /* MPAutotypeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5EF815218CA03F0003C00E /* MPAutotypeParser.m */; };
4C5FE9AE17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5FE9AD17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m */; };
@@ -196,6 +198,8 @@
4C7B637F1C0CB57300D7038C /* KeePassKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4C7B63801C0CB57300D7038C /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B637A1C0CB55600D7038C /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C7BD07519FE94C900C7AA5C /* Assets.xcassets */; };
4C7D4BE52DA91C1C00B04C10 /* MPSecurityPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D4BE32DA91C1C00B04C10 /* MPSecurityPreferencesController.m */; };
4C7D4BE62DA91C1C00B04C10 /* MPSecurityPreferencesController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C7D4BE42DA91C1C00B04C10 /* MPSecurityPreferencesController.xib */; };
4C7D9D5424ABE6FD00907034 /* MPTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */; };
4C7F8B681A10B68400CCB83D /* WelcomeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C7F8B6A1A10B68400CCB83D /* WelcomeView.xib */; };
4C80304A1E2FBAA300133E4C /* MPTestKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8030491E2FBAA300133E4C /* MPTestKeyMapper.m */; };
@@ -218,6 +222,8 @@
4C8F0C711FCEF91400BE157F /* MPPickcharsParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8F0C701FCEF91400BE157F /* MPPickcharsParser.m */; };
4C8F0C731FCF1B7A00BE157F /* MPTestPickcharsParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8F0C721FCF1B7A00BE157F /* MPTestPickcharsParser.m */; };
4C8F0C791FD05A6A00BE157F /* NSString+MPPrettyPasswordDisplay.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8F0C781FD05A6A00BE157F /* NSString+MPPrettyPasswordDisplay.m */; };
4C9328C8273E6A38000DCBEE /* MPTOTPSetupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C9328CA273E6A38000DCBEE /* MPTOTPSetupViewController.xib */; };
4C9328D0273E6A83000DCBEE /* MPTOTPViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C9328D2273E6A83000DCBEE /* MPTOTPViewController.xib */; };
4C978E0D19AE54AB003067DF /* MPFlagsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */; };
4C9BFFFB1FD19B5400264B16 /* MPPrettyPasswordTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BFFFA1FD19B5400264B16 /* MPPrettyPasswordTransformer.m */; };
4CA08DA017A831B200A6544B /* MPAddEntryContextMenuDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA08D9F17A831B200A6544B /* MPAddEntryContextMenuDelegate.m */; };
@@ -244,6 +250,8 @@
4CBA2ABA17074C07006D8139 /* MPSettingsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBA2AB917074C07006D8139 /* MPSettingsHelper.m */; };
4CBC5DDD23C61C8900D14B92 /* TransformerKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CBC5DDB23C61C8300D14B92 /* TransformerKit.framework */; };
4CBC5DDE23C61C8900D14B92 /* TransformerKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4CBC5DDB23C61C8300D14B92 /* TransformerKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4CC0192E271836CD00459789 /* MPEntryAttributeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0192C271836CD00459789 /* MPEntryAttributeViewController.m */; };
4CC0192F271836CD00459789 /* MPEntryAttributeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CC0192D271836CD00459789 /* MPEntryAttributeViewController.xib */; };
4CC0D2CE17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0D2CD17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m */; };
4CC0D2D117974A5A000B4BDA /* MPAttachmentTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0D2D017974A5A000B4BDA /* MPAttachmentTableViewDelegate.m */; };
4CC281891C0F675B00B9174D /* HNHUi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CC281881C0F675B00B9174D /* HNHUi.framework */; };
@@ -280,10 +288,18 @@
4CE39ABF16ECE34A000FE29D /* MPIconSelectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE39ABE16ECE34A000FE29D /* MPIconSelectViewController.m */; };
4CE39AC416ECE4F7000FE29D /* MPIconImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE39AC316ECE4F7000FE29D /* MPIconImageView.m */; };
4CE3E62617AB0D2D00D9E4B4 /* MPAttachmentTableDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE3E62517AB0D2D00D9E4B4 /* MPAttachmentTableDataSource.m */; };
4CE4FFA22746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4FFA02746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.m */; };
4CE4FFA32746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CE4FFA12746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.xib */; };
4CE4FFA72746955E00789F75 /* MPSecurityDatabaseSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4FFA52746955E00789F75 /* MPSecurityDatabaseSettingsViewController.m */; };
4CE4FFA82746955E00789F75 /* MPSecurityDatabaseSettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CE4FFA62746955E00789F75 /* MPSecurityDatabaseSettingsViewController.xib */; };
4CE4FFAC2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4FFAA2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.m */; };
4CE4FFAD2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CE4FFAB2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.xib */; };
4CE501341BBC47F500FB819D /* MPTagsTokenFieldDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE501331BBC47F500FB819D /* MPTagsTokenFieldDelegate.m */; };
4CE5B54B173AFBA700207B39 /* MPDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE5B549173AFBA700207B39 /* MPDocument.m */; };
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */; };
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8247416E2F2B900573141 /* MPOverlayView.m */; };
4CE84903271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE84901271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m */; };
4CE84904271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CE84902271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib */; };
4CE88B9717BA651C0042E078 /* contextTriangleTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CE88B9617BA651C0042E078 /* contextTriangleTemplate.pdf */; };
4CEE46DD181C301D006BF1E5 /* MPAutotypeDaemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE46DC181C301D006BF1E5 /* MPAutotypeDaemon.m */; };
4CEED1C617D7BD0E007180F1 /* NSError+Messages.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */; };
@@ -388,6 +404,8 @@
4C10207E1B750E2F00BFCD59 /* MPTestAutotype.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTestAutotype.m; sourceTree = "<group>"; };
4C10412A178CDD44001B5239 /* NSDate+Humanized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+Humanized.h"; sourceTree = "<group>"; };
4C10412B178CDD44001B5239 /* NSDate+Humanized.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+Humanized.m"; sourceTree = "<group>"; };
4C11BE6728B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MPDocument+BiometricEncryptionSupport.h"; sourceTree = "<group>"; };
4C11BE6828B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+BiometricEncryptionSupport.m"; sourceTree = "<group>"; };
4C15B74518BCA3B1003F8008 /* MPDocument+Search.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Search.m"; sourceTree = "<group>"; };
4C17D11F2250EFBC00C650C4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SavePanelAccessoryView.xib; sourceTree = "<group>"; };
4C17D1222250EFBF00C650C4 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/SavePanelAccessoryView.strings; sourceTree = "<group>"; };
@@ -442,7 +460,6 @@
4C272A2B2224871900186EEC /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/PickfieldView.strings; sourceTree = "<group>"; };
4C2892A5257103F9003C7732 /* MPTOTPViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTOTPViewController.h; sourceTree = "<group>"; };
4C2892A6257103F9003C7732 /* MPTOTPViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTOTPViewController.m; sourceTree = "<group>"; };
4C2892A7257103F9003C7732 /* MPTOTPViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPTOTPViewController.xib; sourceTree = "<group>"; };
4C2B0B7419F66F6400E48913 /* MPTargetNodeResolving.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTargetNodeResolving.h; sourceTree = "<group>"; };
4C2E381A16D11FF900037A9D /* 03_ServerTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 03_ServerTemplate.pdf; sourceTree = "<group>"; };
4C2E381B16D11FF900037A9D /* 04_KlipperTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 04_KlipperTemplate.pdf; sourceTree = "<group>"; };
@@ -461,7 +478,6 @@
4C35663F25824C0A00CAB95B /* NSImage+MPQRCode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSImage+MPQRCode.m"; sourceTree = "<group>"; };
4C356642258259AA00CAB95B /* MPTOTPSetupViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTOTPSetupViewController.h; sourceTree = "<group>"; };
4C356643258259AA00CAB95B /* MPTOTPSetupViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTOTPSetupViewController.m; sourceTree = "<group>"; };
4C356644258259AA00CAB95B /* MPTOTPSetupViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPTOTPSetupViewController.xib; sourceTree = "<group>"; };
4C3666401787327E00B249F1 /* MPDocument+Attachments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Attachments.m"; sourceTree = "<group>"; };
4C370EFC215B76CB00703AAE /* MPOutlineTableCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPOutlineTableCellView.h; sourceTree = "<group>"; };
4C370EFD215B76CB00703AAE /* MPOutlineTableCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPOutlineTableCellView.m; sourceTree = "<group>"; };
@@ -551,6 +567,7 @@
4C45FB2F178E0CE20010007D /* MPTestDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTestDocument.m; sourceTree = "<group>"; };
4C46B88317063A070046109A /* NSString+MPPasswordCreation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MPPasswordCreation.h"; sourceTree = "<group>"; };
4C46B88417063A070046109A /* NSString+MPPasswordCreation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MPPasswordCreation.m"; sourceTree = "<group>"; };
4C47090727184AC8003777EB /* MPInspectorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPInspectorEditor.h; sourceTree = "<group>"; };
4C473A8518AFD7250073FD2E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
4C49CFD424252389004092E7 /* KPKEntry+MPTags.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KPKEntry+MPTags.h"; sourceTree = "<group>"; };
4C49CFD524252389004092E7 /* KPKEntry+MPTags.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "KPKEntry+MPTags.m"; sourceTree = "<group>"; };
@@ -576,6 +593,8 @@
4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCustomFieldTableCellView.m; sourceTree = "<group>"; };
4C50CC021F6C18830095629D /* MPCollectionViewItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCollectionViewItem.h; sourceTree = "<group>"; };
4C50CC031F6C18830095629D /* MPCollectionViewItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCollectionViewItem.m; sourceTree = "<group>"; };
4C52197F273D192C00C719D3 /* MPOpenURLHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPOpenURLHandler.h; sourceTree = "<group>"; };
4C521980273D192C00C719D3 /* MPOpenURLHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPOpenURLHandler.m; sourceTree = "<group>"; };
4C52A88B1788628B00868229 /* 06_BlockDeviceTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 06_BlockDeviceTemplate.pdf; sourceTree = "<group>"; };
4C52A88C1788628B00868229 /* 13_KeysTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 13_KeysTemplate.pdf; sourceTree = "<group>"; };
4C52A88D1788628B00868229 /* 18_DisplayTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 18_DisplayTemplate.pdf; sourceTree = "<group>"; };
@@ -594,6 +613,9 @@
4C58A4A12192EC1600B13370 /* NSIndexPath+MPAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSIndexPath+MPAdditions.h"; sourceTree = "<group>"; };
4C58A4A22192EC1600B13370 /* NSIndexPath+MPAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSIndexPath+MPAdditions.m"; sourceTree = "<group>"; };
4C58A4A72192EEBE00B13370 /* MPTestIndexPathAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTestIndexPathAdditions.m; sourceTree = "<group>"; };
4C59AC9A2722C12200F54B20 /* MPNodeExpirationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPNodeExpirationViewController.h; sourceTree = "<group>"; };
4C59AC9B2722C12200F54B20 /* MPNodeExpirationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPNodeExpirationViewController.m; sourceTree = "<group>"; };
4C59AC9C2722C12200F54B20 /* MPNodeExpirationViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPNodeExpirationViewController.xib; sourceTree = "<group>"; };
4C5A11FB1708DE8700223D8A /* MPPasswordCreatorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordCreatorViewController.h; sourceTree = "<group>"; };
4C5A11FC1708DE8700223D8A /* MPPasswordCreatorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordCreatorViewController.m; sourceTree = "<group>"; };
4C5ADC3017830B09004E1E8D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InspectorView.strings; sourceTree = "<group>"; };
@@ -694,6 +716,9 @@
4C7B63791C0CB55600D7038C /* KeePassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = KeePassKit.framework; path = Carthage/Build/Mac/KeePassKit.framework; sourceTree = "<group>"; };
4C7B637A1C0CB55600D7038C /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Carthage/Build/Mac/Sparkle.framework; sourceTree = "<group>"; };
4C7BD07519FE94C900C7AA5C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
4C7D4BE22DA91C1C00B04C10 /* MPSecurityPreferencesController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPSecurityPreferencesController.h; sourceTree = "<group>"; };
4C7D4BE32DA91C1C00B04C10 /* MPSecurityPreferencesController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPSecurityPreferencesController.m; sourceTree = "<group>"; };
4C7D4BE42DA91C1C00B04C10 /* MPSecurityPreferencesController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPSecurityPreferencesController.xib; sourceTree = "<group>"; };
4C7D9D5224ABE6FD00907034 /* MPTabViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTabViewController.h; sourceTree = "<group>"; };
4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTabViewController.m; sourceTree = "<group>"; };
4C7F8B691A10B68400CCB83D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/WelcomeView.xib; sourceTree = "<group>"; };
@@ -755,6 +780,12 @@
4C8F0C771FD05A6A00BE157F /* NSString+MPPrettyPasswordDisplay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+MPPrettyPasswordDisplay.h"; sourceTree = "<group>"; };
4C8F0C781FD05A6A00BE157F /* NSString+MPPrettyPasswordDisplay.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+MPPrettyPasswordDisplay.m"; sourceTree = "<group>"; };
4C8FB9FA1FC2D0EF003691AA /* MPPlugin_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPlugin_Private.h; sourceTree = "<group>"; };
4C9328C9273E6A38000DCBEE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MPTOTPSetupViewController.xib; sourceTree = "<group>"; };
4C9328CD273E6A5F000DCBEE /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MPTOTPSetupViewController.strings"; sourceTree = "<group>"; };
4C9328CF273E6A63000DCBEE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MPTOTPSetupViewController.strings; sourceTree = "<group>"; };
4C9328D1273E6A83000DCBEE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MPTOTPViewController.xib; sourceTree = "<group>"; };
4C9328D4273E6A85000DCBEE /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MPTOTPViewController.strings"; sourceTree = "<group>"; };
4C9328D6273E6A85000DCBEE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MPTOTPViewController.strings; sourceTree = "<group>"; };
4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFlagsHelper.m; sourceTree = "<group>"; };
4C97CCEF1FA727DC00E58F8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
4C9BFFF91FD19B5400264B16 /* MPPrettyPasswordTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPrettyPasswordTransformer.h; sourceTree = "<group>"; };
@@ -807,6 +838,9 @@
4CBA2AB617074B59006D8139 /* MPSettingsHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSettingsHelper.h; sourceTree = "<group>"; };
4CBA2AB917074C07006D8139 /* MPSettingsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSettingsHelper.m; sourceTree = "<group>"; };
4CBC5DDB23C61C8300D14B92 /* TransformerKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TransformerKit.framework; path = Carthage/Build/Mac/TransformerKit.framework; sourceTree = "<group>"; };
4CC0192B271836CD00459789 /* MPEntryAttributeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPEntryAttributeViewController.h; sourceTree = "<group>"; };
4CC0192C271836CD00459789 /* MPEntryAttributeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPEntryAttributeViewController.m; sourceTree = "<group>"; };
4CC0192D271836CD00459789 /* MPEntryAttributeViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPEntryAttributeViewController.xib; sourceTree = "<group>"; };
4CC0D2CC17974A47000B4BDA /* MPCustomFieldTableViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCustomFieldTableViewDelegate.h; sourceTree = "<group>"; };
4CC0D2CD17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCustomFieldTableViewDelegate.m; sourceTree = "<group>"; };
4CC0D2CF17974A5A000B4BDA /* MPAttachmentTableViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAttachmentTableViewDelegate.h; sourceTree = "<group>"; };
@@ -867,6 +901,15 @@
4CE39AC316ECE4F7000FE29D /* MPIconImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPIconImageView.m; sourceTree = "<group>"; };
4CE3E62417AB0D2D00D9E4B4 /* MPAttachmentTableDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAttachmentTableDataSource.h; sourceTree = "<group>"; };
4CE3E62517AB0D2D00D9E4B4 /* MPAttachmentTableDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAttachmentTableDataSource.m; sourceTree = "<group>"; };
4CE4FF9F2746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAdvancedDatabaseSettingsViewController.h; sourceTree = "<group>"; };
4CE4FFA02746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPAdvancedDatabaseSettingsViewController.m; sourceTree = "<group>"; };
4CE4FFA12746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPAdvancedDatabaseSettingsViewController.xib; sourceTree = "<group>"; };
4CE4FFA42746955E00789F75 /* MPSecurityDatabaseSettingsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPSecurityDatabaseSettingsViewController.h; sourceTree = "<group>"; };
4CE4FFA52746955E00789F75 /* MPSecurityDatabaseSettingsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPSecurityDatabaseSettingsViewController.m; sourceTree = "<group>"; };
4CE4FFA62746955E00789F75 /* MPSecurityDatabaseSettingsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPSecurityDatabaseSettingsViewController.xib; sourceTree = "<group>"; };
4CE4FFA92746956F00789F75 /* MPGeneralDatabaseSettingsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPGeneralDatabaseSettingsViewController.h; sourceTree = "<group>"; };
4CE4FFAA2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPGeneralDatabaseSettingsViewController.m; sourceTree = "<group>"; };
4CE4FFAB2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPGeneralDatabaseSettingsViewController.xib; sourceTree = "<group>"; };
4CE501321BBC47F500FB819D /* MPTagsTokenFieldDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTagsTokenFieldDelegate.h; sourceTree = "<group>"; };
4CE501331BBC47F500FB819D /* MPTagsTokenFieldDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTagsTokenFieldDelegate.m; sourceTree = "<group>"; };
4CE5B548173AFBA700207B39 /* MPDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDocument.h; sourceTree = "<group>"; };
@@ -875,6 +918,9 @@
4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayWindowController.m; sourceTree = "<group>"; };
4CE8247316E2F2B900573141 /* MPOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOverlayView.h; sourceTree = "<group>"; };
4CE8247416E2F2B900573141 /* MPOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayView.m; sourceTree = "<group>"; };
4CE84900271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPEntryPasswordAttributeViewController.h; sourceTree = "<group>"; };
4CE84901271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPEntryPasswordAttributeViewController.m; sourceTree = "<group>"; };
4CE84902271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPEntryPasswordAttributeViewController.xib; sourceTree = "<group>"; };
4CE88B9617BA651C0042E078 /* contextTriangleTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = contextTriangleTemplate.pdf; sourceTree = "<group>"; };
4CE88C2417C163FE00BFD195 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
4CE88C3317C1647400BFD195 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
@@ -942,6 +988,39 @@
60ECAD221F12231B00EA9DB3 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/PluginPreferences.strings"; sourceTree = "<group>"; };
60ECAD251F12253C00EA9DB3 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/WorkflowPreferences.strings"; sourceTree = "<group>"; };
60ECAD271F12262400EA9DB3 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/IntegrationPreferences.strings"; sourceTree = "<group>"; };
69385E2F274ACFDE001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/DatabaseSettingsWindow.strings; sourceTree = "<group>"; };
69385E30274ACFDE001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/DuplicateEntryOptionsWindow.strings; sourceTree = "<group>"; };
69385E31274ACFDE001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PasswordEditWindow.strings; sourceTree = "<group>"; };
69385E32274ACFDE001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/SavePanelAccessoryView.strings; sourceTree = "<group>"; };
69385E33274ACFDE001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/EntryInspectorView.strings; sourceTree = "<group>"; };
69385E34274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/GroupInspectorView.strings; sourceTree = "<group>"; };
69385E35274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InspectorView.strings; sourceTree = "<group>"; };
69385E37274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/GeneralPreferences.strings; sourceTree = "<group>"; };
69385E38274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/IntegrationPreferences.strings; sourceTree = "<group>"; };
69385E39274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PluginPreferences.strings; sourceTree = "<group>"; };
69385E3A274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PluginRepositoryBrowserView.strings; sourceTree = "<group>"; };
69385E3B274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/UpdatePreferences.strings; sourceTree = "<group>"; };
69385E3C274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/WorkflowPreferences.strings; sourceTree = "<group>"; };
69385E3D274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/MPTOTPSetupViewController.strings; sourceTree = "<group>"; };
69385E3E274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/AutotypeBuilderView.strings; sourceTree = "<group>"; };
69385E3F274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/AutotypeCandidateSelectionView.strings; sourceTree = "<group>"; };
69385E40274ACFDF001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/AutotypeDoctorReportViewController.strings; sourceTree = "<group>"; };
69385E41274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/ContextBar.strings; sourceTree = "<group>"; };
69385E42274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/DatePickingView.strings; sourceTree = "<group>"; };
69385E43274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/IconSelection.strings; sourceTree = "<group>"; };
69385E44274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PasswordCreatorView.strings; sourceTree = "<group>"; };
69385E45274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PasswordInputView.strings; sourceTree = "<group>"; };
69385E46274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PickcharsView.strings; sourceTree = "<group>"; };
69385E47274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PickfieldView.strings; sourceTree = "<group>"; };
69385E48274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/PluginDataView.strings; sourceTree = "<group>"; };
69385E49274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/ReferenceBuilderView.strings; sourceTree = "<group>"; };
69385E4A274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/WelcomeView.strings; sourceTree = "<group>"; };
69385E4B274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/OpenPanelAccessoryView.strings; sourceTree = "<group>"; };
69385E4C274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/MainMenu.strings; sourceTree = "<group>"; };
69385E4D274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = cs; path = cs.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
69385E4E274ACFE0001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
69385E50274ACFE1001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = "<group>"; };
69385E51274ACFE1001AB1E9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = "<group>"; };
6A74B0622076F4B30049BC29 /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/DatabaseSettingsWindow.strings"; sourceTree = "<group>"; };
6A74B0632076F4B30049BC29 /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/PasswordEditWindow.strings"; sourceTree = "<group>"; };
6A74B0642076F4B40049BC29 /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/DuplicateEntryOptionsWindow.strings"; sourceTree = "<group>"; };
@@ -1303,6 +1382,8 @@
4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */,
AF105CF225FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.h */,
AF105CF125FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.m */,
4C52197F273D192C00C719D3 /* MPOpenURLHandler.h */,
4C521980273D192C00C719D3 /* MPOpenURLHandler.m */,
);
name = Helper;
sourceTree = "<group>";
@@ -1350,6 +1431,8 @@
6E719715172058BA00E4C5FC /* MPDatabaseVersion.h */,
4CE5B548173AFBA700207B39 /* MPDocument.h */,
4CE5B549173AFBA700207B39 /* MPDocument.m */,
4C11BE6728B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.h */,
4C11BE6828B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m */,
4C3666401787327E00B249F1 /* MPDocument+Attachments.m */,
4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */,
4C6B7C7C18BE7EB0001D5D77 /* MPDocument+History.m */,
@@ -1419,6 +1502,9 @@
4C4BE0C5257E9B91000AEA8C /* MPNotificationPreferencesController.h */,
4C4BE0C6257E9B91000AEA8C /* MPNotificationPreferencesController.m */,
4C4BE0C7257E9B91000AEA8C /* MPNotificationPreferencesController.xib */,
4C7D4BE22DA91C1C00B04C10 /* MPSecurityPreferencesController.h */,
4C7D4BE32DA91C1C00B04C10 /* MPSecurityPreferencesController.m */,
4C7D4BE42DA91C1C00B04C10 /* MPSecurityPreferencesController.xib */,
);
name = Preferences;
sourceTree = "<group>";
@@ -1437,7 +1523,16 @@
4C76156F1764C0E20015A1A6 /* InspectorView.xib */,
4C2892A5257103F9003C7732 /* MPTOTPViewController.h */,
4C2892A6257103F9003C7732 /* MPTOTPViewController.m */,
4C2892A7257103F9003C7732 /* MPTOTPViewController.xib */,
4C9328D2273E6A83000DCBEE /* MPTOTPViewController.xib */,
4CC0192B271836CD00459789 /* MPEntryAttributeViewController.h */,
4CC0192C271836CD00459789 /* MPEntryAttributeViewController.m */,
4CC0192D271836CD00459789 /* MPEntryAttributeViewController.xib */,
4CE84900271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.h */,
4CE84901271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m */,
4CE84902271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib */,
4C59AC9A2722C12200F54B20 /* MPNodeExpirationViewController.h */,
4C59AC9B2722C12200F54B20 /* MPNodeExpirationViewController.m */,
4C59AC9C2722C12200F54B20 /* MPNodeExpirationViewController.xib */,
);
name = Inspector;
sourceTree = "<group>";
@@ -1685,6 +1780,7 @@
4CA0B2F115BCAEE600654E32 /* View Controller */ = {
isa = PBXGroup;
children = (
4CE4FF9E2746943900789F75 /* Database Preferences */,
4C5133861FA0C32C00C94C73 /* Accessory */,
4C4B7EF517A46815000234C7 /* Inspector */,
4C47D77718B37911002755E4 /* Preferences */,
@@ -1756,6 +1852,7 @@
4C7679BC1D75E690001F33D6 /* MPModelChangeObserving.h */,
4CA0B30D15BCB6FD00654E32 /* MPPreferencesTab.h */,
4C2B0B7419F66F6400E48913 /* MPTargetNodeResolving.h */,
4C47090727184AC8003777EB /* MPInspectorEditor.h */,
);
name = Protocolls;
sourceTree = "<group>";
@@ -1774,7 +1871,7 @@
children = (
4C356642258259AA00CAB95B /* MPTOTPSetupViewController.h */,
4C356643258259AA00CAB95B /* MPTOTPSetupViewController.m */,
4C356644258259AA00CAB95B /* MPTOTPSetupViewController.xib */,
4C9328CA273E6A38000DCBEE /* MPTOTPSetupViewController.xib */,
);
name = OTP;
sourceTree = "<group>";
@@ -1799,6 +1896,22 @@
name = Controls;
sourceTree = "<group>";
};
4CE4FF9E2746943900789F75 /* Database Preferences */ = {
isa = PBXGroup;
children = (
4CE4FF9F2746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.h */,
4CE4FFA02746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.m */,
4CE4FFA12746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.xib */,
4CE4FFA42746955E00789F75 /* MPSecurityDatabaseSettingsViewController.h */,
4CE4FFA52746955E00789F75 /* MPSecurityDatabaseSettingsViewController.m */,
4CE4FFA62746955E00789F75 /* MPSecurityDatabaseSettingsViewController.xib */,
4CE4FFA92746956F00789F75 /* MPGeneralDatabaseSettingsViewController.h */,
4CE4FFAA2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.m */,
4CE4FFAB2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.xib */,
);
name = "Database Preferences";
sourceTree = "<group>";
};
4CE8247016E2E96500573141 /* Window Controller */ = {
isa = PBXGroup;
children = (
@@ -1905,11 +2018,11 @@
isa = PBXNativeTarget;
buildConfigurationList = 4C77E38015B84A240093A587 /* Build configuration list for PBXNativeTarget "MacPass" */;
buildPhases = (
4CC5D36618A1332000AF7FA8 /* CopyFiles */,
4C77E35E15B84A240093A587 /* Sources */,
4C77E35F15B84A240093A587 /* Frameworks */,
4C77E36015B84A240093A587 /* Resources */,
4C44DB1B1C08999F00774EB3 /* Versioning */,
4CC5D36618A1332000AF7FA8 /* CopyFiles */,
);
buildRules = (
);
@@ -1926,12 +2039,13 @@
4C77E35915B84A240093A587 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
CLASSPREFIX = MP;
LastUpgradeCheck = 1240;
LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "HicknHack Software GmbH";
TargetAttributes = {
4C77E36115B84A240093A587 = {
DevelopmentTeam = 55SM4L4Z97;
ProvisioningStyle = Automatic;
};
};
};
@@ -1953,6 +2067,7 @@
"sv-SE",
uk,
ja,
cs,
);
mainGroup = 4C77E35715B84A240093A587;
productRefGroup = 4C77E36315B84A240093A587 /* Products */;
@@ -1991,10 +2106,12 @@
4CA182751F963FF600DD4A4A /* TitlebarColorAccessoryViewController.xib in Resources */,
4C3826B71AD04D8E007D7D67 /* 42_MemoryTemplate.pdf in Resources */,
4C3826B41AD04D8E007D7D67 /* 39_HistoryTemplate.pdf in Resources */,
4CE4FFA32746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.xib in Resources */,
4C77E37D15B84A240093A587 /* MainMenu.xib in Resources */,
4C4BE0C9257E9B91000AEA8C /* MPNotificationPreferencesController.xib in Resources */,
4C3826CD1AD04D8E007D7D67 /* 66_MoneyTemplate.pdf in Resources */,
78E1F8B022E3A5D600E738AE /* AutotypeDoctorReportViewController.xib in Resources */,
4C59AC9E2722C12200F54B20 /* MPNodeExpirationViewController.xib in Resources */,
4CA0B2ED15BCADAC00654E32 /* PreferencesWindow.xib in Resources */,
4C76155C1764C04C0015A1A6 /* GeneralPreferences.xib in Resources */,
4CD884B715BD47080042BBF8 /* DocumentWindow.xib in Resources */,
@@ -2006,6 +2123,7 @@
4C586F9E16D07ABD00E7DB57 /* 00_PasswordTemplate.pdf in Resources */,
FA13910C1F9CD9EB0033D256 /* Localizable.stringsdict in Resources */,
4C586FA016D07D7200E7DB57 /* 01_PackageNetworkTemplate.pdf in Resources */,
4CE4FFAD2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.xib in Resources */,
4C3826CB1AD04D8E007D7D67 /* 64_AppleTemplate.pdf in Resources */,
4C3826AA1AD04D8E007D7D67 /* 27_NFSUnmountTemplate.pdf in Resources */,
4C3826C31AD04D8E007D7D67 /* 56_AddressBookTemplate.pdf in Resources */,
@@ -2027,6 +2145,7 @@
4C3826721AD04B51007D7D67 /* addFolderTemplate.pdf in Resources */,
4C0B533F205C1561003D277E /* PickfieldView.xib in Resources */,
4C3826C21AD04D8E007D7D67 /* 55_ThumbnailTemplate.pdf in Resources */,
4C7D4BE62DA91C1C00B04C10 /* MPSecurityPreferencesController.xib in Resources */,
4C3826A61AD04D8E007D7D67 /* 22_ASCIITemplate.pdf in Resources */,
4CD78ABC16D155FF00768A1D /* 07_NotepadTemplate.pdf in Resources */,
4C3826C11AD04D8E007D7D67 /* 54_SignatureTemplate.pdf in Resources */,
@@ -2043,6 +2162,7 @@
4C0F04412147FB49000B8568 /* OpenPanelAccessoryView.xib in Resources */,
4C6DCC451FA2457900C8AD3F /* ContextBar.xib in Resources */,
4C431BCF16E2BAB000700A81 /* OverlayWindow.xib in Resources */,
4CE4FFA82746955E00789F75 /* MPSecurityDatabaseSettingsViewController.xib in Resources */,
4C3826B61AD04D8E007D7D67 /* 41_VectorTemplate.pdf in Resources */,
4C17F105184E630200E85625 /* 14_BatteryTemplate.pdf in Resources */,
4C0B5338205C1516003D277E /* PickcharsView.xib in Resources */,
@@ -2063,10 +2183,12 @@
4C3826B81AD04D8E007D7D67 /* 44_NotesTemplate.pdf in Resources */,
4C3826C41AD04D8E007D7D67 /* 57_TextViewTemplate.pdf in Resources */,
6021FE9818E1650F00C3BC51 /* DatabaseSettingsWindow.xib in Resources */,
4CC0192F271836CD00459789 /* MPEntryAttributeViewController.xib in Resources */,
4C6D1D25178579570014C5A5 /* 48_FolderTemplate.pdf in Resources */,
4C701CBC178618A000581B88 /* 12_RemoteTemplate.pdf in Resources */,
4CF29BF417879D0000851B60 /* 26_FileSaveTemplate.pdf in Resources */,
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */,
4CE84904271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib in Resources */,
4CA182781F96523600DD4A4A /* DuplicateEntryOptionsWindow.xib in Resources */,
4C52A88E1788628B00868229 /* 06_BlockDeviceTemplate.pdf in Resources */,
4C52A88F1788628B00868229 /* 13_KeysTemplate.pdf in Resources */,
@@ -2086,7 +2208,7 @@
4C17D11E2250EFBC00C650C4 /* SavePanelAccessoryView.xib in Resources */,
4CE88B9717BA651C0042E078 /* contextTriangleTemplate.pdf in Resources */,
4C7ABA4817BAEC6700FF5799 /* 15_ScannerTemplate.pdf in Resources */,
4C356646258259AA00CAB95B /* MPTOTPSetupViewController.xib in Resources */,
4C9328C8273E6A38000DCBEE /* MPTOTPSetupViewController.xib in Resources */,
4C7ABA4917BAEC6700FF5799 /* 16_BrowserTemplate.pdf in Resources */,
4C7ABA4A17BAEC6700FF5799 /* 17_CDRomTemplate.pdf in Resources */,
4C7ABA4B17BAEC6700FF5799 /* 19_EmailTemplate.pdf in Resources */,
@@ -2101,7 +2223,7 @@
4C0DBEF51BF508DE00F9B287 /* PluginPreferences.xib in Resources */,
4CF6653820E67A140008A25C /* PluginDataView.xib in Resources */,
4C7F8B681A10B68400CCB83D /* WelcomeView.xib in Resources */,
4C2892A9257103F9003C7732 /* MPTOTPViewController.xib in Resources */,
4C9328D0273E6A83000DCBEE /* MPTOTPViewController.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2110,6 +2232,7 @@
/* Begin PBXShellScriptBuildPhase section */
4C44DB1B1C08999F00774EB3 /* Versioning */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -2164,6 +2287,7 @@
4C4F72D118DF704400E8D378 /* DDHotKeyTextField.m in Sources */,
4C8F0C6E1FCEE9B900BE157F /* MPPluginConstants.m in Sources */,
4C83814215BF4677001AE468 /* MPDocumentWindowController.m in Sources */,
4CE4FFA22746953A00789F75 /* MPAdvancedDatabaseSettingsViewController.m in Sources */,
4C82046A1FCDC07800EB24A4 /* MPPickfieldViewController.m in Sources */,
4C2E382316D1421B00037A9D /* MPIconHelper.m in Sources */,
4C2E382616D1470200037A9D /* MPViewController.m in Sources */,
@@ -2181,6 +2305,7 @@
4C370EFE215B76CB00703AAE /* MPOutlineTableCellView.m in Sources */,
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */,
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */,
4C59AC9D2722C12200F54B20 /* MPNodeExpirationViewController.m in Sources */,
4C77547516E55FE800970E02 /* MPInspectorViewController.m in Sources */,
4C89F524182FB4740069C73C /* MPAutotypeCommand.m in Sources */,
4C6DCC611FA24C2100C8AD3F /* MPAutotypeCandidateSelectionViewController.m in Sources */,
@@ -2244,6 +2369,7 @@
4C0C59F118B17F10009C7B76 /* DDHotKeyUtilities.m in Sources */,
4CEE46DD181C301D006BF1E5 /* MPAutotypeDaemon.m in Sources */,
4C50CC041F6C18830095629D /* MPCollectionViewItem.m in Sources */,
4CC0192E271836CD00459789 /* MPEntryAttributeViewController.m in Sources */,
4CA78C001FD58C92003C8560 /* MPPluginRepository.m in Sources */,
4CAD8AA622CF397B0090B2DD /* MPAutotypeDoctorReportViewController.m in Sources */,
4C8990F71EE978EB0043B48D /* MPDuplicateEntryOptionsWindowController.m in Sources */,
@@ -2264,16 +2390,20 @@
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */,
4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */,
4CCEDE2E179F213B008402BE /* MPNotifications.m in Sources */,
4CE84903271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m in Sources */,
4C17D8E517A1C780006C8C1E /* MPDocumentWindowDelegate.m in Sources */,
4C63B8FB17A3154D0091BD72 /* MPContextButton.m in Sources */,
4C1E9885185F71A800943563 /* MPContextBarViewController.m in Sources */,
4CE4FFA72746955E00789F75 /* MPSecurityDatabaseSettingsViewController.m in Sources */,
4C1FA07B18231900003A3F8C /* MPDocument+Autotype.m in Sources */,
4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */,
4C4B7EEE17A467E1000234C7 /* MPGroupInspectorViewController.m in Sources */,
4C71BCB72167B79C00B4CBDA /* MPPluginVersionComparator.m in Sources */,
4C11BE6928B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m in Sources */,
4C4B7EF317A467FC000234C7 /* MPEntryInspectorViewController.m in Sources */,
4C1BDF2B1E4392640012A3F0 /* MPPluginDataViewController.m in Sources */,
4C4B7EF817A4B335000234C7 /* MPUniqueCharactersFormatter.m in Sources */,
4C7D4BE52DA91C1C00B04C10 /* MPSecurityPreferencesController.m in Sources */,
4C8B36AB17A6ED4B005E1FF1 /* MPOutlineContextMenuDelegate.m in Sources */,
4CD7223B17A7CB0700F5A1E1 /* MPWorkflowPreferencesController.m in Sources */,
4CA08DA017A831B200A6544B /* MPAddEntryContextMenuDelegate.m in Sources */,
@@ -2282,12 +2412,14 @@
4C0728BD17B5B7F7005A7DD9 /* MPPasswordEditWindowController.m in Sources */,
4C0F647B17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m in Sources */,
4C0949591FD6B89B004F2971 /* NSUserNotification+MPAdditions.m in Sources */,
4C521981273D192C00C719D3 /* MPOpenURLHandler.m in Sources */,
4C2057EE23CDF6F900C731EC /* MPPathCell.m in Sources */,
4C3B42871F935316007B04FD /* MPDayCountFormatter.m in Sources */,
4C7D9D5424ABE6FD00907034 /* MPTabViewController.m in Sources */,
3C0CDECF21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m in Sources */,
4C57AE1417BA422B00CA4F34 /* MPSegmentedContextCell.m in Sources */,
4CE2961518429AA5005F01CE /* MPAutotypeKeyPress.m in Sources */,
4CE4FFAC2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.m in Sources */,
4C32B0E71A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m in Sources */,
4C5807781C64F67000E7171F /* NSString+MPHash.m in Sources */,
4CAAA8271D787B8B00CDE977 /* MPAutotypeBuilderViewController.m in Sources */,
@@ -2319,6 +2451,7 @@
D364AB1423FC104300AB1D8E /* pl */,
FA8CCD9123A7A6FA003A3BB1 /* uk */,
6FECA76F24D51B0A00BBA9BB /* ja */,
69385E46274ACFE0001AB1E9 /* cs */,
);
name = PickcharsView.xib;
sourceTree = "<group>";
@@ -2337,6 +2470,7 @@
71FF7A25230FEF3D002F488F /* it */,
FA8CCD9223A7A6FA003A3BB1 /* uk */,
6FECA77024D51B0A00BBA9BB /* ja */,
69385E47274ACFE0001AB1E9 /* cs */,
);
name = PickfieldView.xib;
sourceTree = "<group>";
@@ -2356,6 +2490,7 @@
6A74B0692076F4B40049BC29 /* sv-SE */,
FA8CCD8323A7A6F7003A3BB1 /* uk */,
6FECA76324D51B0800BBA9BB /* ja */,
69385E39274ACFDF001AB1E9 /* cs */,
);
name = PluginPreferences.xib;
sourceTree = "<group>";
@@ -2373,6 +2508,7 @@
D364AB1523FC104300AB1D8E /* pl */,
FA8CCD9523A7A6FB003A3BB1 /* uk */,
6FECA77424D51B0B00BBA9BB /* ja */,
69385E4B274ACFE0001AB1E9 /* cs */,
);
name = OpenPanelAccessoryView.xib;
sourceTree = "<group>";
@@ -2391,6 +2527,7 @@
D364AB1623FC104300AB1D8E /* pl */,
FA8CCD7E23A7A6F6003A3BB1 /* uk */,
6FECA75D24D51B0700BBA9BB /* ja */,
69385E32274ACFDE001AB1E9 /* cs */,
);
name = SavePanelAccessoryView.xib;
sourceTree = "<group>";
@@ -2409,6 +2546,7 @@
6A74B07D2076F4B60049BC29 /* sv-SE */,
FA8CCD9B23A7A6FC003A3BB1 /* uk */,
6FECA77924D51B0B00BBA9BB /* ja */,
69385E51274ACFE1001AB1E9 /* cs */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@@ -2428,6 +2566,7 @@
6A74B0712076F4B50049BC29 /* sv-SE */,
FA8CCD8C23A7A6F9003A3BB1 /* uk */,
6FECA76A24D51B0900BBA9BB /* ja */,
69385E41274ACFE0001AB1E9 /* cs */,
);
name = ContextBar.xib;
sourceTree = "<group>";
@@ -2447,6 +2586,7 @@
6A74B06F2076F4B50049BC29 /* sv-SE */,
FA8CCD8A23A7A6F8003A3BB1 /* uk */,
6FECA76C24D51B0A00BBA9BB /* ja */,
69385E43274ACFE0001AB1E9 /* cs */,
);
name = IconSelection.xib;
sourceTree = "<group>";
@@ -2466,6 +2606,7 @@
6A74B0652076F4B40049BC29 /* sv-SE */,
FA8CCD7F23A7A6F6003A3BB1 /* uk */,
6FECA76124D51B0800BBA9BB /* ja */,
69385E37274ACFDF001AB1E9 /* cs */,
);
name = GeneralPreferences.xib;
sourceTree = "<group>";
@@ -2485,6 +2626,7 @@
6A74B06D2076F4B40049BC29 /* sv-SE */,
FA8CCD8823A7A6F8003A3BB1 /* uk */,
6FECA76E24D51B0A00BBA9BB /* ja */,
69385E45274ACFE0001AB1E9 /* cs */,
);
name = PasswordInputView.xib;
sourceTree = "<group>";
@@ -2504,6 +2646,7 @@
6A74B06A2076F4B40049BC29 /* sv-SE */,
FA8CCD8523A7A6F7003A3BB1 /* uk */,
6FECA76024D51B0800BBA9BB /* ja */,
69385E35274ACFDF001AB1E9 /* cs */,
);
name = InspectorView.xib;
sourceTree = "<group>";
@@ -2523,6 +2666,7 @@
4C9FE47423703DA50096A5EA /* en */,
FA8CCD9A23A7A6FB003A3BB1 /* uk */,
6FECA77824D51B0B00BBA9BB /* ja */,
69385E50274ACFE1001AB1E9 /* cs */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@@ -2542,6 +2686,7 @@
6A74B0782076F4B50049BC29 /* sv-SE */,
FA8CCD9623A7A6FB003A3BB1 /* uk */,
6FECA77524D51B0B00BBA9BB /* ja */,
69385E4C274ACFE0001AB1E9 /* cs */,
);
name = MainMenu.xib;
sourceTree = "<group>";
@@ -2561,6 +2706,7 @@
6A74B0772076F4B50049BC29 /* sv-SE */,
FA8CCD9323A7A6FA003A3BB1 /* uk */,
6FECA77324D51B0B00BBA9BB /* ja */,
69385E4A274ACFE0001AB1E9 /* cs */,
);
name = WelcomeView.xib;
sourceTree = "<group>";
@@ -2580,10 +2726,32 @@
4C1888D0230FFEE20054A38F /* it */,
FA8CCD9823A7A6FB003A3BB1 /* uk */,
6FECA77724D51B0B00BBA9BB /* ja */,
69385E4E274ACFE0001AB1E9 /* cs */,
);
name = Localizable.strings;
sourceTree = "<group>";
};
4C9328CA273E6A38000DCBEE /* MPTOTPSetupViewController.xib */ = {
isa = PBXVariantGroup;
children = (
4C9328C9273E6A38000DCBEE /* Base */,
4C9328CD273E6A5F000DCBEE /* zh-Hans */,
4C9328CF273E6A63000DCBEE /* de */,
69385E3D274ACFDF001AB1E9 /* cs */,
);
name = MPTOTPSetupViewController.xib;
sourceTree = "<group>";
};
4C9328D2273E6A83000DCBEE /* MPTOTPViewController.xib */ = {
isa = PBXVariantGroup;
children = (
4C9328D1273E6A83000DCBEE /* Base */,
4C9328D4273E6A85000DCBEE /* zh-Hans */,
4C9328D6273E6A85000DCBEE /* de */,
);
name = MPTOTPViewController.xib;
sourceTree = "<group>";
};
4CA1827A1F96523600DD4A4A /* DuplicateEntryOptionsWindow.xib */ = {
isa = PBXVariantGroup;
children = (
@@ -2599,6 +2767,7 @@
6A74B0642076F4B40049BC29 /* sv-SE */,
FA8CCD7D23A7A6F5003A3BB1 /* uk */,
6FECA75B24D51B0700BBA9BB /* ja */,
69385E30274ACFDE001AB1E9 /* cs */,
);
name = DuplicateEntryOptionsWindow.xib;
sourceTree = "<group>";
@@ -2626,6 +2795,7 @@
ABAA99A523151BE70095D78E /* zh-Hans */,
FA8CCD8D23A7A6F9003A3BB1 /* uk */,
6FECA77224D51B0A00BBA9BB /* ja */,
69385E49274ACFE0001AB1E9 /* cs */,
);
name = ReferenceBuilderView.xib;
sourceTree = "<group>";
@@ -2644,6 +2814,7 @@
ABE86630231662D200201125 /* zh-Hans */,
FA8CCD8F23A7A6F9003A3BB1 /* uk */,
6FECA77124D51B0A00BBA9BB /* ja */,
69385E48274ACFE0001AB1E9 /* cs */,
);
name = PluginDataView.xib;
sourceTree = "<group>";
@@ -2663,6 +2834,7 @@
6A74B06C2076F4B40049BC29 /* sv-SE */,
FA8CCD8723A7A6F8003A3BB1 /* uk */,
6FECA75E24D51B0800BBA9BB /* ja */,
69385E33274ACFDE001AB1E9 /* cs */,
);
name = EntryInspectorView.xib;
sourceTree = "<group>";
@@ -2682,6 +2854,7 @@
6A74B06B2076F4B40049BC29 /* sv-SE */,
FA8CCD8623A7A6F7003A3BB1 /* uk */,
6FECA75F24D51B0800BBA9BB /* ja */,
69385E34274ACFDF001AB1E9 /* cs */,
);
name = GroupInspectorView.xib;
sourceTree = "<group>";
@@ -2701,6 +2874,7 @@
78E1F8AF22E3A3DF00E738AE /* ru */,
FA8CCD8023A7A6F6003A3BB1 /* uk */,
6FECA76224D51B0800BBA9BB /* ja */,
69385E38274ACFDF001AB1E9 /* cs */,
);
name = IntegrationPreferences.xib;
sourceTree = "<group>";
@@ -2720,6 +2894,7 @@
6A74B0672076F4B40049BC29 /* sv-SE */,
FA8CCD8123A7A6F6003A3BB1 /* uk */,
6FECA76624D51B0900BBA9BB /* ja */,
69385E3C274ACFDF001AB1E9 /* cs */,
);
name = WorkflowPreferences.xib;
sourceTree = "<group>";
@@ -2739,6 +2914,7 @@
6A74B0682076F4B40049BC29 /* sv-SE */,
FA8CCD8223A7A6F6003A3BB1 /* uk */,
6FECA76524D51B0900BBA9BB /* ja */,
69385E3B274ACFDF001AB1E9 /* cs */,
);
name = UpdatePreferences.xib;
sourceTree = "<group>";
@@ -2758,6 +2934,7 @@
6A74B0702076F4B50049BC29 /* sv-SE */,
FA8CCD8B23A7A6F9003A3BB1 /* uk */,
6FECA76B24D51B0900BBA9BB /* ja */,
69385E42274ACFE0001AB1E9 /* cs */,
);
name = DatePickingView.xib;
sourceTree = "<group>";
@@ -2777,6 +2954,7 @@
6A74B0632076F4B30049BC29 /* sv-SE */,
FA8CCD7C23A7A6F5003A3BB1 /* uk */,
6FECA75C24D51B0700BBA9BB /* ja */,
69385E31274ACFDE001AB1E9 /* cs */,
);
name = PasswordEditWindow.xib;
sourceTree = "<group>";
@@ -2796,6 +2974,7 @@
6A74B06E2076F4B50049BC29 /* sv-SE */,
FA8CCD8923A7A6F8003A3BB1 /* uk */,
6FECA76D24D51B0A00BBA9BB /* ja */,
69385E44274ACFE0001AB1E9 /* cs */,
);
name = PasswordCreatorView.xib;
sourceTree = "<group>";
@@ -2815,6 +2994,7 @@
6A74B0622076F4B30049BC29 /* sv-SE */,
FA8CCD7B23A7A6F5003A3BB1 /* uk */,
6FECA75A24D51B0700BBA9BB /* ja */,
69385E2F274ACFDE001AB1E9 /* cs */,
);
name = DatabaseSettingsWindow.xib;
sourceTree = "<group>";
@@ -2832,6 +3012,7 @@
D364AB1823FC104300AB1D8E /* pl */,
FA8CCD8423A7A6F7003A3BB1 /* uk */,
6FECA76424D51B0800BBA9BB /* ja */,
69385E3A274ACFDF001AB1E9 /* cs */,
);
name = PluginRepositoryBrowserView.xib;
sourceTree = "<group>";
@@ -2848,6 +3029,7 @@
D364AB1723FC104300AB1D8E /* pl */,
FA8CCD9423A7A6FA003A3BB1 /* uk */,
6FECA76924D51B0900BBA9BB /* ja */,
69385E40274ACFDF001AB1E9 /* cs */,
);
name = AutotypeDoctorReportViewController.xib;
sourceTree = "<group>";
@@ -2866,6 +3048,7 @@
ABE8662E2316617500201125 /* zh-Hans */,
FA8CCD9723A7A6FB003A3BB1 /* uk */,
6FECA77624D51B0B00BBA9BB /* ja */,
69385E4D274ACFE0001AB1E9 /* cs */,
);
name = Localizable.stringsdict;
sourceTree = "<group>";
@@ -2885,6 +3068,7 @@
ABE506D522EFF97400B9F8DA /* zh-Hans */,
FA8CCD9023A7A6FA003A3BB1 /* uk */,
6FECA76824D51B0900BBA9BB /* ja */,
69385E3F274ACFDF001AB1E9 /* cs */,
);
name = AutotypeCandidateSelectionView.xib;
sourceTree = "<group>";
@@ -2904,6 +3088,7 @@
ABE506D622EFF97400B9F8DA /* zh-Hans */,
FA8CCD8E23A7A6F9003A3BB1 /* uk */,
6FECA76724D51B0900BBA9BB /* ja */,
69385E3E274ACFDF001AB1E9 /* cs */,
);
name = AutotypeBuilderView.xib;
sourceTree = "<group>";
@@ -2921,6 +3106,7 @@
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_EMPTY_BODY = YES;
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(DEVELOPER_FRAMEWORKS_DIR)",
@@ -2946,6 +3132,7 @@
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_EMPTY_BODY = YES;
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(DEVELOPER_FRAMEWORKS_DIR)",
@@ -2979,6 +3166,7 @@
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -2986,7 +3174,8 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = "0.8-beta";
CURRENT_PROJECT_VERSION = 0.8.1;
DEAD_CODE_STRIPPING = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -3034,6 +3223,7 @@
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -3041,7 +3231,8 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = YES;
CURRENT_PROJECT_VERSION = "0.8-beta";
CURRENT_PROJECT_VERSION = 0.8.1;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -3070,9 +3261,13 @@
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CODE_SIGN_ENTITLEMENTS = MacPass/MacPass.entitlements;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 55SM4L4Z97;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
@@ -3080,7 +3275,10 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "MacPass/MacPass-Prefix.pch";
INFOPLIST_FILE = "MacPass/MacPass-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
OTHER_LDFLAGS = (
"-lxml2",
"-Wl,-rpath,@loader_path/../Frameworks",
@@ -3088,8 +3286,8 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.hicknhacksoftware.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
STRIP_STYLE = debugging;
WRAPPER_EXTENSION = app;
};
name = Debug;
@@ -3101,9 +3299,13 @@
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CODE_SIGN_ENTITLEMENTS = MacPass/MacPass.entitlements;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 55SM4L4Z97;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
@@ -3112,7 +3314,10 @@
GCC_PREFIX_HEADER = "MacPass/MacPass-Prefix.pch";
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
INFOPLIST_FILE = "MacPass/MacPass-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
OTHER_LDFLAGS = (
"-lxml2",
"-Wl,-rpath,@loader_path/../Frameworks",
@@ -3120,8 +3325,8 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.hicknhacksoftware.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
STRIP_STYLE = debugging;
WRAPPER_EXTENSION = app;
};
name = Release;

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
LastUpgradeVersion = "1430"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"

View File

@@ -1,6 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17506" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17506"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -15,12 +15,12 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="392" height="210"/>
<customView misplaced="YES" id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="392" height="220"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<tokenField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jzn-UC-Ok8">
<rect key="frame" x="20" y="50" width="352" height="66"/>
<rect key="frame" x="20" y="60" width="352" height="66"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="66" id="7rr-fC-NeH"/>
</constraints>
@@ -31,14 +31,14 @@
</tokenFieldCell>
</tokenField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lS4-1R-Bhp">
<rect key="frame" x="215" y="19" width="157" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Set Autotype Sequence" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="aOD-Ih-Sft">
<rect key="frame" x="201" y="13" width="178" height="32"/>
<buttonCell key="cell" type="push" title="Set Autotype Sequence" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="aOD-Ih-Sft">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7xF-eN-vs3">
<rect key="frame" x="18" y="176" width="207" height="14"/>
<rect key="frame" x="18" y="186" width="207" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Available Commands and Placeholders" id="lug-97-H9D">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -46,7 +46,7 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9Kw-lW-ASe">
<rect key="frame" x="18" y="124" width="107" height="14"/>
<rect key="frame" x="18" y="134" width="107" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype Sequence" id="8ny-Qk-Jvo">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -54,7 +54,7 @@
</textFieldCell>
</textField>
<tokenField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="k06-gn-ahB">
<rect key="frame" x="20" y="146" width="352" height="22"/>
<rect key="frame" x="20" y="156" width="352" height="22"/>
<constraints>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="400" id="can-wk-8oX"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="22" id="nk8-bB-yOg"/>
@@ -74,7 +74,7 @@
<constraint firstItem="9Kw-lW-ASe" firstAttribute="leading" secondItem="7xF-eN-vs3" secondAttribute="leading" id="Mjz-o8-Vqx"/>
<constraint firstAttribute="bottom" secondItem="lS4-1R-Bhp" secondAttribute="bottom" constant="20" symbolic="YES" id="PZa-cL-9DY"/>
<constraint firstAttribute="trailing" secondItem="k06-gn-ahB" secondAttribute="trailing" constant="20" symbolic="YES" id="UwG-TO-3PS"/>
<constraint firstItem="lS4-1R-Bhp" firstAttribute="top" secondItem="Jzn-UC-Ok8" secondAttribute="bottom" constant="8" symbolic="YES" id="ZCK-9U-M92"/>
<constraint firstItem="lS4-1R-Bhp" firstAttribute="top" secondItem="Jzn-UC-Ok8" secondAttribute="bottom" constant="20" symbolic="YES" id="ZCK-9U-M92"/>
<constraint firstItem="k06-gn-ahB" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="hJ8-Oo-CDZ"/>
<constraint firstItem="Jzn-UC-Ok8" firstAttribute="trailing" secondItem="k06-gn-ahB" secondAttribute="trailing" id="hWO-Ql-W8s"/>
<constraint firstItem="9Kw-lW-ASe" firstAttribute="top" secondItem="k06-gn-ahB" secondAttribute="bottom" constant="8" symbolic="YES" id="qdv-SC-dEw"/>

View File

@@ -1,6 +1,6 @@
{\rtf1\ansi\ansicpg1252\cocoartf2513
{\rtf1\ansi\ansicpg1250\cocoartf2636
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;\f2\fnil\fcharset0 HelveticaNeue;
\f3\fnil\fcharset0 AppleColorEmoji;\f4\fnil\fcharset0 SFProText-Regular;}
\f3\fnil\fcharset0 AppleColorEmoji;}
{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red9\green79\blue209;\red69\green60\blue204;
\red52\green110\blue183;\red38\green38\blue38;}
{\*\expandedcolortbl;;\cssrgb\c0\c0\c0\cname textColor;\cssrgb\c0\c40784\c85490\cname linkColor;\cssrgb\c34510\c33725\c83922;
@@ -21,7 +21,7 @@
License:\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\f1\b0 \cf2 MacPass KeePass compatible client for OS X\
\f1\b0 \cf2 MacPass KeePass compatible client for macOS\
Copyright (c) 2012-2021 Michael Starke, HicknHack Software GmbH\
\
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by\
@@ -62,11 +62,10 @@ Karl Heinz Marbaise}}\kerning1\expnd0\expndtw3
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\f1\b0 \cf2 \
Dutch translation: {\field{\*\fldinst{HYPERLINK "https://github.com/FrankKooij"}}{\fldrslt \cf3 Frank Kooij}},
\f4 \cf4 \expnd0\expndtw0\kerning0
{\field{\*\fldinst{HYPERLINK "https://github.com/clone1612"}}{\fldrslt
\f1 \cf3 \kerning1\expnd0\expndtw0 Jannick Hemelhof}}
\f1 \cf0 \kerning1\expnd0\expndtw0 \
Czech translation:\cf0 {\field{\*\fldinst{HYPERLINK "https://github.com/JiriSko"}}{\fldrslt \cf3 Ji\uc0\u345 \'ed \'8akorpil}}\cf2 \
\
Dutch translation: {\field{\*\fldinst{HYPERLINK "https://github.com/FrankKooij"}}{\fldrslt \cf3 Frank Kooij}},\cf4 \expnd0\expndtw0\kerning0
{\field{\*\fldinst{HYPERLINK "https://github.com/clone1612"}}{\fldrslt \cf3 \kerning1\expnd0\expndtw0 Jannick Hemelhof}}\cf0 \kerning1\expnd0\expndtw0 \
\
\cf2 French translation:\cf0 {\field{\*\fldinst{HYPERLINK "mailto:gil@panix.com"}}{\fldrslt \cf3 Gil Andr\'e9}}\
\

View File

@@ -1,21 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPDatabaseSettingsWindowController">
<connections>
<outlet property="Argon2IterationsTextField" destination="39N-8Q-J8b" id="pnH-Mf-x5c"/>
<outlet property="Argon2MemoryTextField" destination="eEW-oa-V7U" id="iDH-eW-4TE"/>
<outlet property="Argon2ThreadsTextField" destination="178-0f-guB" id="ATl-km-DSX"/>
<outlet property="aesEncryptionRoundsTextField" destination="8aq-34-rcd" id="WoJ-Kc-d8q"/>
<outlet property="argon2IterationsTextField" destination="39N-8Q-J8b" id="af4-Ft-aDX"/>
<outlet property="argon2MemoryStepper" destination="NfL-iP-SRk" id="eAW-kb-cLh"/>
<outlet property="argon2MemoryTextField" destination="eEW-oa-V7U" id="Wig-Rk-lm0"/>
<outlet property="argon2ThreadsTextField" destination="178-0f-guB" id="dHa-L6-gOs"/>
<outlet property="argon2dIterationsTextField" destination="39N-8Q-J8b" id="af4-Ft-aDX"/>
<outlet property="argon2dMemoryStepper" destination="NfL-iP-SRk" id="eAW-kb-cLh"/>
<outlet property="argon2dMemoryTextField" destination="eEW-oa-V7U" id="Wig-Rk-lm0"/>
<outlet property="argon2dThreadsTextField" destination="178-0f-guB" id="dHa-L6-gOs"/>
<outlet property="argon2idIterationsTextField" destination="gqS-YX-aBl" id="R5l-uT-9Xh"/>
<outlet property="argon2idMemoryStepper" destination="qKz-Ir-3lf" id="GkI-Lv-Wz5"/>
<outlet property="argon2idMemoryTextField" destination="edk-MV-ArQ" id="QIz-wh-QxJ"/>
<outlet property="argon2idThreadsTextField" destination="aZY-o8-2Dn" id="Bzq-u5-Cnv"/>
<outlet property="cipherPopupButton" destination="3ek-Rg-w82" id="LbB-Fd-rqC"/>
<outlet property="createKeyDerivationParametersButton" destination="P98-Cu-Tha" id="UQ0-eg-rdx"/>
<outlet property="databaseColorColorWell" destination="1439" id="Fqq-2P-vbf"/>
@@ -36,6 +37,7 @@
<outlet property="historyMaximumSizeTextField" destination="1273" id="5Fo-Pp-8dY"/>
<outlet property="keyDerivationPopupButton" destination="2cq-R3-Ksh" id="p3N-lu-r4C"/>
<outlet property="keyDerivationSettingsTabView" destination="2MY-PW-kzL" id="1iZ-jt-nxi"/>
<outlet property="lastKeyChangeTextField" destination="vkL-2N-0Hi" id="wm3-aR-U8m"/>
<outlet property="recommendKeyChangeCheckButton" destination="Hqc-B0-xyz" id="3CK-D7-b8S"/>
<outlet property="recommendKeyChangeIntervalStepper" destination="GUO-6H-UI2" id="gIQ-c2-pkx"/>
<outlet property="recommendKeyChangeIntervalTextField" destination="19r-LE-7X5" id="c5C-1h-LpD"/>
@@ -50,14 +52,14 @@
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="500" height="360"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<rect key="contentRect" x="196" y="240" width="546" height="395"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
<view key="contentView" misplaced="YES" id="2">
<rect key="frame" x="0.0" y="0.0" width="500" height="360"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="0.0" y="0.0" width="546" height="395"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="288">
<rect key="frame" x="385" y="13" width="59" height="32"/>
<rect key="frame" x="479" y="13" width="54" height="32"/>
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="289">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -70,7 +72,7 @@ DQ
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="956">
<rect key="frame" x="303" y="13" width="82" height="32"/>
<rect key="frame" x="405" y="13" width="76" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="957">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -83,16 +85,16 @@ Gw
</connections>
</button>
<tabView translatesAutoresizingMaskIntoConstraints="NO" id="357">
<rect key="frame" x="13" y="41" width="432" height="338"/>
<rect key="frame" x="13" y="40" width="520" height="421"/>
<font key="font" metaFont="system"/>
<tabViewItems>
<tabViewItem label="General" identifier="1" id="358">
<view key="view" id="361">
<rect key="frame" x="10" y="33" width="454" height="265"/>
<rect key="frame" x="10" y="33" width="500" height="264"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="231">
<rect key="frame" x="154" y="224" width="280" height="21"/>
<rect key="frame" x="200" y="223" width="280" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/>
</constraints>
@@ -103,7 +105,7 @@ Gw
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="256">
<rect key="frame" x="70" y="201" width="78" height="16"/>
<rect key="frame" x="116" y="200" width="78" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -111,7 +113,7 @@ Gw
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="189">
<rect key="frame" x="46" y="228" width="102" height="16"/>
<rect key="frame" x="92" y="227" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -119,7 +121,7 @@ Gw
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1394">
<rect key="frame" x="152" y="72" width="71" height="25"/>
<rect key="frame" x="197" y="71" width="72" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1395">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -132,7 +134,7 @@ Gw
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1404">
<rect key="frame" x="60" y="78" width="88" height="16"/>
<rect key="frame" x="106" y="77" width="88" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -140,7 +142,7 @@ Gw
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1434">
<rect key="frame" x="107" y="48" width="41" height="16"/>
<rect key="frame" x="153" y="48" width="41" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -148,7 +150,7 @@ Gw
</textFieldCell>
</textField>
<colorWell translatesAutoresizingMaskIntoConstraints="NO" id="1439" customClass="HNHUIColorWell">
<rect key="frame" x="154" y="44" width="44" height="23"/>
<rect key="frame" x="197" y="42" width="50" height="27"/>
<constraints>
<constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/>
<constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/>
@@ -156,7 +158,7 @@ Gw
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</colorWell>
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530">
<rect key="frame" x="154" y="116" width="280" height="100"/>
<rect key="frame" x="200" y="115" width="280" height="100"/>
<clipView key="contentView" drawsBackground="NO" id="WOI-1v-RCe">
<rect key="frame" x="1" y="1" width="278" height="98"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@@ -186,7 +188,7 @@ Gw
</scroller>
</scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RhU-5I-S5l">
<rect key="frame" x="75" y="20" width="73" height="16"/>
<rect key="frame" x="121" y="20" width="73" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="File format:" id="bTk-YZ-x0G">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -194,7 +196,7 @@ Gw
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Ci-0B-yV5">
<rect key="frame" x="152" y="20" width="72" height="16"/>
<rect key="frame" x="198" y="20" width="72" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="VersionInfo" id="Ush-4r-A1A">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -236,11 +238,11 @@ Gw
</tabViewItem>
<tabViewItem label="Security" identifier="" id="370">
<view key="view" id="371">
<rect key="frame" x="10" y="33" width="412" height="292"/>
<rect key="frame" x="10" y="33" width="765" height="238"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3ek-Rg-w82">
<rect key="frame" x="129" y="248" width="155" height="25"/>
<rect key="frame" x="305" y="194" width="157" height="25"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="150" id="F8Y-Uw-4mL"/>
</constraints>
@@ -251,7 +253,7 @@ Gw
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vH7-5a-52C">
<rect key="frame" x="52" y="255" width="73" height="16"/>
<rect key="frame" x="229" y="201" width="73" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Encryption:" id="gxY-UL-bEG">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -259,29 +261,32 @@ Gw
</textFieldCell>
</textField>
<box title="Key derivation" translatesAutoresizingMaskIntoConstraints="NO" id="pbl-Mb-r8V">
<rect key="frame" x="17" y="16" width="378" height="227"/>
<rect key="frame" x="17" y="16" width="731" height="174"/>
<view key="contentView" id="hkT-SX-Te1">
<rect key="frame" x="3" y="3" width="372" height="209"/>
<rect key="frame" x="4" y="5" width="723" height="154"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P98-Cu-Tha">
<rect key="frame" x="209" y="18" width="143" height="23"/>
<rect key="frame" x="558" y="15" width="146" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Generate Parameters" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="PoI-Er-Y8P">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="benchmarkParametersForDelay:" target="-2" id="Iyw-Hp-gm2"/>
</connections>
</button>
<tabView drawsBackground="NO" type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="2MY-PW-kzL">
<rect key="frame" x="12" y="49" width="348" height="111"/>
<rect key="frame" x="11" y="45" width="701" height="61"/>
<font key="font" metaFont="system"/>
<tabViewItems>
<tabViewItem label="Aes" identifier="1" id="ft1-pl-lpO">
<view key="view" id="88i-IZ-Yev">
<rect key="frame" x="0.0" y="0.0" width="390" height="61"/>
<rect key="frame" x="0.0" y="0.0" width="701" height="61"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ztz-iY-hWV">
<rect key="frame" x="64" y="23" width="50" height="16"/>
<rect key="frame" x="220" y="23" width="50" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Rounds" id="uUQ-9s-M5E">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -289,7 +294,7 @@ Gw
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8aq-34-rcd">
<rect key="frame" x="120" y="20" width="150" height="21"/>
<rect key="frame" x="276" y="20" width="150" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="150" id="cdb-ED-zB3"/>
</constraints>
@@ -413,14 +418,103 @@ Gw
</tabViewItem>
<tabViewItem label="Argon2id" identifier="" id="xI9-6m-9ju">
<view key="view" id="k6k-0V-j7w">
<rect key="frame" x="0.0" y="0.0" width="348" height="111"/>
<rect key="frame" x="0.0" y="0.0" width="390" height="111"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qKz-Ir-3lf">
<rect key="frame" x="254" y="17" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="vGb-iO-lp5"/>
</stepper>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="vRx-5Q-dar">
<rect key="frame" x="60" y="23" width="54" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Memory" id="mq2-0M-8jv">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aZY-o8-2Dn">
<rect key="frame" x="120" y="82" width="150" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="FID-Lr-sq8">
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="y7Q-EY-hcg">
<real key="minimum" value="1"/>
<real key="maximum" value="4294967295"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="oZr-5M-43J">
<rect key="frame" x="53" y="54" width="61" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Iterations" id="106-gi-Vnb">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="oXD-uF-jLh">
<rect key="frame" x="60" y="85" width="54" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Threads" id="9zh-4T-smL">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gqS-YX-aBl">
<rect key="frame" x="120" y="51" width="150" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="150" id="ZMa-5V-8j5"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="dAr-Cz-hg4">
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="Qas-an-0IT">
<real key="minimum" value="1"/>
<real key="maximum" value="16777215"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="edk-MV-ArQ">
<rect key="frame" x="120" y="20" width="129" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Pqf-ww-JwE">
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="WMf-04-Jeb"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="aZY-o8-2Dn" secondAttribute="trailing" constant="8" id="9cI-nd-tyn"/>
<constraint firstItem="oZr-5M-43J" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="k6k-0V-j7w" secondAttribute="leading" constant="8" id="9hh-vu-O8k"/>
<constraint firstItem="oXD-uF-jLh" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="k6k-0V-j7w" secondAttribute="leading" constant="8" id="AgJ-CV-R5A"/>
<constraint firstItem="gqS-YX-aBl" firstAttribute="top" secondItem="aZY-o8-2Dn" secondAttribute="bottom" constant="10" symbolic="YES" id="Ext-M1-ojI"/>
<constraint firstItem="gqS-YX-aBl" firstAttribute="width" secondItem="aZY-o8-2Dn" secondAttribute="width" id="IaU-gr-21m"/>
<constraint firstItem="gqS-YX-aBl" firstAttribute="leading" secondItem="oZr-5M-43J" secondAttribute="trailing" constant="8" symbolic="YES" id="Mna-7q-x0b"/>
<constraint firstItem="aZY-o8-2Dn" firstAttribute="centerX" secondItem="k6k-0V-j7w" secondAttribute="centerX" id="SAt-gT-Bzv"/>
<constraint firstItem="oXD-uF-jLh" firstAttribute="firstBaseline" secondItem="aZY-o8-2Dn" secondAttribute="firstBaseline" id="WdW-gk-jZF"/>
<constraint firstItem="oZr-5M-43J" firstAttribute="firstBaseline" secondItem="gqS-YX-aBl" secondAttribute="firstBaseline" id="di3-ie-idF"/>
<constraint firstItem="edk-MV-ArQ" firstAttribute="top" secondItem="gqS-YX-aBl" secondAttribute="bottom" constant="10" symbolic="YES" id="ee7-xM-yUV"/>
<constraint firstItem="gqS-YX-aBl" firstAttribute="leading" secondItem="aZY-o8-2Dn" secondAttribute="leading" id="fX2-vS-LbX"/>
<constraint firstItem="vRx-5Q-dar" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="k6k-0V-j7w" secondAttribute="leading" constant="20" symbolic="YES" id="hCE-RO-pFT"/>
<constraint firstItem="aZY-o8-2Dn" firstAttribute="leading" secondItem="oXD-uF-jLh" secondAttribute="trailing" constant="8" symbolic="YES" id="iLD-kh-ea0"/>
<constraint firstItem="edk-MV-ArQ" firstAttribute="leading" secondItem="vRx-5Q-dar" secondAttribute="trailing" constant="8" symbolic="YES" id="jUP-Qe-l93"/>
<constraint firstAttribute="bottom" secondItem="edk-MV-ArQ" secondAttribute="bottom" constant="20" id="knT-Qd-N96"/>
<constraint firstItem="qKz-Ir-3lf" firstAttribute="leading" secondItem="edk-MV-ArQ" secondAttribute="trailing" constant="8" symbolic="YES" id="p8X-En-PYk"/>
<constraint firstItem="qKz-Ir-3lf" firstAttribute="trailing" secondItem="gqS-YX-aBl" secondAttribute="trailing" id="qe1-0S-kq1"/>
<constraint firstItem="vRx-5Q-dar" firstAttribute="firstBaseline" secondItem="edk-MV-ArQ" secondAttribute="firstBaseline" id="qht-hF-KQQ"/>
<constraint firstItem="aZY-o8-2Dn" firstAttribute="top" secondItem="k6k-0V-j7w" secondAttribute="top" constant="8" id="t1Z-3T-UXQ"/>
<constraint firstItem="qKz-Ir-3lf" firstAttribute="firstBaseline" secondItem="edk-MV-ArQ" secondAttribute="firstBaseline" id="uid-vB-VTE"/>
<constraint firstItem="edk-MV-ArQ" firstAttribute="leading" secondItem="gqS-YX-aBl" secondAttribute="leading" id="x0l-y0-NlL"/>
</constraints>
</view>
</tabViewItem>
</tabViewItems>
</tabView>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2cq-R3-Ksh">
<rect key="frame" x="109" y="165" width="155" height="25"/>
<rect key="frame" x="284" y="110" width="157" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Pb9-YV-rYe">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -431,7 +525,7 @@ Gw
</connections>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4el-r1-iRL">
<rect key="frame" x="42" y="172" width="63" height="16"/>
<rect key="frame" x="218" y="117" width="63" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Algorithm" id="GVd-KH-pHc">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -476,21 +570,61 @@ Gw
</tabViewItem>
<tabViewItem label="Advanced" identifier="" id="368">
<view key="view" id="369">
<rect key="frame" x="10" y="33" width="507" height="391"/>
<rect key="frame" x="10" y="33" width="500" height="375"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="531">
<rect key="frame" x="184" y="355" width="145" height="18"/>
<gridView xPlacement="leading" yPlacement="bottom" rowAlignment="firstBaseline" columnSpacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="9qm-jk-6rC">
<rect key="frame" x="20" y="26" width="460" height="329"/>
<constraints>
<constraint firstItem="593" firstAttribute="top" secondItem="1273" secondAttribute="bottom" constant="10" symbolic="YES" id="hQY-2D-fsW"/>
</constraints>
<rows>
<gridRow id="s07-ih-7VI"/>
<gridRow id="os2-7m-aVp"/>
<gridRow id="sfy-Q8-exC"/>
<gridRow id="ljf-cP-vpU"/>
<gridRow id="MfD-4k-iaA"/>
<gridRow id="KPg-u4-okO"/>
<gridRow id="6xb-2P-Cvu"/>
<gridRow id="Kew-Bj-DCg"/>
<gridRow id="2Of-0A-Vfl"/>
<gridRow id="L3e-om-Ic8"/>
<gridRow id="4hp-Px-ZS4"/>
<gridRow id="FDr-78-Xps"/>
<gridRow id="izZ-sN-q4t"/>
<gridRow id="PKM-81-EQp"/>
<gridRow id="hna-iA-5aC"/>
</rows>
<columns>
<gridColumn xPlacement="trailing" id="Qql-Lo-f3g"/>
<gridColumn xPlacement="fill" id="PlK-JJ-sPq"/>
<gridColumn id="1uH-Gp-dwg"/>
</columns>
<gridCells>
<gridCell row="s07-ih-7VI" column="Qql-Lo-f3g" id="nJh-2X-IpD"/>
<gridCell row="s07-ih-7VI" column="PlK-JJ-sPq" id="M9z-JP-ppd">
<button key="contentView" verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="531">
<rect key="frame" x="166" y="312" width="261" height="18"/>
<buttonCell key="cell" type="check" title="Enable Entry History" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="532">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1273">
<rect key="frame" x="186" y="327" width="64" height="22"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="64" id="PRg-vx-8QK"/>
</constraints>
</gridCell>
<gridCell row="s07-ih-7VI" column="1uH-Gp-dwg" id="UgG-ZX-SWI"/>
<gridCell row="os2-7m-aVp" column="Qql-Lo-f3g" xPlacement="trailing" id="X92-9J-0Cg">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
<rect key="frame" x="21" y="289" width="139" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum history size:" id="1269">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="os2-7m-aVp" column="PlK-JJ-sPq" id="PKf-K7-AsJ">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1273">
<rect key="frame" x="168" y="286" width="259" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1275">
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="q0Y-Ri-l1A"/>
<font key="font" metaFont="system"/>
@@ -498,85 +632,151 @@ Gw
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1294">
<rect key="frame" x="255" y="325" width="19" height="27"/>
</gridCell>
<gridCell row="os2-7m-aVp" column="1uH-Gp-dwg" id="EFp-x4-VeA">
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1294">
<rect key="frame" x="434" y="283" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="1295"/>
</stepper>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
<rect key="frame" x="41" y="330" width="139" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum history size:" id="1269">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="557">
<rect key="frame" x="18" y="302" width="162" height="17"/>
</gridCell>
<gridCell row="sfy-Q8-exC" column="Qql-Lo-f3g" id="Vns-Oj-BSD">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="557">
<rect key="frame" x="-2" y="258" width="162" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum items in history:" id="558">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="593">
<rect key="frame" x="186" y="299" width="64" height="22"/>
</gridCell>
<gridCell row="sfy-Q8-exC" column="PlK-JJ-sPq" id="Z22-Zw-KLo">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="593">
<rect key="frame" x="168" y="255" width="259" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="594">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="599">
<rect key="frame" x="255" y="297" width="19" height="27"/>
</gridCell>
<gridCell row="sfy-Q8-exC" column="1uH-Gp-dwg" id="4WU-Rb-7mI">
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="599">
<rect key="frame" x="434" y="252" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="600"/>
</stepper>
<button translatesAutoresizingMaskIntoConstraints="NO" id="535">
<rect key="frame" x="184" y="266" width="137" height="18"/>
</gridCell>
<gridCell row="ljf-cP-vpU" column="Qql-Lo-f3g" xPlacement="fill" id="Hu0-Gi-fjN"/>
<gridCell row="ljf-cP-vpU" column="PlK-JJ-sPq" id="UHJ-5t-yfD">
<box key="contentView" verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="U7M-MH-EFw">
<rect key="frame" x="168" y="246" width="259" height="5"/>
</box>
</gridCell>
<gridCell row="ljf-cP-vpU" column="1uH-Gp-dwg" id="Aq7-ZC-tkG"/>
<gridCell row="MfD-4k-iaA" column="Qql-Lo-f3g" id="RuO-oP-DuO"/>
<gridCell row="MfD-4k-iaA" column="PlK-JJ-sPq" id="Imr-83-2M9">
<button key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="535">
<rect key="frame" x="166" y="225" width="261" height="18"/>
<buttonCell key="cell" type="check" title="Enable Recycle Bin" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="536">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="678">
<rect key="frame" x="184" y="236" width="38" height="25"/>
</gridCell>
<gridCell row="MfD-4k-iaA" column="1uH-Gp-dwg" id="tS6-3i-0YK"/>
<gridCell row="KPg-u4-okO" column="Qql-Lo-f3g" id="kya-ZG-GNN">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NPm-5h-2Mz">
<rect key="frame" x="45" y="203" width="115" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recyclebin Group:" id="kI5-Kp-byE">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="KPg-u4-okO" column="PlK-JJ-sPq" id="r55-ea-Eyd">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="678">
<rect key="frame" x="165" y="196" width="266" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="679">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="680"/>
</popUpButtonCell>
</popUpButton>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="U7M-MH-EFw">
<rect key="frame" x="20" y="288" width="467" height="5"/>
</box>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1582">
<rect key="frame" x="63" y="200" width="117" height="17"/>
</gridCell>
<gridCell row="KPg-u4-okO" column="1uH-Gp-dwg" id="Lw7-ly-vmB"/>
<gridCell row="6xb-2P-Cvu" column="Qql-Lo-f3g" id="Xi5-LE-kit">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1582">
<rect key="frame" x="43" y="176" width="117" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Default Username:" id="1591">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1730">
<rect key="frame" x="186" y="197" width="301" height="22"/>
</gridCell>
<gridCell row="6xb-2P-Cvu" column="PlK-JJ-sPq" id="kiF-fs-5IE">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1730">
<rect key="frame" x="168" y="173" width="259" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1731">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1738">
<rect key="frame" x="184" y="153" width="38" height="25"/>
</gridCell>
<gridCell row="6xb-2P-Cvu" column="1uH-Gp-dwg" id="nGR-Qd-LcH"/>
<gridCell row="Kew-Bj-DCg" column="Qql-Lo-f3g" id="ilR-QJ-uFr">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
<rect key="frame" x="55" y="150" width="105" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Template Group:" id="1588">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="Kew-Bj-DCg" column="PlK-JJ-sPq" id="d7c-Vq-hsu">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1738">
<rect key="frame" x="165" y="143" width="266" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1739">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="1740"/>
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="19r-LE-7X5">
<rect key="frame" x="186" y="95" width="128" height="22"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="128" id="COb-0V-OmT"/>
</constraints>
</gridCell>
<gridCell row="Kew-Bj-DCg" column="1uH-Gp-dwg" id="fpk-Be-TQD"/>
<gridCell row="2Of-0A-Vfl" column="Qql-Lo-f3g" xPlacement="fill" id="650-gg-Qbs"/>
<gridCell row="2Of-0A-Vfl" column="PlK-JJ-sPq" id="Arn-1Z-3GQ">
<box key="contentView" verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="I0d-r2-ySf">
<rect key="frame" x="168" y="138" width="259" height="5"/>
</box>
</gridCell>
<gridCell row="2Of-0A-Vfl" column="1uH-Gp-dwg" id="P4D-Tm-sbJ"/>
<gridCell row="L3e-om-Ic8" column="Qql-Lo-f3g" id="kzo-zz-hYh"/>
<gridCell row="L3e-om-Ic8" column="PlK-JJ-sPq" id="XXL-yj-FBs">
<button key="contentView" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
<rect key="frame" x="166" y="117" width="261" height="18"/>
<buttonCell key="cell" type="check" title="Recommend key change" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CtU-Eq-dgy">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</gridCell>
<gridCell row="L3e-om-Ic8" column="1uH-Gp-dwg" id="xTv-nk-F9D"/>
<gridCell row="4hp-Px-ZS4" column="Qql-Lo-f3g" id="ZI0-zQ-gg8">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OmP-GD-2nA">
<rect key="frame" x="7" y="94" width="153" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recommend key change" id="Xib-Fn-sqx">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="4hp-Px-ZS4" column="PlK-JJ-sPq" id="gAl-mU-rhC">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="19r-LE-7X5">
<rect key="frame" x="168" y="91" width="259" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Nca-aw-6rR">
<customFormatter key="formatter" id="fXZ-RM-4M7" customClass="MPDayCountFormatter"/>
<font key="font" metaFont="system"/>
@@ -584,26 +784,37 @@ Gw
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GUO-6H-UI2">
<rect key="frame" x="319" y="92" width="19" height="27"/>
</gridCell>
<gridCell row="4hp-Px-ZS4" column="1uH-Gp-dwg" id="JeN-68-oQb">
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GUO-6H-UI2">
<rect key="frame" x="434" y="88" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="qQV-3d-GpK"/>
</stepper>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
<rect key="frame" x="184" y="123" width="171" height="18"/>
<buttonCell key="cell" type="check" title="Recommend key change" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CtU-Eq-dgy">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
<rect key="frame" x="184" y="71" width="129" height="18"/>
</gridCell>
<gridCell row="FDr-78-Xps" column="Qql-Lo-f3g" id="jFb-MI-vz6"/>
<gridCell row="FDr-78-Xps" column="PlK-JJ-sPq" id="EdL-ZX-dSC">
<button key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
<rect key="frame" x="166" y="68" width="261" height="18"/>
<buttonCell key="cell" type="check" title="Force key change" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="z6u-YT-7LE">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
<rect key="frame" x="186" y="43" width="128" height="22"/>
</gridCell>
<gridCell row="FDr-78-Xps" column="1uH-Gp-dwg" id="lEW-cO-ZwS"/>
<gridCell row="izZ-sN-q4t" column="Qql-Lo-f3g" id="rqh-02-I8g">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="S0c-4E-42z">
<rect key="frame" x="37" y="45" width="123" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Enforce key change" id="5QH-N1-FHK">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="izZ-sN-q4t" column="PlK-JJ-sPq" id="68v-f4-5wW">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
<rect key="frame" x="168" y="42" width="259" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="M9G-Yy-1s4">
<customFormatter key="formatter" id="3Ax-U4-Ofb" customClass="MPDayCountFormatter"/>
<font key="font" metaFont="system"/>
@@ -611,132 +822,44 @@ Gw
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
<rect key="frame" x="319" y="40" width="19" height="27"/>
</gridCell>
<gridCell row="izZ-sN-q4t" column="1uH-Gp-dwg" id="DfF-Dc-hEE">
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
<rect key="frame" x="434" y="39" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="7Hw-Qf-zWf"/>
</stepper>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
<rect key="frame" x="75" y="159" width="105" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Template Group:" id="1588">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="I0d-r2-ySf">
<rect key="frame" x="20" y="145" width="467" height="5"/>
</box>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NPm-5h-2Mz">
<rect key="frame" x="65" y="242" width="115" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recyclebin Group:" id="kI5-Kp-byE">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OmP-GD-2nA">
<rect key="frame" x="27" y="98" width="153" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recommend key change" id="Xib-Fn-sqx">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="S0c-4E-42z">
<rect key="frame" x="56" y="46" width="124" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Enforce key change" id="5QH-N1-FHK">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="VMc-Qg-eCr">
<rect key="frame" x="184" y="19" width="257" height="18"/>
</gridCell>
<gridCell row="PKM-81-EQp" column="Qql-Lo-f3g" id="aOP-9Y-xja"/>
<gridCell row="PKM-81-EQp" column="PlK-JJ-sPq" id="xtX-MJ-Trd">
<button key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="VMc-Qg-eCr">
<rect key="frame" x="166" y="19" width="261" height="18"/>
<buttonCell key="cell" type="check" title="Force key change once after unlocking" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="pA1-aL-KjT">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</gridCell>
<gridCell row="PKM-81-EQp" column="1uH-Gp-dwg" id="D60-xt-9Bt"/>
<gridCell row="hna-iA-5aC" column="Qql-Lo-f3g" id="zlc-o1-Fvg"/>
<gridCell row="hna-iA-5aC" column="PlK-JJ-sPq" id="btx-7k-Xdx">
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="vkL-2N-0Hi">
<rect key="frame" x="166" y="0.0" width="263" height="14"/>
<textFieldCell key="cell" selectable="YES" title="Last key change was at: DATE" id="KL5-Q0-xoF">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="hna-iA-5aC" column="1uH-Gp-dwg" id="jjM-Wc-cGN"/>
</gridCells>
</gridView>
</subviews>
<constraints>
<constraint firstItem="1273" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="1oM-2t-AOv"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="535" secondAttribute="trailing" constant="20" symbolic="YES" id="21A-KW-N4v"/>
<constraint firstItem="GUO-6H-UI2" firstAttribute="leading" secondItem="19r-LE-7X5" secondAttribute="trailing" constant="8" symbolic="YES" id="2PV-sa-5h6"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="2Xr-j4-fRh"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="GUO-6H-UI2" secondAttribute="trailing" constant="20" symbolic="YES" id="3y6-lK-yT4"/>
<constraint firstItem="593" firstAttribute="width" secondItem="1273" secondAttribute="width" id="4Ee-i1-ZVV"/>
<constraint firstItem="U7M-MH-EFw" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="4vC-yz-H7O"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="5FH-au-cde"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Hqc-B0-xyz" secondAttribute="trailing" constant="20" symbolic="YES" id="5c0-xg-zUq"/>
<constraint firstItem="531" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="181" id="6zN-79-Qnu"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="678" secondAttribute="trailing" constant="20" symbolic="YES" id="7i3-v0-KzW"/>
<constraint firstItem="1730" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="8U5-xL-RFD"/>
<constraint firstItem="1294" firstAttribute="centerY" secondItem="1273" secondAttribute="centerY" id="9N2-YI-gkU"/>
<constraint firstItem="upv-b3-vCc" firstAttribute="top" secondItem="19r-LE-7X5" secondAttribute="bottom" constant="8" symbolic="YES" id="9b8-i8-WsG"/>
<constraint firstItem="593" firstAttribute="leading" secondItem="1273" secondAttribute="leading" id="BEV-US-Ovh"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="Bxq-DB-Mdf"/>
<constraint firstItem="OmP-GD-2nA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="Bxq-ck-lhy"/>
<constraint firstItem="I0d-r2-ySf" firstAttribute="top" secondItem="1738" secondAttribute="bottom" constant="8" symbolic="YES" id="D8h-V2-rF2"/>
<constraint firstItem="Hqc-B0-xyz" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="DVO-fh-dB8"/>
<constraint firstItem="531" firstAttribute="top" secondItem="369" secondAttribute="top" constant="20" symbolic="YES" id="DZt-k3-wht"/>
<constraint firstItem="1294" firstAttribute="leading" secondItem="1273" secondAttribute="trailing" constant="8" symbolic="YES" id="EAc-QN-Zdi"/>
<constraint firstItem="678" firstAttribute="top" secondItem="535" secondAttribute="bottom" constant="8" id="EUL-Ub-Kzl"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="599" secondAttribute="trailing" constant="20" symbolic="YES" id="Gsp-ax-sWf"/>
<constraint firstItem="1273" firstAttribute="leading" secondItem="1268" secondAttribute="trailing" constant="8" symbolic="YES" id="H0a-Pl-w3M"/>
<constraint firstItem="lH4-xp-5QF" firstAttribute="leading" secondItem="VYh-cm-fix" secondAttribute="trailing" constant="8" symbolic="YES" id="Ii9-vL-bAG"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="top" secondItem="Hqc-B0-xyz" secondAttribute="bottom" constant="8" symbolic="YES" id="KaF-Ep-rjY"/>
<constraint firstItem="1584" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="LT1-en-ksN"/>
<constraint firstItem="1268" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="MRP-DE-PpY"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="1294" secondAttribute="trailing" constant="20" symbolic="YES" id="Mod-SI-3xF"/>
<constraint firstItem="1730" firstAttribute="leading" secondItem="1582" secondAttribute="trailing" constant="8" symbolic="YES" id="NFN-Hh-fQu"/>
<constraint firstItem="678" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="NKj-ux-wRY"/>
<constraint firstItem="VMc-Qg-eCr" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="Nbn-lS-NER"/>
<constraint firstAttribute="trailing" secondItem="1730" secondAttribute="trailing" constant="20" symbolic="YES" id="OrK-k9-PSF"/>
<constraint firstItem="1273" firstAttribute="baseline" secondItem="1268" secondAttribute="baseline" id="Q5P-hq-kp1"/>
<constraint firstItem="1730" firstAttribute="top" secondItem="678" secondAttribute="bottom" constant="20" id="ROp-qW-SeX"/>
<constraint firstItem="VMc-Qg-eCr" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="SIP-kd-jaM"/>
<constraint firstItem="1273" firstAttribute="top" secondItem="531" secondAttribute="bottom" constant="8" id="SjI-0M-mxU"/>
<constraint firstItem="535" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="TB6-AF-4H6"/>
<constraint firstItem="S0c-4E-42z" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="Tuc-bZ-dwc"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="upv-b3-vCc" secondAttribute="trailing" constant="20" symbolic="YES" id="U7O-Ai-LSM"/>
<constraint firstItem="535" firstAttribute="top" secondItem="U7M-MH-EFw" secondAttribute="bottom" constant="8" symbolic="YES" id="Uvh-5Q-ELd"/>
<constraint firstAttribute="trailing" secondItem="U7M-MH-EFw" secondAttribute="trailing" constant="20" symbolic="YES" id="V98-nM-gJb"/>
<constraint firstItem="599" firstAttribute="centerY" secondItem="593" secondAttribute="centerY" id="Wc5-zI-ZEb"/>
<constraint firstAttribute="trailing" secondItem="I0d-r2-ySf" secondAttribute="trailing" constant="20" symbolic="YES" id="YKf-bh-TK9"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="lH4-xp-5QF" secondAttribute="trailing" constant="20" symbolic="YES" id="YeE-Vn-DiZ"/>
<constraint firstItem="VMc-Qg-eCr" firstAttribute="top" secondItem="VYh-cm-fix" secondAttribute="bottom" constant="8" symbolic="YES" id="abg-f4-KyH"/>
<constraint firstItem="Hqc-B0-xyz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="b0w-yr-yRd"/>
<constraint firstItem="599" firstAttribute="leading" secondItem="593" secondAttribute="trailing" constant="8" symbolic="YES" id="bJC-wD-1tr"/>
<constraint firstItem="557" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="cS1-DC-wqY"/>
<constraint firstItem="1582" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="cwk-hq-VzW"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" secondItem="S0c-4E-42z" secondAttribute="trailing" constant="8" symbolic="YES" id="dT6-1H-A6Y"/>
<constraint firstItem="NPm-5h-2Mz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="fET-L3-Q98"/>
<constraint firstItem="593" firstAttribute="leading" secondItem="557" secondAttribute="trailing" constant="8" symbolic="YES" id="gRs-a5-bni"/>
<constraint firstItem="1738" firstAttribute="baseline" secondItem="1584" secondAttribute="baseline" id="gqn-vB-VZp"/>
<constraint firstItem="1738" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="gwj-YC-hxN"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="1738" secondAttribute="trailing" constant="20" symbolic="YES" id="hac-jI-arI"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="VMc-Qg-eCr" secondAttribute="bottom" constant="20" symbolic="YES" id="he9-J0-S1u"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="top" secondItem="upv-b3-vCc" secondAttribute="bottom" constant="8" symbolic="YES" id="hjn-Jx-hqk"/>
<constraint firstItem="upv-b3-vCc" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="hy0-Dk-mgY"/>
<constraint firstItem="lH4-xp-5QF" firstAttribute="centerY" secondItem="VYh-cm-fix" secondAttribute="centerY" id="kBr-F4-JCu"/>
<constraint firstItem="678" firstAttribute="baseline" secondItem="NPm-5h-2Mz" secondAttribute="baseline" id="lG3-Ah-hgg"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="leading" secondItem="OmP-GD-2nA" secondAttribute="trailing" constant="8" symbolic="YES" id="my4-Br-O00"/>
<constraint firstItem="1738" firstAttribute="leading" secondItem="1584" secondAttribute="trailing" constant="8" symbolic="YES" id="p8Q-8i-dgy"/>
<constraint firstItem="678" firstAttribute="leading" secondItem="NPm-5h-2Mz" secondAttribute="trailing" constant="8" symbolic="YES" id="pLt-Cf-KAV"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="VMc-Qg-eCr" secondAttribute="trailing" constant="20" symbolic="YES" id="qpu-zJ-eEc"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="531" secondAttribute="trailing" constant="180" id="rrS-VQ-gvR"/>
<constraint firstItem="upv-b3-vCc" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="rsd-1J-hnh"/>
<constraint firstItem="I0d-r2-ySf" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="s3y-lW-Y2J"/>
<constraint firstItem="593" firstAttribute="baseline" secondItem="557" secondAttribute="baseline" id="s4p-cI-vbY"/>
<constraint firstItem="1738" firstAttribute="top" secondItem="1730" secondAttribute="bottom" constant="20" symbolic="YES" id="sb5-r3-XLt"/>
<constraint firstItem="Hqc-B0-xyz" firstAttribute="top" secondItem="I0d-r2-ySf" secondAttribute="bottom" constant="8" symbolic="YES" id="t5k-Eh-ADF"/>
<constraint firstItem="U7M-MH-EFw" firstAttribute="top" secondItem="599" secondAttribute="bottom" constant="8" symbolic="YES" id="t7y-8s-Nio"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="width" secondItem="19r-LE-7X5" secondAttribute="width" id="tg1-z9-11D"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="baseline" secondItem="OmP-GD-2nA" secondAttribute="baseline" id="uXa-9r-cOg"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="baseline" secondItem="S0c-4E-42z" secondAttribute="baseline" id="upv-Da-KSz"/>
<constraint firstItem="1730" firstAttribute="baseline" secondItem="1582" secondAttribute="baseline" id="wvt-QO-HZ4"/>
<constraint firstItem="GUO-6H-UI2" firstAttribute="centerY" secondItem="19r-LE-7X5" secondAttribute="centerY" id="yQu-gw-reJ"/>
<constraint firstItem="593" firstAttribute="top" secondItem="1273" secondAttribute="bottom" constant="6" id="yTD-oa-Y1Q"/>
<constraint firstItem="9qm-jk-6rC" firstAttribute="top" secondItem="369" secondAttribute="top" constant="20" symbolic="YES" id="5IF-9q-g5e"/>
<constraint firstAttribute="trailing" secondItem="9qm-jk-6rC" secondAttribute="trailing" constant="20" symbolic="YES" id="Tgr-FZ-G2x"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="9qm-jk-6rC" secondAttribute="bottom" constant="20" symbolic="YES" id="rO7-wN-hSW"/>
<constraint firstItem="9qm-jk-6rC" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="vim-At-bJf"/>
</constraints>
</view>
</tabViewItem>
@@ -755,7 +878,7 @@ Gw
<constraint firstItem="956" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="Yla-YR-bgz"/>
</constraints>
</view>
<point key="canvasLocation" x="-2020" y="-860"/>
<point key="canvasLocation" x="-2114" y="-801"/>
</window>
</objects>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -16,11 +16,11 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="1">
<rect key="frame" x="0.0" y="0.0" width="180" height="134"/>
<rect key="frame" x="0.0" y="0.0" width="190" height="132"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<datePicker horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="20" y="91" width="143" height="27"/>
<rect key="frame" x="20" y="88" width="153" height="28"/>
<datePickerCell key="cell" borderStyle="bezel" alignment="left" id="4">
<font key="font" metaFont="system"/>
<date key="date" timeIntervalSinceReferenceDate="-595929600">
@@ -32,7 +32,7 @@
</datePickerCell>
</datePicker>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="15">
<rect key="frame" x="18" y="47" width="145" height="25"/>
<rect key="frame" x="17" y="44" width="157" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="16">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -42,9 +42,9 @@
<action selector="setDatePreset:" target="-2" id="RzX-je-KSz"/>
</connections>
</popUpButton>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="25">
<rect key="frame" x="90" y="19" width="70" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Use Date" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26">
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="25">
<rect key="frame" x="87" y="13" width="90" height="32"/>
<buttonCell key="cell" type="push" title="Use Date" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -52,9 +52,9 @@
<action selector="useDate:" target="-2" id="34n-E5-FQq"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="29">
<rect key="frame" x="26" y="19" width="56" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="30">
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="29">
<rect key="frame" x="13" y="13" width="76" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="30">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -73,7 +73,7 @@
<constraint firstAttribute="bottom" secondItem="25" secondAttribute="bottom" constant="20" symbolic="YES" id="36"/>
<constraint firstAttribute="trailing" secondItem="3" secondAttribute="trailing" constant="20" id="6Qs-OP-VRr"/>
<constraint firstItem="25" firstAttribute="centerY" secondItem="29" secondAttribute="centerY" id="M8N-5g-ClS"/>
<constraint firstItem="25" firstAttribute="leading" secondItem="29" secondAttribute="trailing" constant="8" symbolic="YES" id="on5-xg-jcC"/>
<constraint firstItem="25" firstAttribute="leading" secondItem="29" secondAttribute="trailing" constant="12" symbolic="YES" id="on5-xg-jcC"/>
<constraint firstItem="15" firstAttribute="top" secondItem="3" secondAttribute="bottom" constant="20" symbolic="YES" id="qKB-vi-OAw"/>
<constraint firstItem="25" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" symbolic="YES" id="sxX-fk-xaJ"/>
</constraints>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -44,11 +44,11 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<view translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="0.0" y="0.0" width="293" height="493"/>
<rect key="frame" x="0.0" y="0.0" width="273" height="493"/>
<subviews>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="82">
<rect key="frame" x="76" y="470" width="142" height="19"/>
<segmentedCell key="cell" controlSize="small" borderStyle="border" alignment="left" style="capsule" trackingMode="selectOne" id="238">
<rect key="frame" x="62" y="468" width="150" height="21"/>
<segmentedCell key="cell" controlSize="small" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="238">
<font key="font" metaFont="smallSystem"/>
<segments>
<segment label="General" selected="YES"/>
@@ -58,26 +58,26 @@
</segmentedCell>
</segmentedControl>
<tabView drawsBackground="NO" type="noTabsNoBorder" initialItem="110" translatesAutoresizingMaskIntoConstraints="NO" id="83">
<rect key="frame" x="0.0" y="0.0" width="293" height="467"/>
<rect key="frame" x="0.0" y="0.0" width="273" height="467"/>
<font key="font" metaFont="system"/>
<tabViewItems>
<tabViewItem label="General" identifier="1" id="110">
<view key="view" id="111">
<rect key="frame" x="0.0" y="0.0" width="293" height="467"/>
<rect key="frame" x="0.0" y="0.0" width="273" height="467"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
</tabViewItem>
<tabViewItem label="Attachments" identifier="" id="109">
<view key="view" id="123">
<rect key="frame" x="0.0" y="0.0" width="293" height="467"/>
<rect key="frame" x="0.0" y="0.0" width="273" height="467"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="124">
<rect key="frame" x="241" y="428" width="32" height="23"/>
<rect key="frame" x="214" y="423" width="46" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="176"/>
</constraints>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="177">
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="177">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -94,19 +94,19 @@
</textFieldCell>
</textField>
<scrollView autohidesScrollers="YES" horizontalLineScroll="38" horizontalPageScroll="10" verticalLineScroll="38" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="125" customClass="HNHUIScrollView">
<rect key="frame" x="20" y="26" width="253" height="396"/>
<rect key="frame" x="20" y="26" width="233" height="396"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="F3N-QI-Di5">
<rect key="frame" x="1" y="1" width="251" height="394"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="1" y="1" width="231" height="394"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowHeight="36" rowSizeStyle="automatic" viewBased="YES" id="137">
<rect key="frame" x="0.0" y="0.0" width="251" height="394"/>
<rect key="frame" x="0.0" y="0.0" width="231" height="394"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="alternateSelectedControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="219" minWidth="40" maxWidth="1000" id="140">
<tableColumn width="190" minWidth="40" maxWidth="1000" id="140">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
@@ -119,7 +119,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="NormalCell" id="143">
<rect key="frame" x="11" y="1" width="228" height="36"/>
<rect key="frame" x="11" y="1" width="199" height="36"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="144">
@@ -131,7 +131,7 @@
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="152"/>
</imageView>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="145">
<rect key="frame" x="41" y="10" width="186" height="16"/>
<rect key="frame" x="41" y="10" width="157" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="151">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -152,7 +152,7 @@
</connections>
</tableCellView>
<tableCellView identifier="SelectedCell" id="141" customClass="MPSelectedAttachmentTableCellView">
<rect key="frame" x="11" y="39" width="228" height="36"/>
<rect key="frame" x="11" y="39" width="199" height="36"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="167">
@@ -164,7 +164,7 @@
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="170"/>
</imageView>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="166">
<rect key="frame" x="41" y="10" width="131" height="16"/>
<rect key="frame" x="41" y="10" width="106" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="171">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -172,7 +172,7 @@
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="42g-QS-XtW">
<rect key="frame" x="175" y="4" width="54" height="25"/>
<rect key="frame" x="150" y="4" width="50" height="25"/>
<popUpButtonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" pullsDown="YES" altersStateOfSelectedItem="NO" id="nJc-UT-cas">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -218,7 +218,7 @@
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="KFw-Ma-DSd"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="138">
<rect key="frame" x="1" y="147" width="52" height="16"/>
<rect key="frame" x="1" y="379" width="231" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="139">
@@ -242,7 +242,7 @@
</tabViewItem>
<tabViewItem label="Autotype" identifier="" id="hK7-Dx-yjH">
<view key="view" id="2py-ab-4ZU">
<rect key="frame" x="0.0" y="0.0" width="293" height="467"/>
<rect key="frame" x="0.0" y="0.0" width="273" height="467"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
</tabViewItem>
@@ -284,8 +284,8 @@
</connections>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QSX-Xo-tcH">
<rect key="frame" x="19" y="18" width="253" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Show Plugin Data" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="X9y-K7-lix">
<rect key="frame" x="13" y="13" width="265" height="32"/>
<buttonCell key="cell" type="push" title="Show Plugin Data" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="X9y-K7-lix">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -295,8 +295,8 @@
</connections>
</button>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G9J-nn-2bu" customClass="MPContextButton">
<rect key="frame" x="219" y="98" width="54" height="24"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedRounded" trackingMode="selectOne" id="POU-2t-8fl">
<rect key="frame" x="219" y="97" width="55" height="24"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="separated" trackingMode="selectOne" id="POU-2t-8fl">
<font key="font" metaFont="system"/>
<segments>
<segment image="NSAddTemplate" width="32"/>
@@ -321,7 +321,7 @@
</textField>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="HNHUITextField">
<rect key="frame" x="0.0" y="286" width="251" height="21"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="70">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="70">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -341,7 +341,7 @@
</textField>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="HNHUITextField">
<rect key="frame" x="0.0" y="236" width="251" height="20"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="68">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="68">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -362,9 +362,9 @@
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="249" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="C4J-K4-QBG">
<rect key="frame" x="0.0" y="186" width="251" height="20"/>
<subviews>
<secureTextField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="60" customClass="HNHUISecureTextField">
<rect key="frame" x="0.0" y="0.0" width="135" height="20"/>
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="63" customClass="HNHUISecureTextFieldCell">
<secureTextField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" contentType="oneTimeCode" translatesAutoresizingMaskIntoConstraints="NO" id="60" customClass="HNHUISecureTextField">
<rect key="frame" x="0.0" y="0.0" width="123" height="20"/>
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="63" customClass="HNHUISecureTextFieldCell">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -378,9 +378,9 @@
</connections>
</secureTextField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="61">
<rect key="frame" x="142" y="-2" width="32" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="62">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<rect key="frame" x="124" y="-7" width="50" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="62">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
@@ -388,8 +388,8 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="59">
<rect key="frame" x="180" y="-2" width="72" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Generate" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64">
<rect key="frame" x="168" y="-7" width="90" height="32"/>
<buttonCell key="cell" type="push" title="Generate" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -420,7 +420,7 @@
</textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="56" customClass="HNHUITextField">
<rect key="frame" x="0.0" y="135" width="251" height="21"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="67">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="67">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -533,7 +533,7 @@
<constraint firstItem="dx3-E2-FFt" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="sjr-Xo-zxh"/>
<constraint firstItem="G9J-nn-2bu" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="z4K-PB-Qfb"/>
</constraints>
<point key="canvasLocation" x="-304" y="-1442"/>
<point key="canvasLocation" x="-310" y="-1413"/>
</customView>
<view translatesAutoresizingMaskIntoConstraints="NO" id="zv7-wE-Bmg" customClass="HNHUIScrollDocumentViewAdapter">
<rect key="frame" x="0.0" y="0.0" width="301" height="424"/>
@@ -567,7 +567,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cDK-DM-F5z" customClass="HNHUITextField">
<rect key="frame" x="20" y="329" width="228" height="21"/>
<rect key="frame" x="20" y="329" width="222" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Custom Entry Sequence" drawsBackground="YES" id="R2X-Ex-c6q">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -598,7 +598,7 @@
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="247" minWidth="40" maxWidth="1000" id="Wdn-k1-39b">
<tableColumn width="218" minWidth="40" maxWidth="1000" id="Wdn-k1-39b">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
@@ -611,12 +611,12 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="WindowAssociationCell" id="jI3-t8-8bp">
<rect key="frame" x="1" y="1" width="256" height="17"/>
<rect key="frame" x="11" y="1" width="227" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JgP-7K-Ugw">
<rect key="frame" x="0.0" y="0.0" width="256" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<rect key="frame" x="0.0" y="0.0" width="226" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="dyA-lo-PGa">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -695,7 +695,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NjR-ea-Y7k" customClass="HNHUITextField">
<rect key="frame" x="20" y="10" width="228" height="21"/>
<rect key="frame" x="20" y="10" width="222" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Custom Window Sequence" drawsBackground="YES" id="fW9-9p-wwR">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -703,8 +703,8 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="m1C-m8-BKR">
<rect key="frame" x="255" y="9" width="27" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSActionTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="HIC-T9-j9G">
<rect key="frame" x="243" y="4" width="45" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="HIC-T9-j9G">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -713,8 +713,8 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HDS-Bz-jrr">
<rect key="frame" x="255" y="327" width="27" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSActionTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="V5Z-qf-FVH">
<rect key="frame" x="243" y="322" width="45" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="V5Z-qf-FVH">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -764,22 +764,22 @@
<constraint firstAttribute="trailing" secondItem="45R-v4-ywl" secondAttribute="trailing" constant="20" symbolic="YES" id="uUm-S5-cxM"/>
<constraint firstAttribute="trailing" secondItem="z03-zW-GN3" secondAttribute="trailing" constant="20" symbolic="YES" id="wiq-pY-TG8"/>
</constraints>
<point key="canvasLocation" x="146" y="-1275"/>
<point key="canvasLocation" x="145.5" y="-1275"/>
</view>
<scrollView borderType="line" autohidesScrollers="YES" horizontalLineScroll="56" horizontalPageScroll="10" verticalLineScroll="56" verticalPageScroll="10" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="180" customClass="HNHUIScrollView">
<rect key="frame" x="0.0" y="0.0" width="261" height="268"/>
<rect key="frame" x="0.0" y="0.0" width="290" height="268"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="k8G-zp-BXZ">
<rect key="frame" x="1" y="1" width="259" height="266"/>
<rect key="frame" x="1" y="1" width="288" height="266"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="54" viewBased="YES" id="193">
<rect key="frame" x="0.0" y="0.0" width="259" height="266"/>
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="fullWidth" selectionHighlightStyle="none" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="54" viewBased="YES" id="193">
<rect key="frame" x="0.0" y="0.0" width="288" height="266"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="247" minWidth="40" maxWidth="1000000" id="194">
<tableColumn width="218" minWidth="40" maxWidth="1000000" id="194">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
@@ -791,23 +791,22 @@
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
<prototypeCellViews>
<tableCellView identifier="SelectedCell" id="196" customClass="MPCustomFieldTableCellView">
<rect key="frame" x="1" y="1" width="256" height="53"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<tableCellView identifier="SelectedCell" translatesAutoresizingMaskIntoConstraints="NO" id="196" customClass="MPCustomFieldTableCellView">
<rect key="frame" x="1" y="1" width="227" height="53"/>
<subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="199" customClass="HNHUISecureTextField">
<rect key="frame" x="3" y="10" width="153" height="21"/>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" contentType="oneTimeCode" translatesAutoresizingMaskIntoConstraints="NO" id="199" customClass="HNHUISecureTextField">
<rect key="frame" x="3" y="10" width="114" height="21"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="213"/>
</constraints>
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="214" customClass="HNHUISecureTextFieldCell">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="214" customClass="HNHUISecureTextFieldCell">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="200">
<rect key="frame" x="1" y="39" width="223" height="14"/>
<rect key="frame" x="1" y="39" width="198" height="14"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="210"/>
</constraints>
@@ -818,16 +817,16 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="198">
<rect key="frame" x="197" y="9" width="26" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="216">
<rect key="frame" x="160" y="4" width="44" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSRemoveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="216">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tDI-EL-JGB">
<rect key="frame" x="163" y="9" width="28" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="52_EncryptedTemplate" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="fat-C5-dS2">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<rect key="frame" x="118" y="4" width="44" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSLockLockedTemplate" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" inset="2" id="fat-C5-dS2">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
@@ -839,11 +838,11 @@
<constraint firstItem="199" firstAttribute="leading" secondItem="196" secondAttribute="leading" constant="3" id="204"/>
<constraint firstItem="199" firstAttribute="top" secondItem="200" secondAttribute="bottom" constant="8" symbolic="YES" id="205"/>
<constraint firstAttribute="bottom" secondItem="199" secondAttribute="bottom" constant="10" id="206"/>
<constraint firstAttribute="trailing" secondItem="198" secondAttribute="trailing" constant="34" id="209"/>
<constraint firstAttribute="trailing" secondItem="198" secondAttribute="trailing" constant="30" id="209"/>
<constraint firstItem="tDI-EL-JGB" firstAttribute="leading" secondItem="199" secondAttribute="trailing" constant="8" symbolic="YES" id="Wbg-bF-vD7"/>
<constraint firstItem="tDI-EL-JGB" firstAttribute="top" secondItem="199" secondAttribute="top" id="bpI-VY-E7b"/>
<constraint firstItem="198" firstAttribute="top" secondItem="199" secondAttribute="top" id="lHD-b8-rRG"/>
<constraint firstItem="198" firstAttribute="leading" secondItem="tDI-EL-JGB" secondAttribute="trailing" constant="8" symbolic="YES" id="qSi-Hi-kM3"/>
<constraint firstItem="198" firstAttribute="leading" secondItem="tDI-EL-JGB" secondAttribute="trailing" constant="12" symbolic="YES" id="qSi-Hi-kM3"/>
</constraints>
<connections>
<outlet property="labelTextField" destination="200" id="242"/>
@@ -858,7 +857,9 @@
</tableView>
</subviews>
<nil key="backgroundColor"/>
<edgeInsets key="contentInsets" left="0.0" right="0.0" top="0.0" bottom="0.0"/>
</clipView>
<edgeInsets key="contentInsets" left="0.0" right="0.0" top="0.0" bottom="0.0"/>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="192">
<rect key="frame" x="1" y="130" width="259" height="16"/>
<autoresizingMask key="autoresizingMask"/>
@@ -870,13 +871,13 @@
<connections>
<outlet property="nextKeyView" destination="G9J-nn-2bu" id="CZ9-f2-JDQ"/>
</connections>
<point key="canvasLocation" x="-1015" y="-1275"/>
<point key="canvasLocation" x="-1049" y="-1342"/>
</scrollView>
</objects>
<resources>
<image name="52_EncryptedTemplate" width="16" height="16"/>
<image name="NSActionTemplate" width="15" height="15"/>
<image name="NSAddTemplate" width="14" height="13"/>
<image name="NSLockLockedTemplate" width="14" height="15"/>
<image name="NSQuickLookTemplate" width="21" height="13"/>
<image name="NSRemoveTemplate" width="14" height="4"/>
</resources>

View File

@@ -1,24 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPGeneralPreferencesController">
<connections>
<outlet property="clearPasteboardOnQuitCheckButton" destination="447" id="520"/>
<outlet property="clearPasteboardTimeoutPopup" destination="419" id="521"/>
<outlet property="enableAutosaveCheckButton" destination="lz3-4U-UMI" id="L5y-58-IgH"/>
<outlet property="faviconDownloadMethodPopup" destination="OfU-6f-oTU" id="OfU-6f-oTU-outlet"/>
<outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/>
<outlet property="idleTimeOutPopup" destination="584" id="809"/>
<outlet property="lockOnLogoutCheckButton" destination="5SP-Vi-1sn" id="yaI-LH-R5A"/>
<outlet property="lockOnScreenSleepCheckButton" destination="nRe-7S-HwK" id="0IB-5B-pfw"/>
<outlet property="lockOnSleepCheckButton" destination="630" id="810"/>
<outlet property="preventUniversalClipboardSupportCheckButton" destination="nqZ-rB-mFS" id="sbx-rl-reT"/>
<outlet property="rememberKeyFileCheckButton" destination="bSt-Wf-FNZ" id="aQm-EA-yAN"/>
<outlet property="reopenLastDatabase" destination="530" id="878"/>
<outlet property="view" destination="1" id="82"/>
</connections>
@@ -26,218 +18,38 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="406" height="679"/>
<rect key="frame" x="0.0" y="0.0" width="406" height="300"/>
<subviews>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Security" translatesAutoresizingMaskIntoConstraints="NO" id="465">
<rect key="frame" x="17" y="146" width="372" height="381"/>
<view key="contentView" id="mNh-3L-Z6E">
<rect key="frame" x="3" y="3" width="366" height="363"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="431">
<rect key="frame" x="14" y="335" width="120" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="803"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clear Copied Items" id="432">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="419">
<rect key="frame" x="138" y="332" width="143" height="21"/>
<popUpButtonCell key="cell" type="push" title="Never" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="429" id="420">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="ClipboardClearInterval" id="421">
<items>
<menuItem title="Never" state="on" id="429">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="after 10 Seconds" tag="10" id="422"/>
<menuItem title="after 30 Seconds" tag="30" id="423"/>
<menuItem title="after 1 Minute" tag="60" id="424"/>
<menuItem title="after 5 Minutes" tag="300" id="5gh-b6-cmG"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="447">
<rect key="frame" x="29" y="311" width="164" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="773"/>
</constraints>
<buttonCell key="cell" type="check" title="Clear Clipboard on Quit" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="448">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="584">
<rect key="frame" x="111" y="192" width="125" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="585">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="LockTimes" id="586">
<items>
<menuItem title="Never" id="804"/>
<menuItem title="for 1 Minute" tag="60" id="588"/>
<menuItem title="for 5 Minutes" tag="300" id="589"/>
<menuItem title="for 15 Minutes" tag="900" id="603">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<button translatesAutoresizingMaskIntoConstraints="NO" id="630">
<rect key="frame" x="29" y="173" width="119" height="18"/>
<buttonCell key="cell" type="check" title="Lock after sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="631">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="805">
<rect key="frame" x="14" y="197" width="93" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="806">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="bSt-Wf-FNZ">
<rect key="frame" x="14" y="104" width="220" height="18"/>
<buttonCell key="cell" type="check" title="Remember Keyfile for Databases" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="r6q-He-nYU">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="5cV-xX-SUU">
<rect key="frame" x="18" y="41" width="330" height="56"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="ACh-7H-42N">
<font key="font" metaFont="smallSystem"/>
<string key="title">Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved.</string>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oQr-FC-HkN">
<rect key="frame" x="166" y="5" width="190" height="32"/>
<buttonCell key="cell" type="push" title="Clear all stored locations" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Ri-2s-c39">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="clearRememberdKeyFiles:" target="-1" id="Vlr-aK-ikW"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="5SP-Vi-1sn">
<rect key="frame" x="29" y="151" width="129" height="18"/>
<buttonCell key="cell" type="check" title="Lock after log out" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Dzn-9R-JjE">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nqZ-rB-mFS">
<rect key="frame" x="14" y="286" width="242" height="18"/>
<buttonCell key="cell" type="check" title="Prevent Universal Clipboard support" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fNy-mS-phi">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hy4-RL-dAa">
<rect key="frame" x="18" y="224" width="330" height="56"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="JGX-Tp-KJk">
<font key="font" metaFont="smallSystem"/>
<string key="title">Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually.</string>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nRe-7S-HwK">
<rect key="frame" x="29" y="129" width="164" height="18"/>
<buttonCell key="cell" type="check" title="Lock after screen sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="l3t-og-mJd">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="5cV-xX-SUU" firstAttribute="leading" secondItem="mNh-3L-Z6E" secondAttribute="leading" constant="20" symbolic="YES" id="1jw-nb-bAB"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="630" secondAttribute="trailing" constant="20" symbolic="YES" id="7cd-1e-eRD"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="nqZ-rB-mFS" secondAttribute="trailing" constant="20" symbolic="YES" id="CL9-fA-GTJ"/>
<constraint firstItem="bSt-Wf-FNZ" firstAttribute="top" secondItem="nRe-7S-HwK" secondAttribute="bottom" constant="11" id="MkJ-O0-qYd"/>
<constraint firstItem="nRe-7S-HwK" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Mrg-k2-soG"/>
<constraint firstItem="584" firstAttribute="top" secondItem="hy4-RL-dAa" secondAttribute="bottom" constant="8" symbolic="YES" id="SV7-PD-nId"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bSt-Wf-FNZ" secondAttribute="trailing" constant="20" symbolic="YES" id="VQY-eq-fCM"/>
<constraint firstItem="nRe-7S-HwK" firstAttribute="top" secondItem="5SP-Vi-1sn" secondAttribute="bottom" constant="8" id="YZv-Dp-CrZ"/>
<constraint firstItem="5SP-Vi-1sn" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Ylr-aA-jaD"/>
<constraint firstItem="hy4-RL-dAa" firstAttribute="top" secondItem="nqZ-rB-mFS" secondAttribute="bottom" constant="8" symbolic="YES" id="a3i-tc-gUU"/>
<constraint firstItem="5SP-Vi-1sn" firstAttribute="top" secondItem="630" secondAttribute="bottom" constant="8" id="acg-vp-LeB"/>
<constraint firstItem="584" firstAttribute="leading" secondItem="805" secondAttribute="trailing" constant="8" symbolic="YES" id="aoz-sS-O0n"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="447" secondAttribute="trailing" constant="20" symbolic="YES" id="i8H-ad-IKb"/>
<constraint firstItem="419" firstAttribute="leading" secondItem="431" secondAttribute="trailing" constant="8" symbolic="YES" id="pN3-pB-Z5I"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="nRe-7S-HwK" secondAttribute="trailing" constant="20" symbolic="YES" id="pgB-km-W16"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5SP-Vi-1sn" secondAttribute="trailing" constant="20" symbolic="YES" id="q0v-Wo-mHx"/>
<constraint firstItem="nqZ-rB-mFS" firstAttribute="top" secondItem="447" secondAttribute="bottom" constant="11" id="qLm-ih-A04"/>
<constraint firstAttribute="trailing" secondItem="5cV-xX-SUU" secondAttribute="trailing" constant="20" symbolic="YES" id="qY0-io-RZ0"/>
<constraint firstAttribute="trailing" secondItem="hy4-RL-dAa" secondAttribute="trailing" constant="20" symbolic="YES" id="r5c-KT-eh0"/>
<constraint firstItem="hy4-RL-dAa" firstAttribute="leading" secondItem="mNh-3L-Z6E" secondAttribute="leading" constant="20" symbolic="YES" id="s4M-8w-cOl"/>
<constraint firstItem="nqZ-rB-mFS" firstAttribute="leading" secondItem="431" secondAttribute="leading" id="ufQ-bW-0gn"/>
</constraints>
</view>
<constraints>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="419" secondAttribute="trailing" constant="16" id="1de-jU-TAq"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="584" secondAttribute="trailing" constant="16" id="GAz-Mn-Z2y"/>
<constraint firstAttribute="bottom" secondItem="oQr-FC-HkN" secondAttribute="bottom" constant="11" id="M71-WV-WFc"/>
<constraint firstItem="5cV-xX-SUU" firstAttribute="top" secondItem="bSt-Wf-FNZ" secondAttribute="bottom" constant="9" id="NYW-dJ-CHg"/>
<constraint firstItem="805" firstAttribute="centerY" secondItem="584" secondAttribute="centerY" id="OOq-TD-dmj"/>
<constraint firstItem="431" firstAttribute="leading" secondItem="465" secondAttribute="leading" constant="16" id="ReO-OI-Maf"/>
<constraint firstItem="431" firstAttribute="top" secondItem="465" secondAttribute="top" constant="26" id="WxW-xY-3SP"/>
<constraint firstItem="630" firstAttribute="top" secondItem="805" secondAttribute="bottom" constant="8" id="X2A-sm-F0H"/>
<constraint firstAttribute="trailing" secondItem="oQr-FC-HkN" secondAttribute="trailing" constant="16" id="X6r-Gh-Egi"/>
<constraint firstItem="419" firstAttribute="bottom" secondItem="431" secondAttribute="bottom" id="a3n-fr-qcx"/>
<constraint firstItem="419" firstAttribute="top" secondItem="431" secondAttribute="top" id="cP7-6K-axf"/>
<constraint firstItem="bSt-Wf-FNZ" firstAttribute="leading" secondItem="805" secondAttribute="leading" id="e3K-Go-QUp"/>
<constraint firstItem="805" firstAttribute="leading" secondItem="465" secondAttribute="leading" constant="16" id="g88-lI-fu4"/>
<constraint firstItem="447" firstAttribute="leading" secondItem="465" secondAttribute="leading" constant="31" id="gpR-Rg-VAw"/>
<constraint firstItem="oQr-FC-HkN" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="465" secondAttribute="leading" constant="16" id="kZ7-HL-y2Q"/>
<constraint firstItem="oQr-FC-HkN" firstAttribute="top" secondItem="5cV-xX-SUU" secondAttribute="bottom" constant="8" id="qsT-Cs-vVj"/>
<constraint firstItem="447" firstAttribute="top" secondItem="419" secondAttribute="bottom" constant="8" symbolic="YES" id="u35-aE-Ui9"/>
<constraint firstItem="630" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="ybt-cQ-JwG"/>
<constraint firstItem="447" firstAttribute="top" secondItem="431" secondAttribute="bottom" constant="8" symbolic="YES" id="zkd-Hf-09b"/>
</constraints>
</box>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888">
<rect key="frame" x="17" y="531" width="372" height="128"/>
<rect key="frame" x="17" y="146" width="372" height="134"/>
<view key="contentView" id="cpg-tt-SHE">
<rect key="frame" x="3" y="3" width="366" height="110"/>
<rect key="frame" x="4" y="5" width="364" height="114"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="252" translatesAutoresizingMaskIntoConstraints="NO" id="530">
<rect key="frame" x="14" y="84" width="234" height="18"/>
<rect key="frame" x="13" y="87" width="238" height="18"/>
<buttonCell key="cell" type="check" title="Reopen last Database after Launch" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="531">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lz3-4U-UMI">
<rect key="frame" x="14" y="64" width="123" height="18"/>
<rect key="frame" x="14" y="65" width="126" height="18"/>
<buttonCell key="cell" type="check" title="Enable Autosave" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="wG7-bi-2fi">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="3Bo-Ml-1KB">
<rect key="frame" x="18" y="44" width="330" height="14"/>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="3Bo-Ml-1KB">
<rect key="frame" x="18" y="44" width="328" height="14"/>
<textFieldCell key="cell" controlSize="small" title="Close and open all documents for changes to take effect" id="ya5-ps-c4W">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h3w-Ms-ohK">
<rect key="frame" x="14" y="20" width="93" height="16"/>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h3w-Ms-ohK">
<rect key="frame" x="13" y="20" width="93" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="If file changes:" id="QrK-hM-Xt1">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -245,7 +57,7 @@
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2">
<rect key="frame" x="111" y="13" width="38" height="25"/>
<rect key="frame" x="109" y="13" width="39" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1R2-5t-LWk">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -277,11 +89,11 @@
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Network" translatesAutoresizingMaskIntoConstraints="NO" id="wD1-ag-7V5">
<rect key="frame" x="17" y="16" width="372" height="126"/>
<view key="contentView" id="bQD-ZX-d0i">
<rect key="frame" x="3" y="3" width="366" height="108"/>
<rect key="frame" x="4" y="5" width="364" height="106"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fl5-Xu-nZP">
<rect key="frame" x="14" y="81" width="113" height="16"/>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fl5-Xu-nZP">
<rect key="frame" x="14" y="79" width="113" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="kK7-bB-zKY"/>
</constraints>
@@ -291,8 +103,8 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField autoresizesSubviews="NO" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="MWj-9m-uGk">
<rect key="frame" x="18" y="13" width="330" height="56"/>
<textField autoresizesSubviews="NO" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="MWj-9m-uGk">
<rect key="frame" x="18" y="11" width="329" height="56"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="DaG-1a-SET">
<font key="font" metaFont="message" size="11"/>
<string key="title">By default web site icon is downloaded directly from entry's host URL. For some websites it doesn't work and you might prefer using 3rdparty APIs. In this case only host from the URL will be used to get the icon from selected service.</string>
@@ -301,7 +113,7 @@
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="OfU-6f-oTU">
<rect key="frame" x="131" y="76" width="38" height="25"/>
<rect key="frame" x="130" y="73" width="39" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="mdi-Go-1bJ">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -311,34 +123,31 @@
</subviews>
<constraints>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="OfU-6f-oTU" secondAttribute="trailing" constant="16" id="0Wl-LS-ePD"/>
<constraint firstItem="MWj-9m-uGk" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="20" id="1AE-Eu-ceQ"/>
<constraint firstItem="OfU-6f-oTU" firstAttribute="centerY" secondItem="fl5-Xu-nZP" secondAttribute="centerY" id="R81-Ij-pdy"/>
<constraint firstItem="OfU-6f-oTU" firstAttribute="leading" secondItem="fl5-Xu-nZP" secondAttribute="trailing" constant="8" id="XS0-fl-B2Z"/>
<constraint firstItem="fl5-Xu-nZP" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="16" id="hzo-40-wxR"/>
</constraints>
</view>
<constraints>
<constraint firstItem="MWj-9m-uGk" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="20" id="1AE-Eu-ceQ"/>
<constraint firstItem="fl5-Xu-nZP" firstAttribute="top" secondItem="wD1-ag-7V5" secondAttribute="top" constant="26" id="OK9-PR-DfC"/>
<constraint firstItem="MWj-9m-uGk" firstAttribute="top" secondItem="fl5-Xu-nZP" secondAttribute="bottom" constant="12" id="Udz-22-4O1"/>
<constraint firstAttribute="trailing" secondItem="MWj-9m-uGk" secondAttribute="trailing" constant="20" id="hA0-ra-UeU"/>
<constraint firstItem="fl5-Xu-nZP" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="16" id="hzo-40-wxR"/>
<constraint firstAttribute="bottom" secondItem="MWj-9m-uGk" secondAttribute="bottom" constant="12" id="k80-DD-Y5l"/>
</constraints>
</box>
</subviews>
<constraints>
<constraint firstItem="465" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="475"/>
<constraint firstAttribute="trailing" secondItem="465" secondAttribute="trailing" constant="20" symbolic="YES" id="525"/>
<constraint firstItem="888" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="891"/>
<constraint firstAttribute="trailing" secondItem="888" secondAttribute="trailing" constant="20" symbolic="YES" id="893"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="918"/>
<constraint firstItem="wD1-ag-7V5" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="3kp-Uf-fyC"/>
<constraint firstItem="wD1-ag-7V5" firstAttribute="bottom" secondItem="1" secondAttribute="bottom" constant="-20" id="EeW-K0-jec"/>
<constraint firstItem="wD1-ag-7V5" firstAttribute="top" secondItem="465" secondAttribute="bottom" constant="8" symbolic="YES" id="FsW-LX-Drs"/>
<constraint firstItem="888" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="ZMP-Lv-rQh"/>
<constraint firstAttribute="trailing" secondItem="wD1-ag-7V5" secondAttribute="trailing" constant="20" id="ccK-FL-7Wx"/>
<constraint firstItem="465" firstAttribute="top" secondItem="888" secondAttribute="bottom" constant="8" symbolic="YES" id="wyH-HB-i2U"/>
<constraint firstItem="wD1-ag-7V5" firstAttribute="top" secondItem="888" secondAttribute="bottom" constant="8" symbolic="YES" id="kgx-BG-wVT"/>
</constraints>
<point key="canvasLocation" x="-535" y="-327.5"/>
<point key="canvasLocation" x="-508" y="-372"/>
</customView>
</objects>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -14,6 +14,7 @@
<outlet property="expireDateSelectButton" destination="4" id="W6H-j5-GLf"/>
<outlet property="expiresCheckButton" destination="5" id="283"/>
<outlet property="searchPopupButton" destination="229" id="284"/>
<outlet property="tagsTokenField" destination="5ty-ww-t4q" id="MD7-yb-kgI"/>
<outlet property="titleTextField" destination="23" id="35"/>
<outlet property="view" destination="37" id="45"/>
</connections>
@@ -21,25 +22,28 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="37" customClass="HNHUIScrollView">
<rect key="frame" x="0.0" y="0.0" width="257" height="291"/>
<rect key="frame" x="0.0" y="0.0" width="291" height="462"/>
<clipView key="contentView" id="HjA-kA-fcX">
<rect key="frame" x="0.0" y="0.0" width="257" height="291"/>
<rect key="frame" x="0.0" y="0.0" width="291" height="462"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view translatesAutoresizingMaskIntoConstraints="NO" id="38" customClass="HNHUIScrollDocumentViewAdapter">
<rect key="frame" x="0.0" y="0.0" width="257" height="291"/>
<rect key="frame" x="0.0" y="65" width="291" height="397"/>
<subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="24">
<rect key="frame" x="18" y="272" width="35" height="14"/>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GyB-8Z-S3Q">
<rect key="frame" x="20" y="20" width="251" height="357"/>
<subviews>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="24">
<rect key="frame" x="-2" y="343" width="255" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Name" id="25">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="23" customClass="HNHUITextField">
<rect key="frame" x="20" y="242" width="217" height="22"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="26">
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="23" customClass="HNHUITextField">
<rect key="frame" x="0.0" y="314" width="251" height="21"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="26">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -48,11 +52,11 @@
<outlet property="nextKeyView" destination="5" id="KV0-QE-2i4"/>
</connections>
</textField>
<button horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="18" y="214" width="67" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="pWR-o1-KI6"/>
</constraints>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aAt-VU-kLy">
<rect key="frame" x="0.0" y="286" width="251" height="20"/>
<subviews>
<button horizontalHuggingPriority="249" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="-2" y="3" width="213" height="18"/>
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="32">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@@ -63,7 +67,7 @@
</connections>
</button>
<button focusRingType="exterior" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4">
<rect key="frame" x="205" y="210" width="32" height="25"/>
<rect key="frame" x="218" y="-2" width="34" height="23"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="l5I-EF-dHs"/>
</constraints>
@@ -76,8 +80,26 @@
<outlet property="nextKeyView" destination="229" id="12E-SZ-Mtu"/>
</connections>
</button>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="229">
<rect key="frame" x="18" y="158" width="222" height="26"/>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="264">
<rect key="frame" x="-2" y="264" width="255" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search" id="265">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="229">
<rect key="frame" x="-3" y="232" width="258" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="230">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -87,8 +109,16 @@
<outlet property="nextKeyView" destination="240" id="XsX-U5-uZd"/>
</connections>
</popUpButton>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="240">
<rect key="frame" x="18" y="103" width="222" height="26"/>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="276">
<rect key="frame" x="-2" y="214" width="255" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype" id="277">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="240">
<rect key="frame" x="-3" y="182" width="258" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="242">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -98,24 +128,16 @@
<outlet property="nextKeyView" destination="Fnw-qz-IZU" id="Q0q-HY-T34"/>
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="264">
<rect key="frame" x="18" y="190" width="41" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search" id="265">
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6Lw-XW-x20">
<rect key="frame" x="-2" y="164" width="255" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype Sequence" id="6FG-UZ-Adh">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="276">
<rect key="frame" x="18" y="135" width="52" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype" id="277">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fnw-qz-IZU" customClass="HNHUITextField">
<rect key="frame" x="20" y="50" width="217" height="22"/>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fnw-qz-IZU" customClass="HNHUITextField">
<rect key="frame" x="0.0" y="135" width="251" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="VeF-V7-i2I">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -125,17 +147,28 @@
<outlet property="nextKeyView" destination="1Uh-eo-H0j" id="zer-UH-73e"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6Lw-XW-x20">
<rect key="frame" x="18" y="80" width="107" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype Sequence" id="6FG-UZ-Adh">
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mpC-tZ-ivx">
<rect key="frame" x="-2" y="113" width="255" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tags" id="Rbf-K0-kWx">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Uh-eo-H0j">
<rect key="frame" x="20" y="18" width="217" height="25"/>
<buttonCell key="cell" type="roundTextured" title="Show Plugin Data" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="qGr-oT-WjP">
<tokenField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5ty-ww-t4q">
<rect key="frame" x="0.0" y="28" width="251" height="77"/>
<constraints>
<constraint firstAttribute="height" constant="77" id="W4K-vz-0pf"/>
</constraints>
<tokenFieldCell key="cell" selectable="YES" editable="YES" borderStyle="bezel" alignment="left" drawsBackground="YES" allowsEditingTextAttributes="YES" id="FfM-xQ-evx">
<font key="font" metaFont="cellTitle"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</tokenFieldCell>
</tokenField>
<button horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Uh-eo-H0j">
<rect key="frame" x="-7" y="-7" width="265" height="32"/>
<buttonCell key="cell" type="push" title="Show Plugin Data" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="qGr-oT-WjP">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -145,58 +178,62 @@
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="Fnw-qz-IZU" secondAttribute="trailing" constant="20" symbolic="YES" id="3Gx-EC-k0Q"/>
<constraint firstItem="240" firstAttribute="top" secondItem="276" secondAttribute="bottom" constant="8" id="6Pu-PB-xxy"/>
<constraint firstItem="23" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="ABR-Ef-1ss"/>
<constraint firstAttribute="trailing" secondItem="229" secondAttribute="trailing" constant="20" symbolic="YES" id="Anv-gp-aTi"/>
<constraint firstAttribute="trailing" secondItem="4" secondAttribute="trailing" constant="20" id="D99-L7-ojR"/>
<constraint firstItem="240" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="E0a-1e-KR9"/>
<constraint firstItem="5" firstAttribute="centerY" secondItem="4" secondAttribute="centerY" id="FdF-Pn-yY2"/>
<constraint firstItem="5" firstAttribute="top" secondItem="23" secondAttribute="bottom" constant="12" id="GFF-xs-Nuj"/>
<constraint firstItem="Fnw-qz-IZU" firstAttribute="top" secondItem="6Lw-XW-x20" secondAttribute="bottom" constant="8" id="Gfr-Tc-ldH"/>
<constraint firstItem="4" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="5" secondAttribute="trailing" constant="8" symbolic="YES" id="HDo-Yu-P02"/>
<constraint firstItem="1Uh-eo-H0j" firstAttribute="top" secondItem="Fnw-qz-IZU" secondAttribute="bottom" constant="8" symbolic="YES" id="ON2-U6-flt"/>
<constraint firstItem="24" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="OhC-BP-oPg"/>
<constraint firstItem="6Lw-XW-x20" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="SVn-Hh-xc6"/>
<constraint firstAttribute="trailing" secondItem="240" secondAttribute="trailing" constant="20" symbolic="YES" id="V4d-R9-46P"/>
<constraint firstAttribute="trailing" secondItem="23" secondAttribute="trailing" constant="20" id="Vej-zI-z2w"/>
<constraint firstItem="24" firstAttribute="top" secondItem="38" secondAttribute="top" constant="5" id="Wk6-kJ-fTY"/>
<constraint firstItem="5" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="ZaF-lS-pN8"/>
<constraint firstAttribute="trailing" secondItem="1Uh-eo-H0j" secondAttribute="trailing" constant="20" symbolic="YES" id="ZzC-4Z-u4x"/>
<constraint firstItem="276" firstAttribute="top" secondItem="229" secondAttribute="bottom" constant="12" id="c0H-cE-rnF"/>
<constraint firstItem="6Lw-XW-x20" firstAttribute="top" secondItem="240" secondAttribute="bottom" constant="12" id="hDT-8L-2eV"/>
<constraint firstItem="23" firstAttribute="top" secondItem="24" secondAttribute="bottom" constant="8" id="kbc-Eb-FPr"/>
<constraint firstItem="Fnw-qz-IZU" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="lGO-Wz-eF9"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="1Uh-eo-H0j" secondAttribute="bottom" constant="20" symbolic="YES" id="owP-KD-Io0"/>
<constraint firstItem="229" firstAttribute="top" secondItem="264" secondAttribute="bottom" constant="8" id="pDa-nw-ByQ"/>
<constraint firstItem="264" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="qnB-Pd-MqU"/>
<constraint firstItem="1Uh-eo-H0j" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" symbolic="YES" id="rJf-uc-7me"/>
<constraint firstItem="229" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="sCg-Na-ouj"/>
<constraint firstItem="276" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="xLc-Rz-374"/>
<constraint firstItem="264" firstAttribute="top" secondItem="5" secondAttribute="bottom" constant="12" id="xe7-ue-Wip"/>
<constraint firstItem="GyB-8Z-S3Q" firstAttribute="top" secondItem="38" secondAttribute="top" constant="20" id="BWS-cT-xmR"/>
<constraint firstAttribute="bottom" secondItem="GyB-8Z-S3Q" secondAttribute="bottom" constant="20" id="WaU-34-yaM"/>
<constraint firstAttribute="trailing" secondItem="GyB-8Z-S3Q" secondAttribute="trailing" constant="20" id="q0p-sG-MEY"/>
<constraint firstItem="GyB-8Z-S3Q" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" symbolic="YES" id="zeA-bC-Akz"/>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstItem="38" firstAttribute="top" secondItem="HjA-kA-fcX" secondAttribute="top" id="Alo-CY-dgK"/>
<constraint firstAttribute="bottom" secondItem="38" secondAttribute="bottom" id="FbE-Hu-Y9V"/>
<constraint firstAttribute="trailing" secondItem="38" secondAttribute="trailing" id="HP8-rS-ooi"/>
<constraint firstItem="38" firstAttribute="leading" secondItem="HjA-kA-fcX" secondAttribute="leading" id="h7m-U5-sA4"/>
</constraints>
</clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="39">
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="39">
<rect key="frame" x="-100" y="-100" width="257" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="40">
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="40">
<rect key="frame" x="-100" y="-100" width="15" height="201"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<point key="canvasLocation" x="-2" y="132"/>
<point key="canvasLocation" x="-805.5" y="-499"/>
</scrollView>
</objects>
<resources>
<image name="NSActionTemplate" width="14" height="14"/>
<image name="NSActionTemplate" width="15" height="15"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -20,13 +20,13 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<scrollView wantsLayer="YES" focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="57" customClass="HNHUIScrollView">
<rect key="frame" x="10" y="50" width="445" height="330"/>
<rect key="frame" x="10" y="60" width="445" height="320"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Gwf-zs-lPT">
<rect key="frame" x="0.0" y="0.0" width="445" height="330"/>
<rect key="frame" x="0.0" y="0.0" width="445" height="320"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView focusRingType="none" selectable="YES" id="58" customClass="MPCollectionView">
<rect key="frame" x="0.0" y="0.0" width="445" height="330"/>
<rect key="frame" x="0.0" y="0.0" width="445" height="320"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="primaryBackgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
<connections>
@@ -40,13 +40,13 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="60">
<rect key="frame" x="364" y="0.0" width="16" height="268"/>
<rect key="frame" x="429" y="0.0" width="16" height="320"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="101">
<rect key="frame" x="330" y="19" width="115" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Use Default Icon" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="102">
<rect key="frame" x="317" y="13" width="135" height="32"/>
<buttonCell key="cell" type="push" title="Use Default Icon" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="102">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -55,8 +55,8 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8kv-BJ-IEk">
<rect key="frame" x="214" y="19" width="108" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Download Icon" bezelStyle="texturedRounded" imagePosition="left" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iaf-XW-XUo">
<rect key="frame" x="195" y="13" width="124" height="32"/>
<buttonCell key="cell" type="push" title="Download Icon" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iaf-XW-XUo">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -65,8 +65,8 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="His-4A-hcY">
<rect key="frame" x="150" y="19" width="56" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1kM-cI-P1o">
<rect key="frame" x="121" y="13" width="76" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1kM-cI-P1o">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -82,11 +82,11 @@
<constraint firstItem="57" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="10" id="111"/>
<constraint firstItem="His-4A-hcY" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="69a-Sb-jSj"/>
<constraint firstItem="8kv-BJ-IEk" firstAttribute="baseline" secondItem="101" secondAttribute="baseline" id="Knp-g8-7FQ"/>
<constraint firstItem="8kv-BJ-IEk" firstAttribute="leading" secondItem="His-4A-hcY" secondAttribute="trailing" constant="8" symbolic="YES" id="MZ0-p6-6MH"/>
<constraint firstItem="8kv-BJ-IEk" firstAttribute="leading" secondItem="His-4A-hcY" secondAttribute="trailing" constant="12" symbolic="YES" id="MZ0-p6-6MH"/>
<constraint firstItem="57" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="N2b-Nx-SZC"/>
<constraint firstItem="101" firstAttribute="top" secondItem="57" secondAttribute="bottom" constant="8" symbolic="YES" id="WT3-Nh-FrW"/>
<constraint firstItem="101" firstAttribute="top" secondItem="57" secondAttribute="bottom" constant="20" symbolic="YES" id="WT3-Nh-FrW"/>
<constraint firstItem="His-4A-hcY" firstAttribute="baseline" secondItem="101" secondAttribute="baseline" id="fq3-rS-gvQ"/>
<constraint firstItem="101" firstAttribute="leading" secondItem="8kv-BJ-IEk" secondAttribute="trailing" constant="8" symbolic="YES" id="nvi-CZ-a6L"/>
<constraint firstItem="101" firstAttribute="leading" secondItem="8kv-BJ-IEk" secondAttribute="trailing" constant="12" symbolic="YES" id="nvi-CZ-a6L"/>
</constraints>
<point key="canvasLocation" x="-1175" y="-7"/>
</customView>
@@ -101,7 +101,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="MEC-x9-zrX">
<rect key="frame" x="32" y="32" width="16" height="16"/>
<rect key="frame" x="32" y="29" width="16" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="16" id="cau-QV-8TQ"/>
<constraint firstAttribute="height" constant="16" id="yHZ-qj-Rcy"/>
@@ -126,7 +126,7 @@
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="114">
<rect key="frame" x="8" y="8" width="32" height="32"/>
<rect key="frame" x="8" y="6.5" width="32.5" height="36"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="161"/>
<constraint firstAttribute="height" constant="32" id="162"/>
@@ -158,10 +158,11 @@
<constraint firstAttribute="trailing" secondItem="MEC-x9-zrX" secondAttribute="trailing" id="l85-hK-J0S"/>
<constraint firstItem="MEC-x9-zrX" firstAttribute="top" secondItem="113" secondAttribute="top" id="uEr-Jk-Jfa"/>
</constraints>
<point key="canvasLocation" x="-1499" y="-64"/>
</customView>
</objects>
<resources>
<image name="NSAddTemplate" width="11" height="11"/>
<image name="NSRefreshFreestandingTemplate" width="14" height="14"/>
<image name="NSAddTemplate" width="14" height="13"/>
<image name="NSRefreshFreestandingTemplate" width="15" height="15"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17506" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17506"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -23,7 +23,7 @@
<rect key="frame" x="0.0" y="0.0" width="278" height="662"/>
<subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="2998" customClass="MPIconImageView">
<rect key="frame" x="20" y="620" width="32" height="32"/>
<rect key="frame" x="20" y="617" width="32" height="38"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="3027"/>
<constraint firstAttribute="height" constant="32" id="3028"/>
@@ -83,7 +83,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2985">
<rect key="frame" x="82" y="194" width="115" height="23"/>
<rect key="frame" x="82" y="194" width="116" height="24"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="No Selection" id="2986">
<font key="font" metaFont="system" size="20"/>
<color key="textColor" name="controlShadowColor" catalog="System" colorSpace="catalog"/>
@@ -126,7 +126,7 @@
<rect key="frame" x="1" y="1" width="236" height="192"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsNonContiguousLayout="YES" smartInsertDelete="YES" id="g24-gQ-foD" customClass="HNHUITextView">
<textView importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsUndo="YES" allowsNonContiguousLayout="YES" smartInsertDelete="YES" id="g24-gQ-foD" customClass="HNHUITextView">
<rect key="frame" x="0.0" y="0.0" width="236" height="192"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -204,6 +204,6 @@
</customView>
</objects>
<resources>
<image name="NSActionTemplate" width="14" height="14"/>
<image name="NSActionTemplate" width="15" height="15"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -27,22 +27,22 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="417" height="664"/>
<rect key="frame" x="0.0" y="0.0" width="417" height="666"/>
<subviews>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Autotype" translatesAutoresizingMaskIntoConstraints="NO" id="P9N-HM-wER">
<rect key="frame" x="17" y="246" width="383" height="398"/>
<rect key="frame" x="17" y="248" width="383" height="398"/>
<view key="contentView" id="faU-Ok-HJ3">
<rect key="frame" x="3" y="3" width="377" height="380"/>
<rect key="frame" x="4" y="5" width="375" height="378"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="j52-9L-k7c">
<rect key="frame" x="16" y="17" width="345" height="353"/>
<rect key="frame" x="15" y="15" width="345" height="353"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hMJ-Mo-xOM">
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hMJ-Mo-xOM">
<rect key="frame" x="-2" y="311" width="349" height="42"/>
<textFieldCell key="cell" controlSize="small" id="H37-ku-aTc">
<font key="font" metaFont="smallSystem"/>
<string key="title">Autotype might not work properly. Some issues where found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues.</string>
<string key="title">Autotype might not work properly. Some issues were found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues.</string>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
@@ -67,7 +67,7 @@
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" translatesAutoresizingMaskIntoConstraints="NO" id="d6A-Vb-CMt">
<rect key="frame" x="0.0" y="230" width="281" height="21"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V">
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V">
<rect key="frame" x="-2" y="3" width="57" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut" id="6oN-CH-T0O">
<font key="font" metaFont="system"/>
@@ -75,7 +75,7 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8" customClass="DDHotKeyTextField">
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8" customClass="DDHotKeyTextField">
<rect key="frame" x="61" y="0.0" width="89" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="89" id="Mia-b8-HCZ"/>
@@ -86,7 +86,7 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5q-EW-RHf">
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5q-EW-RHf">
<rect key="frame" x="156" y="4" width="127" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut is missing Key" id="Lxp-wI-yQy">
<font key="font" metaFont="smallSystem"/>
@@ -113,7 +113,7 @@
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="cUt-aB-oib">
<textField focusRingType="none" horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="cUt-aB-oib">
<rect key="frame" x="-2" y="156" width="349" height="42"/>
<textFieldCell key="cell" controlSize="small" selectable="YES" id="VjU-Hz-cu4">
<font key="font" metaFont="smallSystem"/>
@@ -157,7 +157,7 @@
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="wbP-A9-jpw">
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="wbP-A9-jpw">
<rect key="frame" x="-2" y="0.0" width="349" height="28"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="If enabled, every {CONTROL} command will be sent as ⌘. Only disable this if you are sure you need to." id="QRy-CY-ENC">
<font key="font" metaFont="smallSystem"/>
@@ -205,20 +205,20 @@
</constraints>
</box>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Preview" translatesAutoresizingMaskIntoConstraints="NO" id="VVs-b5-cX9">
<rect key="frame" x="17" y="145" width="383" height="97"/>
<rect key="frame" x="17" y="147" width="383" height="97"/>
<view key="contentView" id="ww4-uR-8gP">
<rect key="frame" x="3" y="3" width="377" height="79"/>
<rect key="frame" x="4" y="5" width="375" height="77"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="LNw-5t-TS4">
<rect key="frame" x="14" y="52" width="182" height="18"/>
<rect key="frame" x="13" y="50" width="182" height="18"/>
<buttonCell key="cell" type="check" title="Enable Quicklook Preview" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ERs-ct-Eyx">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="V6l-R9-hIj">
<rect key="frame" x="14" y="17" width="349" height="28"/>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="V6l-R9-hIj">
<rect key="frame" x="13" y="15" width="349" height="28"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="If enabled attached files will be copied to a temporary location for preview and deleted after the preview is closed." id="WmI-IB-Aso">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -240,9 +240,9 @@
</constraints>
</box>
<box title="Keychain" translatesAutoresizingMaskIntoConstraints="NO" id="ChZ-ku-FOP">
<rect key="frame" x="17" y="16" width="383" height="125"/>
<rect key="frame" x="18" y="16" width="381" height="127"/>
<view key="contentView" id="ocY-lR-P2Z">
<rect key="frame" x="3" y="3" width="377" height="107"/>
<rect key="frame" x="4" y="5" width="373" height="107"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="u5z-ST-gTK">
@@ -252,11 +252,11 @@
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="RenewTouchIdKey:" target="-2" id="dl7-WD-Abu"/>
<action selector="renewTouchIdKey:" target="-2" id="dl7-WD-Abu"/>
</connections>
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="9kv-ns-mQx">
<rect key="frame" x="14" y="16" width="349" height="42"/>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="9kv-ns-mQx">
<rect key="frame" x="14" y="16" width="345" height="42"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="LyC-Hd-ecK">
<font key="font" metaFont="smallSystem"/>
<string key="title">MacPass will no longer be able to unlock any Database with TouchID until it is successfully unlocked with the password and or keyfile.</string>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment version="101304" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -22,21 +22,23 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="354" height="301"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="324" height="362"/>
<subviews>
<gridView xPlacement="leading" yPlacement="center" rowAlignment="firstBaseline" rowSpacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="4gl-4p-0WY">
<rect key="frame" x="20" y="28" width="314" height="253"/>
<gridView horizontalHuggingPriority="251" xPlacement="leading" yPlacement="center" rowAlignment="firstBaseline" rowSpacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="4gl-4p-0WY">
<rect key="frame" x="20" y="60" width="284" height="282"/>
<constraints>
<constraint firstItem="GJN-85-eYH" firstAttribute="trailing" secondItem="Bt8-9X-91R" secondAttribute="trailing" id="9fv-9s-YwU"/>
<constraint firstItem="AdN-zI-C65" firstAttribute="top" secondItem="caF-Au-ey8" secondAttribute="bottom" constant="8" symbolic="YES" id="GFv-3D-Ejx"/>
<constraint firstItem="GJN-85-eYH" firstAttribute="top" secondItem="ku7-YD-kkV" secondAttribute="bottom" constant="8" symbolic="YES" id="kxe-2P-DnD"/>
<constraint firstItem="aa3-XV-Chc" firstAttribute="top" secondItem="AdN-zI-C65" secondAttribute="bottom" constant="8" id="lWy-AW-0tB"/>
<constraint firstItem="AdN-zI-C65" firstAttribute="trailing" secondItem="Bt8-9X-91R" secondAttribute="trailing" id="xXQ-D9-G21"/>
</constraints>
<rows>
<gridRow yPlacement="center" topPadding="4" bottomPadding="4" id="T2o-We-WjN"/>
<gridRow topPadding="4" bottomPadding="4" id="T2o-We-WjN"/>
<gridRow yPlacement="fill" id="leK-j9-Cah"/>
<gridRow yPlacement="none" id="J7I-Uw-OQv"/>
<gridRow yPlacement="none" id="GmF-7D-t30"/>
<gridRow id="J7I-Uw-OQv"/>
<gridRow id="GmF-7D-t30"/>
<gridRow id="hS6-e9-JPg"/>
<gridRow id="QY3-TF-Rbs"/>
<gridRow id="0Jy-aF-Wst"/>
@@ -48,8 +50,8 @@
</columns>
<gridCells>
<gridCell row="T2o-We-WjN" column="Ar1-qh-iHT" rowAlignment="lastBaseline" id="19c-m3-M2s">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hh3-nA-yHV">
<rect key="frame" x="46" y="209" width="59" height="16"/>
<textField key="contentView" horizontalHuggingPriority="252" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hh3-nA-yHV">
<rect key="frame" x="46" y="222" width="59" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="QR Code" id="PuA-kW-t29">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -59,7 +61,7 @@
</gridCell>
<gridCell row="T2o-We-WjN" column="Ecc-pj-MX9" rowAlignment="none" id="jgf-mM-CW2">
<imageView key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="yS5-M0-RSB">
<rect key="frame" x="106" y="182" width="70" height="70"/>
<rect key="frame" x="106" y="195" width="70" height="70"/>
<constraints>
<constraint firstAttribute="width" constant="64" id="MhV-Ye-bQt"/>
<constraint firstAttribute="height" constant="64" id="RRz-CV-k1H"/>
@@ -71,9 +73,9 @@
</imageView>
</gridCell>
<gridCell row="T2o-We-WjN" column="aZO-dP-SsW" xPlacement="leading" id="0bn-HV-7V1"/>
<gridCell row="leK-j9-Cah" column="Ar1-qh-iHT" id="fgi-y3-z17">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="e3u-QK-K24">
<rect key="frame" x="61" y="154" width="44" height="16"/>
<gridCell row="leK-j9-Cah" column="Ar1-qh-iHT" rowAlignment="none" id="fgi-y3-z17">
<textField key="contentView" horizontalHuggingPriority="252" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="e3u-QK-K24">
<rect key="frame" x="61" y="148" width="44" height="21"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Secret" id="ufY-IN-5UY">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -81,9 +83,9 @@
</textFieldCell>
</textField>
</gridCell>
<gridCell row="leK-j9-Cah" column="Ecc-pj-MX9" headOfMergedCell="q9e-Zx-LIY" yPlacement="center" id="q9e-Zx-LIY">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bt8-9X-91R">
<rect key="frame" x="109" y="152" width="150" height="21"/>
<gridCell row="leK-j9-Cah" column="Ecc-pj-MX9" yPlacement="center" id="q9e-Zx-LIY">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bt8-9X-91R">
<rect key="frame" x="109" y="148" width="150" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="150" id="aN6-yG-12x"/>
</constraints>
@@ -94,10 +96,10 @@
</textFieldCell>
</textField>
</gridCell>
<gridCell row="leK-j9-Cah" column="aZO-dP-SsW" headOfMergedCell="q9e-Zx-LIY" id="gOO-ed-C7I"/>
<gridCell row="leK-j9-Cah" column="aZO-dP-SsW" id="gOO-ed-C7I"/>
<gridCell row="J7I-Uw-OQv" column="Ar1-qh-iHT" id="LYj-ea-Ou9">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="W8L-ah-Kdc">
<rect key="frame" x="71" y="127" width="34" height="16"/>
<textField key="contentView" hidden="YES" horizontalHuggingPriority="252" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="W8L-ah-Kdc">
<rect key="frame" x="71" y="121" width="34" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Type" id="fNC-fH-sYi">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -105,9 +107,9 @@
</textFieldCell>
</textField>
</gridCell>
<gridCell row="J7I-Uw-OQv" column="Ecc-pj-MX9" headOfMergedCell="fOz-RA-6LG" id="fOz-RA-6LG">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ku7-YD-kkV">
<rect key="frame" x="107" y="120" width="38" height="25"/>
<gridCell row="J7I-Uw-OQv" column="Ecc-pj-MX9" id="fOz-RA-6LG">
<popUpButton key="contentView" hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ku7-YD-kkV">
<rect key="frame" x="106" y="114" width="157" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="WbA-Ie-Txj">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -115,10 +117,10 @@
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="J7I-Uw-OQv" column="aZO-dP-SsW" headOfMergedCell="fOz-RA-6LG" id="mka-sc-dDD"/>
<gridCell row="GmF-7D-t30" column="Ar1-qh-iHT" id="Isd-CW-srQ">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4Ic-Nt-YlL">
<rect key="frame" x="75" y="96" width="30" height="16"/>
<gridCell row="J7I-Uw-OQv" column="aZO-dP-SsW" id="mka-sc-dDD"/>
<gridCell row="GmF-7D-t30" column="Ar1-qh-iHT" yPlacement="center" id="Isd-CW-srQ">
<textField key="contentView" horizontalHuggingPriority="252" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4Ic-Nt-YlL">
<rect key="frame" x="75" y="91" width="30" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="URL" id="Kci-xp-mLu">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -127,8 +129,8 @@
</textField>
</gridCell>
<gridCell row="GmF-7D-t30" column="Ecc-pj-MX9" headOfMergedCell="Fpx-eQ-WAY" id="Fpx-eQ-WAY">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GJN-85-eYH">
<rect key="frame" x="109" y="94" width="150" height="21"/>
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GJN-85-eYH">
<rect key="frame" x="109" y="89" width="150" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="ZpH-Ks-BBi">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -138,8 +140,8 @@
</gridCell>
<gridCell row="GmF-7D-t30" column="aZO-dP-SsW" headOfMergedCell="Fpx-eQ-WAY" id="ZXy-HZ-O3a"/>
<gridCell row="hS6-e9-JPg" column="Ar1-qh-iHT" id="5hJ-4K-a2d">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yiW-Wk-6YB">
<rect key="frame" x="7" y="66" width="98" height="16"/>
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yiW-Wk-6YB">
<rect key="frame" x="7" y="61" width="98" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Hash Algorithm" id="g3s-fk-k9Q">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -149,7 +151,7 @@
</gridCell>
<gridCell row="hS6-e9-JPg" column="Ecc-pj-MX9" id="6MO-n5-2Cu">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="caF-Au-ey8">
<rect key="frame" x="107" y="59" width="38" height="25"/>
<rect key="frame" x="106" y="54" width="157" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Rxs-11-LRy">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -159,8 +161,8 @@
</gridCell>
<gridCell row="hS6-e9-JPg" column="aZO-dP-SsW" id="56r-vv-PhT"/>
<gridCell row="QY3-TF-Rbs" column="Ar1-qh-iHT" id="jL5-XH-KYZ">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JOR-bN-ZYC">
<rect key="frame" x="41" y="35" width="64" height="16"/>
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JOR-bN-ZYC">
<rect key="frame" x="41" y="31" width="64" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Time step" id="hbT-mm-dIn">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -170,7 +172,7 @@
</gridCell>
<gridCell row="QY3-TF-Rbs" column="Ecc-pj-MX9" xPlacement="fill" id="bvB-9m-g1U">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AdN-zI-C65">
<rect key="frame" x="109" y="33" width="150" height="21"/>
<rect key="frame" x="109" y="28" width="150" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="bHO-kq-GUf">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -180,13 +182,13 @@
</gridCell>
<gridCell row="QY3-TF-Rbs" column="aZO-dP-SsW" rowAlignment="none" id="oRW-3a-WxP">
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CgJ-Qt-NPu">
<rect key="frame" x="262" y="29" width="19" height="28"/>
<rect key="frame" x="262" y="25" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="RPy-q9-wKy"/>
</stepper>
</gridCell>
<gridCell row="0Jy-aF-Wst" column="Ar1-qh-iHT" id="hWa-nU-LpX">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="z5V-Af-Kpa">
<rect key="frame" x="-2" y="4" width="107" height="16"/>
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="z5V-Af-Kpa">
<rect key="frame" x="-2" y="1" width="107" height="18"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Number of Digits" id="iYF-F5-nMb">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -196,7 +198,7 @@
</gridCell>
<gridCell row="0Jy-aF-Wst" column="Ecc-pj-MX9" id="gil-83-ris">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aa3-XV-Chc">
<rect key="frame" x="107" y="-3" width="38" height="25"/>
<rect key="frame" x="106" y="-4" width="157" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="rzY-5S-dIJ">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -207,14 +209,42 @@
<gridCell row="0Jy-aF-Wst" column="aZO-dP-SsW" id="V48-br-lpl"/>
</gridCells>
</gridView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ppm-aD-yti">
<rect key="frame" x="193" y="13" width="118" height="32"/>
<buttonCell key="cell" type="push" title="Save Settings" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="YGn-qt-RrI">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="save:" target="-2" id="k3D-gK-Tch"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5a5-df-HAb">
<rect key="frame" x="119" y="13" width="76" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Ynh-bE-30s">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="cancel:" target="-2" id="Z99-2L-Le6"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="5a5-df-HAb" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="3Dj-2P-0OT"/>
<constraint firstAttribute="trailing" secondItem="4gl-4p-0WY" secondAttribute="trailing" constant="20" symbolic="YES" id="4eg-dj-7eq"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="4gl-4p-0WY" secondAttribute="bottom" constant="20" symbolic="YES" id="6lC-F3-SvT"/>
<constraint firstItem="5a5-df-HAb" firstAttribute="bottom" secondItem="Ppm-aD-yti" secondAttribute="bottom" id="CZ9-Ia-TWV"/>
<constraint firstItem="Ppm-aD-yti" firstAttribute="leading" secondItem="5a5-df-HAb" secondAttribute="trailing" constant="12" symbolic="YES" id="EXf-y0-UFR"/>
<constraint firstItem="4gl-4p-0WY" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="QNT-yn-O32"/>
<constraint firstItem="Ppm-aD-yti" firstAttribute="top" secondItem="4gl-4p-0WY" secondAttribute="bottom" constant="20" symbolic="YES" id="RMh-eo-ItW"/>
<constraint firstAttribute="bottom" secondItem="Ppm-aD-yti" secondAttribute="bottom" constant="20" symbolic="YES" id="eBG-Ns-4ur"/>
<constraint firstItem="4gl-4p-0WY" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="g3C-GL-weQ"/>
<constraint firstAttribute="trailing" secondItem="Ppm-aD-yti" secondAttribute="trailing" constant="20" symbolic="YES" id="gxW-QO-gFu"/>
</constraints>
<point key="canvasLocation" x="-989" y="-832"/>
<point key="canvasLocation" x="-1402" y="-1030"/>
</customView>
</objects>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -31,26 +31,29 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="horizontal" alignment="firstBaseline" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="avD-My-tnu">
<rect key="frame" x="0.0" y="0.0" width="480" height="21"/>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="avD-My-tnu">
<rect key="frame" x="0.0" y="0.0" width="479" height="21"/>
<subviews>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xBL-Jz-VQO" customClass="HNHUITextField">
<rect key="frame" x="0.0" y="0.0" width="399" height="21"/>
<rect key="frame" x="0.0" y="0.0" width="406" height="21"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="Vuy-HC-UhI">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="delegate" destination="-2" id="pfM-gT-aXU"/>
</connections>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Hxg-bd-l1O">
<rect key="frame" x="407" y="1" width="27" height="17"/>
<rect key="frame" x="414" y="2" width="26" height="18"/>
<buttonCell key="cell" type="inline" title="30" bezelStyle="inline" alignment="center" enabled="NO" borderStyle="border" inset="2" id="roW-Uk-ff9">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xge-Jc-QnB">
<rect key="frame" x="436" y="-7" width="50" height="32"/>
<rect key="frame" x="441" y="-6" width="45" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64a-Tn-vdd">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -72,6 +75,9 @@
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="avD-My-tnu" secondAttribute="trailing" constant="1" id="nhf-Ld-Bh4"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
@@ -88,10 +94,10 @@
<constraint firstItem="Lz5-aM-o4b" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="y4i-uB-HlK"/>
<constraint firstItem="Lz5-aM-o4b" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="zFP-JZ-Qtu"/>
</constraints>
<point key="canvasLocation" x="-180" y="74"/>
<point key="canvasLocation" x="-629" y="-23"/>
</customView>
</objects>
<resources>
<image name="NSActionTemplate" width="14" height="14"/>
<image name="NSActionTemplate" width="15" height="15"/>
</resources>
</document>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
@@ -251,7 +250,7 @@ CA
</menuItem>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="209">
<connections>
<action selector="perfromCustomSearch:" target="-1" id="RSR-PQ-TH1"/>
<action selector="performCustomSearch:" target="-1" id="RSR-PQ-TH1"/>
</connections>
</menuItem>
</items>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -29,11 +29,11 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="1">
<rect key="frame" x="0.0" y="0.0" width="351" height="316"/>
<rect key="frame" x="0.0" y="0.0" width="351" height="330"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="148">
<rect key="frame" x="18" y="276" width="66" height="17"/>
<rect key="frame" x="18" y="292" width="66" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Password:" id="149">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -41,7 +41,7 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="152">
<rect key="frame" x="90" y="272" width="201" height="24"/>
<rect key="frame" x="90" y="290" width="201" height="20"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="621"/>
</constraints>
@@ -52,11 +52,11 @@
</textFieldCell>
</textField>
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="173">
<rect key="frame" x="88" y="246" width="205" height="19"/>
<rect key="frame" x="88" y="256" width="205" height="28"/>
<sliderCell key="cell" state="on" alignment="left" maxValue="100" doubleValue="50" tickMarkPosition="above" sliderType="linear" id="174"/>
</slider>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="178">
<rect key="frame" x="18" y="248" width="66" height="17"/>
<rect key="frame" x="18" y="265" width="66" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Length:" id="179">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -64,7 +64,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="182">
<rect key="frame" x="299" y="244" width="32" height="22"/>
<rect key="frame" x="299" y="261" width="32" height="21"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="32" id="eVc-Kg-bCi"/>
</constraints>
@@ -76,13 +76,13 @@
</textFieldCell>
</textField>
<box autoresizesSubviews="NO" borderType="line" title="Character options" translatesAutoresizingMaskIntoConstraints="NO" id="332">
<rect key="frame" x="17" y="88" width="317" height="119"/>
<rect key="frame" x="17" y="102" width="317" height="120"/>
<view key="contentView" id="f93-Su-hga">
<rect key="frame" x="3" y="3" width="311" height="101"/>
<rect key="frame" x="3" y="3" width="311" height="102"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="411">
<rect key="frame" x="16" y="42" width="279" height="22"/>
<rect key="frame" x="16" y="44" width="279" height="21"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="412" customClass="HNHUITextFieldCell">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -90,7 +90,7 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="452">
<rect key="frame" x="16" y="72" width="36" height="19"/>
<rect key="frame" x="16" y="73" width="36" height="19"/>
<buttonCell key="cell" type="roundRect" title="A-Z" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="453">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/>
@@ -100,7 +100,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="456">
<rect key="frame" x="60" y="72" width="33" height="19"/>
<rect key="frame" x="60" y="73" width="34" height="19"/>
<buttonCell key="cell" type="roundRect" title="a-z" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="457">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/>
@@ -110,7 +110,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" tag="4" translatesAutoresizingMaskIntoConstraints="NO" id="460">
<rect key="frame" x="101" y="72" width="35" height="19"/>
<rect key="frame" x="102" y="73" width="36" height="19"/>
<buttonCell key="cell" type="roundRect" title="0-9" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="461">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/>
@@ -120,7 +120,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" tag="8" translatesAutoresizingMaskIntoConstraints="NO" id="464">
<rect key="frame" x="144" y="72" width="32" height="19"/>
<rect key="frame" x="146" y="73" width="32" height="19"/>
<buttonCell key="cell" type="roundRect" title="#!?" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="465">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/>
@@ -130,7 +130,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="468">
<rect key="frame" x="184" y="72" width="58" height="19"/>
<rect key="frame" x="186" y="73" width="58" height="19"/>
<buttonCell key="cell" type="roundRect" title="Custom" bezelStyle="roundedRect" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="469">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/>
@@ -140,7 +140,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RDM-JY-oF9">
<rect key="frame" x="14" y="18" width="222" height="18"/>
<rect key="frame" x="14" y="19" width="226" height="18"/>
<buttonCell key="cell" type="check" title="Use characters from every group" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CMc-Uh-Fo5">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@@ -172,8 +172,8 @@
</constraints>
</box>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="494">
<rect key="frame" x="231" y="19" width="100" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Use Password" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="495">
<rect key="frame" x="218" y="13" width="120" height="32"/>
<buttonCell key="cell" type="push" title="Use Password" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="495">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -182,14 +182,14 @@
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="500">
<rect key="frame" x="18" y="68" width="204" height="18"/>
<rect key="frame" x="18" y="81" width="208" height="18"/>
<buttonCell key="cell" type="check" title="Copy password to pasteboard" bezelStyle="regularSquare" imagePosition="left" inset="2" id="501">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="509">
<rect key="frame" x="299" y="273" width="32" height="23"/>
<rect key="frame" x="298" y="288" width="34" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSRefreshTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="510">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -199,8 +199,8 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="613">
<rect key="frame" x="167" y="19" width="56" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="614">
<rect key="frame" x="144" y="13" width="76" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="614">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -209,11 +209,11 @@
</connections>
</button>
<levelIndicator verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="635">
<rect key="frame" x="90" y="213" width="173" height="18"/>
<rect key="frame" x="90" y="228" width="173" height="18"/>
<levelIndicatorCell key="cell" alignment="left" doubleValue="10" maxValue="90" warningValue="55" criticalValue="30" levelIndicatorStyle="continuousCapacity" id="636" customClass="HNHUILevelIndicatorCell"/>
</levelIndicator>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="646">
<rect key="frame" x="18" y="215" width="66" height="17"/>
<rect key="frame" x="18" y="230" width="66" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Entropy:" id="647">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -221,7 +221,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="652">
<rect key="frame" x="269" y="215" width="64" height="17"/>
<rect key="frame" x="269" y="230" width="64" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="25000 bit" id="653">
<numberFormatter key="formatter" formatterBehavior="custom10_4" positiveFormat="# bit" negativeFormat="# bit" usesGroupingSeparator="NO" paddingCharacter="*" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="309" decimalSeparator="," groupingSeparator="." currencyDecimalSeparator="," plusSign="+" minusSign="-" notANumberSymbol="NaN" perMillSymbol="‰" percentSymbol="%" exponentSymbol="E" positivePrefix="" positiveSuffix=" bit" negativePrefix="-" negativeSuffix=" bit" id="681"/>
<font key="font" metaFont="system"/>
@@ -230,8 +230,8 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yil-UB-jtO">
<rect key="frame" x="20" y="19" width="82" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Set Default" bezelStyle="texturedRounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Wvs-Md-Ob8">
<rect key="frame" x="13" y="13" width="102" height="32"/>
<buttonCell key="cell" type="push" title="Set Default" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Wvs-Md-Ob8">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<connections>
@@ -240,7 +240,7 @@
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="4yb-SC-vau">
<rect key="frame" x="18" y="48" width="231" height="18"/>
<rect key="frame" x="18" y="59" width="235" height="18"/>
<buttonCell key="cell" type="check" title="Use default only for selected entry" bezelStyle="regularSquare" imagePosition="left" inset="2" id="cfZ-5F-Nge">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@@ -265,7 +265,7 @@
<constraint firstItem="509" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="520"/>
<constraint firstItem="152" firstAttribute="leading" secondItem="148" secondAttribute="trailing" constant="8" symbolic="YES" id="606"/>
<constraint firstAttribute="bottom" secondItem="613" secondAttribute="bottom" constant="20" symbolic="YES" id="617"/>
<constraint firstItem="494" firstAttribute="leading" secondItem="613" secondAttribute="trailing" constant="8" symbolic="YES" id="618"/>
<constraint firstItem="494" firstAttribute="leading" secondItem="613" secondAttribute="trailing" constant="12" symbolic="YES" id="618"/>
<constraint firstItem="173" firstAttribute="leading" secondItem="635" secondAttribute="leading" id="642"/>
<constraint firstItem="173" firstAttribute="leading" secondItem="178" secondAttribute="trailing" constant="8" symbolic="YES" id="643"/>
<constraint firstItem="646" firstAttribute="top" secondItem="1" secondAttribute="top" constant="84" id="648"/>
@@ -279,14 +279,14 @@
<constraint firstItem="652" firstAttribute="leading" secondItem="635" secondAttribute="trailing" constant="8" symbolic="YES" id="672"/>
<constraint firstAttribute="trailing" secondItem="652" secondAttribute="trailing" constant="20" symbolic="YES" id="679"/>
<constraint firstItem="635" firstAttribute="leading" secondItem="152" secondAttribute="leading" id="680"/>
<constraint firstItem="613" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="yil-UB-jtO" secondAttribute="trailing" constant="8" symbolic="YES" id="59d-1n-jSa"/>
<constraint firstItem="613" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="yil-UB-jtO" secondAttribute="trailing" constant="12" symbolic="YES" id="59d-1n-jSa"/>
<constraint firstItem="646" firstAttribute="trailing" secondItem="178" secondAttribute="trailing" id="6kR-jk-E8r"/>
<constraint firstItem="yil-UB-jtO" firstAttribute="leading" secondItem="500" secondAttribute="leading" id="Hic-qB-mt4"/>
<constraint firstItem="4yb-SC-vau" firstAttribute="top" secondItem="500" secondAttribute="bottom" constant="6" id="IZo-0q-BdQ"/>
<constraint firstItem="148" firstAttribute="trailing" secondItem="178" secondAttribute="trailing" id="KpM-xy-ZTB"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="4yb-SC-vau" secondAttribute="trailing" constant="20" symbolic="YES" id="OnS-dH-uyZ"/>
<constraint firstItem="509" firstAttribute="leading" secondItem="182" secondAttribute="leading" id="QZ5-Ge-aq8"/>
<constraint firstItem="613" firstAttribute="top" relation="greaterThanOrEqual" secondItem="4yb-SC-vau" secondAttribute="bottom" constant="8" symbolic="YES" id="SoR-gh-uhq"/>
<constraint firstItem="613" firstAttribute="top" relation="greaterThanOrEqual" secondItem="4yb-SC-vau" secondAttribute="bottom" constant="20" symbolic="YES" id="SoR-gh-uhq"/>
<constraint firstAttribute="bottom" secondItem="yil-UB-jtO" secondAttribute="bottom" constant="20" id="eYK-Hw-fyy"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="500" secondAttribute="trailing" constant="20" symbolic="YES" id="iUl-yt-JbV"/>
<constraint firstItem="646" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="jPa-QR-GAy"/>
@@ -297,6 +297,6 @@
</customView>
</objects>
<resources>
<image name="NSRefreshTemplate" width="11" height="15"/>
<image name="NSRefreshTemplate" width="14" height="16"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -24,13 +24,13 @@
<window title="Change Password" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="1090" y="652" width="369" height="164"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<rect key="contentRect" x="1090" y="652" width="446" height="307"/>
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1025"/>
<view key="contentView" verticalHuggingPriority="251" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2">
<rect key="frame" x="0.0" y="0.0" width="363" height="220"/>
<rect key="frame" x="0.0" y="0.0" width="369" height="217"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="68">
<rect key="frame" x="200" y="13" width="149" height="32"/>
<rect key="frame" x="213" y="13" width="143" height="32"/>
<buttonCell key="cell" type="push" title="Change Password" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="69">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -40,7 +40,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="72">
<rect key="frame" x="118" y="13" width="82" height="32"/>
<rect key="frame" x="139" y="13" width="76" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="73">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -53,7 +53,7 @@ Gw
</connections>
</button>
<gridView horizontalHuggingPriority="251" verticalHuggingPriority="750" xPlacement="leading" yPlacement="bottom" rowAlignment="none" translatesAutoresizingMaskIntoConstraints="NO" id="0Iv-td-ACj">
<rect key="frame" x="20" y="61" width="323" height="139"/>
<rect key="frame" x="20" y="60" width="329" height="137"/>
<rows>
<gridRow id="Ljm-xA-9NW"/>
<gridRow id="Dv9-ND-6rX"/>
@@ -71,7 +71,7 @@ Gw
<gridCell row="Ljm-xA-9NW" column="uaf-ph-2zN" id="1U3-Im-v9n"/>
<gridCell row="Ljm-xA-9NW" column="7oF-Xq-5de" id="2bp-dG-V6t">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="12">
<rect key="frame" x="84" y="125" width="204" height="14"/>
<rect key="frame" x="90" y="123" width="204" height="14"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="PASSWORD_ERROR" id="14">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
@@ -82,7 +82,7 @@ Gw
<gridCell row="Ljm-xA-9NW" column="clB-mU-Eba" id="blk-az-oHS"/>
<gridCell row="Dv9-ND-6rX" column="uaf-ph-2zN" id="JUU-XQ-60P">
<button key="contentView" horizontalHuggingPriority="252" translatesAutoresizingMaskIntoConstraints="NO" id="yKc-I9-uzv">
<rect key="frame" x="-2" y="97" width="84" height="24"/>
<rect key="frame" x="-2" y="96" width="88" height="22"/>
<buttonCell key="cell" type="check" title="Password:" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="OQz-DA-SoY">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@@ -91,7 +91,7 @@ Gw
</gridCell>
<gridCell row="Dv9-ND-6rX" column="7oF-Xq-5de" id="cw2-er-epO">
<secureTextField key="contentView" horizontalHuggingPriority="253" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="HNHUISecureTextField">
<rect key="frame" x="86" y="99" width="200" height="20"/>
<rect key="frame" x="92" y="97" width="200" height="20"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="gTV-5A-Fyo"/>
</constraints>
@@ -105,10 +105,21 @@ Gw
</secureTextFieldCell>
</secureTextField>
</gridCell>
<gridCell row="Dv9-ND-6rX" column="clB-mU-Eba" id="ykQ-xV-MfJ"/>
<gridCell row="Dv9-ND-6rX" column="clB-mU-Eba" id="ykQ-xV-MfJ">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7">
<rect key="frame" x="291" y="90" width="45" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="31" id="59"/>
</constraints>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="20">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</gridCell>
<gridCell row="mNb-JP-3YX" column="uaf-ph-2zN" id="DTm-fw-duK">
<textField key="contentView" horizontalHuggingPriority="252" verticalHuggingPriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="10">
<rect key="frame" x="31" y="73" width="51" height="16"/>
<rect key="frame" x="37" y="71" width="51" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Repeat:" id="16">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -117,8 +128,8 @@ Gw
</textField>
</gridCell>
<gridCell row="mNb-JP-3YX" column="7oF-Xq-5de" id="OBv-b8-DJs">
<secureTextField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="11" customClass="HNHUISecureTextField">
<rect key="frame" x="86" y="73" width="200" height="20"/>
<secureTextField key="contentView" verticalHuggingPriority="750" verticalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="11" customClass="HNHUISecureTextField">
<rect key="frame" x="92" y="71" width="200" height="20"/>
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Repeat Password" drawsBackground="YES" usesSingleLineMode="YES" id="15">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -129,22 +140,11 @@ Gw
</secureTextFieldCell>
</secureTextField>
</gridCell>
<gridCell row="mNb-JP-3YX" column="clB-mU-Eba" id="erv-Ur-nvi">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7">
<rect key="frame" x="292" y="72" width="31" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="31" id="59"/>
</constraints>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="20">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</gridCell>
<gridCell row="mNb-JP-3YX" column="clB-mU-Eba" id="erv-Ur-nvi"/>
<gridCell row="vQK-bD-mNH" column="uaf-ph-2zN" id="5U0-j9-rrv"/>
<gridCell row="vQK-bD-mNH" column="7oF-Xq-5de" id="8JE-Wh-Sad">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ibK-Px-Fvt">
<rect key="frame" x="84" y="53" width="204" height="14"/>
<rect key="frame" x="90" y="51" width="204" height="14"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="KEY_ERROR" id="EOD-dE-TFa">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
@@ -155,7 +155,7 @@ Gw
<gridCell row="vQK-bD-mNH" column="clB-mU-Eba" id="fyu-1E-DpO"/>
<gridCell row="DIe-Hz-bd0" column="uaf-ph-2zN" id="Pjk-hs-Pb5">
<textField key="contentView" horizontalHuggingPriority="252" verticalHuggingPriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="33" y="28" width="49" height="19"/>
<rect key="frame" x="39" y="26" width="49" height="19"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile:" id="22">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -165,7 +165,7 @@ Gw
</gridCell>
<gridCell row="DIe-Hz-bd0" column="7oF-Xq-5de" id="o9J-f7-adq">
<pathControl key="contentView" verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="MPPathControl">
<rect key="frame" x="83" y="24" width="206" height="25"/>
<rect key="frame" x="89" y="22" width="206" height="25"/>
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="23" customClass="MPPathCell">
<font key="font" metaFont="system"/>
</pathCell>
@@ -173,8 +173,8 @@ Gw
</gridCell>
<gridCell row="DIe-Hz-bd0" column="clB-mU-Eba" id="miK-hQ-pkN">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
<rect key="frame" x="292" y="27" width="31" height="20"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="19">
<rect key="frame" x="291" y="19" width="45" height="31"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="19">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -186,8 +186,8 @@ Gw
<gridCell row="TQt-iq-lMT" column="uaf-ph-2zN" id="nAI-ge-Vjb"/>
<gridCell row="TQt-iq-lMT" column="7oF-Xq-5de" id="dT5-pB-M7d">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="86" y="-1" width="200" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Generate Keyfile" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="21">
<rect key="frame" x="85" y="-7" width="214" height="32"/>
<buttonCell key="cell" type="push" title="Generate Keyfile" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="21">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -213,11 +213,11 @@ Gw
<constraint firstItem="68" firstAttribute="top" secondItem="0Iv-td-ACj" secondAttribute="bottom" constant="20" symbolic="YES" id="s84-KY-RXX"/>
</constraints>
</view>
<point key="canvasLocation" x="-295" y="-412"/>
<point key="canvasLocation" x="-272" y="-447.5"/>
</window>
</objects>
<resources>
<image name="NSQuickLookTemplate" width="19" height="12"/>
<image name="NSStopProgressTemplate" width="11" height="11"/>
<image name="NSQuickLookTemplate" width="21" height="13"/>
<image name="NSStopProgressTemplate" width="14" height="13"/>
</resources>
</document>

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
<capability name="Image references" minToolsVersion="12.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -16,8 +17,8 @@
<outlet property="messageInfoTextField" destination="268" id="ahE-sq-QzR"/>
<outlet property="passwordTextField" destination="338" id="495"/>
<outlet property="togglePasswordButton" destination="408" id="493"/>
<outlet property="touchIdButton" destination="mQA-C0-JyU" id="fM3-PG-1OB"/>
<outlet property="touchIdEnabledButton" destination="Hs8-Tc-ezo" id="9Go-LQ-mSw"/>
<outlet property="touchIdButton" destination="ZpI-L9-oFW" id="82R-Ir-aCk"/>
<outlet property="touchIdModeButton" destination="ojg-6v-74n" id="WOD-fT-1Jp"/>
<outlet property="unlockButton" destination="2" id="ZRr-Ui-ExP"/>
<outlet property="view" destination="1" id="143"/>
</connections>
@@ -27,6 +28,19 @@
<customView horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="508" height="526"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2">
<rect key="frame" x="325" y="169" width="77" height="32"/>
<buttonCell key="cell" type="push" title="Unlock" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
</buttonCell>
<connections>
<action selector="_submit:" target="-2" id="KZN-ap-nDc"/>
</connections>
</button>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="17">
<rect key="frame" x="108" y="226" width="45" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile" id="18">
@@ -42,7 +56,7 @@
</pathCell>
</pathControl>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="262">
<rect key="frame" x="230" y="332" width="48" height="48"/>
<rect key="frame" x="230" y="305" width="48" height="48"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="273"/>
<constraint firstAttribute="width" constant="48" id="456"/>
@@ -50,7 +64,7 @@
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="02_MessageBoxWarningTemplate" id="263"/>
</imageView>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="268">
<rect key="frame" x="199" y="308" width="110" height="16"/>
<rect key="frame" x="199" y="281" width="110" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Wrong password!" id="269">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -75,15 +89,15 @@
</connections>
</secureTextField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="408">
<rect key="frame" x="357" y="251" width="32" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="409">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<rect key="frame" x="351" y="246" width="51" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="409">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="486">
<rect key="frame" x="357" y="221" width="32" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="487">
<rect key="frame" x="351" y="216" width="51" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="487">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -98,11 +112,8 @@
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<stackView distribution="fill" orientation="horizontal" alignment="top" spacing="12" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tck-n8-s0U" userLabel="SubmitButtonContainer">
<rect key="frame" x="164" y="176" width="224" height="20"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2pb-ZG-spA">
<rect key="frame" x="-7" y="-7" width="76" height="32"/>
<rect key="frame" x="251" y="169" width="76" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="erj-mR-UyO">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -114,64 +125,45 @@ Gw
<action selector="_submit:" target="-2" id="aVF-1d-1Hq"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mQA-C0-JyU">
<rect key="frame" x="67" y="-7" width="88" height="32"/>
<buttonCell key="cell" type="push" title="Touch ID" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="W9h-1u-9kq">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="unlockWithTouchID:" target="-2" id="1yL-6V-t8q"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2">
<rect key="frame" x="153" y="-7" width="78" height="32"/>
<buttonCell key="cell" type="push" title="Unlock" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
</buttonCell>
<connections>
<action selector="_submit:" target="-2" id="KZN-ap-nDc"/>
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField hidden="YES" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="txI-yI-5nE">
<rect key="frame" x="157" y="204" width="195" height="14"/>
<textFieldCell key="cell" selectable="YES" title="key_file_warnig" id="f6J-5f-ZvP">
<font key="font" usesAppearanceFont="YES"/>
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Hs8-Tc-ezo">
<rect key="frame" x="66" y="287" width="76" height="18"/>
<buttonCell key="cell" type="check" title="TouchID" bezelStyle="regularSquare" imagePosition="left" allowsMixedState="YES" inset="2" id="h3C-Z4-x7N">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZpI-L9-oFW">
<rect key="frame" x="153" y="130" width="248" height="40"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" imagePosition="overlaps" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="H68-pk-x95">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<imageReference key="image" image="touchid" catalog="system" symbolScale="large"/>
</buttonCell>
<connections>
<action selector="touchIdEnabledChanged:" target="-2" id="3pR-xA-wbI"/>
<action selector="unlockWithTouchID:" target="-2" id="78g-Zp-kfP"/>
</connections>
</button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ojg-6v-74n">
<rect key="frame" x="414" y="16" width="78" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="4zU-tu-WtN" id="ZsC-BU-S2L">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="Obl-SJ-PWj">
<items>
<menuItem title="Item 1" state="on" id="4zU-tu-WtN"/>
<menuItem title="Item 2" id="yoj-8p-tLa"/>
<menuItem title="Item 3" id="hqz-rH-gah"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</subviews>
<constraints>
<constraint firstItem="262" firstAttribute="top" relation="greaterThanOrEqual" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="276"/>
<constraint firstAttribute="centerX" secondItem="262" secondAttribute="centerX" id="286"/>
<constraint firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="386"/>
<constraint firstItem="338" firstAttribute="top" secondItem="268" secondAttribute="bottom" constant="8" symbolic="YES" id="400"/>
<constraint firstItem="268" firstAttribute="top" secondItem="262" secondAttribute="bottom" constant="8" symbolic="YES" id="402"/>
<constraint firstItem="408" firstAttribute="top" secondItem="338" secondAttribute="top" id="411"/>
<constraint firstItem="268" firstAttribute="centerX" secondItem="338" secondAttribute="centerX" id="447"/>
@@ -185,28 +177,34 @@ DQ
<constraint firstItem="486" firstAttribute="leading" secondItem="241" secondAttribute="trailing" constant="8" symbolic="YES" id="489"/>
<constraint firstItem="486" firstAttribute="leading" secondItem="408" secondAttribute="leading" id="490"/>
<constraint firstItem="408" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="492"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Hs8-Tc-ezo" secondAttribute="trailing" constant="20" symbolic="YES" id="4Zq-48-2fD"/>
<constraint firstItem="tck-n8-s0U" firstAttribute="top" secondItem="txI-yI-5nE" secondAttribute="bottom" constant="8" id="6tz-an-3SW"/>
<constraint firstItem="408" firstAttribute="leading" secondItem="338" secondAttribute="trailing" constant="8" symbolic="YES" id="7qE-8F-QgB"/>
<constraint firstItem="2" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="496"/>
<constraint firstItem="ZpI-L9-oFW" firstAttribute="leading" secondItem="338" secondAttribute="leading" id="586-AF-14D"/>
<constraint firstItem="ZpI-L9-oFW" firstAttribute="trailing" secondItem="2" secondAttribute="trailing" id="66E-ud-APw"/>
<constraint firstItem="ZpI-L9-oFW" firstAttribute="top" secondItem="2" secondAttribute="bottom" constant="12" symbolic="YES" id="8Cr-iC-tRa"/>
<constraint firstItem="2pb-ZG-spA" firstAttribute="baseline" secondItem="2" secondAttribute="baseline" id="9nK-MH-Ozs"/>
<constraint firstItem="txI-yI-5nE" firstAttribute="trailing" secondItem="241" secondAttribute="trailing" id="AVL-HO-SMq"/>
<constraint firstItem="17" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="EOa-K4-v7J"/>
<constraint firstItem="338" firstAttribute="leading" secondItem="d8O-Ha-rrS" secondAttribute="trailing" constant="8" symbolic="YES" id="KYs-Ia-SVl"/>
<constraint firstItem="Hs8-Tc-ezo" firstAttribute="leading" secondItem="d8O-Ha-rrS" secondAttribute="leading" id="MO7-cs-9KQ"/>
<constraint firstItem="d8O-Ha-rrS" firstAttribute="top" secondItem="Hs8-Tc-ezo" secondAttribute="bottom" constant="17" id="Rhp-Gn-AaI"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="tck-n8-s0U" secondAttribute="bottom" constant="20" symbolic="YES" id="Sny-FR-cY1"/>
<constraint firstItem="tck-n8-s0U" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="UtJ-18-p5u"/>
<constraint firstItem="Hs8-Tc-ezo" firstAttribute="firstBaseline" secondItem="268" secondAttribute="firstBaseline" constant="20" id="e94-Kz-Ohn"/>
<constraint firstAttribute="trailing" secondItem="ojg-6v-74n" secondAttribute="trailing" constant="20" symbolic="YES" id="Qi9-tI-1es"/>
<constraint firstItem="2pb-ZG-spA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="SUS-76-os4"/>
<constraint firstItem="ojg-6v-74n" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="U0a-74-fft"/>
<constraint firstItem="2" firstAttribute="top" secondItem="txI-yI-5nE" secondAttribute="bottom" constant="8" symbolic="YES" id="jJs-hc-O2O"/>
<constraint firstItem="d8O-Ha-rrS" firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="kgB-jV-OGy"/>
<constraint firstItem="txI-yI-5nE" firstAttribute="top" secondItem="241" secondAttribute="bottom" constant="8" symbolic="YES" id="lfg-eB-T2O"/>
<constraint firstAttribute="bottom" secondItem="ojg-6v-74n" secondAttribute="bottom" constant="20" symbolic="YES" id="lsJ-TP-Ypo"/>
<constraint firstItem="txI-yI-5nE" firstAttribute="leading" secondItem="241" secondAttribute="leading" id="nGY-6Q-Vwy"/>
<constraint firstItem="ojg-6v-74n" firstAttribute="top" relation="greaterThanOrEqual" secondItem="ZpI-L9-oFW" secondAttribute="bottom" constant="20" symbolic="YES" id="vKg-zv-agP"/>
<constraint firstItem="d8O-Ha-rrS" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="vxq-YP-UhR"/>
<constraint firstItem="2" firstAttribute="leading" secondItem="2pb-ZG-spA" secondAttribute="trailing" constant="12" id="ytJ-5Z-5rT"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="ZpI-L9-oFW" secondAttribute="bottom" constant="1" id="zhU-C3-jab"/>
</constraints>
<point key="canvasLocation" x="-127" y="-46"/>
<point key="canvasLocation" x="100" y="-94"/>
</customView>
</objects>
<resources>
<image name="02_MessageBoxWarningTemplate" width="16" height="16"/>
<image name="NSQuickLookTemplate" width="21" height="13"/>
<image name="NSStopProgressTemplate" width="14" height="13"/>
<image name="touchid" catalog="system" width="21" height="21"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -20,11 +20,11 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="410" height="220"/>
<rect key="frame" x="0.0" y="0.0" width="410" height="214"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KQ1-tZ-qja" customClass="HNHUISecureTextField">
<rect key="frame" x="20" y="74" width="278" height="24"/>
<rect key="frame" x="20" y="72" width="262" height="20"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Wi0-xp-KgI">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
@@ -32,28 +32,27 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hKI-WP-N93">
<rect key="frame" x="361.5" y="74" width="29" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="95g-dp-50Q">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<rect key="frame" x="347" y="65" width="50" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="95g-dp-50Q">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<scrollView horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="MVS-ug-wys">
<rect key="frame" x="20" y="106" width="370" height="64"/>
<rect key="frame" x="20" y="100" width="370" height="64"/>
<clipView key="contentView" drawsBackground="NO" id="8aa-cB-mUF">
<rect key="frame" x="1" y="0.0" width="368" height="63"/>
<rect key="frame" x="1" y="1" width="368" height="62"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="24" rowSizeStyle="systemDefault" headerView="GRO-H1-N4r" viewBased="YES" id="KJq-FZ-rAE">
<rect key="frame" x="0.0" y="0.0" width="368" height="40"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="0.0" y="0.0" width="368" height="39"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="365" minWidth="40" maxWidth="1000" id="Q1b-ir-hyW">
<tableColumn width="356" minWidth="40" maxWidth="1000" id="Q1b-ir-hyW">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
</tableHeaderCell>
@@ -104,13 +103,13 @@
<rect key="frame" x="-100" y="-100" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<tableHeaderView key="headerView" id="GRO-H1-N4r">
<tableHeaderView key="headerView" wantsLayer="YES" id="GRO-H1-N4r">
<rect key="frame" x="0.0" y="0.0" width="368" height="23"/>
<autoresizingMask key="autoresizingMask"/>
</tableHeaderView>
</scrollView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="k8l-uy-C3l">
<rect key="frame" x="313" y="13" width="83" height="32"/>
<rect key="frame" x="319" y="13" width="78" height="32"/>
<buttonCell key="cell" type="push" title="Submit" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8vP-Ka-vsA">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -120,8 +119,8 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Y8X-Bm-qLt">
<rect key="frame" x="305.5" y="74" width="49" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Reset" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Emo-pg-Mfe">
<rect key="frame" x="283" y="65" width="70" height="32"/>
<buttonCell key="cell" type="push" title="Reset" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Emo-pg-Mfe">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -130,7 +129,7 @@
</connections>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="e2q-qh-Zlv">
<rect key="frame" x="167" y="49" width="76" height="17"/>
<rect key="frame" x="167" y="48" width="76" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="StatusLabel" id="M3h-q8-FLO">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -138,7 +137,7 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wAr-f2-ZUQ">
<rect key="frame" x="18" y="178" width="374" height="22"/>
<rect key="frame" x="18" y="172" width="374" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="MessageLabel" id="sHz-kg-YJQ">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -174,6 +173,6 @@
</customView>
</objects>
<resources>
<image name="NSQuickLookTemplate" width="19" height="12"/>
<image name="NSQuickLookTemplate" width="21" height="13"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -19,7 +19,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="BDL-W9-psF">
<rect key="frame" x="18" y="341" width="237" height="17"/>
<rect key="frame" x="18" y="342" width="237" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Please pick a field value to be inserted" id="aJS-22-6Va">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -27,7 +27,7 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="n1E-iQ-yd7">
<rect key="frame" x="381" y="13" width="79" height="32"/>
<rect key="frame" x="387" y="13" width="74" height="32"/>
<buttonCell key="cell" type="push" title="Select" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6Wi-9i-Tcb">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -40,21 +40,20 @@ DQ
</connections>
</button>
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nlF-dy-Ttg">
<rect key="frame" x="20" y="61" width="434" height="272"/>
<rect key="frame" x="20" y="60" width="434" height="274"/>
<clipView key="contentView" id="am4-w0-FSd">
<rect key="frame" x="1" y="0.0" width="432" height="271"/>
<rect key="frame" x="1" y="1" width="432" height="272"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="jX4-Gp-btT" viewBased="YES" id="5xi-x0-G4W">
<rect key="frame" x="0.0" y="0.0" width="436" height="248"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="0.0" y="0.0" width="445" height="249"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="118" minWidth="40" maxWidth="1000" id="0H9-DW-Jyj">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Field">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
</tableHeaderCell>
@@ -66,11 +65,11 @@ DQ
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="DataCell" id="s1C-7e-04S">
<rect key="frame" x="1" y="1" width="118" height="17"/>
<rect key="frame" x="1" y="1" width="123" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ADN-XZ-Lq7">
<rect key="frame" x="0.0" y="0.0" width="118" height="17"/>
<rect key="frame" x="0.0" y="0.0" width="123" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="e8U-mE-mZh">
<font key="font" metaFont="system"/>
@@ -84,11 +83,11 @@ DQ
</connections>
</tableCellView>
<tableCellView identifier="HeaderCell" id="wpe-VG-m1j">
<rect key="frame" x="1" y="20" width="118" height="17"/>
<rect key="frame" x="1" y="20" width="123" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6sH-Uk-P1B">
<rect key="frame" x="0.0" y="0.0" width="118" height="17"/>
<rect key="frame" x="0.0" y="0.0" width="123" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Header View Cell" id="kTy-VO-Xlg">
<font key="font" metaFont="system"/>
@@ -105,7 +104,6 @@ DQ
</tableColumn>
<tableColumn width="312" minWidth="40" maxWidth="1000" id="rVo-ud-5fs">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Value">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
</tableHeaderCell>
@@ -125,15 +123,15 @@ DQ
</subviews>
</clipView>
<scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="RHy-ph-0lP">
<rect key="frame" x="1" y="255" width="432" height="16"/>
<rect key="frame" x="1" y="257" width="432" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="b5D-WW-IPI">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<tableHeaderView key="headerView" id="jX4-Gp-btT">
<rect key="frame" x="0.0" y="0.0" width="436" height="23"/>
<tableHeaderView key="headerView" wantsLayer="YES" id="jX4-Gp-btT">
<rect key="frame" x="0.0" y="0.0" width="445" height="23"/>
<autoresizingMask key="autoresizingMask"/>
</tableHeaderView>
</scrollView>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -15,25 +15,24 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="287" height="474"/>
<rect key="frame" x="0.0" y="0.0" width="287" height="472"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<scrollView borderType="line" autohidesScrollers="YES" horizontalLineScroll="56" horizontalPageScroll="10" verticalLineScroll="56" verticalPageScroll="10" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="eUU-kx-L3U" customClass="HNHUIScrollView">
<rect key="frame" x="16" y="50" width="255" height="382"/>
<rect key="frame" x="16" y="48" width="255" height="382"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="cgV-6Q-xC5">
<rect key="frame" x="1" y="1" width="253" height="380"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="54" rowSizeStyle="automatic" viewBased="YES" id="p6e-PR-zyQ">
<rect key="frame" x="0.0" y="0.0" width="253" height="380"/>
<autoresizingMask key="autoresizingMask"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="250" minWidth="40" maxWidth="1000" id="t3Y-fx-P5b">
<tableColumn width="241" minWidth="40" maxWidth="1000" id="t3Y-fx-P5b">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
@@ -72,11 +71,11 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="K3k-BF-ag9">
<rect key="frame" x="217" y="8" width="32" height="25"/>
<rect key="frame" x="210" y="4" width="46" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="UXw-HR-Aqw"/>
</constraints>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="11n-xu-gUH">
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSRemoveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="11n-xu-gUH">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -107,21 +106,22 @@
</connections>
</tableView>
</subviews>
<nil key="backgroundColor"/>
</clipView>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="200" id="PWI-m3-nSC"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="x6X-UZ-xSg">
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="x6X-UZ-xSg">
<rect key="frame" x="1" y="317" width="253" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="YJP-Wl-Ugv">
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="YJP-Wl-Ugv">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZhC-nS-vfd">
<rect key="frame" x="18" y="440" width="63" height="14"/>
<rect key="frame" x="18" y="438" width="63" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Plugin data" id="unO-bO-8v0">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -129,8 +129,8 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wUR-gA-36a">
<rect key="frame" x="186" y="18" width="81" height="25"/>
<buttonCell key="cell" type="roundTextured" title="Remove All" bezelStyle="texturedRounded" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6hH-Hc-gf4">
<rect key="frame" x="172" y="13" width="102" height="32"/>
<buttonCell key="cell" type="push" title="Remove All" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6hH-Hc-gf4">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -154,6 +154,6 @@
</customView>
</objects>
<resources>
<image name="NSRemoveTemplate" width="11" height="11"/>
<image name="NSRemoveTemplate" width="14" height="4"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -22,19 +22,19 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="607" height="502"/>
<rect key="frame" x="0.0" y="0.0" width="607" height="542"/>
<subviews>
<box borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="vBs-Ga-aq0">
<rect key="frame" x="175" y="46" width="415" height="306"/>
<rect key="frame" x="175" y="56" width="415" height="330"/>
<view key="contentView" id="tD5-Na-7XI">
<rect key="frame" x="3" y="3" width="409" height="300"/>
<rect key="frame" x="4" y="5" width="407" height="322"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="wIk-iw-Tcz">
<rect key="frame" x="20" y="20" width="369" height="260"/>
<rect key="frame" x="20" y="20" width="367" height="282"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qPL-FR-ky7">
<rect key="frame" x="18" y="224" width="333" height="16"/>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qPL-FR-ky7">
<rect key="frame" x="18" y="246" width="331" height="16"/>
<textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" title="Plugin Settings Info" id="OOr-SW-jZb">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -59,14 +59,14 @@
</view>
</box>
<button translatesAutoresizingMaskIntoConstraints="NO" id="CqP-oK-S8k">
<rect key="frame" x="18" y="422" width="159" height="18"/>
<rect key="frame" x="18" y="459" width="163" height="18"/>
<buttonCell key="cell" type="check" title="Load unsecure Plugins" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="C4B-6z-ZqX">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
<rect key="frame" x="18" y="388" width="571" height="28"/>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
<rect key="frame" x="18" y="424" width="571" height="28"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="2bX-8S-9XM">
<font key="font" metaFont="smallSystem"/>
<string key="title">If enabled, Plugins without proper signatures will be allowed to load. Keep in mind, that Plugins have full access to your data! Changes take affect on restart.</string>
@@ -75,21 +75,20 @@
</textFieldCell>
</textField>
<scrollView autohidesScrollers="YES" horizontalLineScroll="37" horizontalPageScroll="10" verticalLineScroll="37" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCk-fL-jU8">
<rect key="frame" x="20" y="50" width="150" height="300"/>
<rect key="frame" x="20" y="60" width="150" height="324"/>
<clipView key="contentView" id="lTL-Q2-k45">
<rect key="frame" x="1" y="1" width="148" height="298"/>
<rect key="frame" x="1" y="1" width="148" height="322"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="35" usesAutomaticRowHeights="YES" viewBased="YES" id="Ocu-C0-03d">
<rect key="frame" x="0.0" y="0.0" width="148" height="298"/>
<autoresizingMask key="autoresizingMask"/>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="35" usesAutomaticRowHeights="YES" viewBased="YES" id="Ocu-C0-03d">
<rect key="frame" x="0.0" y="0.0" width="148" height="322"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="145" minWidth="40" maxWidth="1000" id="kNH-wp-Drp">
<tableColumn width="107" minWidth="40" maxWidth="1000" id="kNH-wp-Drp">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
</tableHeaderCell>
@@ -101,19 +100,19 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView misplaced="YES" id="vVt-P3-yLp" customClass="MPExtendedTableCellView">
<rect key="frame" x="1" y="1" width="145" height="35"/>
<rect key="frame" x="1" y="1" width="116" height="35"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="q1P-PD-0LW">
<rect key="frame" x="0.0" y="18" width="145" height="16"/>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="q1P-PD-0LW">
<rect key="frame" x="0.0" y="18" width="116" height="16"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Table View Cell" id="fug-79-n9g">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fQy-Sz-4VA">
<rect key="frame" x="0.0" y="2" width="145" height="14"/>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fQy-Sz-4VA">
<rect key="frame" x="0.0" y="2" width="116" height="14"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Label" id="yuK-qH-jxx">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -154,12 +153,13 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B9Q-hq-K4N">
<rect key="frame" x="20" y="19" width="71" height="23"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="momentary" id="cj3-R6-g1E">
<segmentedControl verticalHuggingPriority="750" id="B9Q-hq-K4N">
<rect key="frame" x="17" y="18" width="63" height="36"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="momentary" id="cj3-R6-g1E">
<font key="font" metaFont="system"/>
<segments>
<segment image="NSAddTemplate" width="32"/>
<segment image="NSAddTemplate" width="24"/>
<segment image="NSRemoveTemplate" width="32" tag="1"/>
</segments>
</segmentedCell>
@@ -168,8 +168,8 @@
</connections>
</segmentedControl>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SNe-cc-CZs">
<rect key="frame" x="413" y="19" width="174" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Browse Available Plugins…" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="sqO-8H-n1y">
<rect key="frame" x="400" y="13" width="194" height="32"/>
<buttonCell key="cell" type="push" title="Browse Available Plugins…" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="sqO-8H-n1y">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
@@ -178,21 +178,21 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XIl-03-JZP">
<rect key="frame" x="18" y="356" width="250" height="18"/>
<rect key="frame" x="18" y="391" width="254" height="18"/>
<buttonCell key="cell" type="check" title="Force loading of incompatible Plugins" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="yak-fS-jtA">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="K0z-aD-K2P">
<rect key="frame" x="18" y="466" width="243" height="18"/>
<rect key="frame" x="18" y="505" width="247" height="18"/>
<buttonCell key="cell" type="check" title="Download current Plugin information" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="uHR-uL-Ddm">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nrf-Hz-0vB">
<rect key="frame" x="18" y="446" width="349" height="14"/>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nrf-Hz-0vB">
<rect key="frame" x="18" y="484" width="349" height="14"/>
<textFieldCell key="cell" controlSize="small" selectable="YES" title="If enabled, a remote connection is established to macpassapp.org" id="i3S-9b-Bpf">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -223,18 +223,18 @@
<constraint firstItem="nrf-Hz-0vB" firstAttribute="top" secondItem="K0z-aD-K2P" secondAttribute="bottom" constant="8" symbolic="YES" id="ohE-9y-xO4"/>
<constraint firstItem="XIl-03-JZP" firstAttribute="leading" secondItem="CqP-oK-S8k" secondAttribute="leading" id="oqX-wa-jm0"/>
<constraint firstItem="K0z-aD-K2P" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="q4N-Jc-F3L"/>
<constraint firstItem="SNe-cc-CZs" firstAttribute="top" secondItem="vBs-Ga-aq0" secondAttribute="bottom" constant="8" symbolic="YES" id="r4X-iM-iYU"/>
<constraint firstItem="SNe-cc-CZs" firstAttribute="top" secondItem="vBs-Ga-aq0" secondAttribute="bottom" constant="20" symbolic="YES" id="r4X-iM-iYU"/>
<constraint firstItem="CqP-oK-S8k" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="rN1-3Z-BBi"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="XIl-03-JZP" secondAttribute="trailing" constant="20" symbolic="YES" id="rkN-ew-RtP"/>
<constraint firstItem="fCk-fL-jU8" firstAttribute="top" secondItem="XIl-03-JZP" secondAttribute="bottom" constant="8" symbolic="YES" id="vl9-MY-WW1"/>
<constraint firstItem="vBs-Ga-aq0" firstAttribute="leading" secondItem="fCk-fL-jU8" secondAttribute="trailing" constant="8" id="xNu-Sj-xQO"/>
<constraint firstItem="aoG-FD-ds8" firstAttribute="top" secondItem="CqP-oK-S8k" secondAttribute="bottom" constant="8" symbolic="YES" id="zSW-h3-BrT"/>
</constraints>
<point key="canvasLocation" x="179" y="115"/>
<point key="canvasLocation" x="169" y="6"/>
</customView>
</objects>
<resources>
<image name="NSAddTemplate" width="11" height="11"/>
<image name="NSRemoveTemplate" width="11" height="11"/>
<image name="NSAddTemplate" width="18" height="17"/>
<image name="NSRemoveTemplate" width="18" height="5"/>
</resources>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -15,26 +15,25 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="638" height="513"/>
<customView misplaced="YES" id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="628" height="488"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<scrollView autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="V1g-KK-vjw">
<rect key="frame" x="20" y="74" width="598" height="419"/>
<rect key="frame" x="20" y="72" width="573" height="372"/>
<clipView key="contentView" id="Sqy-VI-iH4">
<rect key="frame" x="1" y="0.0" width="596" height="418"/>
<rect key="frame" x="1" y="1" width="571" height="370"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="sequential" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="systemDefault" headerView="uVe-04-Now" viewBased="YES" id="gDR-Fx-c0h">
<rect key="frame" x="0.0" y="0.0" width="599" height="395"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="0.0" y="0.0" width="608" height="347"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="145" minWidth="10" maxWidth="3.4028234663852886e+38" id="Nzo-rR-Hfx">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Plugin">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableHeaderCell>
@@ -46,11 +45,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="Uuc-Kh-oDl">
<rect key="frame" x="1" y="1" width="145" height="17"/>
<rect key="frame" x="1" y="1" width="150" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6fB-f9-l44">
<rect key="frame" x="0.0" y="0.0" width="145" height="17"/>
<rect key="frame" x="0.0" y="0.0" width="150" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="DRt-Gz-DUm">
<font key="font" metaFont="system"/>
@@ -67,7 +66,6 @@
</tableColumn>
<tableColumn width="88" minWidth="10" maxWidth="3.4028234663852886e+38" id="hFg-AD-SqD">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Latest Version">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableHeaderCell>
@@ -79,7 +77,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="AKl-7g-maS">
<rect key="frame" x="149" y="1" width="88" height="17"/>
<rect key="frame" x="154" y="1" width="88" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gZz-x5-KVH">
@@ -100,7 +98,6 @@
</tableColumn>
<tableColumn width="357" minWidth="10" maxWidth="3.4028234663852886e+38" id="g1Q-BS-vCR">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Status">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableHeaderCell>
@@ -112,11 +109,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="RMm-PO-UNp" customClass="MPPluginStatusTableCellView">
<rect key="frame" x="240" y="1" width="357" height="17"/>
<rect key="frame" x="245" y="1" width="361" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="RBa-0B-xVt">
<rect key="frame" x="0.0" y="0.0" width="96" height="17"/>
<rect key="frame" x="0.0" y="1" width="96" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="ZIf-CU-gh7">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -124,7 +121,7 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tVV-rz-Aff">
<rect key="frame" x="291" y="-1" width="46" height="19"/>
<rect key="frame" x="294" y="-1" width="48" height="19"/>
<buttonCell key="cell" type="roundTextured" title="Action" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6jQ-Uk-uqD">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
@@ -160,20 +157,20 @@
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="gYM-eK-y5v"/>
</constraints>
<scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ajb-Vb-WhY">
<rect key="frame" x="1" y="402" width="596" height="16"/>
<rect key="frame" x="1" y="355" width="571" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="3eJ-oK-GNt">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<tableHeaderView key="headerView" id="uVe-04-Now">
<rect key="frame" x="0.0" y="0.0" width="599" height="23"/>
<tableHeaderView key="headerView" wantsLayer="YES" id="uVe-04-Now">
<rect key="frame" x="0.0" y="0.0" width="608" height="23"/>
<autoresizingMask key="autoresizingMask"/>
</tableHeaderView>
</scrollView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bGv-Zc-Vrk">
<rect key="frame" x="14" y="13" width="87" height="32"/>
<rect key="frame" x="13" y="13" width="82" height="32"/>
<buttonCell key="cell" type="push" title="Refresh" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="NZw-nO-lZ3">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -183,7 +180,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Pkh-la-7FU">
<rect key="frame" x="552" y="13" width="72" height="32"/>
<rect key="frame" x="514" y="13" width="66" height="32"/>
<buttonCell key="cell" type="push" title="Done" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="j9a-fn-Pye">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -193,7 +190,7 @@
</connections>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="d2Q-7O-ilP">
<rect key="frame" x="110" y="49" width="72" height="17"/>
<rect key="frame" x="110" y="48" width="72" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Updated at" id="DhR-ED-6gV">
<dateFormatter key="formatter" dateStyle="short" timeStyle="medium" doesRelativeDateFormatting="YES" id="0Ll-SA-lFN"/>
<font key="font" metaFont="system"/>
@@ -202,7 +199,7 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fjQ-ni-Ayx">
<rect key="frame" x="18" y="49" width="88" height="17"/>
<rect key="frame" x="18" y="48" width="88" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Last updated:" id="ntD-sJ-NRw">
<dateFormatter key="formatter" dateStyle="short" timeStyle="medium" doesRelativeDateFormatting="YES" id="fJu-2Q-skm"/>
<font key="font" metaFont="system"/>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -18,11 +18,11 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="c22-O7-iKe">
<rect key="frame" x="0.0" y="0.0" width="207" height="213"/>
<rect key="frame" x="0.0" y="0.0" width="219" height="209"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IZP-Gd-jdU">
<rect key="frame" x="13" y="151" width="83" height="23"/>
<rect key="frame" x="10" y="146" width="96" height="25"/>
<popUpButtonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KPf-xE-gde">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -37,7 +37,7 @@
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IFf-vC-3vk" customClass="HNHUITextField">
<rect key="frame" x="13" y="101" width="174" height="21"/>
<rect key="frame" x="13" y="99" width="186" height="21"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="Seu-01-P53"/>
</constraints>
@@ -48,14 +48,14 @@
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T2o-aJ-JmD">
<rect key="frame" x="149" y="19" width="38" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Use" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Kqx-qm-nMG">
<rect key="frame" x="148" y="13" width="58" height="32"/>
<buttonCell key="cell" type="push" title="Use" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Kqx-qm-nMG">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VR5-Rx-ueN">
<rect key="frame" x="102" y="182" width="24" height="14"/>
<rect key="frame" x="108" y="178" width="24" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Key" id="K1t-OZ-ACe">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -63,7 +63,7 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sZo-ie-Asw">
<rect key="frame" x="11" y="182" width="58" height="14"/>
<rect key="frame" x="11" y="178" width="58" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Reference" id="r1V-VE-ngy">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -71,10 +71,10 @@
</textFieldCell>
</textField>
<popUpButton horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b4e-k2-WPS">
<rect key="frame" x="104" y="151" width="83" height="23"/>
<rect key="frame" x="107" y="146" width="96" height="25"/>
<popUpButtonCell key="cell" type="roundTextured" title="Matching" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" selectedItem="yT1-XL-k6a" id="Aob-tW-bUP">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="j2A-qj-k7L">
<items>
<menuItem title="Matching" state="on" id="yT1-XL-k6a">
@@ -88,7 +88,7 @@
</connections>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WTJ-he-uTu">
<rect key="frame" x="11" y="130" width="37" height="14"/>
<rect key="frame" x="11" y="128" width="37" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Match" id="9ce-da-syF">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -96,7 +96,7 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mcC-bG-cCz">
<rect key="frame" x="11" y="79" width="92" height="14"/>
<rect key="frame" x="11" y="77" width="92" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Reference String" id="gik-Ha-hRd">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -104,7 +104,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b36-T7-1tO" customClass="HNHUITextField">
<rect key="frame" x="13" y="50" width="174" height="21"/>
<rect key="frame" x="13" y="48" width="186" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Reference" drawsBackground="YES" id="dr9-x8-kKk">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -16,23 +16,23 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="400" height="95"/>
<rect key="frame" x="0.0" y="0.0" width="400" height="94"/>
<subviews>
<button verticalHuggingPriority="500" translatesAutoresizingMaskIntoConstraints="NO" id="Z6x-oU-NC5">
<rect key="frame" x="22" y="59" width="221" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="ppB-Ka-SVN"/>
</constraints>
<rect key="frame" x="22" y="59" width="225" height="16"/>
<buttonCell key="cell" type="check" title="Automatically Check for Updates" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="RFg-q1-AwJ">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="14" id="ppB-Ka-SVN"/>
</constraints>
</button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pWJ-eJ-MBf">
<rect key="frame" x="144" y="17" width="114" height="25"/>
<rect key="frame" x="143" y="16" width="115" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Hl5-gO-B1c">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="RKd-H8-eCF">
<items>
<menuItem title="every Hour" tag="3600" id="DjF-1I-6Nq"/>
@@ -45,7 +45,7 @@
</menu>
</popUpButtonCell>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ckg-9t-MDS">
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ckg-9t-MDS">
<rect key="frame" x="22" y="23" width="118" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Check for Updates" id="9tL-CA-Vdg">
<font key="font" metaFont="system"/>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -11,6 +11,7 @@
<outlet property="browserPopup" destination="ehI-gq-lsb" id="YMy-L1-pQw"/>
<outlet property="doubleClickTitlePopup" destination="40" id="aKJ-q9-xjb"/>
<outlet property="doubleClickURLPopup" destination="13" id="fGP-5I-0XK"/>
<outlet property="focusSearchAfterUnlockCheckButton" destination="VIS-db-Y8n" id="xVr-wf-eJg"/>
<outlet property="generatePasswordOnEntriesCheckButton" destination="yxq-YK-61i" id="0SK-CT-Wdn"/>
<outlet property="hideAfterCopyToClipboardCheckButton" destination="vT4-wF-ned" id="d7e-vc-cAQ"/>
<outlet property="updatePasswordOnTemplateEntriesCheckButton" destination="LPY-sM-hjS" id="wav-op-uck"/>
@@ -20,37 +21,24 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="449" height="338"/>
<rect key="frame" x="0.0" y="0.0" width="449" height="486"/>
<subviews>
<box autoresizesSubviews="NO" horizontalHuggingPriority="249" verticalHuggingPriority="500" borderType="line" title="Entry Table" translatesAutoresizingMaskIntoConstraints="NO" id="2">
<rect key="frame" x="17" y="194" width="415" height="96"/>
<rect key="frame" x="17" y="278" width="415" height="104"/>
<view key="contentView" id="cfa-nq-Kzt">
<rect key="frame" x="3" y="3" width="409" height="78"/>
<rect key="frame" x="4" y="5" width="407" height="84"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
<rect key="frame" x="18" y="51" width="134" height="16"/>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
<rect key="frame" x="18" y="47" width="134" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Double-click on URL:" id="10">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
<rect key="frame" x="155" y="44" width="110" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="14">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="15">
<items>
<menuItem title="Copies URL" id="16"/>
<menuItem title="Opens URL" id="17"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="36">
<rect key="frame" x="18" y="21" width="134" height="16"/>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="36">
<rect key="frame" x="18" y="17" width="134" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Double-click on Title:" id="37">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -58,7 +46,7 @@
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="40">
<rect key="frame" x="155" y="16" width="140" height="23"/>
<rect key="frame" x="155" y="16" width="140" height="19"/>
<popUpButtonCell key="cell" type="push" title="Opens Inspector" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="44" id="41">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -70,52 +58,43 @@
</menu>
</popUpButtonCell>
</popUpButton>
<popUpButton verticalHuggingPriority="750" verticalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="13">
<rect key="frame" x="155" y="40" width="110" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="14">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="15">
<items>
<menuItem title="Copies URL" id="16"/>
<menuItem title="Opens URL" id="17"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</subviews>
<constraints>
<constraint firstItem="13" firstAttribute="top" secondItem="cfa-nq-Kzt" secondAttribute="top" constant="20" symbolic="YES" id="0iU-Bj-QtG"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="40" secondAttribute="trailing" constant="20" symbolic="YES" id="3iK-WD-tbs"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="13" secondAttribute="trailing" constant="20" symbolic="YES" id="EQn-DK-viK"/>
<constraint firstItem="9" firstAttribute="leading" secondItem="cfa-nq-Kzt" secondAttribute="leading" constant="20" symbolic="YES" id="FHR-zo-tjR"/>
<constraint firstItem="9" firstAttribute="firstBaseline" secondItem="13" secondAttribute="firstBaseline" id="Swb-ay-7G0"/>
<constraint firstItem="36" firstAttribute="firstBaseline" secondItem="40" secondAttribute="firstBaseline" id="dWh-SS-Sc4"/>
<constraint firstItem="36" firstAttribute="leading" secondItem="cfa-nq-Kzt" secondAttribute="leading" constant="20" symbolic="YES" id="eqy-R2-mpP"/>
<constraint firstAttribute="bottom" secondItem="40" secondAttribute="bottom" constant="20" symbolic="YES" id="lle-u8-JWP"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="40" secondAttribute="bottom" constant="20" symbolic="YES" id="lle-u8-JWP"/>
</constraints>
</view>
<constraints>
<constraint firstItem="13" firstAttribute="leading" secondItem="9" secondAttribute="trailing" constant="8" symbolic="YES" id="1WE-nm-pp2"/>
<constraint firstItem="40" firstAttribute="centerY" secondItem="36" secondAttribute="centerY" id="1hi-oU-uNn"/>
<constraint firstItem="13" firstAttribute="top" secondItem="2" secondAttribute="top" constant="25" id="Nd9-4H-y8b"/>
<constraint firstAttribute="height" constant="100" id="AfY-wN-l34"/>
<constraint firstItem="40" firstAttribute="top" secondItem="13" secondAttribute="bottom" constant="10" symbolic="YES" id="YWX-K2-P8C"/>
<constraint firstItem="13" firstAttribute="leading" secondItem="40" secondAttribute="leading" id="mih-x6-1K0"/>
<constraint firstItem="40" firstAttribute="leading" secondItem="36" secondAttribute="trailing" constant="8" symbolic="YES" id="tsy-wg-saI"/>
</constraints>
</box>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ehI-gq-lsb">
<rect key="frame" x="112" y="294" width="136" height="25"/>
<popUpButtonCell key="cell" type="push" title="Default Browser" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="7YX-EA-9KA" id="7Ip-sU-sAK">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="XgO-Tj-QjO">
<items>
<menuItem title="Default Browser" state="on" id="7YX-EA-9KA"/>
<menuItem title="Item 2" id="gej-kA-GzQ"/>
<menuItem title="Item 3" id="zC2-cM-KDv"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lOo-NI-b07">
<rect key="frame" x="18" y="301" width="91" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Open URLs in:" id="soD-wI-YOH">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<box horizontalHuggingPriority="249" borderType="line" title="New Entries" translatesAutoresizingMaskIntoConstraints="NO" id="Xvt-tP-TbR">
<rect key="frame" x="17" y="94" width="415" height="96"/>
<rect key="frame" x="17" y="176" width="415" height="98"/>
<view key="contentView" id="g0i-00-sng">
<rect key="frame" x="3" y="3" width="409" height="78"/>
<rect key="frame" x="4" y="5" width="407" height="78"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="LPY-sM-hjS">
@@ -145,9 +124,9 @@
</view>
</box>
<box horizontalHuggingPriority="249" title="Clipboard" translatesAutoresizingMaskIntoConstraints="NO" id="Kff-Xp-hAT">
<rect key="frame" x="17" y="16" width="415" height="74"/>
<rect key="frame" x="17" y="96" width="415" height="76"/>
<view key="contentView" id="Ntf-zj-VZL">
<rect key="frame" x="3" y="3" width="409" height="56"/>
<rect key="frame" x="4" y="5" width="407" height="56"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vT4-wF-ned">
@@ -166,25 +145,87 @@
</constraints>
</view>
</box>
<box title="Search" translatesAutoresizingMaskIntoConstraints="NO" id="CLc-Vg-aWg">
<rect key="frame" x="17" y="16" width="415" height="76"/>
<view key="contentView" id="KWW-Ss-mhI">
<rect key="frame" x="4" y="5" width="407" height="56"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VIS-db-Y8n">
<rect key="frame" x="18" y="19" width="261" height="18"/>
<buttonCell key="cell" type="check" title="Focus search after unlocking database" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="I0s-iS-0Sc">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="VIS-db-Y8n" firstAttribute="leading" secondItem="KWW-Ss-mhI" secondAttribute="leading" constant="20" symbolic="YES" id="GkT-nF-RKV"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="VIS-db-Y8n" secondAttribute="trailing" constant="20" symbolic="YES" id="XzO-KB-P5X"/>
<constraint firstItem="VIS-db-Y8n" firstAttribute="top" secondItem="KWW-Ss-mhI" secondAttribute="top" constant="20" symbolic="YES" id="ciI-U3-HDa"/>
<constraint firstAttribute="bottom" secondItem="VIS-db-Y8n" secondAttribute="bottom" constant="20" id="t7Q-vo-yyz"/>
</constraints>
</view>
</box>
<box title="URLs" translatesAutoresizingMaskIntoConstraints="NO" id="8Z8-mS-hfg">
<rect key="frame" x="17" y="386" width="415" height="80"/>
<view key="contentView" id="LD4-oH-eGw">
<rect key="frame" x="4" y="5" width="407" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lOo-NI-b07">
<rect key="frame" x="18" y="23" width="91" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Open URLs in:" id="soD-wI-YOH">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ehI-gq-lsb">
<rect key="frame" x="112" y="16" width="136" height="25"/>
<popUpButtonCell key="cell" type="push" title="Default Browser" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="7YX-EA-9KA" id="7Ip-sU-sAK">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="XgO-Tj-QjO">
<items>
<menuItem title="Default Browser" state="on" id="7YX-EA-9KA"/>
<menuItem title="Item 2" id="gej-kA-GzQ"/>
<menuItem title="Item 3" id="zC2-cM-KDv"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="ehI-gq-lsb" secondAttribute="bottom" constant="20" symbolic="YES" id="5Pa-Hu-TKL"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="ehI-gq-lsb" secondAttribute="trailing" constant="20" symbolic="YES" id="8Qh-aY-FnV"/>
<constraint firstItem="ehI-gq-lsb" firstAttribute="leading" secondItem="lOo-NI-b07" secondAttribute="trailing" constant="8" symbolic="YES" id="94i-HV-mfW"/>
<constraint firstItem="lOo-NI-b07" firstAttribute="leading" secondItem="LD4-oH-eGw" secondAttribute="leading" constant="20" symbolic="YES" id="FSg-Id-v0g"/>
<constraint firstItem="lOo-NI-b07" firstAttribute="firstBaseline" secondItem="ehI-gq-lsb" secondAttribute="firstBaseline" id="I4D-aA-QaC"/>
<constraint firstItem="ehI-gq-lsb" firstAttribute="top" secondItem="LD4-oH-eGw" secondAttribute="top" constant="20" symbolic="YES" id="ciK-1U-UYJ"/>
</constraints>
</view>
</box>
</subviews>
<constraints>
<constraint firstItem="2" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="5"/>
<constraint firstAttribute="trailing" secondItem="2" secondAttribute="trailing" constant="20" symbolic="YES" id="8"/>
<constraint firstAttribute="bottom" secondItem="CLc-Vg-aWg" secondAttribute="bottom" constant="20" symbolic="YES" id="1VG-9p-VC6"/>
<constraint firstItem="Kff-Xp-hAT" firstAttribute="top" secondItem="Xvt-tP-TbR" secondAttribute="bottom" constant="8" symbolic="YES" id="3RL-tm-4wu"/>
<constraint firstAttribute="bottom" secondItem="Kff-Xp-hAT" secondAttribute="bottom" constant="20" symbolic="YES" id="8k6-1d-wPj"/>
<constraint firstAttribute="trailing" secondItem="8Z8-mS-hfg" secondAttribute="trailing" constant="20" symbolic="YES" id="5Hg-na-QAc"/>
<constraint firstItem="Xvt-tP-TbR" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="BH4-4y-uma"/>
<constraint firstItem="2" firstAttribute="top" secondItem="ehI-gq-lsb" secondAttribute="bottom" constant="8" symbolic="YES" id="CnN-aU-Qa1"/>
<constraint firstItem="Xvt-tP-TbR" firstAttribute="top" secondItem="2" secondAttribute="bottom" constant="8" symbolic="YES" id="FVK-Uf-kLv"/>
<constraint firstItem="ehI-gq-lsb" firstAttribute="leading" secondItem="lOo-NI-b07" secondAttribute="trailing" constant="8" symbolic="YES" id="KxB-TG-rH5"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="ehI-gq-lsb" secondAttribute="trailing" constant="20" symbolic="YES" id="Ldw-aO-wuX"/>
<constraint firstItem="ehI-gq-lsb" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="MAe-l7-8k2"/>
<constraint firstItem="CLc-Vg-aWg" firstAttribute="top" secondItem="Kff-Xp-hAT" secondAttribute="bottom" constant="8" symbolic="YES" id="MZ9-vN-2za"/>
<constraint firstItem="8Z8-mS-hfg" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="ScX-YY-rgS"/>
<constraint firstAttribute="trailing" secondItem="Kff-Xp-hAT" secondAttribute="trailing" constant="20" symbolic="YES" id="VLC-2A-Vdd"/>
<constraint firstItem="Kff-Xp-hAT" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="Vle-Z0-mh8"/>
<constraint firstItem="2" firstAttribute="top" secondItem="8Z8-mS-hfg" secondAttribute="bottom" constant="8" symbolic="YES" id="Z6D-RB-aR5"/>
<constraint firstAttribute="trailing" secondItem="Xvt-tP-TbR" secondAttribute="trailing" constant="20" id="anU-nC-YAw"/>
<constraint firstItem="lOo-NI-b07" firstAttribute="firstBaseline" secondItem="ehI-gq-lsb" secondAttribute="firstBaseline" id="gFK-Ce-Q3b"/>
<constraint firstItem="lOo-NI-b07" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="kaP-lB-tDY"/>
<constraint firstAttribute="trailing" secondItem="CLc-Vg-aWg" secondAttribute="trailing" constant="20" symbolic="YES" id="fXu-pq-O8Q"/>
<constraint firstItem="CLc-Vg-aWg" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="wyw-aC-Vkj"/>
<constraint firstItem="8Z8-mS-hfg" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="xdM-IO-cz3"/>
</constraints>
<point key="canvasLocation" x="-752" y="-257"/>
<point key="canvasLocation" x="-906.5" y="-199.5"/>
</customView>
</objects>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -16,16 +16,16 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="336">
<rect key="frame" x="0.0" y="0.0" width="695" height="523"/>
<rect key="frame" x="0.0" y="0.0" width="691" height="331"/>
<subviews>
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="54">
<rect key="frame" x="0.0" y="0.0" width="695" height="524"/>
<rect key="frame" x="0.0" y="0.0" width="691" height="308"/>
<clipView key="contentView" id="4tt-2K-SPF">
<rect key="frame" x="0.0" y="0.0" width="695" height="524"/>
<rect key="frame" x="0.0" y="0.0" width="691" height="308"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" rowSizeStyle="automatic" headerView="676" viewBased="YES" id="55" customClass="MPTableView">
<rect key="frame" x="0.0" y="0.0" width="695" height="501"/>
<rect key="frame" x="0.0" y="0.0" width="691" height="285"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -44,11 +44,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="StringCell" id="269">
<rect key="frame" x="1" y="1" width="105" height="17"/>
<rect key="frame" x="11" y="1" width="110" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="270">
<rect key="frame" x="1" y="1" width="103" height="16"/>
<rect key="frame" x="1" y="1" width="108" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="271">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -80,11 +80,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="ImageCell" id="297">
<rect key="frame" x="108.5" y="1" width="144" height="17"/>
<rect key="frame" x="124" y="1" width="144" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="298">
<rect key="frame" x="3" y="0.0" width="17" height="17"/>
<rect key="frame" x="3" y="-3" width="17" height="23"/>
<constraints>
<constraint firstAttribute="width" constant="17" id="312"/>
<constraint firstAttribute="height" constant="17" id="T73-FC-KyN"/>
@@ -128,7 +128,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="PasswordCell" id="428">
<rect key="frame" x="255.5" y="1" width="118" height="17"/>
<rect key="frame" x="271" y="1" width="118" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="429" customClass="NSSecureTextField">
@@ -164,7 +164,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="421">
<rect key="frame" x="377" y="1" width="113" height="17"/>
<rect key="frame" x="393" y="1" width="113" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="422">
@@ -187,7 +187,7 @@
</tableCellView>
</prototypeCellViews>
</tableColumn>
<tableColumn width="200" minWidth="10" maxWidth="3.4028234663852886e+38" id="614">
<tableColumn width="165" minWidth="10" maxWidth="3.4028234663852886e+38" id="614">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@@ -199,14 +199,14 @@
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="616">
<rect key="frame" x="493" y="1" width="200" height="17"/>
<tableCellView identifier="MonospacedStringCell" id="616">
<rect key="frame" x="509" y="1" width="169" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="617">
<rect key="frame" x="1" y="1" width="198" height="16"/>
<rect key="frame" x="1" y="2" width="167" height="14"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="618">
<font key="font" metaFont="system"/>
<font key="font" size="12" name="Menlo-Regular"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
@@ -228,15 +228,15 @@
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="56">
<rect key="frame" x="0.0" y="579" width="694" height="16"/>
<rect key="frame" x="0.0" y="484" width="690" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="58">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<tableHeaderView key="headerView" id="676">
<rect key="frame" x="0.0" y="0.0" width="695" height="23"/>
<tableHeaderView key="headerView" wantsLayer="YES" id="676">
<rect key="frame" x="0.0" y="0.0" width="691" height="23"/>
<autoresizingMask key="autoresizingMask"/>
</tableHeaderView>
</scrollView>
@@ -251,6 +251,6 @@
</customView>
</objects>
<resources>
<image name="NSActionTemplate" width="14" height="14"/>
<image name="NSActionTemplate" width="15" height="15"/>
</resources>
</document>

View File

@@ -30,7 +30,7 @@
@end
@implementation NSImage (MPTintedImage)
- (NSImage *)imageWithTintColor:(NSColor *)tintColor {
/* only tint tempated images! */
/* only tint templated images! */
if(NO == self.template) {
return self;
}
@@ -63,7 +63,7 @@
if(self.timeInfo.isExpired) {
const BOOL isGroup = [self isKindOfClass:[KPKGroup class]];
return [MPIconHelper icon:(isGroup ? MPIconExpiredGroup : MPIconExpiredEntry)];
return [[MPIconHelper icon:(isGroup ? MPIconExpiredGroup : MPIconExpiredEntry)] imageWithTintColor:NSColor.systemRedColor];
}
if(self.icon) {
return self.icon.image;

View File

@@ -21,41 +21,17 @@
//
#import "MPAddEntryContextMenuDelegate.h"
#import "MPDocument.h"
#import "MPDocumentWindowController.h"
#import "MPActionHelper.h"
#import "KPKNode+IconImage.h"
#import "MPContextMenuHelper.h"
#import "KeePassKit/KeePassKit.h"
#define EDIT_TEMPLATES_ITEM_TAG 10;
@implementation MPAddEntryContextMenuDelegate
- (void)menuNeedsUpdate:(NSMenu *)menu {
/*
The Method is rather brute force
It's possible nicer to cache the entries and just update
the menu entries, that actually need updating
*/
MPDocument *document = NSDocumentController.sharedDocumentController.currentDocument;
[menu removeAllItems];
[menu addItemWithTitle:NSLocalizedString(@"EDIT_TEMPLATE_GROUP", "Menu item on the add entry context menu to edit template groups") action:[MPActionHelper actionOfType:MPActionEditTemplateGroup] keyEquivalent:@""];
[menu addItem:[NSMenuItem separatorItem]];
for(KPKEntry *entry in document.templates.childEntries) {
NSString *templateMask = NSLocalizedString(@"NEW_ENTRY_WITH_TEMPLATE_%@", "Submenu to add an entry via template");
NSMenuItem *templateItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:templateMask, entry.title]
action:@selector(createEntryFromTemplate:)
keyEquivalent:@""];
templateItem.image = [entry.iconImage copy];
templateItem.image.size = NSMakeSize(14, 14);
templateItem.representedObject = entry.uuid;
[menu addItem:templateItem];
}
/* If there are no entries, add a note as disabled menu item */
if(menu.itemArray.count == 2) {
[menu addItemWithTitle:NSLocalizedString(@"NO_TEMPLATES", "Menu item added to show that no templates are defined") action:NULL keyEquivalent:@""];
NSArray<NSMenuItem *> *items = [MPContextMenuHelper contextMenuItemsWithCreateFromTemplateEntriesItems];
for(NSMenuItem *item in items) {
[menu addItem:item];
}
}

View File

@@ -0,0 +1,17 @@
//
// MPAdvancedDatabaseSettingsViewController.h
// MacPass
//
// Created by Michael Starke on 18.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface MPAdvancedDatabaseSettingsViewController : NSViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,194 @@
//
// MPAdvancedDatabaseSettingsViewController.m
// MacPass
//
// Created by Michael Starke on 18.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import "MPAdvancedDatabaseSettingsViewController.h"
#import "MPDocument.h"
#import "MPDayCountFormatter.h"
#import "KPKNode+IconImage.h"
#import <KeePassKit/KeePassKit.h>
#import <HNHUi/HNHUi.h>
@interface MPAdvancedDatabaseSettingsViewController ()
@property (strong) IBOutlet NSButton *enableHistoryCheckButton;
@property (strong) IBOutlet NSTextField *historyMaximumItemsTextField;
@property (strong) IBOutlet NSStepper *historyMaximumItemsStepper;
@property (strong) IBOutlet NSTextField *historyMaximumSizeTextField;
@property (strong) IBOutlet NSStepper *historyMaximumSizeStepper;
@property (strong) IBOutlet NSButton *enableTrashCheckButton;
@property (strong) IBOutlet NSButton *emptyTrashOnQuitCheckButton;
@property (strong) IBOutlet NSPopUpButton *selectTrashGoupPopUpButton;
@property (strong) IBOutlet NSTextField *defaultUsernameTextField;
@property (strong) IBOutlet NSPopUpButton *templateGroupPopUpButton;
@property (strong) IBOutlet NSButton *recommendKeyChangeCheckButton;
@property (strong) IBOutlet NSButton *enforceKeyChangeCheckButton;
@property (strong) IBOutlet NSButton *enforceKeyChangeOnceCheckButton;
@property (strong) IBOutlet NSTextField *recommendKeyChangeIntervalTextField;
@property (strong) IBOutlet NSStepper *recommendKeyChangeIntervalStepper;
@property (strong) IBOutlet NSTextField *enforceKeyChangeIntervalTextField;
@property (strong) IBOutlet NSStepper *enforceKeyChangeIntervalStepper;
@property (assign) BOOL enableHistory;
@property (assign) NSInteger maxiumHistoryItems;
@property (assign) NSInteger maxiumHistorySize;
@property (assign) BOOL enforceKeyChange;
@property (assign) BOOL recommendKeyChange;
@property (assign) NSInteger enforceKeyChangeInterval;
@property (assign) NSInteger recommendKeyChangeInterval;
@end
@implementation MPAdvancedDatabaseSettingsViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do view setup here.
}
- (void)_setupAdvancedTab {
/* history */
MPDocument *document = (MPDocument*)self.view.window.windowController.document;
KPKTree *tree = document.tree;
self.enableHistory = tree.metaData.isHistoryEnabled;
[self.enableHistoryCheckButton bind:NSValueBinding
toObject:self
withKeyPath:NSStringFromSelector(@selector(enableHistory))
options:nil];
/* history size */
self.maxiumHistorySize = tree.metaData.historyMaxSize;
self.historyMaximumSizeStepper.minValue = 0;
self.historyMaximumSizeStepper.maxValue = NSIntegerMax;
self.historyMaximumSizeStepper.increment = 1024*1024; // 1MB
[self.historyMaximumSizeStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
[self.historyMaximumSizeStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistorySize)) options:nil];
[self.historyMaximumSizeTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
[self.historyMaximumSizeTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistorySize)) options:nil];
/* history count */
self.maxiumHistoryItems = MAX(0,tree.metaData.historyMaxItems); // prevent -1 form showing up directly
self.historyMaximumItemsStepper.minValue = 0;
self.historyMaximumItemsStepper.maxValue = NSIntegerMax;
self.historyMaximumItemsStepper.increment = 1;
[self.historyMaximumItemsStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
[self.historyMaximumItemsStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistoryItems)) options:nil];
[self.historyMaximumItemsTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
[self.historyMaximumItemsTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistoryItems)) options:nil];
/* trash */
HNHUISetStateFromBool(self.enableTrashCheckButton, tree.metaData.useTrash);
self.selectTrashGoupPopUpButton.enabled = tree.metaData.useTrash;
[self.enableTrashCheckButton bind:NSValueBinding toObject:self.selectTrashGoupPopUpButton withKeyPath:NSEnabledBinding options:nil];
[self _updateTrashFolders:tree];
/* default username */
self.defaultUsernameTextField.stringValue = tree.metaData.defaultUserName;
self.defaultUsernameTextField.editable = YES;
[self _updateTemplateGroup:tree];
/* key changes */
self.enforceKeyChange = tree.metaData.enforceMasterKeyChange;
self.recommendKeyChange = tree.metaData.recommendMasterKeyChange;
HNHUISetStateFromBool(self.enforceKeyChangeOnceCheckButton, tree.metaData.enforceMasterKeyChangeOnce);
[self.enforceKeyChangeCheckButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChange)) options:nil];
[self.recommendKeyChangeCheckButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
/* intervals use -1 to encode disabled, do not show this in text fields! */
self.enforceKeyChangeInterval = MAX(0,tree.metaData.masterKeyChangeEnforcementInterval);
self.enforceKeyChangeIntervalStepper.minValue = 0;
self.enforceKeyChangeIntervalStepper.maxValue = NSIntegerMax;
self.enforceKeyChangeIntervalStepper.increment = 1; // 1 day steps
[self.enforceKeyChangeIntervalStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChange)) options:nil];
[self.enforceKeyChangeIntervalStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChangeInterval)) options:nil];
[self.enforceKeyChangeIntervalTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChange)) options:nil];
[self.enforceKeyChangeIntervalTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChangeInterval)) options:nil];
NSString *valueFormat = NSLocalizedString(@"EVERY_%ld_DAYS", @"Recommend/Enforce key change intervall format");
((MPDayCountFormatter *)self.enforceKeyChangeIntervalTextField.formatter).valueFormat = valueFormat;
self.recommendKeyChangeInterval = MAX(0,tree.metaData.masterKeyChangeRecommendationInterval);
self.recommendKeyChangeIntervalStepper.minValue = 0;
self.recommendKeyChangeIntervalStepper.maxValue = NSIntegerMax;
self.recommendKeyChangeIntervalStepper.increment = 1; // 1 day steps
[self.recommendKeyChangeIntervalStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
[self.recommendKeyChangeIntervalStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
[self.recommendKeyChangeIntervalTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
[self.recommendKeyChangeIntervalTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
((MPDayCountFormatter *)self.recommendKeyChangeIntervalTextField.formatter).valueFormat = valueFormat;
}
- (void)_updateTrashFolders:(KPKTree *)tree {
NSMenu *menu = [self _buildTrashTreeMenu:tree];
self.selectTrashGoupPopUpButton.menu = menu;
}
- (void)_updateTemplateGroup:(KPKTree *)tree {
NSMenu *menu = [self _buildTemplateTreeMenu:tree];
self.templateGroupPopUpButton.menu = menu;
}
- (NSMenu *)_buildTrashTreeMenu:(KPKTree *)tree {
NSMenu *menu = [self _buildTreeMenu:tree preselect:tree.metaData.trashUuid];
NSMenuItem *selectItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOCREATE_TRASH_FOLDER", @"Menu item for automatic trash creation")
action:NULL
keyEquivalent:@""];
selectItem.enabled = YES;
[menu insertItem:selectItem atIndex:0];
return menu;
}
- (NSMenu *)_buildTemplateTreeMenu:(KPKTree *)tree {
NSMenu *menu = [self _buildTreeMenu:tree preselect:tree.metaData.entryTemplatesGroupUuid];
NSMenuItem *selectItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"NO_TEMPLATE_GROUP", @"Menu item to reset the template groups")
action:NULL
keyEquivalent:@""];
selectItem.enabled = YES;
[menu insertItem:selectItem atIndex:0];
return menu;
}
- (NSMenu *)_buildTreeMenu:(KPKTree *)tree preselect:(NSUUID *)uuid {
NSMenu *menu = [[NSMenu alloc] init];
menu.autoenablesItems = NO;
for(KPKGroup *group in tree.root.groups) {
[self _insertMenuItemsForGroup:group atLevel:0 inMenu:menu preselect:uuid];
}
return menu;
}
- (void)_insertMenuItemsForGroup:(KPKGroup *)group atLevel:(NSUInteger)level inMenu:(NSMenu *)menu preselect:(NSUUID *)uuid{
NSMenuItem *groupItem = [[NSMenuItem alloc] init];
groupItem.image = group.iconImage;
groupItem.title = group.title;
groupItem.representedObject = group;
groupItem.enabled = YES;
if(uuid && [group.uuid isEqual:uuid]) {
groupItem.state = NSOnState;
}
groupItem.indentationLevel = level;
[menu addItem:groupItem];
for(KPKGroup *childGroup in group.groups) {
[self _insertMenuItemsForGroup:childGroup atLevel:level + 1 inMenu:menu preselect:uuid];
}
}
@end

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPAdvancedDatabaseSettingsViewController">
<connections>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<point key="canvasLocation" x="260" y="-61"/>
</customView>
</objects>
</document>

View File

@@ -25,6 +25,7 @@
APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
@class MPEntryContextMenuDelegate;
@class SPUUpdater;
@interface MPAppDelegate : NSObject <NSApplicationDelegate, NSMenuDelegate>
@@ -36,8 +37,10 @@ APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
@property (strong) IBOutlet NSMenu *exportMenu;
@property (strong, readonly) MPEntryContextMenuDelegate *itemActionMenuDelegate;
@property (strong, readonly) SPUUpdater *updater;
@property (readonly) BOOL isTerminating;
@property (nonatomic, assign) BOOL isAllowedToStoreKeyFile;
@property (nonatomic) BOOL isAllowedToStoreKeyFile;
- (IBAction)checkForUpdates:(id)sender;
- (IBAction)showPreferences:(id)sender;

View File

@@ -67,6 +67,7 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
}
@property (strong) NSWindow *welcomeWindow;
@property (strong) SPUUpdater *updater;
@property (strong) IBOutlet NSWindow *passwordCreatorWindow;
@property (strong, nonatomic) MPPreferencesWindowController *preferencesController;
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
@@ -92,6 +93,7 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
_userNotificationCenterDelegate = [[MPUserNotificationCenterDelegate alloc] init];
self.itemActionMenuDelegate = [[MPEntryContextMenuDelegate alloc] init];
_shouldOpenFile = NO;
_isTerminating = NO;
self.startupState = MPAppStartupStateNone;
[NSNotificationCenter.defaultCenter addObserver:self
@@ -185,6 +187,7 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
_isTerminating = YES;
[self hideWelcomeWindow];
if(MPTemporaryFileStorageCenter.defaultCenter.hasPendingStorages) {
dispatch_async(dispatch_get_main_queue(), ^{
@@ -215,7 +218,9 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
[MPPluginHost sharedHost];
#if !defined(DEBUG) && !defined(NO_SPARKLE)
/* Disable updates if in debug or nosparkle */
[SUUpdater sharedUpdater];
SPUStandardUserDriver *userDriver = [[SPUStandardUserDriver alloc] initWithHostBundle:NSBundle.mainBundle delegate:nil];
self.updater = [[SPUUpdater alloc] initWithHostBundle:NSBundle.mainBundle applicationBundle:NSBundle.mainBundle userDriver:userDriver delegate:nil];
[self.updater startUpdater:nil];
#endif
self.startupState |= MPAppStartupStateFinishedLaunch;
// Here we just opt-in for allowing our bar to be customized throughout the app.
@@ -362,7 +367,7 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
[alert addButtonWithTitle:NSLocalizedString(@"OK", @"Ok Button to dismiss disabled updates alert")];
[alert runModal];
#else
[[SUUpdater sharedUpdater] checkForUpdates:sender];
[self.updater checkForUpdates];
#endif
}

View File

@@ -219,7 +219,8 @@ static MPAutotypeDaemon *_sharedInstance;
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
MPAutotypeDaemon * __weak welf = self;
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
id __block unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
id __block unlockToken; // silence init value never read analyzer warning
unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
object:nil
queue:NSOperationQueue.mainQueue
usingBlock:^(NSNotification *notification) {
@@ -247,7 +248,8 @@ static MPAutotypeDaemon *_sharedInstance;
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
MPAutotypeDaemon * __weak welf = self;
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
id __block unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
id __block unlockToken; // silence init value never read analyzer warning
unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
object:nil
queue:NSOperationQueue.mainQueue
usingBlock:^(NSNotification *notification) {
@@ -408,7 +410,8 @@ static MPAutotypeDaemon *_sharedInstance;
}
NSNotificationCenter * __weak nc = NSWorkspace.sharedWorkspace.notificationCenter;
id __block didActivateToken = [nc addObserverForName:NSWorkspaceDidActivateApplicationNotification
id __block didActivateToken; // silence init value never read analyzer warning
didActivateToken = [nc addObserverForName:NSWorkspaceDidActivateApplicationNotification
object:nil
queue:NSOperationQueue.mainQueue
usingBlock:^(NSNotification *notification) {

View File

@@ -44,7 +44,7 @@ FOUNDATION_EXPORT NSString *const MPPluginCompatibilityURLKey;
/**
Keychain Keys
*/
extern NSString *const TouchIdUnlockPublicKeyTag;
extern NSString *const TouchIdUnlockPrivateKeyTag;
extern NSString *const MPTouchIdUnlockPublicKeyTag;
extern NSString *const MPTouchIdUnlockPrivateKeyTag;
#endif

View File

@@ -31,6 +31,6 @@ NSString *const MPBundleHelpURLKey = @"MPHelpURL";
NSString *const MPBundlePluginRepositoryURLKey = @"MPPluginRepositoryURL";
NSString *const MPPluginCompatibilityURLKey = @"MPPluginCompatibilityURLKey";
NSString *const TouchIdUnlockPublicKeyTag = @"com.hicknhacksoftware.macpass.publickey";
NSString *const TouchIdUnlockPrivateKeyTag = @"com.hicknhacksoftware.macpass.privatekey";
NSString *const MPTouchIdUnlockPublicKeyTag = @"com.hicknhacksoftware.macpass.publickey";
NSString *const MPTouchIdUnlockPrivateKeyTag = @"com.hicknhacksoftware.macpass.privatekey";

View File

@@ -52,7 +52,12 @@
self.cell = cell;
self.focusRingType = NSFocusRingTypeNone;
if (@available(macOS 11.0, *)) {
self.segmentStyle = NSSegmentStyleSeparated;
}
else {
self.segmentStyle = NSSegmentStyleTexturedSquare;
}
self.segmentCount = MPContextButtonSegmentCount;
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
[cell setWidth:31 forSegment:MPContextButtonSegmentButton];

View File

@@ -37,11 +37,11 @@ typedef NS_OPTIONS(NSUInteger, MPContextMenuItemsFlags) {
};
@interface MPContextMenuHelper : NSTableCellView
/*
Creates an array of menuitems to be used as a menu
Automatically sets up actions, so you need to take care of the responder chain
*/
+ (NSArray <NSMenuItem *> *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags;
+ (NSArray <NSMenuItem *> *)contextMenuItemsWithCreateFromTemplateEntriesItems;
@end

View File

@@ -22,9 +22,13 @@
#import "MPContextMenuHelper.h"
#import "MPActionHelper.h"
#import "MPDocument.h"
#import "MPFlagsHelper.h"
#import "KPKNode+IconImage.h"
#import <KeePassKit/KeePassKit.h>
static void MPContextmenuHelperBeginSection(NSMutableArray *items) {
if(items.count > 0) {
[items addObject:[NSMenuItem separatorItem]];
@@ -33,6 +37,38 @@ static void MPContextmenuHelperBeginSection(NSMutableArray *items) {
@implementation MPContextMenuHelper
+ (NSArray<NSMenuItem *> *)contextMenuItemsWithCreateFromTemplateEntriesItems {
/*
The Method is rather brute force
It's possible nicer to cache the entries and just update
the menu entries, that actually need updating
*/
NSMutableArray *items = [[NSMutableArray alloc] init];
NSMenuItem *editItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"EDIT_TEMPLATE_GROUP", "Menu item on the add entry context menu to edit template groups") action:[MPActionHelper actionOfType:MPActionEditTemplateGroup] keyEquivalent:@""];
[items addObject:editItem];
MPContextmenuHelperBeginSection(items);
MPDocument *document = NSDocumentController.sharedDocumentController.currentDocument;
for(KPKEntry *entry in document.templates.childEntries) {
NSString *templateMask = NSLocalizedString(@"NEW_ENTRY_WITH_TEMPLATE_%@", "Submenu to add an entry via template");
NSMenuItem *templateItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:templateMask, entry.title]
action:@selector(createEntryFromTemplate:)
keyEquivalent:@""];
templateItem.image = [entry.iconImage copy];
templateItem.image.size = NSMakeSize(14, 14);
templateItem.representedObject = entry.uuid;
[items addObject:templateItem];
}
/* If there are no entries, add a note as disabled menu item */
if(items.count == 2) {
NSMenuItem *noItemsItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"NO_TEMPLATES", "Menu item added to show that no templates are defined") action:NULL keyEquivalent:@""];
[items addObject:noItemsItem];
}
return [items copy];
}
+ (NSArray<NSMenuItem *> *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags {
BOOL const insertCreate = MPIsFlagSetInOptions(MPContextMenuCreate, flags);
@@ -44,7 +80,7 @@ static void MPContextmenuHelperBeginSection(NSMutableArray *items) {
BOOL const insertHistory = MPIsFlagSetInOptions(MPContextMenuHistory, flags);
BOOL const insertShowGroupInOutline = MPIsFlagSetInOptions(MPContextMenuShowGroupInOutline, flags);
NSMutableArray *items = [NSMutableArray arrayWithCapacity:10];
NSMutableArray *items = [NSMutableArray arrayWithCapacity:15];
if(insertCreate) {
NSMenuItem *newGroup = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"NEW_GROUP", @"Menu item to create a new group")
@@ -54,7 +90,20 @@ static void MPContextmenuHelperBeginSection(NSMutableArray *items) {
action:[MPActionHelper actionOfType:MPActionAddEntry]
keyEquivalent:@"n"];
[items addObjectsFromArray:@[ newGroup, newEntry ]];
/*
NSMenuItem *newEntryFromTemplate = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"NEW_ENTRY_FROM_TEMPLATE", @"Submen to create entries from tempaltes")
action:NULL
keyEquivalent:@""];
newEntryFromTemplate.submenu = [[NSMenu alloc] init];
NSArray *templateItems = [self contextMenuItemsWithCreateFromTemplateEntriesItems];
for(NSMenuItem *item in templateItems) {
[newEntryFromTemplate.submenu addItem:item];
}
[items addObjectsFromArray:@[ newGroup, newEntry, newEntryFromTemplate ]];
*/
}
if(insertDuplicate) {
MPContextmenuHelperBeginSection(items);

View File

@@ -51,11 +51,16 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
/* AES */
@property (weak) IBOutlet NSTextField *aesEncryptionRoundsTextField;
/* Argon2 */
@property (weak) IBOutlet NSTextField *argon2ThreadsTextField;
@property (weak) IBOutlet NSTextField *argon2IterationsTextField;
@property (weak) IBOutlet NSTextField *argon2MemoryTextField;
@property (weak) IBOutlet NSStepper *argon2MemoryStepper;
/* Argon2d */
@property (weak) IBOutlet NSTextField *argon2dThreadsTextField;
@property (weak) IBOutlet NSTextField *argon2dIterationsTextField;
@property (weak) IBOutlet NSTextField *argon2dMemoryTextField;
@property (weak) IBOutlet NSStepper *argon2dMemoryStepper;
/* Argon2id */
@property (weak) IBOutlet NSTextField *argon2idThreadsTextField;
@property (weak) IBOutlet NSTextField *argon2idIterationsTextField;
@property (weak) IBOutlet NSTextField *argon2idMemoryTextField;
@property (weak) IBOutlet NSStepper *argon2idMemoryStepper;
/* Advanced Tab*/
@property (weak) IBOutlet NSButton *enableHistoryCheckButton;
@@ -78,6 +83,7 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
@property (weak) IBOutlet NSStepper *recommendKeyChangeIntervalStepper;
@property (weak) IBOutlet NSTextField *enforceKeyChangeIntervalTextField;
@property (weak) IBOutlet NSStepper *enforceKeyChangeIntervalStepper;
@property (strong) IBOutlet NSTextField *lastKeyChangeTextField;
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab;

View File

@@ -39,7 +39,8 @@
NSString *_missingFeature;
}
@property (assign) NSInteger argon2Memory;
@property (assign) NSInteger argon2dMemory;
@property (assign) NSInteger argon2idMemory;
@property (assign) BOOL enableHistory;
@property (assign) NSInteger maxiumHistoryItems;
@@ -107,7 +108,6 @@
/* General */
KPKMetaData *metaData = ((MPDocument *)self.document).tree.metaData;
/* TODO move settingsChanged updates to KeePassKit as it's the models responsibility */
metaData.settingsChanged = NSDate.date;
metaData.databaseDescription = self.databaseDescriptionTextView.string;
metaData.databaseName = self.databaseNameTextField.stringValue;
@@ -164,21 +164,28 @@
/* Security */
metaData.cipherUUID = self.cipherPopupButton.selectedItem.representedObject;
KPKAESKeyDerivation *aesKdf = [[KPKAESKeyDerivation alloc] initWithParameters:[KPKAESKeyDerivation defaultParameters]];
KPKArgon2DKeyDerivation *argon2Kdf = [[KPKArgon2DKeyDerivation alloc] initWithParameters:[KPKArgon2DKeyDerivation defaultParameters]];
// FIXME: add Argon2id support!
NSUUID *selectedKdfUUID = self.keyDerivationSettingsTabView.selectedTabViewItem.identifier;
KPKAESKeyDerivation *aesKdf = [[KPKAESKeyDerivation alloc] initWithParameters:[KPKAESKeyDerivation defaultParameters]];
KPKArgon2DKeyDerivation *argon2dKdf = [[KPKArgon2DKeyDerivation alloc] initWithParameters:[KPKArgon2DKeyDerivation defaultParameters]];
KPKArgon2IDKeyDerivation *argon2idKdf = [[KPKArgon2IDKeyDerivation alloc] initWithParameters:[KPKArgon2IDKeyDerivation defaultParameters]];
if([selectedKdfUUID isEqual:aesKdf.uuid]) {
aesKdf.rounds = self.aesEncryptionRoundsTextField.integerValue;
metaData.keyDerivationParameters = aesKdf.parameters;
}
else if([selectedKdfUUID isEqual:argon2Kdf.uuid]) {
argon2Kdf.iterations = self.argon2IterationsTextField.integerValue;
argon2Kdf.memory = self.argon2Memory;
argon2Kdf.threads = self.argon2ThreadsTextField.intValue;
metaData.keyDerivationParameters = argon2Kdf.parameters;
else if([selectedKdfUUID isEqual:argon2dKdf.uuid]) {
argon2dKdf.iterations = self.argon2dIterationsTextField.integerValue;
argon2dKdf.memory = self.argon2dMemory;
argon2dKdf.threads = self.argon2dThreadsTextField.intValue;
metaData.keyDerivationParameters = argon2dKdf.parameters;
}
else if([selectedKdfUUID isEqual:argon2idKdf.uuid]) {
argon2idKdf.iterations = self.argon2idIterationsTextField.integerValue;
argon2idKdf.memory = self.argon2idMemory;
argon2idKdf.threads = self.argon2idThreadsTextField.intValue;
metaData.keyDerivationParameters = argon2idKdf.parameters;
}
/* Changes to metadata aren't backed by undomanager, thus we need to manually set the document dirty */
@@ -190,13 +197,22 @@
[self dismissSheet:0];
}
- (IBAction)benchmarkRounds:(id)sender {
- (IBAction)benchmarkParametersForDelay:(id)sender {
NSUUID *selectedKdfUUID = self.keyDerivationSettingsTabView.selectedTabViewItem.identifier;
if([selectedKdfUUID isEqual:[KPKAESKeyDerivation uuid]]) {
self.createKeyDerivationParametersButton.enabled = NO;
[KPKAESKeyDerivation parametersForDelay:1 completionHandler:^(NSDictionary * _Nonnull options) {
self.aesEncryptionRoundsTextField.integerValue = [options[KPKAESRoundsOption] unsignedInteger64Value];
self.createKeyDerivationParametersButton.enabled = YES;
}];
}
else if([selectedKdfUUID isEqual:[KPKArgon2DKeyDerivation uuid]]) {
// TODO: add benchmark
}
else if([selectedKdfUUID isEqual:[KPKArgon2IDKeyDerivation uuid]]) {
// TODO: add benchmark
}
}
- (void)updateView {
if(!self.isDirty) {
@@ -275,42 +291,57 @@
[self.keyDerivationPopupButton selectItemAtIndex:kdfIndex];
[self.keyDerivationSettingsTabView selectTabViewItemWithIdentifier:keyDerivation.uuid];
/* fill defaults for AES */
KPKAESKeyDerivation *aesKdf = [[KPKAESKeyDerivation alloc] initWithParameters:[KPKAESKeyDerivation defaultParameters]];
self.aesEncryptionRoundsTextField.integerValue = aesKdf.rounds;
/* fill defaults for Argon2d */
KPKArgon2DKeyDerivation *argon2dKdf = [[KPKArgon2DKeyDerivation alloc] initWithParameters:[KPKArgon2DKeyDerivation defaultParameters]];
self.argon2dIterationsTextField.integerValue = argon2dKdf.iterations;
self.argon2dMemory = argon2dKdf.memory;
self.argon2dThreadsTextField.integerValue = argon2dKdf.threads;
/* fill defaults for Argon2id */
KPKArgon2IDKeyDerivation *argon2idKdf = [[KPKArgon2IDKeyDerivation alloc] initWithParameters:[KPKArgon2IDKeyDerivation defaultParameters]];
self.argon2idIterationsTextField.integerValue = argon2idKdf.iterations;
self.argon2idMemory = argon2idKdf.memory;
self.argon2idThreadsTextField.integerValue = argon2idKdf.threads;
if([keyDerivation isMemberOfClass:KPKAESKeyDerivation.class]) {
/* set to database values */
KPKAESKeyDerivation *aesKdf = (KPKAESKeyDerivation *)keyDerivation;
self.aesEncryptionRoundsTextField.integerValue = aesKdf.rounds;
self.createKeyDerivationParametersButton.enabled = YES;
/* fill defaults for Argon2 */
KPKArgon2DKeyDerivation *argon2Kdf = [[KPKArgon2DKeyDerivation alloc] initWithParameters:[KPKArgon2DKeyDerivation defaultParameters]];
self.argon2IterationsTextField.integerValue = argon2Kdf.iterations;
self.argon2Memory = argon2Kdf.memory;
self.argon2ThreadsTextField.integerValue = argon2Kdf.threads;
}
else if([keyDerivation isMemberOfClass:KPKArgon2DKeyDerivation.class]) {
/* set to database value */
KPKArgon2DKeyDerivation *argon2Kdf = (KPKArgon2DKeyDerivation *)keyDerivation;
self.argon2Memory = argon2Kdf.memory;
self.argon2ThreadsTextField.integerValue = argon2Kdf.threads;
self.argon2IterationsTextField.integerValue = argon2Kdf.iterations;
/* fill defaults for AES */
KPKAESKeyDerivation *aesKdf = [[KPKAESKeyDerivation alloc] initWithParameters:[KPKAESKeyDerivation defaultParameters]];
self.aesEncryptionRoundsTextField.integerValue = aesKdf.rounds;
KPKArgon2DKeyDerivation *argon2dKdf = (KPKArgon2DKeyDerivation *)keyDerivation;
self.argon2dMemory = argon2dKdf.memory;
self.argon2dThreadsTextField.integerValue = argon2dKdf.threads;
self.argon2dIterationsTextField.integerValue = argon2dKdf.iterations;
}
else if([keyDerivation isMemberOfClass:KPKArgon2IDKeyDerivation.class]) {
// TODO: implement setup!
/* set to database value */
KPKArgon2IDKeyDerivation *argon2idKdf = (KPKArgon2IDKeyDerivation *)keyDerivation;
self.argon2idMemory = argon2idKdf.memory;
self.argon2idThreadsTextField.integerValue = argon2idKdf.threads;
self.argon2idIterationsTextField.integerValue = argon2idKdf.iterations;
}
else {
NSAssert(NO, @"Unkown key derivation");
}
self.argon2MemoryStepper.minValue = 8*1024; // 8KB minimum
self.argon2MemoryStepper.maxValue = NSIntegerMax;
self.argon2MemoryStepper.increment = 1024*1024; // 1 megabytes steps
[self.argon2MemoryTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2Memory)) options:nil];
[self.argon2MemoryStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2Memory)) options:nil];
self.argon2dMemoryStepper.minValue = 8*1024; // 8KB minimum
self.argon2dMemoryStepper.maxValue = NSIntegerMax;
self.argon2dMemoryStepper.increment = 1024*1024; // 1 megabytes steps
[self.argon2dMemoryTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2dMemory)) options:nil];
[self.argon2dMemoryStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2dMemory)) options:nil];
self.argon2idMemoryStepper.minValue = 8*1024; // 8KB minimum
self.argon2idMemoryStepper.maxValue = NSIntegerMax;
self.argon2idMemoryStepper.increment = 1024*1024; // 1 megabytes steps
[self.argon2idMemoryTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2idMemory)) options:nil];
[self.argon2idMemoryStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2idMemory)) options:nil];
NSUInteger cipherIndex = [self.cipherPopupButton.menu indexOfItemWithRepresentedObject:metaData.cipherUUID];
[self.cipherPopupButton selectItemAtIndex:cipherIndex];
@@ -386,6 +417,20 @@
[self.recommendKeyChangeIntervalTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
[self.recommendKeyChangeIntervalTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
((MPDayCountFormatter *)self.recommendKeyChangeIntervalTextField.formatter).valueFormat = valueFormat;
if(nil != tree.metaData.masterKeyChanged) {
NSString *keyChangeTextFormat = NSLocalizedString(@"LAST_DATABASE_KEY_CHANGE_DATE_%@", "Information about last key change date");
NSDateFormatter *changeDateFormatter = [[NSDateFormatter alloc] init];
changeDateFormatter.timeStyle = NSDateFormatterNoStyle;
changeDateFormatter.dateStyle = NSDateFormatterLongStyle;
NSString *keyChangeDateString = [changeDateFormatter stringFromDate:tree.metaData.masterKeyChanged];
self.lastKeyChangeTextField.stringValue = [NSString stringWithFormat:keyChangeTextFormat, keyChangeDateString];
}
else {
self.lastKeyChangeTextField.stringValue = NSLocalizedString(@"DATABASE_KEY_NEVER_CHANGED", "Displayed when the databse key was never changed/is not set");
}
}
- (void)_updateFirstResponder {

View File

@@ -0,0 +1,19 @@
//
// MPDocument+BiometricEncryptionSupport.h
// MacPass
//
// Created by Michael Starke on 22.08.22.
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
//
#import "MPDocument.h"
NS_ASSUME_NONNULL_BEGIN
@interface MPDocument (BiometricEncryptionSupport)
@property (nonatomic, readonly, copy, nullable) NSString *biometricKey;
@property (nonatomic, readonly, copy, nullable) NSData *encryptedKeyData;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,30 @@
//
// MPDocument+BiometricEncryptionSupport.m
// MacPass
//
// Created by Michael Starke on 22.08.22.
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
//
#import "MPDocument+BiometricEncryptionSupport.h"
#import "MPTouchIdCompositeKeyStore.h"
#import "NSString+MPHash.h"
@implementation MPDocument (BiometricEncryptionSupport)
@dynamic biometricKey;
- (NSString *)biometricKey {
return [self.fileURL.lastPathComponent sha1HexDigest];
}
- (NSData *)encryptedKeyData {
NSString *documentKey = self.biometricKey;
if(nil == documentKey) {
return nil;
}
return [MPTouchIdCompositeKeyStore.defaultStore loadEncryptedCompositeKeyForDocumentKey:documentKey];
}
@end

View File

@@ -42,17 +42,19 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
- (void)enterSearchWithContext:(MPEntrySearchContext *)context {
/* the search context is loaded via defaults */
self.searchContext = context;
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:NSUndoManagerDidRedoChangeNotification object:self.undoManager];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:NSUndoManagerDidUndoChangeNotification object:self.undoManager];
/* Do not do this since it seems to break the undo/redo grouping completly!
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:NSUndoManagerDidCloseUndoGroupNotification object:self.undoManager];
*/
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:KPKTreeDidAddEntryNotification object:self.tree];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:KPKTreeDidAddGroupNotification object:self.tree];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:KPKTreeDidRemoveEntryNotification object:self.tree];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:KPKTreeDidRemoveGroupNotification object:self.tree];
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidEnterSearchNotification object:self];
[self updateSearch:self];
/* clear selection */
self.selectedEntries = nil;
}
#pragma mark Actions
- (IBAction)perfromCustomSearch:(id)sender {
- (IBAction)performCustomSearch:(id)sender {
[self enterSearchWithContext:[MPEntrySearchContext userContext]];
}
@@ -74,11 +76,12 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
}
- (void)exitSearch:(id)sender {
[NSNotificationCenter.defaultCenter removeObserver:self name:NSUndoManagerDidUndoChangeNotification object:self.undoManager];
[NSNotificationCenter.defaultCenter removeObserver:self name:NSUndoManagerDidRedoChangeNotification object:self.undoManager];
/* No need to do this since we did not register in the first place see [MPDocument enterSearchWithContext:]
[NSNotificationCenter.defaultCenter removeObserver:self name:NSUndoManagerDidCloseUndoGroupNotification object:self.undoManager];
*/
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKTreeDidAddEntryNotification object:self.tree];
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKTreeDidAddGroupNotification object:self.tree];
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKTreeDidRemoveEntryNotification object:self.tree];
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKTreeDidRemoveGroupNotification object:self.tree];
self.searchContext = nil;
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidExitSearchNotification object:self];
}

View File

@@ -259,7 +259,7 @@ FOUNDATION_EXTERN NSString *const MPDocumentDidChangeSearchResults;
FOUNDATION_EXTERN NSString *const kMPDocumentSearchResultsKey;
@interface MPDocument (Search)
- (IBAction)perfromCustomSearch:(id)sender;
- (IBAction)performCustomSearch:(id)sender;
- (void)enterSearchWithContext:(MPEntrySearchContext *)context;
/* Should be called by the NSSearchTextField to update the search string */

View File

@@ -240,13 +240,6 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
- (void)close {
[self _cleanupLock];
/*
We store the last url. Restored windows are automatically handled.
If closeAllDocuments is set, all docs get this message
*/
if(self.fileURL.isFileURL) {
[[NSUserDefaults standardUserDefaults] setObject:self.fileURL.absoluteString forKey:kMPSettingsKeyLastDatabasePath];
}
self.tree = nil;
[super close];
}
@@ -405,7 +398,6 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
NSError *error;
KPKTree *otherTree;
if(key) {
otherTree = [[KPKTree alloc] initWithContentsOfUrl:url key:key error:&error];
}
@@ -673,8 +665,9 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
KPKEntry *newEntry = [self.tree createEntry:parent];
/* setting properties on entries is undoable, but we do not want to record this so disable on creation */
BOOL wasUndoEnabeld = self.undoManager.isUndoRegistrationEnabled;
[self.undoManager disableUndoRegistration];
KPK_SCOPED_DISABLE_UNDO_BEGIN(self.undoManager)
newEntry.title = NSLocalizedString(@"DEFAULT_ENTRY_TITLE", @"Title for a newly created entry");
if([self.tree.metaData.defaultUserName length] > 0) {
newEntry.username = self.tree.metaData.defaultUserName;
@@ -688,10 +681,9 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
newEntry.password = defaultPassword;
}
}
/* re-enable undo/redo if we did turn it off */
if(wasUndoEnabeld) {
[self.undoManager enableUndoRegistration];
}
KPK_SCOPED_DISABLE_UNDO_END
[newEntry addToGroup:parent];
[newEntry.undoManager setActionName:NSLocalizedString(@"NEW_ENTRY", "Action name for a newly created entry")];
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidAddEntryNotification
@@ -709,14 +701,13 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
}
KPKGroup *newGroup = [self.tree createGroup:parent];
/* setting properties on entries is undoable, but we do not want to record this so disable on creation */
BOOL wasUndoEnabeld = self.undoManager.isUndoRegistrationEnabled;
[self.undoManager disableUndoRegistration];
KPK_SCOPED_DISABLE_UNDO_BEGIN(self.undoManager);
newGroup.title = NSLocalizedString(@"DEFAULT_GROUP_NAME", @"Title for a newly created group");
newGroup.iconId = MPIconFolder;
/* re-enable undo/redo if we did turn it off */
if(wasUndoEnabeld) {
[self.undoManager enableUndoRegistration];
}
KPK_SCOPED_DISABLE_UNDO_END;
[newGroup addToGroup:parent];
[newGroup.undoManager setActionName:NSLocalizedString(@"NEW_GROUP", "Action name for a newly created group")];
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidAddGroupNotification
@@ -844,16 +835,16 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
}
- (void)duplicateEntryWithOptions:(KPKCopyOptions)options {
KPKEntry *duplicate;
KPKEntry *lastDuplicate;
for(KPKEntry *entry in self.selectedEntries) {
duplicate = [entry copyWithTitle:nil options:options];
[duplicate addToGroup:entry.parent];
lastDuplicate = [entry copyWithTitle:nil options:options];
[lastDuplicate addToGroup:entry.parent];
}
[self.undoManager setActionName:[NSString stringWithFormat:NSLocalizedString(@"DUPLICATE_ENTRIES_ACTION_NAME", @"Action name for duplicating entries"), self.selectedEntries.count]];
if(duplicate) {
if(lastDuplicate) {
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidAddEntryNotification
object:self
userInfo:@{ MPDocumentEntryKey: duplicate }];
userInfo:@{ MPDocumentEntryKey: lastDuplicate }];
}
}
@@ -890,6 +881,10 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
KPKGroup *targetGroup = targetGroups.count == 1 ? targetGroups.firstObject : nil;
if(self.encrypted || self.isReadOnly) {
if(anItem.action == @selector(revertDocumentToSaved:) ||
anItem.action == @selector(browseDocumentVersions:)) {
return YES;
}
return NO;
}
@@ -965,12 +960,18 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
}
- (void)_storeKeyURL:(NSURL *)keyURL {
if(self.isDraft) {
// we cannot store key files for draft documents
return;
}
NSMutableDictionary *keysForFiles = [[NSUserDefaults.standardUserDefaults dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases] mutableCopy];
MPAppDelegate *delegate = (MPAppDelegate *)[NSApp delegate];
if(!delegate.isAllowedToStoreKeyFile || nil == keyURL) {
/* user has removed the keyfile or we should not safe it so remove it */
if(self.fileURL) {
[keysForFiles removeObjectForKey:self.fileURL.path.sha1HexDigest];
}
}
else if([self.compositeKey hasKeyOfClass:KPKPasswordKey.class] && [self.compositeKey hasKeyOfClass:KPKFileKey.class]) {
if(nil == keysForFiles) {
keysForFiles = [[NSMutableDictionary alloc] initWithCapacity:1];

View File

@@ -31,6 +31,8 @@
#import "KeePassKit/KeePassKit.h"
#import "KPKFormat+MPUTIDetection.h"
#import "NSApplication+MPAdditions.h"
@interface MPDocumentController ()
@property (strong) IBOutlet NSView *accessoryView;
@@ -43,6 +45,14 @@
@implementation MPDocumentController
- (BOOL)hasEditedDocuments {
MPAppDelegate *delegate = NSApp.mp_delegate;
if(delegate.isTerminating) {
// store all open documents once?!
}
return [super hasEditedDocuments];
}
- (void)beginOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)inTypes completionHandler:(void (^)(NSInteger))completionHandler {
self.openPanel = openPanel;
if(!self.accessoryView) {
@@ -83,6 +93,16 @@
[super addDocument:document];
}
- (void)removeDocument:(NSDocument *)document {
MPAppDelegate *appDelegate = (MPAppDelegate *)NSApp.delegate;
if(appDelegate.isTerminating) {
if(document.fileURL.isFileURL) {
[[NSUserDefaults standardUserDefaults] setObject:document.fileURL.absoluteString forKey:kMPSettingsKeyLastDatabasePath];
}
}
[super removeDocument:document];
}
- (BOOL)reopenLastDocument {
if(self.documents.count > 0) {
return YES; // The document is already open
@@ -94,6 +114,11 @@
else {
NSString *lastPath = [NSUserDefaults.standardUserDefaults stringForKey:kMPSettingsKeyLastDatabasePath];
documentUrl = [NSURL URLWithString:lastPath];
NSError *error;
if(![documentUrl checkResourceIsReachableAndReturnError:&error]) {
[NSUserDefaults.standardUserDefaults removeObjectForKey:kMPSettingsKeyLastDatabasePath];
documentUrl = nil;
}
}
BOOL isFileURL = documentUrl.fileURL;
if(isFileURL) {

View File

@@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (readonly, strong) MPInspectorViewController *inspectorViewController;
- (void)registerNotificationsForDocument:(MPDocument *)document;
- (IBAction)toggleInspector:(id)sender;
- (IBAction)toggleInspector:(nullable id)sender;
- (void)showOutline;
@end

View File

@@ -69,6 +69,7 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
@property (strong) MPPasswordEditWindowController *passwordEditWindowController;
@property (strong) MPToolbarDelegate *toolbarDelegate;
@property (strong) MPFixAutotypeWindowController *fixAutotypeWindowController;
@property (nonatomic, assign) BOOL allowScreenshots;
//@property (nonatomic, copy) MPPasswordChangedBlock passwordChangedBlock;
@@ -84,6 +85,7 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
self = [super initWithWindow:nil];
if( self ) {
_firstResponder = nil;
_allowScreenshots = NO;
_toolbarDelegate = [[MPToolbarDelegate alloc] init];
_splitViewController = [[MPDocumentSplitViewController alloc] init];
_documentWindowDelegate = [[MPDocumentWindowDelegate alloc] init];
@@ -95,15 +97,33 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark Properties
- (void)setAllowScreenshots:(BOOL)allowScreenshots {
if (_allowScreenshots != allowScreenshots) {
_allowScreenshots = allowScreenshots;
}
self.window.sharingType = _allowScreenshots ? NSWindowSharingReadOnly : NSWindowSharingNone;
}
#pragma mark View Handling
- (void)windowDidLoad {
[super windowDidLoad];
self.window.delegate = self.documentWindowDelegate;
//self.window.styleMask |= NSWindowStyleMaskFullSizeContentView;
if (@available(macOS 11.0, *)) {
/* let the user decide how to dipsplay the toolbar */
BOOL useUnifiedToolbar = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyUseUnifiedToolbar];
if(useUnifiedToolbar) {
self.window.toolbarStyle = NSWindowToolbarStyleAutomatic;
// Do not use full size since the sidebar takes too much room!
// self.window.styleMask |= NSWindowStyleMaskFullSizeContentView;
}
else {
self.window.toolbarStyle = NSWindowToolbarStyleExpanded;
}
}
[self.window registerForDraggedTypes:@[NSURLPboardType]];
MPDocument *document = self.document;
@@ -117,6 +137,13 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
[self.splitViewController registerNotificationsForDocument:document];
[self.toolbarDelegate registerNotificationsForDocument:document];
// init the value then bind to settings
self.allowScreenshots = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyAllowScreenshots];
[self bind:NSStringFromSelector(@selector(allowScreenshots))
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyAllowScreenshots]
options:nil];
self.toolbar = [[NSToolbar alloc] initWithIdentifier:@"MainWindowToolbar"];
self.toolbar.autosavesConfiguration = YES;
self.toolbar.allowsUserCustomization = YES;
@@ -181,6 +208,10 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
- (void)_didUnlockDatabase:(NSNotification *)notification {
[self showEntries];
BOOL focusSearchAfterUnlock = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyFocusSearchAfterUnlock];
if(focusSearchAfterUnlock) {
[self.document performCustomSearch:self];
}
/* Show password reminders */
[self _presentPasswordIntervalAlerts];
}
@@ -474,7 +505,6 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
- (void)showEntries {
self.contentViewController = self.splitViewController;
[self.splitViewController showOutline];
}
- (void)showGroupInOutline:(id)sender {

View File

@@ -28,13 +28,12 @@
@implementation MPDocumentWindowDelegate
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender {
MPDocument *document = [[[sender draggingDestinationWindow] windowController] document];
MPDocument *document = sender.draggingDestinationWindow.windowController.document;
if(document.encrypted) {
return NSDragOperationNone;
}
NSPasteboard *draggingPasteBoard = [sender draggingPasteboard];
NSPasteboard *draggingPasteBoard = sender.draggingPasteboard;
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:@[NSURL.class] options:nil];
BOOL ok = YES;
@@ -52,7 +51,7 @@
}
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
NSPasteboard *draggingPasteBoard = [sender draggingPasteboard];
NSPasteboard *draggingPasteBoard = sender.draggingPasteboard;
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:@[NSURL.class] options:nil];
NSURL *url = arrayOfURLs.lastObject;
@@ -60,7 +59,7 @@
return NO;
}
/* Currently not working, as the underlying operations do not get the undomanager */
MPDocument *document = [sender draggingDestinationWindow].windowController.document;
MPDocument *document = sender.draggingDestinationWindow.windowController.document;
KPKGroup *parentGroup = document.selectedGroups.count == 1 ? document.selectedGroups.firstObject : document.root;
[document.undoManager beginUndoGrouping];
KPKEntry *entry = [document createEntry:parentGroup];

View File

@@ -0,0 +1,33 @@
//
// MPEntryAttributeViewController.h
// MacPass
//
// Created by Michael Starke on 14.10.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import <HNHUi/HNHUi.h>
#import "MPInspectorEditor.h"
NS_ASSUME_NONNULL_BEGIN
/// View controller to show and edit KPKAttributes of KPKEntries.
/// Set the represented object to the KPKAttribute the editor shoudl show/edit
/// The editor can be set to edit or view
@interface MPEntryAttributeViewController : NSViewController <MPInspectorEditor, HNHUITextFieldDelegate>
@property (strong) IBOutlet NSTextField *keyTextField;
@property (strong) IBOutlet HNHUISecureTextField *valueTextField;
@property (strong) IBOutlet NSButton *toggleProtectedButton;
@property (strong) IBOutlet NSButton *removeButton;
- (void)updateValues;
- (void)updateEditing;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,156 @@
//
// MPEntryAttributeViewController.m
// MacPass
//
// Created by Michael Starke on 14.10.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import "MPEntryAttributeViewController.h"
#import <HNHUi/HNHUi.h>
#import <KeePassKit/KeePassKit.h>
#import "MPPasteBoardController.h"
@interface MPEntryAttributeViewController () {
BOOL _isDefaultAttribute;
}
@property (readonly, nullable, strong) KPKAttribute *representedAttribute;
@end
@implementation MPEntryAttributeViewController
@synthesize isEditor = _isEditor;
- (instancetype)initWithNibName:(NSNibName)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self) {
_isEditor = NO;
_isDefaultAttribute = NO;
}
return self;
}
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
// set editor to false?
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString *placeHolder = NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected");
self.keyTextField.placeholderString = placeHolder;
self.valueTextField.placeholderString = placeHolder;
self.toggleProtectedButton.action = @selector(toggleDisplay:);
self.toggleProtectedButton.target = self.valueTextField;
[self updateValues];
[self updateEditing];
__weak MPEntryAttributeViewController *welf = self;
self.valueTextField.buttonTitle = NSLocalizedString(@"COPY", "Button to copy the value of an Attribute");
self.valueTextField.buttonActionBlock = ^void(NSTextField *tf) {
NSText *text = [welf.view.window fieldEditor:NO forObject:welf.valueTextField];
if([text isKindOfClass:NSTextView.class]) {
[welf textField:welf.valueTextField textView:(NSTextView *)text performAction:@selector(copy:)];
}
};
}
- (KPKAttribute *)representedAttribute {
if([self.representedObject isKindOfClass:KPKAttribute.class]) {
return (KPKAttribute *)self.representedObject;
}
return nil;
}
- (void)setIsEditor:(BOOL)isEditor {
_isEditor = isEditor;
[self updateEditing];
}
- (void)setRepresentedObject:(id)representedObject {
if(self.representedAttribute) {
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKWillChangeAttributeNotification object:self.representedObject];
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidChangeAttributeNotification object:self.representedObject];
}
super.representedObject = representedObject;
if(self.representedAttribute) {
[NSNotificationCenter.defaultCenter addObserver:self
selector:(@selector(_willChangeAttribute:))
name:KPKWillChangeAttributeNotification
object:self.representedAttribute];
[NSNotificationCenter.defaultCenter addObserver:self
selector:(@selector(_didChangeAttribute:))
name:KPKDidChangeAttributeNotification
object:self.representedAttribute];
}
_isDefaultAttribute = self.representedAttribute.isDefault;
[self updateValues];
}
- (BOOL)textField:(NSTextField *)textField textView:(NSTextView *)textView performAction:(SEL)action {
if(action != @selector(copy:)) {
return YES;
}
// Only copy action
MPPasteboardOverlayInfoType info = MPPasteboardOverlayInfoCustom;
NSMutableString *selectedValue = [[NSMutableString alloc] init];
for(NSValue *rangeValue in textView.selectedRanges) {
[selectedValue appendString:[textView.string substringWithRange:rangeValue.rangeValue]];
}
if(selectedValue.length == 0) {
[selectedValue setString:textField.stringValue];
}
NSString *name = @"";
if([self.representedAttribute.key isEqual:kKPKUsernameKey]) {
info = MPPasteboardOverlayInfoUsername;
}
/*else if([self.representedAttribute.key isEqual:kKPKPasswordKey]) {
info = MPPasteboardOverlayInfoPassword;
}
*/
else if([self.representedAttribute.key isEqual:kKPKURLKey]) {
info = MPPasteboardOverlayInfoURL;
}
else if([self.representedAttribute.key isEqual:kKPKTitleKey]) {
name = NSLocalizedString(@"TITLE", "Displayed name when title field was copied");
}
else {
name = self.representedAttribute.key;
}
[MPPasteBoardController.defaultController copyObject:selectedValue overlayInfo:info name:name atView:self.view];
return NO;
}
- (void)_willChangeAttribute:(NSNotification *)notification {
// nothing to d
}
- (void)_didChangeAttribute:(NSNotification *)notification {
[self updateValues];
}
- (void)updateValues {
self.view.hidden = (!self.isEditor && self.representedAttribute.value.length == 0);
self.keyTextField.stringValue = self.representedAttribute.key ? self.representedAttribute.key : @"";
self.valueTextField.stringValue = self.representedAttribute.value ? self.representedAttribute.value : @"";
self.valueTextField.showPassword = !self.representedAttribute.protect;
}
- (void)updateEditing {
self.keyTextField.editable = !_isDefaultAttribute && self.isEditor;
self.valueTextField.editable = self.isEditor;
self.keyTextField.selectable = YES;
self.valueTextField.selectable = YES;
self.toggleProtectedButton.hidden = _isDefaultAttribute;
self.removeButton.hidden = !self.isEditor || (self.isEditor && !_isDefaultAttribute);
}
@end

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryAttributeViewController">
<connections>
<outlet property="keyTextField" destination="m8q-FN-S8D" id="HzJ-cd-ifA"/>
<outlet property="removeButton" destination="Nmx-gC-8rG" id="eRy-l0-u0E"/>
<outlet property="toggleProtectedButton" destination="hAk-oD-dCj" id="js9-Hx-ycS"/>
<outlet property="valueTextField" destination="HZM-H4-dB4" id="56C-eA-J7G"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="251" height="43"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="No7-P9-4cl">
<rect key="frame" x="0.0" y="0.0" width="251" height="43"/>
<subviews>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="m8q-FN-S8D">
<rect key="frame" x="-2" y="29" width="255" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="AttributeName" id="MQc-TE-UjE">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="horizontal" alignment="top" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="LBt-0e-cUK">
<rect key="frame" x="0.0" y="0.0" width="251" height="21"/>
<subviews>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HZM-H4-dB4" customClass="HNHUISecureTextField">
<rect key="frame" x="0.0" y="0.0" width="181" height="21"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="sO3-xr-VwO">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="delegate" destination="-2" id="Dm6-8t-HmN"/>
</connections>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hAk-oD-dCj">
<rect key="frame" x="179" y="-6" width="44" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSLockLockedTemplate" imagePosition="only" alignment="center" alternateImage="NSLockUnlockedTemplate" lineBreakMode="truncatingTail" borderStyle="border" inset="2" id="f80-K9-DO7">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Nmx-gC-8rG">
<rect key="frame" x="214" y="-6" width="44" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSRemoveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="179-uk-89S">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstItem="No7-P9-4cl" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="0cj-uh-lAy"/>
<constraint firstAttribute="trailing" secondItem="No7-P9-4cl" secondAttribute="trailing" id="Awb-Of-fpP"/>
<constraint firstAttribute="bottom" secondItem="No7-P9-4cl" secondAttribute="bottom" id="MX2-as-4EI"/>
<constraint firstItem="No7-P9-4cl" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="mbE-gq-jDF"/>
</constraints>
<point key="canvasLocation" x="-434.5" y="134"/>
</customView>
</objects>
<resources>
<image name="NSLockLockedTemplate" width="14" height="15"/>
<image name="NSLockUnlockedTemplate" width="17" height="15"/>
<image name="NSRemoveTemplate" width="14" height="4"/>
</resources>
</document>

View File

@@ -33,6 +33,8 @@
#import "MPReferenceBuilderViewController.h"
#import "MPTOTPViewController.h"
#import "MPTOTPSetupViewController.h"
#import "MPEntryAttributeViewController.h"
#import "MPNodeExpirationViewController.h"
#import "MPPrettyPasswordTransformer.h"
#import "NSString+MPPasswordCreation.h"
@@ -59,6 +61,18 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
MPEntryTabAutotype
};
typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
MPInpspectorEditorIndexImageEditor,
MPInpspectorEditorIndexTitle,
MPInpspectorEditorIndexUsername,
MPInpspectorEditorIndexPassword,
MPInpspectorEditorIndexURL,
MPInpspectorEditorIndexExpires,
MPInpspectorEditorIndexTags,
MPInpspectorEditorIndexDefaultCount
};
@interface NSObject (MPAppKitPrivateAPI)
- (void)_searchWithGoogleFromMenu:(id)obj;
@end
@@ -75,6 +89,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
MPWindowTitleComboBoxDelegate *_windowTitleMenuDelegate;
MPTagsTokenFieldDelegate *_tagTokenFieldDelegate;
MPAddCustomFieldContextMenuDelegate *_addCustomFieldContextMenuDelegate;
NSMutableArray<NSViewController<MPInspectorEditor> *> *_attributeEditorViewControllers;
}
@property (nonatomic, assign) BOOL showPassword;
@@ -111,6 +126,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
_customFieldTableDelegate.viewController = self;
_addCustomFieldContextMenuDelegate.viewController = self;
_attributeEditorViewControllers = [[NSMutableArray alloc] init];
_activeTab = MPEntryTabGeneral;
}
return self;
@@ -124,8 +140,19 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
}
- (void)setRepresentedObject:(id)representedObject {
if(self.representedObject) {
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKWillChangeEntryNotification object:self.representedEntry];
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidChangeEntryNotification object:self.representedEntry];
}
super.representedObject = representedObject;
self.totpViewController.representedObject = self.representedObject;
[self _updateEditors];
/* only register for a single entry! */
if(self.representedEntry) {
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_willChangeEntry:) name:KPKWillChangeEntryNotification object:self.representedEntry];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didChangeEntry:) name:KPKDidChangeEntryNotification object:self.representedEntry];
}
}
- (void)viewDidLoad {
@@ -185,10 +212,11 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
self.tagsTokenField.delegate = _tagTokenFieldDelegate;
[self _setupTOPTView];
[self _setupAttributeEditors];
[self _updateEditors];
[self _setupCustomFieldsButton];
[self _setupViewBindings];
[self _updateFieldVisibilty];
}
- (void)registerNotificationsForDocument:(MPDocument *)document {
@@ -318,7 +346,6 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
return YES;
}
}
#pragma mark -
#pragma mark QLPreviewPanelDelegate
@@ -464,6 +491,10 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
#pragma mark -
#pragma mark Entry Selection
- (void)_updateEntryValues {
// TODO implement binding less model update
}
- (void)_setupViewBindings {
/* Disable for history view */
NSArray *inputs = @[self.titleTextField,
@@ -594,17 +625,39 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
//[self.addCustomFieldButton setEnabled:NO forSegment:MPContextButtonSegmentContextButton];
}
- (void)_updateFieldVisibilty {
}
- (void)_setupTOPTView {
- (void)_setupAttributeEditors {
self.totpViewController = [[MPTOTPViewController alloc] init];
NSInteger urlindex = [self.fieldsStackView.arrangedSubviews indexOfObject:self.URLTextField];
NSAssert(urlindex != NSNotFound, @"Missing reference view. This should not happen!");
[self addChildViewController:self.totpViewController];
[self.fieldsStackView insertArrangedSubview:self.totpViewController.view atIndex:urlindex - 1];
/*
MPNodeExpirationViewController *vc = [[MPNodeExpirationViewController alloc] init];
vc.isEditor = NO;
[_attributeEditorViewControllers addObject:vc];
[self.fieldsStackView addArrangedSubview:vc.view];
MPEntryAttributeViewController *vc = [[MPEntryAttributeViewController alloc] init];
vc.isEditor = NO;
[_attributeEditorViewControllers addObject:vc];
[self.fieldsStackView addArrangedSubview:vc.view];
for(NSUInteger index = 0; index < kKPKDefaultEntryKeysCount; index++) {
MPEntryAttributeViewController *vc = [[MPEntryAttributeViewController alloc] init];
vc.isEditor = NO;
[_attributeEditorViewControllers addObject:vc];
[self.fieldsStackView addArrangedSubview:vc.view];
}
*/
}
- (void)_updateEditors {
self.totpViewController.representedObject = self.representedObject;
/* Update all the Attribute editors
_attributeEditorViewControllers[MPInpspectorEditorIndexUsername].representedObject = [self.representedEntry attributeWithKey:kKPKUsernameKey];
*/
}
#pragma mark -
@@ -698,6 +751,19 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
#pragma mark -
#pragma mark KPKEntry Notifications
- (void)_willChangeEntry:(NSNotification *)notification {
NSLog(@"willChangeEntry");
}
- (void)_didChangeEntry:(NSNotification *)notification {
if(notification.object != self.representedObject) {
NSLog(@"Skipping: didChangeEntry:%@, we do not need this change!", notification.object);
return;
}
NSLog(@"didChangeEntry:%@", notification.object);
[self _updateEntryValues];
}
- (void)_didChangeAttribute:(NSNotification *)notification {
}

View File

@@ -0,0 +1,18 @@
//
// MPEntryPasswordAttributeViewController.h
// MacPass
//
// Created by Michael Starke on 18.10.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "MPEntryAttributeViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface MPEntryPasswordAttributeViewController : MPEntryAttributeViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,37 @@
//
// MPEntryPasswordAttributeViewController.m
// MacPass
//
// Created by Michael Starke on 18.10.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import "MPEntryPasswordAttributeViewController.h"
#import <HNHUi/HNHUi.h>
#import <KeePassKit/KeePassKit.h>
@interface MPEntryPasswordAttributeViewController ()
@property (strong) IBOutlet HNHUISecureTextField *passwordTextField;
@property (strong) IBOutlet NSButton *togglePasswordButton;
@property (strong) IBOutlet NSButton *generatePasswordButton;
@property (strong, nullable, readonly) KPKAttribute *representedAttribute;
@end
@implementation MPEntryPasswordAttributeViewController
- (void)updateValues {
self.view.hidden = (!self.isEditor && self.representedAttribute.value.length == 0);
self.passwordTextField.stringValue = self.representedAttribute.value ? self.representedAttribute.value : @"";
}
- (void)updateEditing {
self.generatePasswordButton.hidden = !self.isEditor;
self.passwordTextField.editable = self.isEditor;
self.passwordTextField.selectable = YES;
}
@end

View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryPasswordAttributeViewController">
<connections>
<outlet property="generatePasswordButton" destination="UlI-yI-Sqn" id="sKR-Rd-2LC"/>
<outlet property="keyTextField" destination="2aN-Ps-z4K" id="ua7-Km-K5o"/>
<outlet property="passwordTextField" destination="tpF-hp-29r" id="2pM-fr-9l0"/>
<outlet property="togglePasswordButton" destination="AY0-XE-8S7" id="IwM-pB-tQn"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="480" height="42"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jTp-ga-xuT">
<rect key="frame" x="0.0" y="0.0" width="480" height="42"/>
<subviews>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2aN-Ps-z4K">
<rect key="frame" x="-2" y="28" width="484" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Password" id="Piv-zL-dtc">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="249" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XRh-Fs-reW">
<rect key="frame" x="0.0" y="0.0" width="480" height="20"/>
<subviews>
<secureTextField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" contentType="oneTimeCode" translatesAutoresizingMaskIntoConstraints="NO" id="tpF-hp-29r" customClass="HNHUISecureTextField">
<rect key="frame" x="0.0" y="0.0" width="352" height="20"/>
<secureTextFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="CeT-F7-Vb3">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<allowedInputSourceLocales>
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
</allowedInputSourceLocales>
</secureTextFieldCell>
<connections>
<outlet property="nextKeyView" destination="AY0-XE-8S7" id="uPk-2E-Bwh"/>
</connections>
</secureTextField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AY0-XE-8S7">
<rect key="frame" x="353" y="-7" width="50" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="NUE-lS-hzr">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<outlet property="nextKeyView" destination="UlI-yI-Sqn" id="6uu-J3-TEc"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UlI-yI-Sqn">
<rect key="frame" x="397" y="-7" width="90" height="32"/>
<buttonCell key="cell" type="push" title="Generate" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Rx9-ck-eKo">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="jTp-ga-xuT" secondAttribute="trailing" id="8qT-FW-gVh"/>
<constraint firstItem="jTp-ga-xuT" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Hla-na-Bw8"/>
<constraint firstAttribute="bottom" secondItem="jTp-ga-xuT" secondAttribute="bottom" id="pcp-4W-Bvc"/>
<constraint firstItem="jTp-ga-xuT" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="wEy-tv-xz0"/>
</constraints>
<point key="canvasLocation" x="173" y="112"/>
</customView>
</objects>
<resources>
<image name="NSQuickLookTemplate" width="21" height="13"/>
</resources>
</document>

View File

@@ -48,6 +48,7 @@ typedef NS_ENUM(NSUInteger, MPDisplayMode) {
- (IBAction)copyPassword:(id)sender;
- (IBAction)copyCustomAttribute:(id)sender;
- (IBAction)copyURL:(id)sender;
- (IBAction)copyTOTP:(id)sender;
- (IBAction)openURL:(id)sender;
- (IBAction)copyAsReference:(id)sender;

View File

@@ -49,6 +49,8 @@
#import "HNHUi/HNHUi.h"
#import "MPOpenURLHandler.h"
#import "MPNotifications.h"
#define STATUS_BAR_ANIMATION_TIME 0.15
@@ -65,10 +67,12 @@ NSString *const MPEntryTableAttachmentColumnIdentifier = @"MPEntryTableAttachmen
NSString *const MPEntryTableCreatedColumnIdentifier = @"MPEntryTableCreatedColumnIdentifier";
NSString *const MPEntryTableModfiedColumnIdentifier = @"MPEntryTableModfiedColumnIdentifier";
NSString *const MPEntryTableHistoryColumnIdentifier = @"MPEntryTableHistoryColumnIdentifier";
NSString *const MPEntryTableTOTPColumnIdentifier = @"MPEntryTableTOTPColumnIdentifier";
NSString *const _MPTableImageCellView = @"ImageCell";
NSString *const _MPTableStringCellView = @"StringCell";
NSString *const _MPTableSecurCellView = @"PasswordCell";
NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
@interface MPEntryViewController () {
BOOL _isDisplayingContextBar;
@@ -76,10 +80,11 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
}
@property (strong) MPContextBarViewController *contextBarViewController;
@property (strong) NSArray *filteredEntries;
@property (weak) IBOutlet NSTableView *entryTable;
@property (assign) MPDisplayMode displayMode;
@property (nonatomic, assign) BOOL totpColumnHidden;
@property (strong) NSTimer *totpUpdateTimer;
/* Constraints */
@@ -87,6 +92,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
@property (strong) NSLayoutConstraint *contextBarTopConstraint;
@property (nonatomic, strong) MPEntryTableDataSource *dataSource;
@property (nonatomic) BOOL displayClearTextPasswords;
@end
@@ -100,11 +106,19 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self) {
_isDisplayingContextBar = NO;
_totpColumnHidden = NO;
_displayMode = MPDisplayModeEntries;
_entryArrayController = [[NSArrayController alloc] init];
_dataSource = [[MPEntryTableDataSource alloc] init];
_dataSource.viewController = self;
_contextBarViewController = [[MPContextBarViewController alloc] init];
_displayClearTextPasswords = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyDisplayClearTextPasswordsInEntryList];
[self bind:NSStringFromSelector(@selector(displayClearTextPasswords))
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyDisplayClearTextPasswordsInEntryList]
options:nil];
[self _setupEntryBindings];
}
return self;
@@ -151,6 +165,8 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
NSTableColumn *modifiedColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableModfiedColumnIdentifier];
NSTableColumn *historyColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableHistoryColumnIdentifier];
NSTableColumn *indexColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableIndexColumnIdentifier];
NSTableColumn *totpTableColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableTOTPColumnIdentifier];
notesColumn.minWidth = 40.0;
attachmentsColumn.minWidth = 40.0;
createdColumn.minWidth = 40.0;
@@ -163,6 +179,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
[self.entryTable addTableColumn:modifiedColumn];
[self.entryTable addTableColumn:createdColumn];
[self.entryTable addTableColumn:historyColumn];
[self.entryTable addTableColumn:totpTableColumn];
[self.entryTable addTableColumn:indexColumn];
parentColumn.identifier = MPEntryTableParentColumnIdentifier;
@@ -185,6 +202,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
parentColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:parentTitleKeyPath ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
modifiedColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:timeInfoModificationTimeKeyPath ascending:YES selector:@selector(compare:)];
createdColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:timeInfoCreationTimeKeyPath ascending:YES selector:@selector(compare:)];
totpTableColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(timeOTP)) ascending:YES selector:@selector(compare:)];
indexColumn.headerCell.stringValue = @"";
indexColumn.headerToolTip = NSLocalizedString(@"ENTRY_INDEX_COLUMN_TOOLTIP", "Tooltip displayed on the index header cell");
@@ -198,6 +216,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
createdColumn.headerCell.stringValue = NSLocalizedString(@"CREATED", "Creating date column title");
modifiedColumn.headerCell.stringValue = NSLocalizedString(@"MODIFIED", "Modification date column title");
historyColumn.headerCell.stringValue = NSLocalizedString(@"HISTORY", "History count column title");
totpTableColumn.headerCell.stringValue = NSLocalizedString(@"TOPT", "TOTP column title");
[self.entryTable bind:NSContentBinding toObject:self.entryArrayController withKeyPath:NSStringFromSelector(@selector(arrangedObjects)) options:nil];
[self.entryTable bind:NSSortDescriptorsBinding toObject:self.entryArrayController withKeyPath:NSStringFromSelector(@selector(sortDescriptors)) options:nil];
@@ -207,7 +226,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
// bind NSArrayController sorting so that sort order gets auto-saved
// see: http://simx.me/technonova/software_development/sort_descriptors_nstableview_bindings_a.html
[self.entryArrayController bind:NSSortDescriptorsBinding
toObject:[NSUserDefaultsController sharedUserDefaultsController]
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEntryTableSortDescriptors]
options:@{ NSValueTransformerNameBindingOption: NSUnarchiveFromDataTransformerName }];
@@ -222,6 +241,18 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
if(parentIndex != 1) {
[self.entryTable moveColumn:parentIndex toColumn:1];
}
[self _updateTOTPTimer];
}
- (void)setDisplayClearTextPasswords:(BOOL)displayClearTextPasswords {
if(_displayClearTextPasswords == displayClearTextPasswords) {
return;
}
_displayClearTextPasswords = displayClearTextPasswords;
NSTableColumn *passwordColumn = [self.entryTable tableColumnWithIdentifier:MPEntryTablePasswordColumnIdentifier];
if(!passwordColumn.isHidden) {
[self.entryTable reloadData];
}
}
- (NSResponder *)reconmendedFirstResponder {
@@ -240,6 +271,11 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
[self.contextBarViewController registerNotificationsForDocument:document];
}
- (void)setTotpColumnHidden:(BOOL)toptColumnVisible {
_totpColumnHidden = toptColumnVisible;
[self _updateTOTPTimer];
}
#pragma mark NSTableViewDelgate
- (void)_tableDidScroll:(NSNotification *)notification {
@@ -271,8 +307,10 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
BOOL isCreatedColumn = [tableColumn.identifier isEqualToString:MPEntryTableCreatedColumnIdentifier];
BOOL isModifedColumn = [tableColumn.identifier isEqualToString:MPEntryTableModfiedColumnIdentifier];
BOOL isHistoryColumn = [tableColumn.identifier isEqualToString:MPEntryTableHistoryColumnIdentifier];
BOOL isTOPTColumn = [tableColumn.identifier isEqualToString:MPEntryTableTOTPColumnIdentifier];
NSTableCellView *view = nil;
BOOL displayClearTextPasswords = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyDisplayClearTextPasswordsInEntryList];
if(isTitleColumn || isGroupColumn) {
view = [tableView makeViewWithIdentifier:_MPTableImageCellView owner:self];
[view.textField unbind:NSValueBinding];
@@ -303,7 +341,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
[view.imageView bind:NSValueBinding toObject:view withKeyPath:parentIconImageKeyPath options:nil];
}
}
else if(isPasswordColum) {
else if(isPasswordColum && !displayClearTextPasswords) {
view = [tableView makeViewWithIdentifier:_MPTableSecurCellView owner:self];
NSString *passwordKeyPath = [NSString stringWithFormat:@"%@.%@",
NSStringFromSelector(@selector(objectValue)),
@@ -311,15 +349,19 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
NSDictionary *options = @{ NSValueTransformerBindingOption : [NSValueTransformer valueTransformerForName:MPStringLengthValueTransformerName] };
[view.textField bind:NSValueBinding toObject:view withKeyPath:passwordKeyPath options:options];
}
else {
if(isPasswordColum) {
view = [tableView makeViewWithIdentifier:_MPTableMonoSpacedStringCellView owner:self];
}
else {
view = [tableView makeViewWithIdentifier:_MPTableStringCellView owner:self];
}
[view.textField unbind:NSValueBinding];
view.textField.stringValue = @"";
if(!isModifedColumn && !isCreatedColumn) {
/* clean up old formatter that might be left */
view.textField.formatter = nil;
}
if(isModifedColumn || isCreatedColumn) {
if(!view.textField.formatter) {
/* Just use one formatter instance since it's expensive to create */
@@ -383,6 +425,16 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
NSStringFromSelector(@selector(history))];
[view.textField bind:NSValueBinding toObject:view withKeyPath:historyCountKeyPath options:nil];
}
else if(isPasswordColum) {
NSString *passwordKeyPath = [NSString stringWithFormat:@"%@.%@",
NSStringFromSelector(@selector(objectValue)),
NSStringFromSelector(@selector(password))];
[view.textField bind:NSValueBinding toObject:view withKeyPath:passwordKeyPath options:nil];
}
else if(isTOPTColumn) {
NSString *TOTPKeyPath = [NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(objectValue)), NSStringFromSelector(@selector(timeOTP))];
[view.textField bind:NSValueBinding toObject:view withKeyPath:TOTPKeyPath options:nil];
}
}
return view;
}
@@ -401,7 +453,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
return; // Not the right table view
}
/* do not update the current item if we are not in focus! */
if(tableView.window.firstResponder == self.entryTable) {
if(self.displayMode == MPDisplayModeSearchResults || tableView.window.firstResponder == self.entryTable) {
MPDocument *document = self.windowController.document;
document.selectedEntries = self.entryArrayController.selectedObjects;
}
@@ -501,9 +553,8 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
- (void)_didUpdateSearchResults:(NSNotification *)notification {
NSArray *result = notification.userInfo[kMPDocumentSearchResultsKey];
NSAssert(result != nil, @"Resutls should never be nil");
self.filteredEntries = result;
self.entryArrayController.content = self.filteredEntries;
NSAssert(result != nil, @"Results should never be nil");
self.entryArrayController.content = result;
[self.entryTable tableColumnWithIdentifier:MPEntryTableParentColumnIdentifier].hidden = NO;
[self _updateContextBar];
}
@@ -512,7 +563,6 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
- (void)_didExitSearch:(NSNotification *)notification {
[self.entryTable tableColumnWithIdentifier:MPEntryTableParentColumnIdentifier].hidden = YES;
self.entryArrayController.content = nil;
self.filteredEntries = nil;
self.displayMode = MPDisplayModeEntries;
[self _updateContextBar];
MPDocument *document = notification.object;
@@ -521,6 +571,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
- (void)_didEnterSearch:(NSNotification *)notification {
self.displayMode = MPDisplayModeSearchResults;
// FIXME: update selection?
[self _updateContextBar];
}
@@ -647,7 +698,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
[headerMenu addItemWithTitle:NSLocalizedString(@"MODIFIED", "Menu item to toggle display of modified date column in entry table") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"CREATED", "Menu item to toggle display of created date column in entry table") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"HISTORY", "Menu item to toggle display of history count column in entry table") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"TOTP", "Menu item to toggle display of TOTP count column in entry table") action:NULL keyEquivalent:@""];
NSArray *identifier = @[ MPEntryTableTitleColumnIdentifier,
MPEntryTableUserNameColumnIdentifier,
@@ -657,7 +708,8 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
MPEntryTableAttachmentColumnIdentifier,
MPEntryTableModfiedColumnIdentifier,
MPEntryTableCreatedColumnIdentifier,
MPEntryTableHistoryColumnIdentifier ];
MPEntryTableHistoryColumnIdentifier,
MPEntryTableTOTPColumnIdentifier];
NSDictionary *options = @{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName };
for(NSMenuItem *item in headerMenu.itemArray) {
@@ -666,15 +718,39 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
[item bind:NSValueBinding toObject:column withKeyPath:NSHiddenBinding options:options];
}
NSTableColumn *totpColumn = [self.entryTable tableColumnWithIdentifier:MPEntryTableTOTPColumnIdentifier];
[self bind:NSStringFromSelector(@selector(totpColumnHidden)) toObject:totpColumn withKeyPath:NSHiddenBinding options:nil]; // double binding works?
[headerMenu addItem:[NSMenuItem separatorItem]];
NSMenuItem *showPasswordsItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SHOW_CLEAR_TEXT_PASSWORDS", "Menu item to toggle display type of passwords") action:NULL keyEquivalent:@""];
[showPasswordsItem bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyDisplayClearTextPasswordsInEntryList]
options:nil];
[headerMenu addItem:showPasswordsItem];
self.entryTable.headerView.menu = headerMenu;
}
- (void)_updateTOTPTimer {
if(self.totpColumnHidden) {
[self.totpUpdateTimer invalidate];
self.totpUpdateTimer = nil;
return;
}
__weak MPEntryViewController *welf = self;
self.totpUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
NSIndexSet *columnIndex = [NSIndexSet indexSetWithIndex:[welf.entryTable columnWithIdentifier:MPEntryTableTOTPColumnIdentifier]];
NSIndexSet *rowIndexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,welf.entryTable.numberOfRows)];
[welf.entryTable reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndex];
}];
}
#pragma mark Actions
- (void)copyPassword:(id)sender {
NSArray *nodes = self.currentTargetNodes;
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
NSString *value = [selectedEntry.password kpk_finalValueForEntry:selectedEntry];
if(value) {
if(value.length > 0) {
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoPassword name:nil atView:self.view];
}
}
@@ -683,11 +759,20 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
NSArray *nodes = self.currentTargetNodes;
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
NSString *value = [selectedEntry.username kpk_finalValueForEntry:selectedEntry];
if(value) {
if(value.length > 0) {
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoUsername name:nil atView:self.view];
}
}
- (void)copyTOTP:(id)sender {
NSArray *nodes = self.currentTargetNodes;
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
NSString *value = selectedEntry.timeOTP;
if(value.length > 0) {
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoTOTP name:nil atView:self.view];
}
}
- (void)copyCustomAttribute:(id)sender {
NSArray *nodes = self.currentTargetNodes;
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
@@ -696,7 +781,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
NSAssert((index >= 0) && (index < selectedEntry.customAttributes.count), @"Index for custom field needs to be valid");
KPKAttribute *attribute = selectedEntry.customAttributes[index];
NSString *value = attribute.evaluatedValue;
if(value) {
if(value.length > 0) {
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoCustom name:attribute.key atView:self.view];
}
}
@@ -706,7 +791,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
NSArray *nodes = self.currentTargetNodes;
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
NSString *value = [selectedEntry.url kpk_finalValueForEntry:selectedEntry];
if(value) {
if(value.length > 0) {
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoURL name:nil atView:self.view];
}
}
@@ -716,27 +801,7 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
NSString *expandedURL = [selectedEntry.url kpk_finalValueForEntry:selectedEntry];
if(expandedURL.length > 0) {
NSURL *webURL = [NSURL URLWithString:expandedURL];
NSString *scheme = webURL.scheme;
if(!scheme) {
webURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", expandedURL]];
}
NSString *browserBundleID = [NSUserDefaults.standardUserDefaults stringForKey:kMPSettingsKeyBrowserBundleId];
NSURL *browserApplicationURL = browserBundleID ? [NSWorkspace.sharedWorkspace URLForApplicationWithBundleIdentifier:browserBundleID] : nil;
BOOL openedURL = NO;
if(browserApplicationURL) {
NSRunningApplication *urlOpeningApplication = [NSWorkspace.sharedWorkspace openURLs:@[webURL] withApplicationAtURL:browserApplicationURL options:NSWorkspaceLaunchDefault configuration:@{} error:nil];
openedURL = nil != urlOpeningApplication;
}
if(!openedURL) {
openedURL = [NSWorkspace.sharedWorkspace openURL:webURL];
}
if(!openedURL) {
NSLog(@"Unable to open URL %@", webURL);
}
[MPOpenURLHandler.sharedHandler openURL:expandedURL];
}
}
@@ -795,6 +860,9 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
else if([identifier isEqualToString:MPEntryTableUserNameColumnIdentifier]) {
[self copyUsername:nil];
}
else if([identifier isEqualToString:MPEntryTableTOTPColumnIdentifier]) {
[self copyTOTP:nil];
}
else if([identifier isEqualToString:MPEntryTableURLColumnIdentifier]) {
[self _executeURLColumnDoubleClick];
}

View File

@@ -0,0 +1,17 @@
//
// MPGeneralDatabaseSettingsViewController.h
// MacPass
//
// Created by Michael Starke on 18.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface MPGeneralDatabaseSettingsViewController : NSViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,66 @@
//
// MPGeneralDatabaseSettingsViewController.m
// MacPass
//
// Created by Michael Starke on 18.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import "MPGeneralDatabaseSettingsViewController.h"
#import "MPDocument.h"
#import <KeePassKit/KeePassKit.h>
@interface MPGeneralDatabaseSettingsViewController ()
@property (weak) IBOutlet NSTextField *databaseNameTextField;
@property (weak) IBOutlet NSPopUpButton *databaseCompressionPopupButton;
@property (weak) IBOutlet NSTextView *databaseDescriptionTextView;
@property (weak) IBOutlet NSColorWell *databaseColorColorWell;
@property (weak) IBOutlet NSTextField *fileVersionTextField;
@end
@implementation MPGeneralDatabaseSettingsViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
#pragma mark Private Helper
- (void)_setupView {
MPDocument *document = (MPDocument *)self.view.window.windowController.document;
KPKTree *tree = document.tree;
if(!tree) {
return; // nothing to read from
}
self.databaseNameTextField.stringValue = tree.metaData.databaseName;
self.databaseDescriptionTextView.string = tree.metaData.databaseDescription;
[self.databaseCompressionPopupButton selectItemAtIndex:tree.metaData.compressionAlgorithm];
self.databaseColorColorWell.color = tree.metaData.color ? tree.metaData.color : NSColor.clearColor;
NSData *fileData = [NSData dataWithContentsOfURL:document.fileURL];
if(!fileData) {
self.fileVersionTextField.stringValue = NSLocalizedString(@"UNKNOWN_FORMAT_FILE_NOT_SAVED_YET", "Database format is unknown since the file is not saved yet");
}
else {
KPKFileVersion version = [[KPKFormat sharedFormat] fileVersionForData:fileData];
NSDictionary *nameMappings = @{
@(KPKDatabaseFormatKdb): @"Kdb",
@(KPKDatabaseFormatKdbx): @"Kdbx",
@(KPKDatabaseFormatUnknown): NSLocalizedString(@"UNKNOWN_FORMAT", "Unknown database format.")
};
NSUInteger mayor = (version.version >> 16);
NSUInteger minor = (version.version & 0xFFFF);
self.fileVersionTextField.stringValue = [NSString stringWithFormat:@"%@ (Version %ld.%ld)", nameMappings[@(version.format)], mayor, minor];
}
}
@end

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPGeneralDatabaseSettingsViewController">
<connections>
<outlet property="databaseColorColorWell" destination="mT4-DP-GXO" id="LfS-qU-wBC"/>
<outlet property="databaseCompressionPopupButton" destination="Dq5-lP-zsS" id="11H-3z-4YL"/>
<outlet property="databaseDescriptionTextView" destination="YXY-Zl-7nu" id="s8Q-Fa-oaw"/>
<outlet property="databaseNameTextField" destination="ufI-vz-Iga" id="LYk-xb-BYQ"/>
<outlet property="fileVersionTextField" destination="7hG-5O-ghC" id="SoE-e8-vh3"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="434" height="244"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<gridView xPlacement="trailing" yPlacement="fill" rowAlignment="none" rowSpacing="8" columnSpacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="RYv-Ng-2bJ">
<rect key="frame" x="20" y="20" width="394" height="204"/>
<rows>
<gridRow id="xmM-rD-5oB"/>
<gridRow yPlacement="top" id="EPS-PJ-wZn"/>
<gridRow id="6vV-rV-ITV"/>
<gridRow id="zYk-Ml-HAt"/>
<gridRow id="kzN-Ch-gfi"/>
</rows>
<columns>
<gridColumn id="7Ct-m6-g6y"/>
<gridColumn xPlacement="leading" id="eQs-KV-hxL"/>
</columns>
<gridCells>
<gridCell row="xmM-rD-5oB" column="7Ct-m6-g6y" id="am5-3Y-3j8">
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JAh-R7-pLA">
<rect key="frame" x="-2" y="188" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="03Y-Lj-rRN">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="xmM-rD-5oB" column="eQs-KV-hxL" id="IfW-cA-EoE">
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ufI-vz-Iga">
<rect key="frame" x="106" y="188" width="280" height="16"/>
<constraints>
<constraint firstAttribute="width" constant="280" id="FXj-7O-RqC"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="jl4-gm-Hbo">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="EPS-PJ-wZn" column="7Ct-m6-g6y" id="uqN-Dk-NnR">
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WIS-Jx-S9I">
<rect key="frame" x="22" y="164" width="78" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="p9U-Kw-bI5">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="EPS-PJ-wZn" column="eQs-KV-hxL" id="Gb7-AY-QQA">
<scrollView key="contentView" ambiguous="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nST-Dm-Qr7">
<rect key="frame" x="106" y="80" width="280" height="100"/>
<clipView key="contentView" drawsBackground="NO" id="Is2-5k-gGr">
<rect key="frame" x="1" y="1" width="278" height="98"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView importsGraphics="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" smartInsertDelete="YES" id="YXY-Zl-7nu">
<rect key="frame" x="0.0" y="0.0" width="278" height="98"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<size key="minSize" width="278" height="98"/>
<size key="maxSize" width="463" height="10000000"/>
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
</textView>
</subviews>
</clipView>
<constraints>
<constraint firstAttribute="width" constant="280" id="UdJ-ki-epM"/>
<constraint firstAttribute="height" constant="100" id="XMz-jM-eIA"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="I22-YZ-tXl">
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="MI6-Kw-OxH">
<rect key="frame" x="263" y="1" width="16" height="98"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</gridCell>
<gridCell row="6vV-rV-ITV" column="7Ct-m6-g6y" id="EZb-Cx-iTX">
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8Dj-om-Zoe">
<rect key="frame" x="12" y="56" width="88" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="5Bm-Nl-53q">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="6vV-rV-ITV" column="eQs-KV-hxL" id="T5V-Av-aBB">
<popUpButton key="contentView" verticalHuggingPriority="750" verticalCompressionResistancePriority="749" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Dq5-lP-zsS">
<rect key="frame" x="103" y="52" width="72" height="21"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="GdG-Qp-e8U">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="8oG-i9-WDa">
<items>
<menuItem title="None" id="uX3-5x-6i6"/>
<menuItem title="GZip" tag="1" id="rIh-xx-34B"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="zYk-Ml-HAt" column="7Ct-m6-g6y" id="DAB-yY-fno">
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jgn-WC-9Qs">
<rect key="frame" x="59" y="24" width="41" height="24"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="shK-cG-3dL">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="zYk-Ml-HAt" column="eQs-KV-hxL" id="3lH-bt-QOB">
<colorWell key="contentView" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mT4-DP-GXO" customClass="HNHUIColorWell">
<rect key="frame" x="103" y="22" width="44" height="28"/>
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</colorWell>
</gridCell>
<gridCell row="kzN-Ch-gfi" column="7Ct-m6-g6y" id="SII-3r-mjn">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IX3-zX-Jvu">
<rect key="frame" x="27" y="0.0" width="73" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="File format:" id="FgL-0B-JE9">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="kzN-Ch-gfi" column="eQs-KV-hxL" id="3Hz-QZ-yB0">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7hG-5O-ghC">
<rect key="frame" x="104" y="0.0" width="72" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="VersionInfo" id="C2T-fi-WiV">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
</gridCells>
</gridView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="RYv-Ng-2bJ" secondAttribute="trailing" constant="20" id="atn-XX-tEa"/>
<constraint firstItem="RYv-Ng-2bJ" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="dcr-ZE-P1X"/>
<constraint firstAttribute="bottom" secondItem="RYv-Ng-2bJ" secondAttribute="bottom" constant="20" id="e2v-cE-ajw"/>
<constraint firstItem="RYv-Ng-2bJ" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="qLx-ot-9dT"/>
</constraints>
<point key="canvasLocation" x="-368" y="-227"/>
</customView>
</objects>
</document>

View File

@@ -26,16 +26,8 @@
@interface MPGeneralPreferencesController : MPViewController <MPPreferencesTab>
@property (strong) IBOutlet NSButton *clearPasteboardOnQuitCheckButton;
@property (strong) IBOutlet NSPopUpButton *clearPasteboardTimeoutPopup;
@property (strong) IBOutlet NSButton *preventUniversalClipboardSupportCheckButton;
@property (strong) IBOutlet NSPopUpButton *idleTimeOutPopup;
@property (strong) IBOutlet NSButton *lockOnSleepCheckButton;
@property (strong) IBOutlet NSButton *lockOnLogoutCheckButton;
@property (strong) IBOutlet NSButton *lockOnScreenSleepCheckButton;
@property (strong) IBOutlet NSButton *reopenLastDatabase;
@property (strong) IBOutlet NSButton *enableAutosaveCheckButton;
@property (strong) IBOutlet NSButton *rememberKeyFileCheckButton;
@property (strong) IBOutlet NSPopUpButton *fileChangeStrategyPopup;
@property (strong) IBOutlet NSPopUpButton *faviconDownloadMethodPopup;

View File

@@ -45,16 +45,8 @@
- (void)viewDidLoad {
NSUserDefaultsController *defaultsController = [NSUserDefaultsController sharedUserDefaultsController];
[self.clearPasteboardOnQuitCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyClearPasteboardOnQuit] options:nil];
[self.clearPasteboardTimeoutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPasteboardClearTimeout] options:nil];
[self.preventUniversalClipboardSupportCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPreventUniversalClipboard] options:nil];
[self.lockOnSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil];
[self.lockOnLogoutCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil];
[self.lockOnScreenSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnScreenSleep] options:nil];
[self.idleTimeOutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil];
[self.reopenLastDatabase bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch] options:nil];
[self.enableAutosaveCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEnableAutosave] options:nil];
[self.rememberKeyFileCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases] options:nil];
/* Favicon download method menu */
NSDictionary *faviconDownloadMethodDict = @{ @(MPFaviconDownloadMethodDirect) : NSLocalizedString(@"FAVICON_DOWNLOAD_METHOD_DIRECT", @"Favicon download method: directly download from the host"),
@@ -82,6 +74,5 @@
[self.fileChangeStrategyPopup.menu addItem:item];
}
[self.fileChangeStrategyPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyFileChangeStrategy] options:nil];
}
@end

View File

@@ -27,14 +27,15 @@
@interface MPGroupInspectorViewController : MPViewController
@property (strong) IBOutlet NSView *contentView;
@property (weak) IBOutlet HNHUITextField *titleTextField;
@property (strong) IBOutlet HNHUITextField *titleTextField;
@property (weak) IBOutlet NSButton *expiresCheckButton;
@property (weak) IBOutlet NSButton *expireDateSelectButton;
@property (strong) IBOutlet NSButton *expiresCheckButton;
@property (strong) IBOutlet NSButton *expireDateSelectButton;
@property (weak) IBOutlet NSPopUpButton *searchPopupButton;
@property (weak) IBOutlet NSPopUpButton *autotypePopupButton;
@property (weak) IBOutlet HNHUITextField *autotypeSequenceTextField;
@property (strong) IBOutlet NSPopUpButton *searchPopupButton;
@property (strong) IBOutlet NSPopUpButton *autotypePopupButton;
@property (strong) IBOutlet HNHUITextField *autotypeSequenceTextField;
@property (strong) IBOutlet NSTokenField *tagsTokenField;
- (void)registerNotificationsForDocument:(MPDocument *)document;
@end

View File

@@ -62,17 +62,17 @@
scrollView.showBottomShadow = NO;
scrollView.hasVerticalRuler = YES;
scrollView.drawsBackground = NO;
scrollView.translatesAutoresizingMaskIntoConstraints = NO;
/*scrollView.translatesAutoresizingMaskIntoConstraints = NO;
NSView *clipView = scrollView.contentView;
scrollView.documentView = self.contentView;
//scrollView.documentView = self.contentView;
NSDictionary *views = NSDictionaryOfVariableBindings(_contentView);
[clipView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_contentView]|"
options:0
metrics:nil
views:views]];
[self.view layoutSubtreeIfNeeded];
[self.view layoutSubtreeIfNeeded];*/
NSMenu *autotypeMenu = self.autotypePopupButton.menu;
NSMenuItem *inheritAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOTYPE_INHERIT", "Inherit autotype settings menu item") action:NULL keyEquivalent:@""];
@@ -127,6 +127,10 @@
toObject:self
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(isSearchEnabled))]
options:nil];
[self.tagsTokenField bind:NSValueBinding
toObject:self
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(tags))]
options:nullPlaceholderOptionsDict];
}
- (IBAction)toggleExpire:(NSButton*)sender {
KPKGroup *group = self.representedObject;

View File

@@ -0,0 +1,23 @@
//
// MPInspectorEditor.h
// MacPass
//
// Created by Michael Starke on 14.10.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/// The InpsectorEditor protocoll that should be implemented by editors used in the inspector
/// Individual editors shoudl adopt different APIs to accomodate their needs
/// The preferred way to set model data is to use the representedObject
@protocol MPInspectorEditor <NSObject>
@required
@property (nonatomic) BOOL isEditor;
@end
NS_ASSUME_NONNULL_END

View File

@@ -83,10 +83,14 @@
}
- (void)willShowTab {
if(!_hotKey) {
_hotKey = [DDHotKey hotKeyWithKeyData:[NSUserDefaults.standardUserDefaults dataForKey:kMPSettingsKeyGlobalAutotypeKeyDataKey]];
/* Change any invalid hotkeys to valid ones? */
}
/* Only call the setter if the hotkeys are different, otherwise the dealloc call will unregister them*/
if(![self.hotKeyTextField.hotKey isEqual:self.hotKey]) {
self.hotKeyTextField.hotKey = self.hotKey;
}
}
#pragma mark -
#pragma mark Properties
@@ -133,8 +137,8 @@
#pragma mark -
#pragma mark Keychain Actions
- (IBAction)RenewTouchIdKey:(id)sender {
NSData* publicKeyTag = [TouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
- (IBAction)renewTouchIdKey:(id)sender {
NSData* publicKeyTag = [MPTouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *publicKeyQuery = @{
(id)kSecClass: (id)kSecClassKey,
(id)kSecAttrApplicationTag: publicKeyTag,
@@ -142,11 +146,11 @@
};
OSStatus status = SecItemDelete((__bridge CFDictionaryRef)publicKeyQuery);
if (status != errSecSuccess) {
NSString* description = (__bridge NSString*)SecCopyErrorMessageString(status, NULL);
NSString* description = CFBridgingRelease(SecCopyErrorMessageString(status, NULL));
NSLog(@"Error while trying to delete public key from Keychain: %@", description);
}
NSData* privateKeyTag = [TouchIdUnlockPrivateKeyTag dataUsingEncoding:NSUTF8StringEncoding];
NSData* privateKeyTag = [MPTouchIdUnlockPrivateKeyTag dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *privateKeyQuery = @{
(id)kSecClass: (id)kSecClassKey,
(id)kSecAttrApplicationTag: privateKeyTag,
@@ -154,7 +158,7 @@
};
status = SecItemDelete((__bridge CFDictionaryRef)privateKeyQuery);
if (status != errSecSuccess) {
NSString* description = (__bridge NSString*)SecCopyErrorMessageString(status, NULL);
NSString* description = CFBridgingRelease(SecCopyErrorMessageString(status, NULL));
NSLog(@"Error while trying to delete private key from Keychain: %@", description);
}
}

View File

@@ -88,6 +88,9 @@
sizeof(chars) / sizeof(chars[0]),
&realLength,
chars);
if(0 != success) {
NSLog(@"Unable to transpate modifiedKey:%@", MPStringFromModifiedKey(modifiedKey));
}
return CFBridgingRelease(CFStringCreateWithCharacters(kCFAllocatorDefault, chars, realLength));
}

View File

@@ -77,7 +77,7 @@ static MPLockDaemon *_sharedInstance;
if(_lockOnLogout != lockOnLogout) {
_lockOnLogout = lockOnLogout;
if(_lockOnLogout) {
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willLogOutNotification:) name:NSWorkspaceSessionDidResignActiveNotification object:nil];
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_lockDocumentsForNotification:) name:NSWorkspaceSessionDidResignActiveNotification object:nil];
}
else {
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:@"" object:nil];
@@ -89,7 +89,7 @@ static MPLockDaemon *_sharedInstance;
if(_lockOnSleep != lockOnSleep) {
_lockOnSleep = lockOnSleep;
if(_lockOnSleep) {
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willSleepNotification:) name:NSWorkspaceWillSleepNotification object:nil];
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_lockDocumentsForNotification:) name:NSWorkspaceWillSleepNotification object:nil];
}
else {
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceWillSleepNotification object:nil];
@@ -101,7 +101,7 @@ static MPLockDaemon *_sharedInstance;
if(_lockOnScreenSleep != lockOnScreenSleep) {
_lockOnScreenSleep = lockOnScreenSleep;
if(_lockOnScreenSleep) {
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willScreenSleepNotification:) name:NSWorkspaceScreensDidSleepNotification object:nil];
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_lockDocumentsForNotification:) name:NSWorkspaceScreensDidSleepNotification object:nil];
}
else {
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceScreensDidSleepNotification object:nil];
@@ -120,14 +120,7 @@ static MPLockDaemon *_sharedInstance;
}
}
}
- (void)_willLogOutNotification:(NSNotification *)notification {
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
}
- (void)_willSleepNotification:(NSNotification *)notification {
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
}
- (void)_willScreenSleepNotification:(NSNotification *)notification {
- (void)_lockDocumentsForNotification:(NSNotification *)notification {
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
}

View File

@@ -40,6 +40,10 @@ NS_INLINE BOOL MPIsValidModifiedKey(MPModifiedKey k) {
return (k.keyCode == kMPUnknownKeyCode);
}
NS_INLINE NSString *MPStringFromModifiedKey(MPModifiedKey key) {
return [NSString stringWithFormat:@"keyCode:%hu %llud", key.keyCode, key.modifier];
}
@interface NSValue(NSValueMPModifiedKeyExtensions)
@property (nonatomic, readonly, assign) MPModifiedKey modifiedKeyValue;
+ (instancetype)valueWithModifiedKey:(MPModifiedKey)key;

View File

@@ -28,12 +28,7 @@ uint16_t const kMPUnknownKeyCode = UINT16_MAX;
- (MPModifiedKey)modifiedKeyValue {
MPModifiedKey key;
if(@available(macOS 10.13, *)) {
[self getValue:&key size:sizeof(MPModifiedKey)];
}
else {
[self getValue:&key];
}
return key;
}

View File

@@ -0,0 +1,18 @@
//
// MPNodeExpirationViewController.h
// MacPass
//
// Created by Michael Starke on 22.10.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "MPInspectorEditor.h"
NS_ASSUME_NONNULL_BEGIN
@interface MPNodeExpirationViewController : NSViewController <MPInspectorEditor>
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,79 @@
//
// MPNodeExpirationViewController.m
// MacPass
//
// Created by Michael Starke on 22.10.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import "MPNodeExpirationViewController.h"
#import "MPInspectorViewController.h"
#import "MPValueTransformerHelper.h"
#import <KeePassKit/KeePassKit.h>
@interface MPNodeExpirationViewController ()
@property (nonatomic, readonly, strong) KPKTimeInfo *representedTimeInfo;
@property (strong) IBOutlet NSButton *expiredCheckButton;
@property (strong) IBOutlet NSButton *pickExpireDateButton;
@end
@implementation MPNodeExpirationViewController
@synthesize isEditor = _isEditor;
- (void)viewDidLoad {
[super viewDidLoad];
self.pickExpireDateButton.action = @selector(pickExpiryDate:);
[self _updateValues];
}
- (KPKTimeInfo *)representedTimeInfo {
if([self.representedObject isKindOfClass:KPKTimeInfo.class]) {
return self.representedObject;
}
return nil;
}
- (void)setRepresentedObject:(id)representedObject {
if(self.representedTimeInfo) {
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKWillChangeTimeInfoNotification object:self.representedTimeInfo];
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidChangeTimeInfoNotification object:self.representedTimeInfo];
}
super.representedObject = representedObject;
if(self.representedTimeInfo) {
[NSNotificationCenter.defaultCenter addObserver:self
selector:(@selector(_willChangeTimeInfo:))
name:KPKWillChangeTimeInfoNotification
object:self.representedTimeInfo];
[NSNotificationCenter.defaultCenter addObserver:self
selector:(@selector(_didChangeTimeInfo:))
name:KPKDidChangeTimeInfoNotification
object:self.representedTimeInfo];
}
[self _updateValues];
}
- (void)setIsEditor:(BOOL)isEditor {
[self _updateValues];
}
- (void)_updateValues {
self.view.hidden = self.representedTimeInfo.expires;
self.expiredCheckButton.state = HNHUIStateForBool(self.representedTimeInfo.expires);
NSValueTransformer *dateTransformer = [NSValueTransformer valueTransformerForName:MPExpiryDateValueTransformerName];
self.expiredCheckButton.title = [dateTransformer transformedValue:self.representedTimeInfo.expirationDate];
self.expiredCheckButton.enabled = self.isEditor;
self.pickExpireDateButton.enabled = self.isEditor;
}
- (void)_willChangeTimeInfo:(NSNotification *)notification {}
- (void)_didChangeTimeInfo:(NSNotification *)notification {
[self _updateValues];
}
@end

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPNodeExpirationViewController">
<connections>
<outlet property="expiredCheckButton" destination="HAQ-Wk-M7P" id="C1J-nJ-Cdz"/>
<outlet property="pickExpireDateButton" destination="G7C-WZ-ad7" id="zvU-TW-Mar"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="187" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="248" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="l8k-GC-FnL">
<rect key="frame" x="0.0" y="0.0" width="187" height="20"/>
<subviews>
<button horizontalHuggingPriority="249" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="HAQ-Wk-M7P">
<rect key="frame" x="-2" y="1" width="150" height="18"/>
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="7kV-WE-lr3">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G7C-WZ-ad7">
<rect key="frame" x="149" y="-7" width="45" height="32"/>
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="hgC-Qj-aTs">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="pickExpiryDate:" target="-1" id="EGg-Lx-7s5"/>
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="l8k-GC-FnL" secondAttribute="bottom" id="6uR-g8-FVH"/>
<constraint firstItem="l8k-GC-FnL" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="AuC-c3-JPv"/>
<constraint firstItem="l8k-GC-FnL" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Qvv-5F-nde"/>
<constraint firstAttribute="trailing" secondItem="l8k-GC-FnL" secondAttribute="trailing" id="ckb-kh-R60"/>
</constraints>
<point key="canvasLocation" x="-91" y="-25"/>
</customView>
</objects>
<resources>
<image name="NSActionTemplate" width="15" height="15"/>
</resources>
</document>

View File

@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPNotificationPreferencesController">
@@ -14,6 +16,7 @@
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<point key="canvasLocation" x="140" y="-36"/>
</customView>
</objects>
</document>

View File

@@ -34,7 +34,7 @@
}
- (BOOL)getObjectValue:(out id __nullable * __nullable)obj forString:(NSString *)string errorDescription:(out NSString * __nullable * __nullable)error {
/* If super can pase without an error, all is fine */
/* If super can parse without an error, all is fine */
if([super getObjectValue:obj forString:string errorDescription:error]) {
return YES;
}

View File

@@ -0,0 +1,23 @@
//
// MPOpenURLHandler.h
// MacPass
//
// Created by Michael Starke on 11.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface MPOpenURLHandler : NSObject
@property (class, strong, readonly) MPOpenURLHandler *sharedHandler;
- (instancetype)init NS_UNAVAILABLE;
- (void)openURL:(NSString *)url;
- (BOOL)supportsPrivateBrowsingForBundleId:(NSString *)bundleId;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,86 @@
//
// MPOpenURLHandler.m
// MacPass
//
// Created by Michael Starke on 11.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import "MPOpenURLHandler.h"
#import "MPSettingsHelper.h"
@implementation MPOpenURLHandler
static MPOpenURLHandler *_defaultInstance;
+ (MPOpenURLHandler *)sharedHandler {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_defaultInstance = [[MPOpenURLHandler alloc] _init];
});
return _defaultInstance;
}
- (instancetype)init {
return _defaultInstance;
}
- (NSArray<NSString *>*)privateBrowsingArgsForBundleId:(NSString *)bundleId {
static NSDictionary *privateBrowsingArgs;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
privateBrowsingArgs = @{ @"com.google.Chrome" : @[@"--incognito"] };
});
return privateBrowsingArgs[bundleId];
}
- (instancetype)_init {
NSAssert(_defaultInstance == nil, @"Multiple instances of MPLockDaemon not allowed!");
self = [super init];
return self;
}
- (void)openURL:(NSString *)url {
NSURL *webURL = [NSURL URLWithString:url];
NSString *scheme = webURL.scheme;
if(!scheme) {
webURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", url]];
}
NSString *browserBundleID = [NSUserDefaults.standardUserDefaults stringForKey:kMPSettingsKeyBrowserBundleId];
NSURL *browserApplicationURL = browserBundleID ? [NSWorkspace.sharedWorkspace URLForApplicationWithBundleIdentifier:browserBundleID] : nil;
BOOL openedURL = NO;
if(browserApplicationURL) {
NSRunningApplication *urlOpeningApplication = [NSWorkspace.sharedWorkspace openURLs:@[webURL] withApplicationAtURL:browserApplicationURL options:NSWorkspaceLaunchDefault configuration:@{} error:nil];
openedURL = nil != urlOpeningApplication;
}
if(!openedURL) {
openedURL = [NSWorkspace.sharedWorkspace openURL:webURL];
}
if(!openedURL) {
NSLog(@"Unable to open URL %@", webURL);
}
}
- (BOOL)supportsPrivateBrowsingForBundleId:(NSString *)bundleId {
return (nil != [self privateBrowsingArgsForBundleId:bundleId]);
}
- (NSArray<NSString *>*)_launchArgumentsForBrowserBundleID:(NSString *)bundleId {
BOOL usePrivateBrowsing = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyUsePrivateBrowsingWhenOpeningURLs];
NSMutableArray<NSString *> *args = [[NSMutableArray alloc] init];
if(usePrivateBrowsing) {
NSArray<NSString *>* privateArgs = [self privateBrowsingArgsForBundleId:bundleId];
if(privateArgs) {
[args addObjectsFromArray:privateArgs];
}
}
return [args copy];
}
@end

View File

@@ -46,6 +46,7 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
@interface MPOutlineViewController () {
BOOL _bindingEstablished;
NSIndexSet *_storedSelectionIndexSet;
MPOutlineContextMenuDelegate *_menuDelegate;
}
@@ -100,7 +101,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
name:MPDidActivateViewNotification
object:self.outlineView];
NSView *clipView = self.outlineView.enclosingScrollView.contentView;
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(_outlineDidScroll:)
@@ -226,6 +226,8 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
- (void)registerNotificationsForDocument:(MPDocument *)document {
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didAddGroup:) name:MPDocumentDidAddGroupNotification object:document];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didRevertDocument:) name:MPDocumentDidRevertNotification object:document];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didEnterSearch:) name:MPDocumentDidEnterSearchNotification object:document];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didExitSearch:) name:MPDocumentDidExitSearchNotification object:document];
}
- (void)clearSelection {
@@ -273,6 +275,16 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
[self clearSelection];
}
- (void)_didEnterSearch:(NSNotification *)notification {
// store seelection
_storedSelectionIndexSet = self.outlineView.selectedRowIndexes;
[self clearSelection];
}
- (void)_didExitSearch:(NSNotification *)notification {
[self.outlineView selectRowIndexes:_storedSelectionIndexSet byExtendingSelection:NO];
}
- (id)itemUnderMouse {
NSPoint mouseLocation = [self.outlineView.window mouseLocationOutsideOfEventStream];
NSPoint localPoint = [self.outlineView convertPoint:mouseLocation fromView:self.outlineView.window.contentView];

View File

@@ -150,10 +150,39 @@ typedef NS_ENUM(NSUInteger, MPPasswordEditKeyError) {
- (IBAction)generateKey:(id)sender {
MPDocument *document = self.document;
NSData *data = [NSData kpk_generateKeyfileDataForFormat:document.tree.minimumVersion.format];
KPKFileVersion fileVersion = document.tree.minimumVersion;
NSArray *fileTypes;
KPKKeyFileType keyFileType;
if(fileVersion.format == KPKDatabaseFormatUnknown) {
return;
}
else if(fileVersion.format == KPKDatabaseFormatKdb) {
fileTypes = @[@"key"];
keyFileType = KPKKeyFileTypeBinary;
}
else {
if(fileVersion.version <= kKPKKdbxFileVersion3) {
keyFileType = KPKKeyFileTypeXMLVersion1;
fileTypes = @[@"key"];
}
// else if(fileVersion.version <=kKPKKdbxFileVersion4) {
// keyFileType = KPKKeyFileTypeXMLVersion1;
// fileTypes = @[@"key"];
// }
else if(fileVersion.version <= kKPKKdbxFileVersion4_1) {
keyFileType = KPKKeyFileTypeXMLVersion2;
fileTypes = @[@"keyx"];
}
else {
return;
}
}
NSData *data = [NSData kpk_generateKeyfileDataOfType:keyFileType];
if(data) {
NSSavePanel *savePanel = [NSSavePanel savePanel];
savePanel.allowedFileTypes = @[@"key", @"xml"];
savePanel.allowedFileTypes = fileTypes;
savePanel.canCreateDirectories = YES;
savePanel.title = NSLocalizedString(@"SAVE_KEYFILE", "Button title to save the generated key file");
[savePanel beginWithCompletionHandler:^(NSInteger result) {

View File

@@ -24,6 +24,7 @@
#import "MPAppDelegate.h"
#import "MPDocumentWindowController.h"
#import "MPDocument.h"
#import "MPDocument+BiometricEncryptionSupport.h"
#import "MPSettingsHelper.h"
#import "MPPathControl.h"
#import "MPTouchBarButtonCreator.h"
@@ -49,6 +50,7 @@
@property (weak) IBOutlet NSButton *cancelButton;
@property (weak) IBOutlet NSButton *touchIdButton;
@property (weak) IBOutlet NSButton *touchIdEnabledButton;
@property (strong) IBOutlet NSPopUpButton *touchIdModeButton;
@property (copy) NSString *message;
@property (copy) NSString *cancelLabel;
@@ -86,11 +88,35 @@
[self.enablePasswordCheckBox bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
[self.togglePasswordButton bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
[self.passwordTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
NSUserDefaultsController *defaultsController = [NSUserDefaultsController sharedUserDefaultsController];
[self.touchIdEnabledButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEntryTouchIdEnabled] options:nil];
self.touchIdEnabledButton.hidden = true;
NSMenu* touchIDMenu = [[NSMenu alloc] init];
NSMenuItem *disabledItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"TOUCHID_DISABLED", @"menu item to disable touchid key storage")
action:NULL
keyEquivalent:@""];
NSMenuItem *transitentItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"TOUCHID_TRANSIENT_KEY_STORAGE", @"menu item to enable transient touchid key storage")
action:NULL
keyEquivalent:@""];
NSMenuItem *persistentItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"TOUCHID_PERSISTENT_KEY_STORAGE", @"menu item to enable persisntent touchid key storage")
action:NULL
keyEquivalent:@""];
disabledItem.tag = MPTouchIDKeyStorageDisabled;
transitentItem.tag = MPTouchIDKeyStorageTransient;
persistentItem.tag = MPTouchIDKeyStoragePersistent;
touchIDMenu.itemArray = @[disabledItem, transitentItem, persistentItem];
self.touchIdModeButton.menu = touchIDMenu;
[self.touchIdModeButton bind:NSSelectedTagBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
options:nil];
[self.touchIdEnabledButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
options:nil];
self.touchIdEnabledButton.hidden = YES;
if (@available(macOS 10.13.4, *)) {
self.touchIdEnabledButton.hidden = false;
self.touchIdEnabledButton.hidden = NO;
[self _touchIdUpdateToolTip];
}
[self _reset];
@@ -143,12 +169,11 @@
[compositeKey addKey:passwordKey];
[compositeKey addKey:fileKey];
/* After the completion handler finished we no longer have a windowController set */
NSString* documentKey = NULL;
bool documentKeyValid = [self _touchIdGetKeyForCurrentDocument:&documentKey];
NSString* documentKey = [self biometricKeyForCurrentDocument];
BOOL result = self.completionHandler(compositeKey, keyURL, cancel, &error);
if(result) {
if(documentKeyValid) {
[self _touchIdUpdateKeyForCurrentDocument:compositeKey forDocumentKey:documentKey];
if(nil != documentKey) {
[MPTouchIdCompositeKeyStore.defaultStore saveCompositeKey:compositeKey forDocumentKey:documentKey];
}
return;
}
@@ -161,185 +186,44 @@
[self.view.window shakeWindow:nil];
}
}
- (void) _touchIdUpdateKeyForCurrentDocument: (KPKCompositeKey*)compositeKey forDocumentKey: (NSString*) documentKey{
NSData* encryptedKey = [self _touchIdEncryptCompositeKey:compositeKey];
[MPTouchIdCompositeKeyStore.defaultStore save:encryptedKey forDocumentKey:documentKey];
}
- (void) _touchIdCreateAndAddRSAKeyPair {
CFErrorRef error = NULL;
NSString* publicKeyLabel = @"MacPass TouchID Feature Public Key";
NSString* privateKeyLabel = @"MacPass TouchID Feature Private Key";
NSData* publicKeyTag = [TouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
NSData* privateKeyTag = [TouchIdUnlockPrivateKeyTag dataUsingEncoding:NSUTF8StringEncoding];
SecAccessControlRef access = NULL;
if (@available(macOS 10.13.4, *)) {
SecAccessControlCreateFlags flags = kSecAccessControlBiometryCurrentSet;
if (@available(macOS 10.15, *)) {
flags |= kSecAccessControlWatch | kSecAccessControlOr;
}
access = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
flags,
&error);
if(access == NULL) {
NSError *err = CFBridgingRelease(error);
NSLog(@"Error while trying to create AccessControl for TouchID unlock feature: %@", [err description]);
return;
}
NSDictionary* attributes = @{
(id)kSecAttrKeyType: (id)kSecAttrKeyTypeRSA,
(id)kSecAttrKeySizeInBits: @2048,
(id)kSecAttrSynchronizable: @NO,
(id)kSecPrivateKeyAttrs:
@{ (id)kSecAttrIsPermanent: @YES,
(id)kSecAttrApplicationTag: privateKeyTag,
(id)kSecAttrLabel: privateKeyLabel,
(id)kSecAttrAccessControl: (__bridge id)access
},
(id)kSecPublicKeyAttrs:
@{ (id)kSecAttrIsPermanent: @YES,
(id)kSecAttrApplicationTag: publicKeyTag,
(id)kSecAttrLabel: publicKeyLabel,
},
};
SecKeyRef result = SecKeyCreateRandomKey((__bridge CFDictionaryRef)attributes, &error);
if(result == NULL) {
NSError *err = CFBridgingRelease(error);
NSLog(@"Error while trying to create a RSA keypair for TouchID unlock feature: %@", [err description]);
}
else {
CFRelease(result);
}
}
else {
return;
}
}
- (NSData*) _touchIdEncryptCompositeKey: (KPKCompositeKey*) compositeKey {
NSData* encryptedKey = nil;
NSData* keyData = [NSKeyedArchiver archivedDataWithRootObject:compositeKey];
NSData* tag = [TouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *getquery = @{
(id)kSecClass: (id)kSecClassKey,
(id)kSecAttrApplicationTag: tag,
(id)kSecReturnRef: @YES,
};
SecKeyRef publicKey = NULL;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)getquery, (CFTypeRef *)&publicKey);
if (status != errSecSuccess) {
[self _touchIdCreateAndAddRSAKeyPair];
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)getquery, (CFTypeRef *)&publicKey);
if (status != errSecSuccess) {
NSString* description = (__bridge NSString*)SecCopyErrorMessageString(status, NULL);
NSLog(@"Error while trying to query public key from Keychain: %@", description);
return nil;
}
}
SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA256AESGCM;
BOOL canEncrypt = SecKeyIsAlgorithmSupported(publicKey, kSecKeyOperationTypeEncrypt, algorithm);
if(canEncrypt) {
CFErrorRef error = NULL;
encryptedKey = (NSData*)CFBridgingRelease(SecKeyCreateEncryptedData(publicKey, algorithm, (__bridge CFDataRef)keyData, &error));
if (!encryptedKey) {
NSError *err = CFBridgingRelease(error);
NSLog(@"Error while trying to decrypt the CompositeKey for TouchID unlock: %@", [err description]);
}
}
else {
NSLog(@"The key retreived from the Keychain is unable to encrypt data");
}
if (publicKey) {
CFRelease(publicKey);
}
return encryptedKey;
}
/*
- (KPKCompositeKey*)_touchIdDecryptCompositeKey:(NSData*)encryptedKey {
KPKCompositeKey* result = nil;
if(encryptedKey != nil) {
NSData* tag = [TouchIdUnlockPrivateKeyTag dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *queryPrivateKey = @{
(id)kSecClass: (id)kSecClassKey,
(id)kSecAttrApplicationTag: tag,
(id)kSecAttrKeyType: (id)kSecAttrKeyTypeRSA,
(id)kSecReturnRef: @YES,
};
SecKeyRef privateKey = NULL;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)queryPrivateKey, (CFTypeRef *)&privateKey);
if (status == errSecSuccess) {
SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA256AESGCM;
BOOL canDecrypt = SecKeyIsAlgorithmSupported(privateKey, kSecKeyOperationTypeDecrypt, algorithm);
if(canDecrypt) {
CFErrorRef error = NULL;
NSData* clearText = (NSData*)CFBridgingRelease(SecKeyCreateDecryptedData(privateKey, algorithm, (__bridge CFDataRef)encryptedKey, &error));
if (clearText) {
result = [NSKeyedUnarchiver unarchiveObjectWithData:clearText];
}
else {
NSError *err = CFBridgingRelease(error);
NSLog(@"Error while trying to decrypt password for TouchID unlock: %@", [err description]);
}
}
else {
NSLog(@"Key does not support decryption");
}
}
else {
NSString* description = (__bridge NSString*)SecCopyErrorMessageString(status, NULL);
NSLog(@"Error while trying to retrive private key for decryption: %@", description);
}
if (privateKey) {
CFRelease(privateKey);
}
}
return result;
}
NSError *error;
return [MPTouchIdCompositeKeyStore.defaultStore compositeKeyForEncryptedKeyData:encryptedKey error:&error];
}*/
- (bool) _touchIdGetKeyForCurrentDocument: (NSString**) result {
*result = NULL;
NSDocument* currentDocument = self.windowController.document;
if(currentDocument != NULL && currentDocument.fileURL != NULL && currentDocument.fileURL.lastPathComponent != NULL) {
*result = [NSString stringWithFormat:kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat, currentDocument.fileURL.lastPathComponent];
return true;
}
return false;
- (NSString *)biometricKeyForCurrentDocument {
MPDocument* currentDocument = (MPDocument *)self.windowController.document;
return currentDocument.biometricKey;
}
- (bool) _touchIdIsUnlockAvailable {
NSData* unused = NULL;
bool encryptedKeyAvailableForDocument = [self _touchIdGetEncrypedKeyMaterial:&unused];
return encryptedKeyAvailableForDocument;
}
- (bool) _touchIdGetEncrypedKeyMaterial: (NSData**) result {
NSString* documentKey = NULL;
*result = NULL;
if(![self _touchIdGetKeyForCurrentDocument:&documentKey]) {
return false;
}
return [MPTouchIdCompositeKeyStore.defaultStore load:result forDocumentKey:documentKey];
MPDocument *currentDocument = (MPDocument *)self.windowController.document;
return (nil != currentDocument.encryptedKeyData);
}
- (IBAction)unlockWithTouchID:(id)sender {
NSData* encryptedKey = NULL;
if(![self _touchIdGetEncrypedKeyMaterial:&encryptedKey]) {
[self.touchIdButton setEnabled:false];
NSString* documentKey = [self biometricKeyForCurrentDocument];
if(nil == documentKey) {
return;
}
KPKCompositeKey* compositeKey = [self _touchIdDecryptCompositeKey:encryptedKey];
if(compositeKey == NULL) {
[self.touchIdButton setEnabled:false];
NSData* encryptedKey = [MPTouchIdCompositeKeyStore.defaultStore loadEncryptedCompositeKeyForDocumentKey:documentKey];
if(!encryptedKey) {
self.touchIdButton.enabled = NO;
return;
}
NSError *error;
KPKCompositeKey* compositeKey = [MPTouchIdCompositeKeyStore.defaultStore compositeKeyForEncryptedKeyData:encryptedKey error:&error];
if(!compositeKey) {
self.touchIdButton.enabled = NO;
return;
}
bool success = self.completionHandler(compositeKey, NULL, false, &error);
if(success) {
return;
}
[self.touchIdButton setEnabled:false];
// TODO: clear encryptedKey if password was wrong? Show user feedback?
self.touchIdButton.enabled = NO;
[self _showError:error];
}
@@ -375,7 +259,7 @@
self.passwordTextField.stringValue = @"";
self.messageInfoTextField.hidden = (nil == self.message);
self.touchIdButton.hidden = ![self _touchIdIsUnlockAvailable];
[self.touchIdButton setEnabled:true];
self.touchIdButton.enabled = YES;
if(self.message) {
self.messageInfoTextField.stringValue = self.message;

View File

@@ -22,14 +22,33 @@
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, MPPasteboardOverlayInfoType) {
MPPasteboardOverlayInfoPassword,
MPPasteboardOverlayInfoUsername,
MPPasteboardOverlayInfoURL,
MPPasteboardOverlayInfoTOTP,
MPPasteboardOverlayInfoCustom, // overlay info that a custom field was copied
MPPasteboardOverlayInfoReference // overlay info that a reference that was copied
};
typedef MPPasteboardOverlayInfoType MPPasteboardContentInfoType;
@interface MPPasteBoardContentInfo : NSObject
@property (readonly, strong) NSImage *image;
@property (readonly, strong) NSString *label;
+ (instancetype)contentInforForCustomField:(NSString *)name;
+ (instancetype)passwordContentInfo; // creates a content info approporate for passwords
+ (instancetype)urlContentInfo; // creates a content info apprpriate for urls
- (instancetype)initWithImage:(NSImage * _Nullable)image label:(NSString * _Nullable)label NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithType:(MPPasteboardContentInfoType)type;
@end
@interface MPPasteBoardController : NSObject
/**
@@ -70,6 +89,9 @@ FOUNDATION_EXPORT NSString *const MPPasteBoardControllerDidClearClipboard;
@param name a custom name
@param view the view that initiated the copy action
*/
- (void)copyObject:(id<NSPasteboardWriting>)object overlayInfo:(MPPasteboardOverlayInfoType)overlayInfoType name:(NSString *)name atView:(NSView *)view;
- (void)copyObject:(id<NSPasteboardWriting>)object overlayInfo:(MPPasteboardOverlayInfoType)overlayInfoType name:(NSString * _Nullable)name atView:(NSView *)view;
- (void)copyObject:(id<NSPasteboardWriting>)object contentInfo:(MPPasteBoardContentInfo *)info atView:(NSView *)view;
@end
NS_ASSUME_NONNULL_END

View File

@@ -22,6 +22,7 @@
#import "MPPasteBoardController.h"
#import "MPSettingsHelper.h"
#import "MPIconHelper.h"
#import "MPOverlayWindowController.h"
/* Notifications */
@@ -126,6 +127,10 @@ NSString *const MPPasteBoardTypeSource = @"org.nspasteboard.source";
self.isEmpty = NO;
}
- (void)copyObject:(id<NSPasteboardWriting>)object contentInfo:(MPPasteBoardContentInfo *)info atView:(nonnull NSView *)view{
[self copyObject:object overlayInfo:MPPasteboardOverlayInfoCustom name:info.label atView:view];
}
- (void)copyObject:(id<NSPasteboardWriting>)object overlayInfo:(MPPasteboardOverlayInfoType)overlayInfoType name:(NSString *)name atView:(NSView *)view{
if(!object) {
return;
@@ -135,27 +140,32 @@ NSString *const MPPasteBoardTypeSource = @"org.nspasteboard.source";
NSString *infoText = nil;
switch(overlayInfoType) {
case MPPasteboardOverlayInfoPassword:
infoImage = [NSBundle.mainBundle imageForResource:@"00_PasswordTemplate"];
infoImage = [MPIconHelper icon:MPIconPassword];
infoText = NSLocalizedString(@"COPIED_PASSWORD", @"Password was copied to the pasteboard");
break;
case MPPasteboardOverlayInfoURL:
infoImage = [NSBundle.mainBundle imageForResource:@"01_PackageNetworkTemplate"];
infoImage = [MPIconHelper icon:MPIconPackageNetwork];
infoText = NSLocalizedString(@"COPIED_URL", @"URL was copied to the pasteboard");
break;
case MPPasteboardOverlayInfoUsername:
infoImage = [NSBundle.mainBundle imageForResource:@"09_IdentityTemplate"];
infoImage = [MPIconHelper icon:MPIconIdentity];
infoText = NSLocalizedString(@"COPIED_USERNAME", @"Username was copied to the pasteboard");
break;
case MPPasteboardOverlayInfoTOTP:
infoImage = [MPIconHelper icon:MPIconPassword];
infoText = NSLocalizedString(@"COPIED_TOTP", "TOTP was copied to the pasteboard");
break;
case MPPasteboardOverlayInfoCustom:
infoImage = [NSBundle.mainBundle imageForResource:@"00_PasswordTemplate"];
infoImage = [MPIconHelper icon:MPIconPassword];
infoText = [NSString stringWithFormat:NSLocalizedString(@"COPIED_FIELD_%@", "Field name that was copied to the pasteboard"), name];
break;
case MPPasteboardOverlayInfoReference:
infoImage = [NSBundle.mainBundle imageForResource:@"04_KlipperTemplate"];
infoImage = [MPIconHelper icon:MPIconKlipper];
infoText = name;
break;

View File

@@ -68,12 +68,25 @@ NSString *const MPPathControlDidSetURLNotification = @"MPPathControlDidSetURLNot
if([self.delegate respondsToSelector:@selector(pathControl:willDisplayOpenPanel:)]) {
[self.delegate pathControl:self willDisplayOpenPanel:panel];
}
// fall back to modal sheet when browsing Versions. Otherwise we would get kicked out of the TimeMachien UI
// #1206 See Unable to use Time Machine function when have a KeyFile
// Setting NSDocumentRevisionsDebugMode=1 will prevent TimeMachien from exiting even when the openPanel is not shown as sheet
NSDocument *document = self.window.windowController.document;
if(document.isInViewingMode) {
[panel beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse result) {
if(result == NSModalResponseOK) {
self.URL = panel.URLs.firstObject;
}
}];
}
else {
[panel beginWithCompletionHandler:^(NSModalResponse result) {
if(result == NSModalResponseOK) {
self.URL = panel.URLs.firstObject;
}
}];
}
}
- (void)pathControl:(NSPathControl *)pathControl willDisplayOpenPanel:(NSOpenPanel *)openPanel {
openPanel.animationBehavior = NSWindowAnimationBehaviorDocumentWindow;

View File

@@ -92,7 +92,9 @@ typedef NS_ENUM(NSUInteger, MPPickfieldTableColumn) {
view.textField.stringValue = rowItem.name;
break;
case MPPIckfieldValueTableColumn:
view.textField.stringValue = rowItem.isProtected ? @"•••" : rowItem.value;
view.textField.stringValue = (rowItem.isProtected
? NSLocalizedString(@"PROTECTED_PASSWORD_STRING", @"String to show an obfuscated password. Something like three dots.")
: rowItem.value);
break;
default:
break;

View File

@@ -49,7 +49,7 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
@param host plugin host hosting the pluing - MacPass
@return the plugin instance ready for use
*/
- (instancetype)initWithPluginHost:(MPPluginHost *)host NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithPluginHost:(MPPluginHost *)host NS_DESIGNATED_INITIALIZER NS_REQUIRES_SUPER;
- (instancetype)init NS_UNAVAILABLE;
- (void)didLoadPlugin;
@@ -59,7 +59,7 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
#pragma mark Supported Plugin Protocolls
/*
Adopting this protocolls allows for custom settings in the Plugin settings pane.
Adopting this protocoll allows for custom settings in the Plugin settings pane.
MacPass will load your view controller and place it inside the settings window
when a user has selected your plugin in the list
*/
@@ -71,8 +71,8 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
@end
/*
Adopt this protocoll if you plugin can extract window title information for a set of applications
This way, MacPass might yield better results for autotype. Beware that his might break interoparbility
Adopt this protocoll if your plugin can extract window title information for a set of applications
This way, MacPass might yield better results for autotype. Beware that this might break interoparbility
*/
@protocol MPAutotypeWindowTitleResolverPlugin <NSObject>
@required
@@ -81,7 +81,6 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
- (NSString *)windowTitleForRunningApplication:(NSRunningApplication *)runningApplication;
@end
#pragma mark Proposed Plugin Protocolls
/*
@@ -114,7 +113,7 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
@protocol MPImportPlugin <NSObject>
@required
/**
Called by the Host to upate a menu item for importing.
Called by the host to upate a menu item for importing.
You are supposed to update the title to something meaningfull.
target and action will get set by host, so do not rely on them
@@ -123,7 +122,7 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
- (void)prepareImportMenuItem:(NSMenuItem *)item;
/**
Called by the host when an import is about to happen.
Update the panel to allow work for all the files and formats you can open.
Update the panel to allow it to work for all the files and formats you can open.
Host will simply run the panel with - beginSheetModalForWindow:completionHandler:
and will call treeForRunningOpenPanel:withResponse: afterwards to handle the result.

View File

@@ -26,6 +26,7 @@
typedef NS_ENUM(NSUInteger, MPPreferencesTab) {
MPPreferencesTabGeneral,
MPPreferencesTabSecurity,
MPPreferencesTabIntegration,
MPPreferencesTabWorkflow,
MPPreferencesTabUpdate,

View File

@@ -30,6 +30,7 @@
#import "MPUpdatePreferencesController.h"
#import "MPPluginPreferencesController.h"
#import "MPTabViewController.h"
#import "MPSecurityPreferencesController.h"
@interface MPPreferencesWindowController ()
@@ -110,6 +111,9 @@
case MPPreferencesTabPlugins:
tabClass = MPPluginPreferencesController.class;
break;
case MPPreferencesTabSecurity:
tabClass = MPSecurityPreferencesController.class;
break;
case MPPreferencesTabIntegration:
tabClass = MPIntegrationPreferencesController.class;
break;
@@ -136,6 +140,7 @@
- (void)_setupDefaultPreferencesTabs {
NSArray<NSViewController<MPPreferencesTab>*> *controllers = @[ [[MPGeneralPreferencesController alloc] init],
[[MPSecurityPreferencesController alloc] init],
[[MPIntegrationPreferencesController alloc] init],
[[MPWorkflowPreferencesController alloc] init],
[[MPUpdatePreferencesController alloc] init],

View File

@@ -0,0 +1,17 @@
//
// MPSecurityDatabaseSettingsViewController.h
// MacPass
//
// Created by Michael Starke on 18.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface MPSecurityDatabaseSettingsViewController : NSViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,117 @@
//
// MPSecurityDatabaseSettingsViewController.m
// MacPass
//
// Created by Michael Starke on 18.11.21.
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
//
#import "MPSecurityDatabaseSettingsViewController.h"
#import "MPDocument.h"
#import <KeePassKit/KeePassKit.h>
@interface MPSecurityDatabaseSettingsViewController ()
@property (assign) NSInteger argon2dMemory;
@property (assign) NSInteger argon2idMemory;
@property (strong) IBOutlet NSButton *createKeyDerivationParametersButton;
@property (strong) IBOutlet NSPopUpButton *cipherPopupButton;
@property (strong) IBOutlet NSPopUpButton *keyDerivationPopupButton;
@property (strong) IBOutlet NSTabView *keyDerivationSettingsTabView;
/* AES */
@property (strong) IBOutlet NSTextField *aesEncryptionRoundsTextField;
/* Argon2d */
@property (strong) IBOutlet NSTextField *argon2dThreadsTextField;
@property (strong) IBOutlet NSTextField *argon2dIterationsTextField;
@property (strong) IBOutlet NSTextField *argon2dMemoryTextField;
@property (strong) IBOutlet NSStepper *argon2dMemoryStepper;
/* Argon2id */
@property (strong) IBOutlet NSTextField *argon2idThreadsTextField;
@property (strong) IBOutlet NSTextField *argon2idIterationsTextField;
@property (strong) IBOutlet NSTextField *argon2idMemoryTextField;
@property (strong) IBOutlet NSStepper *argon2idMemoryStepper;
@end
@implementation MPSecurityDatabaseSettingsViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do view setup here.
}
- (void)_setupSecurityTab {
MPDocument *document = (MPDocument *)self.view.window.windowController.document;
KPKTree *tree = document.tree;
KPKMetaData *metaData = tree.metaData;
/*
If kdf or cipher is not found, exceptions are thrown.
This should not happen since we should not be able to load a file with unknown cipher/kdf
*/
KPKKeyDerivation *keyDerivation = [KPKKeyDerivation keyDerivationWithParameters:metaData.keyDerivationParameters];
NSUInteger kdfIndex = [self.keyDerivationPopupButton.menu indexOfItemWithRepresentedObject:keyDerivation.uuid];
[self.keyDerivationPopupButton selectItemAtIndex:kdfIndex];
[self.keyDerivationSettingsTabView selectTabViewItemWithIdentifier:keyDerivation.uuid];
/* fill defaults for AES */
KPKAESKeyDerivation *aesKdf = [[KPKAESKeyDerivation alloc] initWithParameters:[KPKAESKeyDerivation defaultParameters]];
self.aesEncryptionRoundsTextField.integerValue = aesKdf.rounds;
/* fill defaults for Argon2d */
KPKArgon2DKeyDerivation *argon2dKdf = [[KPKArgon2DKeyDerivation alloc] initWithParameters:[KPKArgon2DKeyDerivation defaultParameters]];
self.argon2dIterationsTextField.integerValue = argon2dKdf.iterations;
self.argon2dMemory = argon2dKdf.memory;
self.argon2dThreadsTextField.integerValue = argon2dKdf.threads;
/* fill defaults for Argon2id */
KPKArgon2IDKeyDerivation *argon2idKdf = [[KPKArgon2IDKeyDerivation alloc] initWithParameters:[KPKArgon2IDKeyDerivation defaultParameters]];
self.argon2idIterationsTextField.integerValue = argon2idKdf.iterations;
self.argon2idMemory = argon2idKdf.memory;
self.argon2idThreadsTextField.integerValue = argon2idKdf.threads;
if([keyDerivation isMemberOfClass:KPKAESKeyDerivation.class]) {
/* set to database values */
KPKAESKeyDerivation *aesKdf = (KPKAESKeyDerivation *)keyDerivation;
self.aesEncryptionRoundsTextField.integerValue = aesKdf.rounds;
self.createKeyDerivationParametersButton.enabled = YES;
}
else if([keyDerivation isMemberOfClass:KPKArgon2DKeyDerivation.class]) {
/* set to database value */
KPKArgon2DKeyDerivation *argon2dKdf = (KPKArgon2DKeyDerivation *)keyDerivation;
self.argon2dMemory = argon2dKdf.memory;
self.argon2dThreadsTextField.integerValue = argon2dKdf.threads;
self.argon2dIterationsTextField.integerValue = argon2dKdf.iterations;
}
else if([keyDerivation isMemberOfClass:KPKArgon2IDKeyDerivation.class]) {
/* set to database value */
KPKArgon2IDKeyDerivation *argon2idKdf = (KPKArgon2IDKeyDerivation *)keyDerivation;
self.argon2idMemory = argon2idKdf.memory;
self.argon2idThreadsTextField.integerValue = argon2idKdf.threads;
self.argon2idIterationsTextField.integerValue = argon2idKdf.iterations;
}
else {
NSAssert(NO, @"Unkown key derivation");
}
self.argon2dMemoryStepper.minValue = 8*1024; // 8KB minimum
self.argon2dMemoryStepper.maxValue = NSIntegerMax;
self.argon2dMemoryStepper.increment = 1024*1024; // 1 megabytes steps
[self.argon2dMemoryTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2dMemory)) options:nil];
[self.argon2dMemoryStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2dMemory)) options:nil];
self.argon2idMemoryStepper.minValue = 8*1024; // 8KB minimum
self.argon2idMemoryStepper.maxValue = NSIntegerMax;
self.argon2idMemoryStepper.increment = 1024*1024; // 1 megabytes steps
[self.argon2idMemoryTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2idMemory)) options:nil];
[self.argon2idMemoryStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2idMemory)) options:nil];
NSUInteger cipherIndex = [self.cipherPopupButton.menu indexOfItemWithRepresentedObject:metaData.cipherUUID];
[self.cipherPopupButton selectItemAtIndex:cipherIndex];
}
@end

View File

@@ -0,0 +1,348 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPSecurityDatabaseSettingsViewController">
<connections>
<outlet property="argon2idThreadsTextField" destination="dgK-W7-6ko" id="Kx2-bh-Re9"/>
<outlet property="createKeyDerivationParametersButton" destination="NQD-8z-yEk" id="Xyq-Q2-xfh"/>
<outlet property="keyDerivationPopupButton" destination="HXH-FA-g4K" id="gGN-Py-oOX"/>
<outlet property="keyDerivationSettingsTabView" destination="2Rh-L6-aPE" id="2lx-QL-81N"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="575" height="742"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<box misplaced="YES" title="Key derivation" translatesAutoresizingMaskIntoConstraints="NO" id="qbM-un-eXz">
<rect key="frame" x="17" y="407" width="554" height="253"/>
<view key="contentView" id="MOf-XP-Xg8">
<rect key="frame" x="4" y="5" width="546" height="233"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tabView drawsBackground="NO" type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="2Rh-L6-aPE">
<rect key="frame" x="11" y="-321" width="511" height="61"/>
<font key="font" metaFont="system"/>
<tabViewItems>
<tabViewItem label="Aes" identifier="1" id="l3r-tx-ISG">
<view key="view" id="Oyh-DQ-bFG">
<rect key="frame" x="0.0" y="0.0" width="511" height="61"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="R5P-C9-Xmn">
<rect key="frame" x="125" y="23" width="50" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Rounds" id="omn-YS-0WC">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="g3a-6m-F6j">
<rect key="frame" x="181" y="20" width="150" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="150" id="twe-aC-Qcz"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="90A-3m-BSM">
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="t2G-Ll-zVi">
<real key="minimum" value="0.0"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="g3a-6m-F6j" firstAttribute="leading" secondItem="R5P-C9-Xmn" secondAttribute="trailing" constant="8" symbolic="YES" id="4sR-8G-Opb"/>
<constraint firstAttribute="bottom" secondItem="g3a-6m-F6j" secondAttribute="bottom" constant="20" symbolic="YES" id="Dk2-RT-gvD"/>
<constraint firstItem="g3a-6m-F6j" firstAttribute="top" secondItem="Oyh-DQ-bFG" secondAttribute="top" constant="20" symbolic="YES" id="Qhm-CQ-VXO"/>
<constraint firstItem="g3a-6m-F6j" firstAttribute="baseline" secondItem="R5P-C9-Xmn" secondAttribute="baseline" id="Shi-kn-njN"/>
<constraint firstItem="g3a-6m-F6j" firstAttribute="centerX" secondItem="Oyh-DQ-bFG" secondAttribute="centerX" id="cZz-4G-1hC"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="g3a-6m-F6j" secondAttribute="trailing" constant="20" symbolic="YES" id="hm6-A3-LZb"/>
<constraint firstItem="R5P-C9-Xmn" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oyh-DQ-bFG" secondAttribute="leading" constant="20" symbolic="YES" id="y90-Ic-UYu"/>
</constraints>
</view>
</tabViewItem>
<tabViewItem label="Argon2d" identifier="2" id="d7E-Ya-Yth">
<view key="view" id="Oea-xa-gEP">
<rect key="frame" x="0.0" y="0.0" width="348" height="111"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="K9Z-pu-LP1">
<rect key="frame" x="39" y="85" width="54" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Threads" id="GCY-Ko-bqW">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="X7R-6X-7ux">
<rect key="frame" x="32" y="54" width="61" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Iterations" id="9E9-4k-nGZ">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iuw-vj-gSN">
<rect key="frame" x="99" y="82" width="150" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="150" id="3ys-Jf-vWj"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Ye1-WJ-9cl">
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="lDw-xh-DkE">
<real key="minimum" value="1"/>
<real key="maximum" value="16777215"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WP2-cF-8Yn">
<rect key="frame" x="99" y="51" width="150" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="l17-gL-4s1">
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="7Pp-o2-CVo">
<real key="minimum" value="1"/>
<real key="maximum" value="4294967295"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hTL-dO-6q2">
<rect key="frame" x="99" y="20" width="129" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Plq-0Q-Nbz">
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="hNA-or-VKI"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="nMa-If-DlK">
<rect key="frame" x="39" y="23" width="54" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Memory" id="a6j-l4-cht">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vWY-lB-Pf8">
<rect key="frame" x="233" y="17" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="yCT-QG-peR"/>
</stepper>
</subviews>
<constraints>
<constraint firstItem="iuw-vj-gSN" firstAttribute="top" secondItem="Oea-xa-gEP" secondAttribute="top" constant="8" id="4DQ-Fu-kf6"/>
<constraint firstItem="hTL-dO-6q2" firstAttribute="leading" secondItem="nMa-If-DlK" secondAttribute="trailing" constant="8" symbolic="YES" id="4u7-DH-3St"/>
<constraint firstItem="K9Z-pu-LP1" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oea-xa-gEP" secondAttribute="leading" constant="20" symbolic="YES" id="6P1-K1-ipG"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="WP2-cF-8Yn" secondAttribute="trailing" constant="20" symbolic="YES" id="JQO-qt-7VW"/>
<constraint firstItem="hTL-dO-6q2" firstAttribute="top" secondItem="WP2-cF-8Yn" secondAttribute="bottom" constant="10" symbolic="YES" id="JnE-zB-3YJ"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="iuw-vj-gSN" secondAttribute="trailing" constant="20" symbolic="YES" id="PvS-IB-aU2"/>
<constraint firstItem="iuw-vj-gSN" firstAttribute="centerX" secondItem="Oea-xa-gEP" secondAttribute="centerX" id="R6j-pK-Khq"/>
<constraint firstItem="X7R-6X-7ux" firstAttribute="baseline" secondItem="WP2-cF-8Yn" secondAttribute="baseline" id="RFo-ve-65t"/>
<constraint firstItem="nMa-If-DlK" firstAttribute="baseline" secondItem="hTL-dO-6q2" secondAttribute="baseline" id="Sh8-Kc-8uL"/>
<constraint firstItem="WP2-cF-8Yn" firstAttribute="leading" secondItem="X7R-6X-7ux" secondAttribute="trailing" constant="8" symbolic="YES" id="Sok-5z-4Rt"/>
<constraint firstItem="X7R-6X-7ux" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oea-xa-gEP" secondAttribute="leading" constant="20" symbolic="YES" id="VDL-cE-lO7"/>
<constraint firstItem="WP2-cF-8Yn" firstAttribute="top" secondItem="iuw-vj-gSN" secondAttribute="bottom" constant="10" symbolic="YES" id="VqL-Fm-RoJ"/>
<constraint firstItem="hTL-dO-6q2" firstAttribute="leading" secondItem="WP2-cF-8Yn" secondAttribute="leading" id="Y82-oB-ai8"/>
<constraint firstItem="vWY-lB-Pf8" firstAttribute="centerY" secondItem="hTL-dO-6q2" secondAttribute="centerY" id="Ym9-WO-PnN"/>
<constraint firstAttribute="trailing" secondItem="vWY-lB-Pf8" secondAttribute="trailing" constant="99" id="bDw-4Y-Hru"/>
<constraint firstItem="vWY-lB-Pf8" firstAttribute="trailing" secondItem="WP2-cF-8Yn" secondAttribute="trailing" id="dx7-Wo-Hr8"/>
<constraint firstAttribute="bottom" secondItem="hTL-dO-6q2" secondAttribute="bottom" constant="20" symbolic="YES" id="fIW-6w-dpK"/>
<constraint firstItem="K9Z-pu-LP1" firstAttribute="baseline" secondItem="iuw-vj-gSN" secondAttribute="baseline" id="fzO-7A-W1B"/>
<constraint firstItem="iuw-vj-gSN" firstAttribute="leading" secondItem="K9Z-pu-LP1" secondAttribute="trailing" constant="8" symbolic="YES" id="j1q-XB-Jkc"/>
<constraint firstItem="WP2-cF-8Yn" firstAttribute="width" secondItem="iuw-vj-gSN" secondAttribute="width" id="leV-SQ-7vq"/>
<constraint firstItem="vWY-lB-Pf8" firstAttribute="leading" secondItem="hTL-dO-6q2" secondAttribute="trailing" constant="8" symbolic="YES" id="olK-06-N4n"/>
<constraint firstItem="nMa-If-DlK" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oea-xa-gEP" secondAttribute="leading" constant="20" symbolic="YES" id="qhd-Nh-CeC"/>
<constraint firstItem="WP2-cF-8Yn" firstAttribute="leading" secondItem="iuw-vj-gSN" secondAttribute="leading" id="rwu-Ec-cw0"/>
</constraints>
</view>
</tabViewItem>
<tabViewItem label="Argon2id" identifier="" id="MhV-4d-F0N">
<view key="view" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wf3-hl-5Ha">
<rect key="frame" x="0.0" y="0.0" width="348" height="99"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<gridView fixedFrame="YES" xPlacement="leading" yPlacement="bottom" rowAlignment="none" translatesAutoresizingMaskIntoConstraints="NO" id="Dnd-lw-Lx6">
<rect key="frame" x="103" y="500" width="232" height="75"/>
<rows>
<gridRow id="2qd-uz-DjI"/>
<gridRow id="RIb-pL-iNf"/>
<gridRow id="Ybl-pj-Fs8"/>
</rows>
<columns>
<gridColumn id="EfG-Js-yib"/>
<gridColumn id="el0-jc-con"/>
<gridColumn id="16p-uR-CXf"/>
</columns>
<gridCells>
<gridCell row="2qd-uz-DjI" column="EfG-Js-yib" id="t31-0C-rh6">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="qhy-8k-yt4">
<rect key="frame" x="-2" y="54" width="54" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Threads" id="ybN-m9-18o">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="2qd-uz-DjI" column="el0-jc-con" id="8rz-Vs-ySs">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dgK-W7-6ko">
<rect key="frame" x="63" y="54" width="100" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="qPh-kc-YzV">
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="AHg-i0-PTD">
<real key="minimum" value="1"/>
<real key="maximum" value="4294967295"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="2qd-uz-DjI" column="16p-uR-CXf" id="gv4-Si-lhF"/>
<gridCell row="RIb-pL-iNf" column="EfG-Js-yib" id="2ej-xN-lBd">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="8tk-pV-4UO">
<rect key="frame" x="-2" y="27" width="61" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Iterations" id="gF6-zY-Xuy">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="RIb-pL-iNf" column="el0-jc-con" id="2Ut-37-UFd">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OhS-sE-xSm">
<rect key="frame" x="63" y="27" width="150" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="150" id="33t-3W-BPt"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="mPi-fp-fb8">
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="Rir-3T-bXT">
<real key="minimum" value="1"/>
<real key="maximum" value="16777215"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="RIb-pL-iNf" column="16p-uR-CXf" id="iFd-Ab-Mvj"/>
<gridCell row="Ybl-pj-Fs8" column="EfG-Js-yib" id="CCV-Ry-qvC">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="Df5-tn-zkM">
<rect key="frame" x="-2" y="0.0" width="54" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Memory" id="WCw-aH-Voy">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="Ybl-pj-Fs8" column="el0-jc-con" id="4Ob-2O-VTc">
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lYa-BF-Fpc">
<rect key="frame" x="63" y="0.0" width="8" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="ekf-A7-iLV">
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="Z6U-IX-x3y"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="Ybl-pj-Fs8" column="16p-uR-CXf" id="Qwf-XF-JAV">
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WFx-rw-uRy">
<rect key="frame" x="216" y="-4" width="19" height="28"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="dgn-LC-ooe"/>
</stepper>
</gridCell>
</gridCells>
</gridView>
</subviews>
</view>
</tabViewItem>
</tabViewItems>
</tabView>
<popUpButton verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HXH-FA-g4K">
<rect key="frame" x="84" y="-256" width="39" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="D2Q-aS-Tbz">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="Yee-Ks-qOT"/>
</popUpButtonCell>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oN5-tL-jIX">
<rect key="frame" x="18" y="-249" width="63" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Algorithm" id="W8b-3A-xUr">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NQD-8z-yEk">
<rect key="frame" x="368" y="-351" width="146" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Generate Parameters" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="z3n-Ae-2ux">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="NQD-8z-yEk" firstAttribute="top" secondItem="2Rh-L6-aPE" secondAttribute="bottom" constant="8" symbolic="YES" id="KLH-Ou-Og5"/>
<constraint firstItem="oN5-tL-jIX" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="MOf-XP-Xg8" secondAttribute="leading" constant="20" symbolic="YES" id="Ljd-Cw-pVl"/>
<constraint firstItem="2Rh-L6-aPE" firstAttribute="top" secondItem="MOf-XP-Xg8" secondAttribute="top" constant="260" id="Nh1-Rv-Rxv"/>
<constraint firstItem="oN5-tL-jIX" firstAttribute="leading" secondItem="NQD-8z-yEk" secondAttribute="leading" id="NrR-fv-6yG"/>
<constraint firstItem="HXH-FA-g4K" firstAttribute="baseline" secondItem="oN5-tL-jIX" secondAttribute="baseline" id="XG7-bI-SID"/>
<constraint firstItem="2Rh-L6-aPE" firstAttribute="top" secondItem="HXH-FA-g4K" secondAttribute="bottom" constant="8" symbolic="YES" id="b7X-jT-nEl"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="HXH-FA-g4K" secondAttribute="trailing" constant="20" symbolic="YES" id="p0r-Ic-d1g"/>
<constraint firstItem="HXH-FA-g4K" firstAttribute="leading" secondItem="oN5-tL-jIX" secondAttribute="trailing" constant="8" symbolic="YES" id="qnP-XS-PSy"/>
</constraints>
</view>
<constraints>
<constraint firstAttribute="trailing" secondItem="2Rh-L6-aPE" secondAttribute="trailing" constant="12" id="1Yw-41-N7m"/>
<constraint firstItem="2Rh-L6-aPE" firstAttribute="leading" secondItem="qbM-un-eXz" secondAttribute="leading" constant="12" id="Xdy-aA-9ZJ"/>
</constraints>
</box>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CTT-PN-6DU">
<rect key="frame" x="210" y="664" width="157" height="25"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="150" id="5bR-qy-CJq"/>
</constraints>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="6ag-x0-Lnq">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="KmQ-ga-ebr"/>
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Eyc-KQ-nb8">
<rect key="frame" x="134" y="671" width="73" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Encryption:" id="9wc-gg-Sye">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="Eyc-KQ-nb8" firstAttribute="baseline" secondItem="CTT-PN-6DU" secondAttribute="baseline" id="6Bk-f8-KKB"/>
<constraint firstAttribute="trailing" secondItem="qbM-un-eXz" secondAttribute="trailing" constant="20" symbolic="YES" id="BQp-8w-cbw"/>
<constraint firstItem="qbM-un-eXz" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="Ceg-Qo-hZ0"/>
<constraint firstItem="CTT-PN-6DU" firstAttribute="leading" secondItem="Eyc-KQ-nb8" secondAttribute="trailing" constant="8" symbolic="YES" id="Piw-Jc-Caq"/>
<constraint firstItem="qbM-un-eXz" firstAttribute="top" secondItem="CTT-PN-6DU" secondAttribute="bottom" constant="8" symbolic="YES" id="XzC-ml-Ifw"/>
<constraint firstItem="CTT-PN-6DU" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="isB-9i-xt3"/>
<constraint firstItem="qbM-un-eXz" firstAttribute="top" secondItem="CTT-PN-6DU" secondAttribute="bottom" constant="8" symbolic="YES" id="ivj-bF-foX"/>
<constraint firstItem="CTT-PN-6DU" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="54" id="uhS-D4-zny"/>
</constraints>
<point key="canvasLocation" x="333.5" y="-243"/>
</customView>
</objects>
</document>

View File

@@ -0,0 +1,29 @@
//
// MPSecurityPreferencesController.h
// MacPass
//
// Created by Michael Starke on 11.04.25.
// Copyright © 2025 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "MPViewController.h"
#import "MPPreferencesTab.h"
NS_ASSUME_NONNULL_BEGIN
@interface MPSecurityPreferencesController : MPViewController <MPPreferencesTab>
@property (strong) IBOutlet NSButton *clearPasteboardOnQuitCheckButton;
@property (strong) IBOutlet NSPopUpButton *clearPasteboardTimeoutPopup;
@property (strong) IBOutlet NSButton *preventUniversalClipboardSupportCheckButton;
@property (strong) IBOutlet NSPopUpButton *idleTimeOutPopup;
@property (strong) IBOutlet NSButton *lockOnSleepCheckButton;
@property (strong) IBOutlet NSButton *lockOnLogoutCheckButton;
@property (strong) IBOutlet NSButton *lockOnScreenSleepCheckButton;
@property (strong) IBOutlet NSButton *rememberKeyFileCheckButton;
@property (strong) IBOutlet NSButton *allowScreenshotsCheckButton;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,68 @@
//
// MPSecurityPreferencesController.m
// MacPass
//
// Created by Michael Starke on 11.04.25.
// Copyright © 2025 HicknHack Software GmbH. All rights reserved.
//
#import "MPSecurityPreferencesController.h"
#import "MPSettingsHelper.h"
@interface MPSecurityPreferencesController ()
@end
@implementation MPSecurityPreferencesController
- (NSString *)identifier {
return @"SecurityPreferences";
}
- (NSImage *)image {
return [NSImage imageNamed:NSImageNameCaution];
}
- (NSString *)label {
return NSLocalizedString(@"SECURITY_PREFERENCES", @"Security Settings Label");
}
- (void)viewDidLoad {
[self.clearPasteboardOnQuitCheckButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyClearPasteboardOnQuit]
options:nil];
[self.clearPasteboardTimeoutPopup bind:NSSelectedTagBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPasteboardClearTimeout]
options:nil];
[self.preventUniversalClipboardSupportCheckButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPreventUniversalClipboard]
options:nil];
[self.lockOnSleepCheckButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep]
options:nil];
[self.lockOnLogoutCheckButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout]
options:nil];
[self.lockOnScreenSleepCheckButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnScreenSleep]
options:nil];
[self.idleTimeOutPopup bind:NSSelectedTagBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut]
options:nil];
[self.rememberKeyFileCheckButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases]
options:nil];
[self.allowScreenshotsCheckButton bind:NSValueBinding
toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyAllowScreenshots]
options:nil];
}
@end

View File

@@ -0,0 +1,235 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPSecurityPreferencesController">
<connections>
<outlet property="allowScreenshotsCheckButton" destination="HD6-39-SKh" id="mqC-bs-zCs"/>
<outlet property="clearPasteboardOnQuitCheckButton" destination="KP1-6g-Yqo" id="QhG-nU-EfN"/>
<outlet property="clearPasteboardTimeoutPopup" destination="zGo-3Q-WAA" id="PaR-LO-1so"/>
<outlet property="idleTimeOutPopup" destination="6lH-n8-hV9" id="YEZ-tR-Djs"/>
<outlet property="lockOnLogoutCheckButton" destination="ziJ-ht-p54" id="Tsf-gp-DwM"/>
<outlet property="lockOnScreenSleepCheckButton" destination="ROH-Zn-Ype" id="B01-PX-g04"/>
<outlet property="lockOnSleepCheckButton" destination="KkI-GK-w8c" id="9Ub-5u-uKI"/>
<outlet property="preventUniversalClipboardSupportCheckButton" destination="FmI-t1-V7h" id="TaZ-DV-zxI"/>
<outlet property="rememberKeyFileCheckButton" destination="ghE-Zl-B1s" id="Nq4-jV-9iF"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="440" height="425"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="W8T-QF-slI">
<rect key="frame" x="20" y="61" width="400" height="344"/>
<subviews>
<stackView distribution="fill" orientation="horizontal" alignment="firstBaseline" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="G3z-aN-Wk0">
<rect key="frame" x="0.0" y="324" width="261" height="20"/>
<subviews>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nVB-JC-BBE">
<rect key="frame" x="-2" y="2" width="120" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="fSa-HW-qbP"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clear Copied Items" id="NMx-H8-qw1">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zGo-3Q-WAA">
<rect key="frame" x="121" y="-4" width="144" height="25"/>
<popUpButtonCell key="cell" type="push" title="Never" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="3PG-ge-sez" id="7qH-SJ-n5N">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="ClipboardClearInterval" id="OvT-46-ItY">
<items>
<menuItem title="Never" state="on" id="3PG-ge-sez">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="after 10 Seconds" tag="10" id="KPs-XT-xJQ"/>
<menuItem title="after 30 Seconds" tag="30" id="nXQ-XQ-OjR"/>
<menuItem title="after 1 Minute" tag="60" id="GjO-Rq-CcJ"/>
<menuItem title="after 5 Minutes" tag="300" id="GOb-x5-v3v"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="KP1-6g-Yqo">
<rect key="frame" x="18" y="299" width="168" height="18"/>
<buttonCell key="cell" type="check" title="Clear Clipboard on Quit" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="t4Z-bK-KMl">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FmI-t1-V7h">
<rect key="frame" x="-2" y="275" width="245" height="18"/>
<buttonCell key="cell" type="check" title="Prevent Universal Clipboard support" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="KvW-RN-z6j">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="mNo-r9-dr0">
<rect key="frame" x="-2" y="226" width="404" height="42"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="vCZ-9c-5s7">
<font key="font" metaFont="smallSystem"/>
<string key="title">Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually.</string>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="horizontal" alignment="firstBaseline" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nkh-qn-gd7">
<rect key="frame" x="0.0" y="198" width="215" height="20"/>
<subviews>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Z1o-N4-bSv">
<rect key="frame" x="-2" y="3" width="93" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="mJZ-10-3aY">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6lH-n8-hV9">
<rect key="frame" x="94" y="-4" width="125" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="V0L-v9-lbJ">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="LockTimes" id="3SU-Tz-vNr">
<items>
<menuItem title="Never" id="Eho-b6-2r3"/>
<menuItem title="for 1 Minute" tag="60" id="hcu-tg-UHB"/>
<menuItem title="for 5 Minutes" tag="300" id="DUt-fV-xPf"/>
<menuItem title="for 15 Minutes" tag="900" id="pPY-4B-V6t">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<button translatesAutoresizingMaskIntoConstraints="NO" id="KkI-GK-w8c">
<rect key="frame" x="18" y="173" width="123" height="18"/>
<buttonCell key="cell" type="check" title="Lock after sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="zjF-CD-1DV">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="ziJ-ht-p54">
<rect key="frame" x="18" y="149" width="133" height="18"/>
<buttonCell key="cell" type="check" title="Lock after log out" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fdI-0a-VRg">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ROH-Zn-Ype">
<rect key="frame" x="18" y="125" width="168" height="18"/>
<buttonCell key="cell" type="check" title="Lock after screen sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="8mt-iT-q7d">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="ghE-Zl-B1s">
<rect key="frame" x="-2" y="101" width="224" height="18"/>
<buttonCell key="cell" type="check" title="Remember Keyfile for Databases" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Q9B-M0-yCP">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="E0U-Bs-qDP">
<rect key="frame" x="-2" y="52" width="404" height="42"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="5aM-bw-1qA">
<font key="font" metaFont="smallSystem"/>
<string key="title">Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved.</string>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2MH-GR-gb7">
<rect key="frame" x="-7" y="17" width="184" height="32"/>
<buttonCell key="cell" type="push" title="Clear all stored locations" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="uaC-TX-Vza">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="clearRememberdKeyFiles:" target="-1" id="oTL-Bw-cAm"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HD6-39-SKh">
<rect key="frame" x="-2" y="-1" width="190" height="18"/>
<buttonCell key="cell" type="check" title="Allow Window Screenshots" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="8Ik-1T-6SR">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="ziJ-ht-p54" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="2eb-vH-1lz"/>
<constraint firstItem="ROH-Zn-Ype" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="FFq-cG-Pf8"/>
<constraint firstItem="KkI-GK-w8c" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="JRu-lW-FBA"/>
<constraint firstItem="KP1-6g-Yqo" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="Yi0-UQ-ri3"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="fym-rW-PhG"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="W8T-QF-slI" secondAttribute="trailing" constant="20" symbolic="YES" id="Mm9-Gi-0Wc"/>
<constraint firstItem="W8T-QF-slI" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="Reh-hK-XaU"/>
<constraint firstItem="W8T-QF-slI" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="ejB-oC-c7T"/>
</constraints>
<point key="canvasLocation" x="-540" y="-107"/>
</customView>
</objects>
</document>

Some files were not shown because too many files have changed in this diff Show More