390 Commits
0.7 ... 0.7.7

Author SHA1 Message Date
Michael Starke
f59f8f5cb9 Bumped to version 0.7.7 2019-03-27 10:56:37 +01:00
Michael Starke
77143591c2 Added notes for refactoring 2019-03-27 09:27:46 +01:00
Michael Starke
515fd4be70 Removed localized credits in favour of a single english file.
Credits now are correctly rendered in dark and light mode (fixes #900)
2019-03-27 08:56:17 +01:00
Michael Starke
4ddb0c5e07 Updated KeePassKit to fix regression (fixes #897) 2019-03-26 08:45:18 +01:00
Michael Starke
1d42d996ca Fixed regression that prevented tab to navigate to the key file selection control (#896) 2019-03-25 09:01:25 +01:00
Michael Starke
6d046bc933 Added checkbox to disable autosave 2019-03-25 08:52:37 +01:00
Michael Starke
7ba9ec2685 Added preferences to disable auto-save 2019-03-25 07:43:00 +01:00
Michael Starke
cbdfff8ea2 Fixed spelling error in PasswordCreatorView 2019-03-21 12:35:48 +01:00
Michael Starke
b3de0556f5 Bumped version 2019-03-21 08:14:34 +01:00
Michael Starke
e3c8248761 More missing copyright year updates 2019-03-21 07:58:28 +01:00
Michael Starke
2c22245bb8 Added tooltip to index column to clarify intended behaviour 2019-03-21 07:57:35 +01:00
Michael Starke
272412965a Updated copyright year and german localization 2019-03-21 07:57:16 +01:00
Michael Starke
f252a2a6a8 Pinned width of index column to prevent column from being too large or small 2019-03-20 16:44:05 +01:00
Michael Starke
eabf1e52b2 Fixed issue with perform Autotype button not being enabled when the candidate selection window shows up. (fixes #891) 2019-03-20 10:59:16 +01:00
Michael Starke
b73de01897 Double click on first item in databases in welcome window does not open the file. (Fixes #893) 2019-03-20 10:52:58 +01:00
Michael Starke
70c25c9b1f Bumped Version 2019-03-19 17:10:33 +01:00
Michael Starke
02c5e1b2dc Hotfix for edit state bug (fixes #890) 2019-03-19 17:09:00 +01:00
Michael Starke
aacb61bb11 fixed crash occuring when certain file errors where encountered due to a wrongly drained autorelease pool 2019-03-15 22:46:45 +01:00
Michael Starke
19d895ad68 Incorporated updated dutch localizations 2019-03-11 14:01:38 +01:00
Michael Starke
0f1d560522 Added localizations for hmatotp entry action items 2019-03-08 15:25:24 +01:00
Michael Starke
a568f59c59 Fix potential return of garbage value 2019-03-08 15:22:00 +01:00
Michael Starke
601f5b6a93 Fix potential memory leak 2019-03-08 15:21:38 +01:00
Michael Starke
e1b7b95f6b Registered to closeGrouping on undo manger to update searches on changes
This fixes issues with search not updating when something on the data model is changes e.g. via drag and drop. Also this fixes a display error that occured when an entry was dragged into the selected group in the outline view which would then show the group contents and not the search results
2019-03-04 18:12:30 +01:00
Michael Starke
1af690d485 Removed obsolte --no-ri and --no-doc flags 2019-03-01 22:45:37 +01:00
Michael Starke
8e00e16627 Updated to Xcode 10.2 build environment 2019-03-01 22:37:14 +01:00
Michael Starke
342acfda59 Using masked Autotype sequence in Candiate Selection window again but non-interactive 2019-03-01 22:03:39 +01:00
Michael Starke
1399a8d142 documented Autotype context API to make internal behaviour clear 2019-03-01 16:01:01 +01:00
Michael Starke
6129300c1b removed unused parameter 2019-03-01 16:00:24 +01:00
Michael Starke
af15955d6f Updated translations from PR #753 2019-02-25 21:28:36 +01:00
Michael Starke
8799ef6b67 Use of properties 2019-02-25 21:24:04 +01:00
Frank Kooij
5caa5076e7 Improved Dutch localization (#753)
* Improved Dutch localization
2019-02-25 21:22:52 +01:00
Michael Starke
4d32ef42ad Merge pull request #881 from CanRau/patch-1 2019-02-17 08:42:57 +01:00
Can Rau
27705e0a8e [docs] Typo
Just a small typo, but why not right ;)
2019-02-15 21:42:21 -05:00
Michael Starke
c62e96f44a Added preferences to allow for universal clipboard support. Item menu actions now should work in more scenarios 2019-02-15 11:48:54 +01:00
Michael Starke
8769f07079 Moved multiple instances of entry menu delegate to app delegate 2019-02-15 10:47:31 +01:00
Michael Starke
ef7a3085fd Selection inside edit fields are now respected when copying 2019-02-14 18:04:14 +01:00
Michael Starke
51c486fb82 Use itemDelgate for item menu and remove special treatment in app delegate 2019-02-14 17:50:08 +01:00
Laurent Cozic
4d927ad7ab Changed "Sauvegarder" => "Enregistrer" (#880)
"Save" in this context, translated to French is "Enregistrer", not "Sauvegarder" (which means "to backup").
2019-02-14 11:24:40 +01:00
Michael Starke
474753c7dd Using current KeePassKit 2019-02-13 21:43:56 +01:00
Michael Starke
03ff42ba29 Updated german localization 2019-02-13 18:26:44 +01:00
Michael Starke
98f99f6cbf Populate Action menu with the same copy actions as the entry table context menü 2019-02-13 18:25:46 +01:00
Michael Starke
88e4faae98 Reordered entries in context menu and always add separator before copy actions 2019-02-13 18:25:06 +01:00
Michael Starke
e38925d0ef Added context menu entry to enable copying references to entries 2019-02-13 17:07:56 +01:00
Michael Starke
29103d594c Updated german localization 2019-02-11 14:56:47 +01:00
Michael Starke
d2077a55d8 Preferences instead of Settings renaming 2019-02-11 14:29:04 +01:00
Michael Starke
37ea36c8a6 Localized inconpatible plugins alert. Added ability to open a dedicated preferences pane 2019-02-11 14:06:12 +01:00
Michael Starke
00362bf33c Using preferences instead of settings name. Alert for incompaitble plugins now has a button to show preferences 2019-02-08 15:04:16 +01:00
Michael Starke
d3641af1fc Updated to current Xcode version 2019-02-07 09:10:02 +01:00
Michael Starke
f94bf5cdce Use properties 2019-02-07 09:09:43 +01:00
Michael Starke
13ebb93cfb Disallow empty selection to always select at least the first item 2019-02-07 08:50:32 +01:00
Michael Starke
9bac5c102f Plugin repository browser now supports downloading and showing plugins. 2019-02-06 18:07:53 +01:00
Michael Starke
0bd4421b76 Download and progress indication for Plugin downloads now works. Opening the file in the Finder is still missing 2019-02-06 16:43:29 +01:00
Michael Starke
6378d4f426 AutotypeCandidateSelectionWindow now displays username to help distinguish different entries with the same title 2019-02-06 16:42:47 +01:00
Michael Starke
1566ebbc61 Removed wrongfully tracked file 2019-02-06 16:41:47 +01:00
Michael Starke
e5175d0c72 Removed custom suppression button label 2019-02-06 16:40:50 +01:00
Michael Starke
875f8f01f7 Merge branch 'master' of https://github.com/MacPass/MacPass 2019-02-05 09:34:00 +01:00
thesoundofom
05d8b60c06 Update Localizable.strings (#875)
Add missing French localization for toolbar items, for action toolbar dropdown, and for accessibility permission notification.
2019-02-05 09:33:28 +01:00
Michael Starke
f95819ab98 Moved plugin loading into initialzation of plugin host again. 2019-02-05 09:32:35 +01:00
Michael Starke
e5ad0728cc download plugin archive works 2019-02-04 16:06:23 +01:00
Michael Starke
07309b5c24 Localizations for PasswordCreatorView 2019-02-01 14:05:24 +01:00
Michael Starke
a7469975ad Updated entropy calculation to account for required characters 2019-01-31 15:52:50 +01:00
Michael Starke
ed0a57a607 Password generator now allows to require a character form each character group 2019-01-31 13:39:56 +01:00
Michael Starke
6a1f8e0472 Fixed bug in entropy calculation when using mixed character sets. Added enforce groups button to UI 2019-01-31 13:13:05 +01:00
Michael Starke
6068260abb Added enforce character group usage 2019-01-29 16:57:52 +01:00
Michael Starke
dd54a980ed Added missing contraints to prevent clipping 2019-01-29 16:43:25 +01:00
Michael Starke
4a0ad506b8 Wired actionbutton. Using properties. 2019-01-25 18:54:50 +01:00
Michael Starke
01d4137fe4 changed button style 2019-01-23 19:53:10 +01:00
Michael Starke
9261a9b7f0 using properties 2019-01-15 23:54:03 +01:00
Michael Starke
d022fa2500 Using button view to retrieve model index. Removed unused localizations 2019-01-15 11:32:18 +01:00
Michael Starke
28f86fb45b removed key press delay 2019-01-14 14:46:47 +01:00
Michael Starke
4f339ba24e Added changes from stale PR #765 2019-01-07 18:55:32 +01:00
Michael Starke
efb84f1832 Using application modal alert. Window modal resulted in crash on quit. 2019-01-02 19:00:37 +01:00
Michael Starke
988cf3051c Reduce delay when sending key-press events 2019-01-02 19:00:05 +01:00
Michael Starke
fef9f5fdeb Updated localizations 2018-12-31 00:37:21 +01:00
Michael Starke
8f11acdfa4 Added button to status info display. Functionality is not wired yet. 2018-12-30 22:08:32 +01:00
Michael Starke
56a6fce658 Aligned naming, Pickchars dialog now automatically closes when all characters are picked. Table columns now start at 1 instead of 0. 2018-12-28 19:27:37 +01:00
Michael Starke
7898d3c146 Removed command evaluation for autotype candidate selection window 2018-12-26 16:30:11 +01:00
Michael Starke
1a4a7c55c6 Layout for last update checked. 2018-12-12 10:03:23 +01:00
Michael Starke
032cd39416 Added last updated date in plugin repository browser 2018-12-11 16:14:06 +01:00
Michael Starke
9f8617372f Removed currently unused AutotypeExecution context. 2018-12-07 13:43:15 +01:00
Michael Starke
713455bacc reducided minimal widths to allow for narrow singe-column view 2018-12-06 14:32:01 +01:00
Michael Starke
d8a20a1fe2 Removed autosave of selection changes. Save only occurs on lock. Shutdown needs to be added too. 2018-12-06 13:41:28 +01:00
Michael Starke
af1648da1c Updated to current KeePassKit to fix #736 2018-12-06 11:52:04 +01:00
Michael Starke
714bdf782d Folded delegation int MPPathControl 2018-11-30 17:20:24 +01:00
Michael Starke
3cf3e25156 Using custom MPPathControl to remove double click to show chooser (fixes #54 and #855) 2018-11-29 23:42:32 +01:00
Michael Starke
8c0d17e9f6 Merge pull request #854 from kud/patch-1 2018-11-27 17:58:19 +01:00
Erwann Mest
fd688e693b docs(README): fix typo 2018-11-27 17:37:00 +01:00
Michael Starke
3f43a061b8 Keep popups open if user interacts with anything outside of MacPass 2018-11-27 17:31:35 +01:00
Michael Starke
22b267f63e Updated to Xcode 10.1 2018-11-27 10:35:14 +01:00
Michael Starke
ddcaeb1e7b Updated to KeePassKit 2.3.6 to (fixes #842) 2018-11-26 11:47:04 +01:00
Michael Starke
146430c7b1 Newline 2018-11-22 13:13:27 +01:00
Michael Starke
79fa4f1c3f Updated to current KeePassKit (fixes #847) 2018-11-19 10:43:35 +01:00
Michael Starke
7cfc98c3a3 refactored magic number usage 2018-11-16 12:31:34 +01:00
Michael Starke
409632714c Disabled direct fail of autotype on missing access. Added time out for user interaction to prevent unexpected behaviour 2018-11-16 11:23:08 +01:00
Michael Starke
4b56167b56 Fixed button size when setting image by scaling down image before using it 2018-11-15 18:07:43 +01:00
Michael Starke
3fcb7305d3 Enabled drag and drop of search result for reordering 2018-11-15 18:07:16 +01:00
Michael Starke
f94dc84bfa Updated german localisation 2018-11-15 12:41:02 +01:00
Michael Starke
25017610d1 started converting Acknowlegements to html to use WebView inside MacPass 2018-11-15 08:15:00 +01:00
Michael Starke
a691bf5562 use current UI state 2018-11-15 07:36:18 +01:00
Michael Starke
bfeb71585d Added option to close MacPass if the last window is closed (default is NO) 2018-11-14 21:15:27 +01:00
Michael Starke
e57e20cbe0 Copy entries from external drop to ensure UUID uniqueness 2018-11-14 17:49:37 +01:00
Michael Starke
0525c84e21 Always select a row on showing the group outline 2018-11-14 17:38:23 +01:00
Michael Starke
ada4b51b62 Only allow for reordering drag if the sorting is index based 2018-11-14 17:38:04 +01:00
Michael Starke
ceb3dba6f1 Using current KeePassKit 2018-11-14 17:37:15 +01:00
Michael Starke
23e7ebc4a0 using property declaration in MPNodeResolver instead of simple getter. 2018-11-14 11:02:51 +01:00
Michael Starke
b9de0fb2dd Correctly update document state when group selection has changed 2018-11-14 10:28:59 +01:00
Michael Starke
dc67de1ed1 Renamed continuous release script 2018-11-14 07:53:48 +01:00
Michael Starke
d6ea2830e9 Fixed issue with resetting the selected group on first unlock. 2018-11-14 07:53:23 +01:00
Michael Starke
194c4bef49 Fixed issue with expiration date popup showing today instead of set date (fixes #845) 2018-11-12 19:03:49 +01:00
Michael Starke
5601baf6fb Do not disable autotype settings even when autotype is not possible 2018-11-12 18:55:51 +01:00
Michael Starke
04ffcab15b Using custom supressable dialog to check for autotype capabilities. Added notification when user performs autotype on disabled systems 2018-11-12 17:46:05 +01:00
Michael Starke
2d27fcbbb0 Use properties 2018-11-12 12:33:13 +01:00
Michael Starke
f83e071c16 Entry do not drag onto other entries anymore. Improvements to the localisation for drag and drop 2018-11-11 09:31:47 +01:00
Michael Starke
24d50b4b50 Added dynamic methods for custom attribute lookup 2018-11-11 09:30:16 +01:00
Michael Starke
b58211c4da Attachments now can be dragged out onto the finder. 2018-11-09 15:31:45 +01:00
Michael Starke
cac974a30e Removed gradient bar and changed text color in notes for full dark mode support 2018-11-08 13:47:42 +01:00
Michael Starke
7fe0689651 Movde check for autotype back in the app launch to prevent it from being hidden unter other windows 2018-11-08 13:46:06 +01:00
Michael Starke
c12cc7a4be Added support for dragging multiple entries as well as groups. Drag and drop between entry lists is still missing. 2018-11-07 17:46:54 +01:00
Michael Starke
a7ff9ecde3 Updated KeePassKit 2018-11-06 18:37:37 +01:00
Michael Starke
fa9333fb19 center document title in recent documents table in Welcome Screen 2018-11-06 17:44:26 +01:00
Michael Starke
e06d660fb7 Updated to KeePassKit 2.2 and adopted new API 2018-11-06 17:30:10 +01:00
Michael Starke
2b95621181 Converting to modern API for drag and drop 2018-11-06 12:11:15 +01:00
Michael Starke
0ff6597487 Extended password input API to allow for custom messages.
Autotype now dispays an info message when the database needs to be unlocked
2018-11-05 18:38:16 +01:00
Michael Starke
c260202924 Updated english localization 2018-11-05 17:40:28 +01:00
Michael Starke
1ed35a6eab Using NSViewController presentation instead of manual NSPopup creation 2018-11-05 17:36:32 +01:00
Michael Starke
d6b95118da removed delay afer key up event to speed up typing 2018-11-05 12:31:46 +01:00
Michael Starke
afc69f69ae Autotype now uses key presses instead of paste whenever possible. 2018-11-05 11:55:07 +01:00
Michael Starke
57e28e1417 renmoved commented code 2018-10-25 16:34:44 +02:00
Michael Starke
38e7a5f0b9 More progress on import plugin support 2018-10-25 16:34:35 +02:00
Michael Starke
5912f613cb Using correct plugn repository using fake plugin count 2018-10-24 17:06:24 +02:00
Michael Starke
3cd8d07552 Reverting back to string based version compare. Using customized comparator based ond Sparkle verison compare 2018-10-24 16:07:38 +02:00
Michael Starke
20ed81a5e7 Using properties 2018-10-22 13:07:39 +02:00
Michael Starke
5be3265c17 Plugin respository now uses table columns again. 2018-10-12 16:22:52 +02:00
Michael Starke
94a36fac36 Selected cell in plugin settings now uses more approriate text color on extra text when selected 2018-10-12 10:17:32 +02:00
Michael Starke
350d84f6e3 added script to update development language localization 2018-10-12 10:16:47 +02:00
Michael Starke
325d33a058 vent background style to subcontroll 2018-10-12 09:38:39 +02:00
Michael Starke
fa6067e9e0 Added comment to clarify custom intrinsicContentSize 2018-10-12 09:38:17 +02:00
Michael Starke
2b1f0ccbc5 Changed to list display for available plugins. Added version and installed info for plugins 2018-10-11 18:23:42 +02:00
Michael Starke
edf40e0cc7 Created prototype for a plugin browser 2018-10-11 15:21:19 +02:00
Michael Starke
bf96867654 Fixed typo in German localisation on signed plugins 2018-10-11 12:12:00 +02:00
Michael Starke
0921cd39d2 compatibilty for plugins is now fetched from plugin repository 2018-10-10 19:23:45 +02:00
Michael Starke
74b06ed195 Prevent button from accepting focus 2018-10-09 11:19:26 +02:00
Michael Starke
72dabf0338 extend Plugin host api to supply a version 2018-10-04 19:15:20 +02:00
Michael Starke
6b00ca71de extracted magic constant to acutal constant 2018-10-04 19:14:53 +02:00
Michael Starke
060d5c6b02 use class properties 2018-10-04 19:14:11 +02:00
Michael Starke
2c3e64947f use force since we overwrite a remote branch 2018-10-01 09:28:13 +02:00
Michael Starke
79ecb1af9c make script user executeable as well 2018-10-01 09:20:46 +02:00
Michael Starke
11cf8c3ef0 added script for continous release 2018-10-01 09:19:47 +02:00
Michael Starke
3ba2329052 usign sha256 instead of sha1 for download verification 2018-09-30 22:02:25 +02:00
Michael Starke
44f783fd0f disabled hightlichting to make the button look like a badge 2018-09-30 11:45:44 +02:00
Michael Starke
a04ed6d32a using Xcode 10 and 10.14 SDK 2018-09-29 00:53:11 +02:00
Michael Starke
3d3e7dbf4e codestyle 2018-09-29 00:52:55 +02:00
Michael Starke
66118d50c3 Welcome window now displays a list of recent documents.
also the window now gets closed when a document is loaded
2018-09-28 16:49:11 +02:00
Michael Starke
5aacbc66fe Fixed typos 2018-09-27 14:48:57 +02:00
Michael Starke
c87c454b4e Removed wrong localized value 2018-09-27 14:45:13 +02:00
Michael Starke
5c957979fb Updated German localization 2018-09-27 14:28:01 +02:00
Michael Starke
548570d97c Updated english localization 2018-09-27 14:23:37 +02:00
Michael Starke
64d03ce56c Present buttons in notifications, reopen last document when none was open and user clicks on notification. 2018-09-27 13:49:24 +02:00
Michael Starke
1bed34d23f Changing to banner style and relying on private API to allow for Buttons in Notifications 2018-09-27 12:14:15 +02:00
Michael Starke
af5ef6a5a8 Removed keychaing support UI since it’s not needed right now 2018-09-27 12:13:57 +02:00
Michael Starke
fc77d5ba97 Added missing translation 2018-09-27 09:59:53 +02:00
Michael Starke
417eba2936 Lokalisation angepasst 2018-09-27 09:23:04 +02:00
Michael Starke
837e040346 Added 5 Minutes option for clipboard clear time 2018-09-26 16:55:53 +02:00
Michael Starke
fcaede26bf Added alert when mergin KDB files 2018-09-26 16:15:53 +02:00
Michael Starke
cd34602e28 HNHBadgedTextFieldCell is no more 2018-09-26 16:15:37 +02:00
Michael Starke
bf68afb457 Added warning in Integration settings when autotype is not available 2018-09-26 15:09:21 +02:00
Michael Starke
182f448535 Removed HNHUIBadgedTextField in favour of a composed UI 2018-09-26 11:04:20 +02:00
Michael Starke
05ac9a0142 Added Accessibilty verification for macOS 10.14 to allow for better user experince 2018-09-25 11:18:13 +02:00
Michael Starke
009d198421 Using (class) properties 2018-09-25 11:16:33 +02:00
Michael Starke
bfe08b5510 Updated to Xcode 10 2018-09-25 11:15:57 +02:00
Michael Starke
a699adb0ad Using properties 2018-09-24 11:43:22 +02:00
Michael Starke
0dd0ba039d Merge branch 'master' of https://github.com/mstarke/MacPass 2018-09-21 09:47:59 +02:00
Roman Verchikov
a66cbb7507 Fixes build status badge in README (#829)
Build status badge used to point at a wrong (old?) URL. Fixed by changing URL to MacPass/MacPass.
2018-09-20 20:33:14 +02:00
Michael Starke
2c60ba42f5 Pin potential sensitive clipboard content to local machine 2018-09-20 18:03:36 +02:00
Michael Starke
9f35450683 Renamed Assets Catalog, modernized code 2018-09-20 18:03:12 +02:00
Michael Starke
8d7bb31b7c Updated to current HNHUI for dark mode support for macOS 10.14 2018-09-19 17:40:37 +02:00
Michael Starke
bcbeb2e43e Updated to current KeePassKit 2018-09-14 12:19:41 +02:00
Michael Starke
5168a6d3cd Properties 2018-09-14 12:18:22 +02:00
Michael Starke
72bb0aa6fc Removed unused parser context, added minor delay 2018-09-12 12:17:00 +02:00
Michael Starke
6ed82d8f15 Pinned Group and Index columns. Disabled reordering of those two columns 2018-09-11 17:00:08 +02:00
Michael Starke
c6be6ec819 Fixed localization issues. Localized OpenPanelAccessoryView 2018-09-11 16:59:48 +02:00
Michael Starke
f580663caf Fixed missing GPL header 2018-09-11 15:07:27 +02:00
Michael Starke
af96a55f32 Removed unused PreviewController 2018-09-11 15:07:19 +02:00
Michael Starke
89f174f04f Update GPL header 2018-09-11 15:04:22 +02:00
Michael Starke
fc5a054fed Removed unused file watcher 2018-09-11 15:04:16 +02:00
Michael Starke
bdd7d22e7c Added missing GPL header 2018-09-11 14:59:17 +02:00
Michael Starke
e887bdda93 Removed unneccessary NSKeyPathControl subclass 2018-09-11 14:59:05 +02:00
Michael Starke
2b694663e3 Fixed rendering bug on 10.10 and 10.11 for custom fields 2018-09-11 09:48:08 +02:00
Michael Starke
366db91df5 Updated KeePassKit to fix wrong UUID format in references 2018-09-10 16:08:09 +02:00
Michael Starke
1994857e64 Updated to current KeePassKit 2018-09-10 15:43:47 +02:00
Michael Starke
43d0677250 disabled automatic row height.
The custom attributes tabel view did not render if it was non-visible. Only a resize on the view triggered a display.
2018-09-06 09:12:40 +02:00
Michael Starke
3d89bc7545 Added stub for custom attribute dynamic lookup 2018-09-06 09:10:56 +02:00
Michael Starke
5589f5086b code cleanup 2018-09-06 09:10:43 +02:00
Michael Starke
f13cd4df35 using properties instead of method invocation 2018-09-03 14:21:47 +02:00
Michael Starke
c46a7c0dc7 Using properties where possible 2018-08-30 21:38:42 +02:00
Michael Starke
0274b32356 Using non-deprecated NSMenu allocations 2018-08-30 21:38:20 +02:00
Michael Starke
213e3584a0 Disable service menu for protected attributes 2018-08-29 17:54:07 +02:00
Michael Starke
2acff0702d Using class property 2018-08-29 17:53:52 +02:00
Michael Starke
9b7754b5fb pin buttons on custom attributes to the top 2018-08-28 21:11:58 +02:00
Michael Starke
890ac35ba6 Adjustes size for Autotype selectoin window to allow for bigger images 2018-08-28 12:07:00 +02:00
Michael Starke
650c349865 Fixed clipped content in Autotype candidate selection view if images where too large 2018-08-28 09:42:35 +02:00
Michael Starke
cbcd9fb751 Enable automatic row height for 10.13 in custom fields. Fixed #27 2018-08-27 17:11:25 +02:00
Michael Starke
c74254f171 Cleaner code 2018-08-27 12:13:15 +02:00
Michael Starke
bc60ca0174 moving autotype execution to main thread 2018-08-27 12:12:39 +02:00
Michael Starke
1ed18568a9 Hide protected attributes in dialog 2018-08-27 11:37:34 +02:00
Michael Starke
14afe81ec2 Updated to Xcode 9.4 2018-08-27 11:37:11 +02:00
Michael Starke
6555cc04e5 Merging KDB files with different options to prevent group duplication 2018-08-25 08:48:35 +02:00
Michael Starke
2276a2b954 Added API stub to allow for keystroke overrides when performing autotype 2018-08-24 15:57:06 +02:00
Michael Starke
affc02c933 Added non-dev option to contrinbute 2018-08-24 08:05:59 +02:00
Michael Starke
797b70bedf Updated to Xcode 9.4 2018-08-23 22:37:49 +02:00
Michael Starke
d902aa893c Display of selected filters now works correctly 2018-08-23 22:37:38 +02:00
Michael Starke
eb8c5c4749 Menu items now correclty toggel search flags, not only buttons.
UI is still a bit broken, but functional
2018-08-23 18:59:43 +02:00
Michael Starke
187e77f9ff Fixed wrong combineable flags 2018-08-23 18:58:55 +02:00
Michael Starke
9ac7352eec removed uncommented code 2018-08-23 17:44:21 +02:00
Michael Starke
3688142c60 restored 10.10 compatibilty by loosing detatchHiddenViews 2018-08-23 15:24:20 +02:00
Michael Starke
760a25e88f Fixed regression resulting in no recent searches being stored.
This was introduced by adding better search filed keyboard navigation in 92c83e0
2018-08-22 12:21:00 +02:00
Michael Starke
80a469a9ee fixed wrong header include 2018-08-22 12:18:08 +02:00
Michael Starke
5c9a93342d Fixed typo. 2018-08-18 22:12:59 +02:00
Michael Starke
36e6472822 Switchted to NSStackView for search options. This raises the deployment target to 10.11. 2018-08-18 22:12:59 +02:00
Michael Starke
27d1f512f0 Moved favIconFetching to MPIconHelper 2018-08-18 22:12:59 +02:00
Michael Starke
8ed936a08d Updated to Xcode 9.4 2018-08-18 22:12:59 +02:00
Michael Starke
18abd4d5a1 Updated KeePassKit to fix faded Icon display 2018-08-18 22:12:59 +02:00
Michael Starke
99a5d5642e Updated to Xcode 9.4 2018-08-18 22:12:59 +02:00
Michael Starke
2965530483 Fixed missing changed state when trash is emptied 2018-08-18 22:12:59 +02:00
remi6397
ccee893ba3 Update Polish translation (#820)
* Update Polish translation
* Fix plurals in Polish translation
2018-08-18 22:12:32 +02:00
Michael Starke
1f2b0447e2 Always show autotype notifications. Fixes #814 2018-07-12 22:55:47 +02:00
Michael Starke
1f7fb693a9 Modern Objective-C 2018-07-12 22:55:10 +02:00
Michael Starke
e587cd65fd moder Objective-C 2018-07-12 22:54:54 +02:00
Michael Starke
274a58b789 added user info to notfication 2018-07-12 18:22:38 +02:00
Michael Starke
0c2d08208c modern Objective-C 2018-07-12 18:22:38 +02:00
Michael Starke
a71cd85afc Fixed spelling errors (Fixes #813) 2018-07-12 11:33:46 +02:00
Michael Starke
b8dd193cbe Fixed missing window title for Autotype match notification 2018-07-11 10:12:21 +02:00
Michael Starke
4097b4e9a0 added sha1 checksum to verify the zip file 2018-07-11 10:11:17 +02:00
Michael Starke
1f274dc9c8 fixed typos in documentation 2018-07-04 13:07:45 +02:00
Michael Starke
8526caa7c0 Updated german localizations 2018-07-04 12:30:21 +02:00
Michael Starke
2e869606d5 Show passwords is temporary, changing entries (or locking the db) will hide the password again. fixes #806 2018-07-03 11:01:17 +02:00
Michael Starke
06f2a2037e Updated KeePassKit and HNHUi to current versions 2018-07-03 10:52:52 +02:00
Michael Starke
7b8d5d5835 Added german localization for plugin pop up 2018-06-29 16:35:46 +02:00
Michael Starke
1e11cac5f5 Updated copyright 2018-06-29 16:34:24 +02:00
Michael Starke
c994ac016b Removed obsolte keys form localizations. Updated to current keys for english localization 2018-06-29 11:24:21 +02:00
Michael Starke
86c1cb8dd4 Changed localization for Autotype matches 2018-06-29 11:02:44 +02:00
Michael Starke
10009c990e removed unused code 2018-06-29 11:02:34 +02:00
Michael Starke
38a3e416b6 removed unneded log message 2018-06-28 14:19:13 +02:00
Michael Starke
7e1b059e62 silenced undefined selector warning 2018-06-28 13:46:06 +02:00
Michael Starke
21be56bfad fixed merge error in russian localization 2018-06-28 13:45:56 +02:00
Michael Starke
92804d6429 removed unused code 2018-06-27 18:09:35 +02:00
Michael Starke
4340d77f48 updated contributors 2018-06-25 10:25:40 +02:00
Michael Starke
6d958802b2 Using predefined colors 2018-06-25 10:20:14 +02:00
Michael Starke
0911eafb03 updated to KeePassKit to 1.13.2 2018-06-25 10:20:14 +02:00
Michael Starke
6f1b074b4d removed unnecessary code 2018-06-25 10:20:14 +02:00
MichaelKo
be4eb0e6ad Add missing RU-l10n, fix spelling errors (#805) 2018-06-24 14:30:19 +02:00
Michael Starke
05289c1444 Really fixed crash on entries with custom attributes 2018-06-12 12:13:50 +02:00
Michael Starke
14ac7ed675 Fixed crash on entries with custom attributes 2018-06-12 12:07:10 +02:00
Michael Starke
feedcd56ac set tabbing mode to preferred to encourage MacPass to use tabs 2018-06-08 09:36:47 +02:00
Michael Starke
27cffc3f3b updated to a working version of KeePassKit 2018-06-06 22:21:56 +02:00
Michael Starke
93077366c2 bumped Xcode image to get travis to build 2018-06-04 11:12:50 +02:00
Michael Starke
f6910fa045 bumped KeePassKit dependency to build on Xcode 9.3 and newer 2018-06-04 10:47:58 +02:00
Michael Starke
87b62c4e96 added equality for autotype context 2018-06-01 09:52:03 +02:00
eiermaaaan
1d46320662 Update EntryInspectorView.strings (#762)
Better text ideas
2018-05-31 17:13:57 +02:00
Michael Starke
9169bd5e5e updated KeePassKit dependency 2018-05-17 21:25:17 +02:00
Michael Starke
3a70b36dc4 Removing searchWithGoogle and all submenu actions from context menu 2018-05-15 15:10:41 +02:00
Michael Starke
2bf10b9463 Fixed header styles and added missing GPL license header 2018-05-15 15:10:41 +02:00
Michael Starke
47fdee7301 fixed spelling in bundle keys 2018-05-15 15:10:41 +02:00
Michael Starke
d6aa01c970 Using macpassapp.org url instead of Github url 2018-05-15 15:10:41 +02:00
Michael Starke
0c702ec351 changed API for plugin repository 2018-05-15 15:10:41 +02:00
Michael Starke
98cfdadcfe enhanced naming of password input properties 2018-05-15 15:10:41 +02:00
Michael Starke
6e9dae6424 Update issue templates 2018-05-15 14:40:50 +02:00
Michael Starke
cdaee44439 Update issue templates 2018-05-15 14:39:43 +02:00
Michael Starke
d6e01235e9 Dropping attachment onto an entry now adds a history entry if neede. (Fixes #789) 2018-05-09 18:32:29 +02:00
Michael Starke
bffbc22a68 Codestyle 2018-05-09 18:31:23 +02:00
Michael Starke
f3dbf3beb9 disabled unfinished HOTP support 2018-05-09 18:31:15 +02:00
Michael Starke
d7709801e9 Updated to current repository url 2018-05-09 18:31:03 +02:00
Michael Starke
b10f218ee6 Updated copyright to 2018 2018-05-09 18:30:55 +02:00
Michael Starke
9b3e1443df Using updated KeePassKit to fix #784 and #788 2018-05-08 15:28:36 +02:00
Michael Starke
f3dbb4f0f9 Bumped version 2018-05-08 15:17:26 +02:00
Michael Starke
535a06ff5a stubbed export plugin interface 2018-05-08 15:16:12 +02:00
Patrik Thunström
11244297df Various string fixes and improvements (#783)
* Typo fixes

* Update of copyright year in all localized files

* More typos

* Align static descriptiont text with checkbox behavior

* Clarify cases when the term file means a database
2018-05-02 11:23:04 +02:00
Patrik Thunström
063e2cdf11 Initial version of Swedish translation (#781)
May not be perfect, but dogfooded for a week, and some inspiration drawn from the Swedish translation of Keepass 2.x...
2018-04-24 10:45:47 +02:00
Michael Starke
0499567a84 Reworded system requirements section 2018-04-04 11:22:38 +02:00
Michael Starke
e51cdda758 Improved wording for Autotype match 2018-04-04 11:22:38 +02:00
Michael Starke
d901ddbd9b Added German localization for Pickfield/Pickchars Dialogs 2018-04-04 11:22:38 +02:00
eiermaaaan
8e20744d6d Update AutotypeBuilderView.strings (#759)
Consistency in Localisation, «Auto-Type» now called «Autotype» like in English Translation
2018-03-19 18:03:12 +01:00
eiermaaaan
17835be3f7 Update AutotypeCandidateSelectionView.strings (#760)
Consistency in Localisation, «Auto-Type» now called «Autotype» like in English Translation.
Typo «Abbrechen» corrected.
2018-03-19 18:03:00 +01:00
eiermaaaan
bb7fc24b7e Update DuplicateEntryOptionsWindow.strings (#761)
German «Passwort» instead of english «Password»
2018-03-19 18:02:27 +01:00
eiermaaaan
22cbfe1db0 Update GeneralSettings.strings (#763)
Better text
2018-03-19 18:01:58 +01:00
eiermaaaan
0e900c1131 Update InfoPlist.strings (#764)
:)
2018-03-19 18:01:44 +01:00
eiermaaaan
1eae0be06a Update PluginSettings.strings (#769)
Consistency
2018-03-19 18:01:31 +01:00
eiermaaaan
82dd0e614c Update PasswordCreatorView.strings (#767) 2018-03-19 17:47:32 +01:00
eiermaaaan
c218f64e57 Update AutotypeCandidateSelectionView.strings (#758)
* Update AutotypeCandidateSelectionView.strings

Typo corrected :)

* Update DuplicateEntryOptionsWindow.strings

Typo corrected :)

* Update EntryInspectorView.strings

Consistency «Auto-Type» instead of «Autotype»

* Update EntryInspectorView.strings

Consistency «Auto-Type-Sequenz» instead of «Auto Type Sequenz»

* Update EntryInspectorView.strings

Consistency «Auto-Type»
2018-03-19 17:17:38 +01:00
eiermaaaan
e82b73004b Update PasswordInputView.strings (#768) 2018-03-19 17:17:09 +01:00
eiermaaaan
1c472b41ba Update WorkflowSettings.strings (#770) 2018-03-19 17:16:05 +01:00
eiermaaaan
2f6066e7f1 Update WelcomeWindow.strings (#771)
Consistency
2018-03-19 17:15:26 +01:00
eiermaaaan
55cd1f2c07 Update WorkflowSettings.strings (#757)
Typo corrected.
2018-03-19 09:04:16 +01:00
eiermaaaan
01b6228225 Update ContextBar.strings (#756)
Corrected «Notitzten» to «Notizen»
2018-03-19 09:03:54 +01:00
Michael Starke
76ec77f59f Added command key combination for mapping which is neede for some layout (e.g. russian) (fixes #733) 2018-03-15 22:10:38 +01:00
Michael Starke
cf79f24d83 Updated german localization 2018-03-15 11:45:57 +01:00
Michael Starke
e975850f78 Updated english localization 2018-03-15 11:33:48 +01:00
Michael Starke
642477ce5c Do not escape url string as they should already be completly escaped (fixes #743) 2018-03-13 17:05:16 +01:00
Michael Starke
6975cc3945 added constraints to context bar 2018-03-13 17:03:25 +01:00
Michael Starke
a64bdc60f6 Moved file 2018-03-13 17:03:01 +01:00
Michael Starke
6f37b98d92 Added “everywhere” search option 2018-03-09 17:43:31 +01:00
Frank Kooij
8fc55f06dc Improved Dutch localization (#751)
* Improved Dutch localization
2018-03-09 11:48:25 +01:00
Michael Starke
9314b84b9d Extracted MPPluginRepositoryItem into a seperate file 2018-03-08 21:42:38 +01:00
Michael Starke
5a5064da43 Set Cmd + T as default keystroke for autotype command 2018-03-08 21:42:09 +01:00
Michael Starke
72f7991566 Clarified comments and cleaned translations 2018-03-07 09:57:58 +01:00
Michael Starke
465f7ecd7e updated export settings 2018-03-06 18:19:08 +01:00
Michael Starke
d58b406c37 Added autotype button to toolbar 2018-03-06 18:15:00 +01:00
Michael Starke
ee604337f8 added Affinity Designer version of assets 2018-03-06 18:14:43 +01:00
Michael Starke
457431ffca Updated repository location since it was moved 2018-03-02 22:41:17 +01:00
Michael Starke
0028684e5c added item menu to MainMenu. Enabled copy actions in main menu if no focus is on entryView 2018-03-02 15:41:59 +01:00
Michael Starke
24f11dccfd clarifired API with generics 2018-03-02 15:41:15 +01:00
Michael Starke
033deacfdc pressing down in search input will focus entries (#707) 2018-03-01 15:13:47 +01:00
Michael Starke
f0def074bf re-enabled type selection in entry table view (fixes #740) 2018-03-01 15:11:06 +01:00
Michael Starke
5cc333146e converted to properties where appropriate 2018-02-16 17:09:46 +01:00
Michael Starke
e45f7b8739 changed open mechanics to use 10.10 APIs to try to fix 10.13 launch bugs with chrome 2018-02-15 23:00:45 +01:00
Michael Starke
ad6c501fef reverted image scalilng to prevent wrongfully upscaling 2018-02-15 23:00:15 +01:00
Michael Starke
8b60ae4242 implemented delegation from menu actions to plugins 2018-02-15 18:48:02 +01:00
Michael Starke
f759e6788c minor refactorings in custom action plugin API 2018-02-08 11:16:57 +01:00
Henri de Jong
9f1ac446a8 Improved Dutch localization (using XLIFF) (#715)
* Improved NL Localization with import of missing strings from EN

- Imported missing strings from EN
- Changed order of strings to match that of EN
- Improved NL localization by honouring Dutch spelling and style, by
following localized phrases as used by Apple and Mozilla and by being
consistent

* Improved NL Localization

Improved NL localization by honouring Dutch spelling and style, by
following localized phrases as used by Apple and Mozilla and by being
consistent

* Improved NL Localization

* Improved NL Localization

* Improved NL Localization

* Improved Dutch translations, using XLIFF

* Reverting wrong translations / Apply last changes from #714

* Fixed removed translations, added some extra
2018-02-08 11:16:34 +01:00
Michael Starke
4ef59b23f2 changed custom string plugin API slightly to better reflect intention 2018-01-22 22:43:19 +01:00
Henri de Jong
0e5cf4021f Added a contribute file with the workflow for translations (#716) 2017-12-20 23:58:55 +01:00
Michael Starke
a516789217 fixed missing offsets for special format where only upper or lower case characters are used 2017-12-12 15:35:35 +01:00
Michael Starke
24c8d8efc8 Pickcharparser now can handle non-default checkbox formats 2017-12-12 15:19:24 +01:00
Michael Starke
2d5974982e fixes an issue with empty icons being generated when downloading them (fixes #709) 2017-12-12 10:57:14 +01:00
Michael Starke
0f43afdb59 more use of properties 2017-12-12 10:56:31 +01:00
Michael Starke
92c83e0fa0 pressing down on search field will move to entries list 2017-12-11 17:05:57 +01:00
Michael Starke
5e0d95cdc5 using properties, removed unused code 2017-12-11 17:05:30 +01:00
Michael Starke
e9131b65fd using properties 2017-12-11 17:04:56 +01:00
Michael Starke
2aeeeaefd7 reduced indentation in outline view to 8 points 2017-12-08 14:13:42 +01:00
Michael Starke
4099c52266 exposed private API for better testing on MPPickcharsParser.
Parser now support default conversion to down arrow presses.
Special format handling currently not supported
2017-12-07 17:45:00 +01:00
Michael Starke
91508f0dde changed plugin APIs for entryAcitonPlugins and customAttributePlugins.
Internal housekeeping on MPPluginHost to allow for better access to certain plugins
Still pending: menu action to plugin delegation
2017-12-06 20:02:22 +01:00
Michael Starke
4fa52e23ef added HmacOtp comment 2017-12-05 18:28:11 +01:00
Michael Starke
5574b01fed Stubbed custom attribute adding via context menu
Made MPContextToolbarButton usable as normal button.
Added private API helper for adding buttons to NSUserNotification
Remove Autotype plugin API
Enhanced custom attribute plugin API
Enhanced EntryActionPlugin API to decouple menu items from actual action/target setup
Stubbed action on no-open documents NSUserNotifications
Stubbed HMACOTP custom attribute setup
2017-12-05 15:56:06 +01:00
Michael Starke
e8ddbd092c dedicated delegate for user interaction with notifications 2017-12-05 12:08:10 +01:00
Michael Starke
5879de1e4d prototyped plugin repository browsing 2017-12-04 16:03:50 +01:00
Michael Starke
fc496189b6 Extracted Help URL key to constants, added plugin repository key 2017-12-04 15:00:04 +01:00
Michael Starke
f9e761649f Added pretty pring value transformer 2017-12-01 18:57:38 +01:00
Michael Starke
50c38e5672 Added pretty password display prototype to enhance password display 2017-11-30 16:41:16 +01:00
Michael Starke
ee418db014 Pickchar parser parses options. Output is not converted at the moment 2017-11-30 15:47:12 +01:00
Michael Starke
a05a753a13 Extracted MPPlugin constants into separate header 2017-11-29 14:37:36 +01:00
Michael Starke
5db3950424 fixed issue with wrong clear timeout when pasting was done inside the clear timeout 2017-11-29 14:37:13 +01:00
Michael Starke
eaea14ad9d Fixed mixed case in naming. Added enums for table column identification 2017-11-29 13:50:15 +01:00
Michael Starke
6d8c2b34be rough version of {PICKFIELD} 2017-11-28 18:33:37 +01:00
Michael Starke
d8351f12f2 fixed unreachable code error 2017-11-28 15:49:43 +01:00
michael starke
6f72301dfd using 10.12 compatible API 2017-11-28 14:01:46 +01:00
michael starke
3fc656b1dd Using better output for travis 2017-11-28 14:00:51 +01:00
michael starke
0cb404c072 Added title to pickchar. Fixed remain-counter to actually display remaining count. 2017-11-28 12:16:08 +01:00
michael starke
173e7fe44f added script to create list of contributors. Folded translators and contributors 2017-11-28 10:32:10 +01:00
michael starke
db7de20fba Added a lot of missing contributors, removed extensice explanations on alternatives. Minor updates for 0.7 2017-11-27 19:49:24 +01:00
michael starke
4628c638a8 only save database on lock if file was acutally changed. Otherweise leave it be. 2017-11-27 18:59:18 +01:00
michael starke
32a1f10910 Mark document as changed after synchronization regardless of what has changed
This fixes a potential data loss after quitting macpass on synchronzation.
2017-11-27 15:30:33 +01:00
michael starke
6207cc3e11 using nicer API for containsString 2017-11-27 15:29:44 +01:00
Michael Starke
ee5a4880d0 Update index.md 2017-11-27 08:17:25 +01:00
michael starke
c3c85d1988 moving to lower case folders 2017-11-27 08:14:33 +01:00
michael starke
ca0e327720 moving to lower case files 2017-11-27 08:14:13 +01:00
michael starke
dbfc468b87 TODO: resolve values for autotype matches 2017-11-27 08:12:55 +01:00
michael starke
c8f3fe6888 Adoped new KeePassKit placeholder delegation.
Added primitive support for {PICKCHARS} currently without support for options
2017-11-27 08:12:55 +01:00
michael starke
d69d832de4 Inializing regualr expressions only once for autotype 2017-11-27 08:12:55 +01:00
Michael Starke
fa78e446c3 Create index.md
added index to move from gh-pages to /docs pages
2017-11-27 08:10:26 +01:00
michael starke
e2e6c3e3f9 bumped version 2017-11-23 08:20:48 +01:00
michael starke
2495eac177 Fixes a bug resutling in a reappering password change promt when the database is already lock (fixes #696) 2017-11-23 08:20:18 +01:00
Moises Perez
278a0145d0 Improved or added localisations (#687) 2017-11-21 18:11:52 +01:00
michael starke
287356d93e fixed build warnings 2017-11-21 17:24:16 +01:00
michael starke
775dbd07ee Locking a db now requests a password/key if none is set 2017-11-21 12:32:41 +01:00
michael starke
547e61fc4b removed commented dead code 2017-11-21 12:32:17 +01:00
michael starke
ded8eeadb1 bumped version 2017-11-21 11:37:22 +01:00
michael starke
1bcb002ed0 Updated localizations 2017-11-21 11:31:41 +01:00
michael starke
4b5aa003bf Fixed wrong null placeholder settings for inspector view 2017-11-21 11:20:12 +01:00
michael starke
5f7331aa4d Updated localizations and comments 2017-11-21 11:17:21 +01:00
michael starke
bc2ee9a98f cleaned english .stings for inspector view 2017-11-21 11:16:56 +01:00
michael starke
4e5d491264 fixed stale entry display when database is locked 2017-11-21 10:55:36 +01:00
michael starke
74573de85f consolidated restart plugin code into one function 2017-11-21 10:49:16 +01:00
michael starke
d051421f14 Fixed issue resulting in opening the fix autotype window instead of a new document window (fixes #668)
This also fixes an isse resulting to save request not being shown when closing the document window but when closing the fix-autotype window.
2017-11-21 10:43:06 +01:00
michael starke
68a4864051 Display minimum version information (which might not be the file version!) 2017-11-20 19:36:54 +01:00
michael starke
15d1ce8419 Updated KeePassKit to fix crash on Reference resolving (fixes #693) 2017-11-20 12:56:05 +01:00
michael starke
7f43f3a7ba Minor change to localization 2017-11-20 12:51:48 +01:00
michael starke
c33c6a8cfa Plugin display is now more verbose
The plugin settings now displays more information about a failed plugin instead of just not displaying anything at all.
2017-11-20 12:51:39 +01:00
michael starke
ec62a3e12c Added missing german localization 2017-11-19 13:35:42 +01:00
michael starke
07a8085705 Extended plugin settings
Plugins can be installed via drag and drop
Plugins can be uninstalled via the remove button
2017-11-17 17:45:10 +01:00
michael starke
c2dd64ff70 do not enabled non-working remove plugin button 2017-11-16 19:14:50 +01:00
michael starke
3113c38a20 bumped version 2017-11-16 19:13:22 +01:00
michael starke
089a3075ec using KeePassKit 1.7.6 2017-11-16 19:09:25 +01:00
michael starke
ad0a198b48 Extended and cleaned localizations 2017-11-16 19:08:38 +01:00
michael starke
36b98bcd6d customized open panels throughout the app. Added brows plugins button to plugin settings 2017-11-16 17:55:08 +01:00
michael starke
29a6c39c1f Added rudementary support to add plugins via the plugin settings tab 2017-11-16 17:34:03 +01:00
michael starke
95659e6121 Fixed typo in german localization for plugin settings view 2017-11-16 17:33:28 +01:00
michael starke
995625b229 disable notes field if nothing is selected (fixes #684) 2017-11-16 17:32:40 +01:00
michael starke
7a60b06c66 Added history item to table header selection 2017-11-16 11:20:17 +01:00
michael starke
97b3f3809b Using stringdicts for pluralization on duplicate entry action 2017-11-16 11:19:51 +01:00
michael starke
e1feefd041 Added missing english localizations 2017-11-16 06:50:57 +01:00
426 changed files with 15891 additions and 5931 deletions

29
.github/ISSUE_TEMPLATE/Bug_report.md vendored Normal file
View File

@@ -0,0 +1,29 @@
---
name: Bug report
about: Create a report to help us improve
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- macOS: [e.g. 10.12.1]
- Version [e.g. 0.7.3]
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest an idea for this project
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

1
.gitignore vendored
View File

@@ -23,3 +23,4 @@ Docs/Acknowlegements/*.fdb_latexmk
Docs/Acknowlegements/*.fls Docs/Acknowlegements/*.fls
Docs/Acknowlegements/*.log Docs/Acknowlegements/*.log
Docs/Acknowlegements/*.synctex.gz Docs/Acknowlegements/*.synctex.gz
docs/acknowledgement/*.lb

View File

@@ -1,18 +1,24 @@
osx_image: xcode8.3 osx_image: xcode10.2
xcode_project: MacPass.xcodeproj xcode_project: MacPass.xcodeproj
xcode_scheme: MacPass xcode_scheme: MacPass
language: objective-c language: objective-c
before_install: before_install:
- carthage bootstrap --platform macOS - carthage bootstrap --platform macOS
- gem install xcpretty --no-document --quiet
after_success: after_success:
- cd ./build/Build/Products/Release - cd ./build/Build/Products/Release
- zip -9ry MacPass-continuous.zip MacPass.app - zip -9ry MacPass-continuous.zip MacPass.app
- shasum -a 256 MacPass-continuous.zip > MacPass-continuous.zip.sha256
- cd - - cd -
- mv ./build/Build/Products/Release/MacPass-continuous.zip . - mv ./build/Build/Products/Release/MacPass-continuous.zip .
- mv ./build/Build/Products/Release/MacPass-continuous.zip.sha256 .
script: xcodebuild clean && xcodebuild build -configuration release -project MacPass.xcodeproj -scheme MacPass CODE_SIGNING_REQUIRED=NO -derivedDataPath ./build script: |
set -o pipefail
xcodebuild clean
xcodebuild build -configuration release -project MacPass.xcodeproj -scheme MacPass CODE_SIGNING_REQUIRED=NO -derivedDataPath ./build | xcpretty -c
branches: branches:
only: only:
@@ -23,9 +29,11 @@ deploy:
provider: releases provider: releases
api_key: api_key:
secure: AEb7fgi29S3aXFt5bXz+lq1KHISumny6bf4j06JBC5gUrSs+dW0/tmVFq68XRAqigeOQU31wwv20f7OHiy+GRYDXM2xBsX9ZBQ2IilnaXlDy/mPsNcJJJsZ2gyodi3KnU0rZtTb93me2YyU86H4Na/gtaZZUKjLwCFtGGziExD8= secure: AEb7fgi29S3aXFt5bXz+lq1KHISumny6bf4j06JBC5gUrSs+dW0/tmVFq68XRAqigeOQU31wwv20f7OHiy+GRYDXM2xBsX9ZBQ2IilnaXlDy/mPsNcJJJsZ2gyodi3KnU0rZtTb93me2YyU86H4Na/gtaZZUKjLwCFtGGziExD8=
file: MacPass-continuous.zip file:
- MacPass-continuous.zip
- MacPass-continuous.zip.sha256
overwrite: true overwrite: true
on: on:
tags: true tags: true
repo: mstarke/MacPass repo: MacPass/MacPass
branch: continuous branch: continuous

Binary file not shown.

21
CONTRIBUTE.md Normal file
View File

@@ -0,0 +1,21 @@
# Contribute to MacPass
Thanks for taking the time to contribute to MacPass! This documents describes a few guidelines for contributing. When in doubt about how to contribute, ask another contributor.
## Translations
MacPass has translations for a few languages. If you can translate to another language, or you think a translation is wrong, follow the next steps to add or improve a translation:
- You can use a XLIFF editor for translating the strings. For example [XLIFFTool](https://itunes.apple.com/us/app/xlifftool/id1074282695)
- For a new localization only:
- Select MacPass in the project navigator
- Select the MacPass project in the project and targets list
- Open the info tab and click the `+` button un the localizations section.
- Choose the language you want to translate
- Select all resources and click finish, now the new language is available for export in the next step
- Export the XLIFF file
- Select the MacPass project in XCode
- Go to `Editor -> Export for Localization`
- Select the language you want to translate
- Now use your XLIFF editor and save the file if you are done with your translations
- Go back to XCode and use `Editor -> Import Localization` to import the changes
Alternatively, you can open an issue to ask a dev to create the XLIFF file for you and send it back after you've finished localising.

View File

@@ -1,3 +1,3 @@
github "sparkle-project/Sparkle" ~> 1.18.1 github "sparkle-project/Sparkle" ~> 1.18.1
github "MacPass/KeePassKit" ~> 1.7.5 github "MacPass/KeePassKit" ~> 2.4
github "mstarke/HNHUi" ~> 1.4.1 github "mstarke/HNHUi" ~> 3.0

View File

@@ -1,3 +1,4 @@
github "MacPass/KeePassKit" "1.7.5" github "MacPass/KeePassKit" "2.4.2"
github "mstarke/HNHUi" "1.4.1" github "mstarke/HNHUi" "3.0"
github "sparkle-project/Sparkle" "1.18.1" github "robbiehanson/KissXML" "5.2.3"
github "sparkle-project/Sparkle" "1.20.0"

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "0910" LastUpgradeVersion = "1010"
version = "1.3"> version = "2.0">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES">
@@ -26,9 +26,8 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = "" codeCoverageEnabled = "YES"
shouldUseLaunchSchemeArgsEnv = "NO" shouldUseLaunchSchemeArgsEnv = "NO">
codeCoverageEnabled = "YES">
<Testables> <Testables>
<TestableReference <TestableReference
skipped = "NO"> skipped = "NO">
@@ -64,11 +63,11 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0" launchStyle = "0"
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO" ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES" debugDocumentVersioning = "YES"
debugXPCServices = "NO"
debugServiceExtension = "internal" debugServiceExtension = "internal"
allowLocationSimulation = "YES"> allowLocationSimulation = "YES">
<BuildableProductRunnable <BuildableProductRunnable
@@ -97,6 +96,11 @@
value = "YES" value = "YES"
isEnabled = "YES"> isEnabled = "YES">
</EnvironmentVariable> </EnvironmentVariable>
<EnvironmentVariable
key = "OS_ACTIVITY_MODE"
value = "disable"
isEnabled = "NO">
</EnvironmentVariable>
</EnvironmentVariables> </EnvironmentVariables>
<AdditionalOptions> <AdditionalOptions>
</AdditionalOptions> </AdditionalOptions>

View File

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

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

View File

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 257 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -18,13 +18,13 @@
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY"> <customView translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="480" height="241"/> <rect key="frame" x="0.0" y="0.0" width="480" height="241"/>
<subviews> <subviews>
<scrollView wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="36" horizontalPageScroll="10" verticalLineScroll="36" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7cB-re-3ys"> <scrollView wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="38" horizontalPageScroll="10" verticalLineScroll="38" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7cB-re-3ys">
<rect key="frame" x="20" y="61" width="440" height="118"/> <rect key="frame" x="20" y="61" width="440" height="118"/>
<clipView key="contentView" id="WSc-o2-GsZ"> <clipView key="contentView" id="WSc-o2-GsZ">
<rect key="frame" x="1" y="1" width="438" height="116"/> <rect key="frame" x="1" y="1" width="438" height="116"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="34" viewBased="YES" id="Ih2-lo-t2W"> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="36" viewBased="YES" id="Ih2-lo-t2W">
<rect key="frame" x="0.0" y="0.0" width="438" height="116"/> <rect key="frame" x="0.0" y="0.0" width="438" height="116"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/> <size key="intercellSpacing" width="3" height="2"/>
@@ -50,6 +50,10 @@
<subviews> <subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Utl-Gl-ETE"> <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Utl-Gl-ETE">
<rect key="frame" x="2" y="1" width="14" height="14"/> <rect key="frame" x="2" y="1" width="14" height="14"/>
<constraints>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="32" id="N48-cx-w8q"/>
<constraint firstAttribute="height" relation="lessThanOrEqual" constant="32" id="mde-14-jf7"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="gT4-lt-7Ir"/> <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="gT4-lt-7Ir"/>
</imageView> </imageView>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dxk-A7-QSy"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dxk-A7-QSy">
@@ -84,11 +88,11 @@
</tableView> </tableView>
</subviews> </subviews>
</clipView> </clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="Xgd-fL-vdl"> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Xgd-fL-vdl">
<rect key="frame" x="1" y="235" width="92" height="16"/> <rect key="frame" x="1" y="235" width="92" height="16"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="5cX-o7-7ZJ"> <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="5cX-o7-7ZJ">
<rect key="frame" x="224" y="17" width="15" height="102"/> <rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
@@ -142,7 +146,7 @@ DQ
<constraint firstItem="7cB-re-3ys" firstAttribute="top" secondItem="kDw-2l-7gQ" secondAttribute="bottom" constant="8" symbolic="YES" id="ss6-Ku-XPY"/> <constraint firstItem="7cB-re-3ys" firstAttribute="top" secondItem="kDw-2l-7gQ" secondAttribute="bottom" constant="8" symbolic="YES" id="ss6-Ku-XPY"/>
<constraint firstAttribute="trailing" secondItem="kDw-2l-7gQ" secondAttribute="trailing" constant="20" symbolic="YES" id="zSz-fH-fVn"/> <constraint firstAttribute="trailing" secondItem="kDw-2l-7gQ" secondAttribute="trailing" constant="20" symbolic="YES" id="zSz-fH-fVn"/>
</constraints> </constraints>
<point key="canvasLocation" x="-128" y="-54"/> <point key="canvasLocation" x="176" y="-39"/>
</customView> </customView>
</objects> </objects>
<resources> <resources>

View File

@@ -1,22 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPContextBarViewController"> <customObject id="-2" userLabel="File's Owner" customClass="MPContextBarViewController">
<connections> <connections>
<outlet property="emptyTrashButton" destination="szx-Hx-OrV" id="i1Y-qB-TW3"/> <outlet property="emptyTrashButton" destination="szx-Hx-OrV" id="i1Y-qB-TW3"/>
<outlet property="everywhereButton" destination="RGg-wK-hz4" id="xIZ-YB-pkm"/>
<outlet property="exitHistoryButton" destination="pqx-su-vAh" id="JmV-vC-F48"/> <outlet property="exitHistoryButton" destination="pqx-su-vAh" id="JmV-vC-F48"/>
<outlet property="filterLabelTextField" destination="6" id="60"/>
<outlet property="historyBar" destination="S8L-rB-h0h" id="6yZ-El-fVs"/>
<outlet property="notesButton" destination="SaV-5p-jIX" id="sQc-nE-BOP"/> <outlet property="notesButton" destination="SaV-5p-jIX" id="sQc-nE-BOP"/>
<outlet property="passwordButton" destination="Uhl-ck-vVQ" id="I35-Nv-6jK"/> <outlet property="passwordButton" destination="Uhl-ck-vVQ" id="I35-Nv-6jK"/>
<outlet property="specialFilterPopUpButton" destination="aPQ-t2-bgz" id="5II-Ml-qg1"/> <outlet property="specialFilterPopUpButton" destination="aPQ-t2-bgz" id="5II-Ml-qg1"/>
<outlet property="titleButton" destination="O7W-cn-eUP" id="Vlg-KG-62R"/> <outlet property="titleButton" destination="O7W-cn-eUP" id="Vlg-KG-62R"/>
<outlet property="trashBar" destination="DXf-SC-gVG" id="3aZ-Xc-VDk"/>
<outlet property="urlButton" destination="Bn2-iY-mQ3" id="PNG-kv-PQN"/> <outlet property="urlButton" destination="Bn2-iY-mQ3" id="PNG-kv-PQN"/>
<outlet property="usernameButton" destination="0R1-PX-dgn" id="TWQ-1y-9cl"/> <outlet property="usernameButton" destination="0R1-PX-dgn" id="TWQ-1y-9cl"/>
<outlet property="view" destination="8MB-fC-M2Q" id="wYX-Cc-yoV"/> <outlet property="view" destination="8MB-fC-M2Q" id="wYX-Cc-yoV"/>
@@ -25,106 +23,132 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<tabView type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="8MB-fC-M2Q"> <tabView type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="8MB-fC-M2Q">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="838" height="30"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<tabViewItems> <tabViewItems>
<tabViewItem label="Filter" identifier="1" id="Ud6-Nz-6PS"> <tabViewItem label="Filter" identifier="1" id="Ud6-Nz-6PS">
<view key="view" id="caQ-XO-RkM"> <view key="view" id="caQ-XO-RkM">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="838" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1" customClass="HNHUIGradientView"> <customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="838" height="30"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6"> <stackView orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalClippingResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="AEr-b4-tMm">
<rect key="frame" x="6" y="8" width="47" height="14"/> <rect key="frame" x="8" y="0.0" width="830" height="30"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search:" id="7"> <beginningViews>
<font key="font" metaFont="smallSystemBold"/> <textField verticalHuggingPriority="750" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/> <rect key="frame" x="-2" y="7" width="54" height="17"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search:" id="7">
</textFieldCell> <font key="font" metaFont="systemBold"/>
</textField> <color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="O7W-cn-eUP"> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<rect key="frame" x="59" y="6" width="42" height="17"/> </textFieldCell>
<buttonCell key="cell" type="recessed" title="Title" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="53D-ne-nv6"> </textField>
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="O7W-cn-eUP">
<font key="font" metaFont="systemBold" size="12"/> <rect key="frame" x="58" y="6" width="41" height="17"/>
</buttonCell> <buttonCell key="cell" type="recessed" title="Title" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="53D-ne-nv6">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="gUm-y4-CDb"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0R1-PX-dgn">
<rect key="frame" x="107" y="6" width="76" height="17"/>
<buttonCell key="cell" type="recessed" title="Username" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jfQ-Jh-2gl">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="DEi-hq-N39"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Uhl-ck-vVQ">
<rect key="frame" x="191" y="6" width="73" height="17"/>
<buttonCell key="cell" type="recessed" title="Password" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="rvQ-4V-SsS">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="xYd-Fp-jxn"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Bn2-iY-mQ3">
<rect key="frame" x="272" y="6" width="39" height="17"/>
<buttonCell key="cell" type="recessed" title="URL" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="92o-gN-Psj">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="Ykb-ye-FqF"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="SaV-5p-jIX">
<rect key="frame" x="319" y="6" width="50" height="17"/>
<buttonCell key="cell" type="recessed" title="Notes" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iDN-2E-hwt">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="cuN-5p-vZD"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RGg-wK-hz4">
<rect key="frame" x="377" y="6" width="86" height="17"/>
<buttonCell key="cell" type="recessed" title="Everywhere" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="WMK-bb-ESj">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
</button>
</beginningViews>
<endViews>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aPQ-t2-bgz">
<rect key="frame" x="765" y="5" width="65" height="19"/>
<popUpButtonCell key="cell" type="recessed" title="Item 1" bezelStyle="recessed" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" altersStateOfSelectedItem="NO" selectedItem="LRm-iZ-XrA" id="faz-pC-uGX">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
<menu key="menu" title="OtherViews" autoenablesItems="NO" id="wC4-fF-dLW">
<items>
<menuItem title="Item 1" id="LRm-iZ-XrA"/>
<menuItem title="Item 2" id="cpr-p6-YAY"/>
<menuItem title="Item 3" id="CFk-71-NYQ"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</endViews>
<visibilityPriorities>
<integer value="1000"/>
<real value="999"/>
<real value="998"/>
<real value="997"/>
<real value="996"/>
<real value="995"/>
<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"/>
</customSpacing>
<connections> <connections>
<action selector="toggleSearchFlags:" target="-1" id="gUm-y4-CDb"/> <outlet property="delegate" destination="-2" id="5a7-1L-C6J"/>
</connections> </connections>
</button> </stackView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0R1-PX-dgn">
<rect key="frame" x="109" y="6" width="76" height="17"/>
<buttonCell key="cell" type="recessed" title="Username" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jfQ-Jh-2gl">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="DEi-hq-N39"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Uhl-ck-vVQ">
<rect key="frame" x="193" y="6" width="73" height="17"/>
<buttonCell key="cell" type="recessed" title="Password" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="rvQ-4V-SsS">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="xYd-Fp-jxn"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bn2-iY-mQ3">
<rect key="frame" x="274" y="6" width="39" height="17"/>
<buttonCell key="cell" type="recessed" title="URL" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="92o-gN-Psj">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="Ykb-ye-FqF"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SaV-5p-jIX">
<rect key="frame" x="321" y="6" width="50" height="17"/>
<buttonCell key="cell" type="recessed" title="Notes" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iDN-2E-hwt">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="toggleSearchFlags:" target="-1" id="cuN-5p-vZD"/>
</connections>
</button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aPQ-t2-bgz">
<rect key="frame" x="492" y="5" width="64" height="19"/>
<popUpButtonCell key="cell" type="recessed" title="Item 1" bezelStyle="recessed" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="LRm-iZ-XrA" id="faz-pC-uGX">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
<menu key="menu" title="OtherViews" autoenablesItems="NO" id="wC4-fF-dLW">
<items>
<menuItem title="Item 1" state="on" id="LRm-iZ-XrA"/>
<menuItem title="Item 2" id="cpr-p6-YAY"/>
<menuItem title="Item 3" id="CFk-71-NYQ"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstAttribute="centerY" secondItem="O7W-cn-eUP" secondAttribute="centerY" id="2uC-wS-HDi"/> <constraint firstItem="AEr-b4-tMm" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="8" id="4Ca-JQ-6SM"/>
<constraint firstItem="O7W-cn-eUP" firstAttribute="leading" secondItem="6" secondAttribute="trailing" constant="8" symbolic="YES" id="5hN-x3-XlX"/> <constraint firstAttribute="trailing" secondItem="AEr-b4-tMm" secondAttribute="trailing" id="8JE-jl-Ko3"/>
<constraint firstItem="0R1-PX-dgn" firstAttribute="leading" secondItem="O7W-cn-eUP" secondAttribute="trailing" constant="8" symbolic="YES" id="67f-i6-eOb"/> <constraint firstItem="AEr-b4-tMm" firstAttribute="top" secondItem="1" secondAttribute="top" id="EHZ-ac-GsP"/>
<constraint firstAttribute="centerY" secondItem="SaV-5p-jIX" secondAttribute="centerY" id="7ch-eZ-Hzh"/> <constraint firstAttribute="bottom" secondItem="AEr-b4-tMm" secondAttribute="bottom" id="Ztr-3u-eI0"/>
<constraint firstItem="aPQ-t2-bgz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="SaV-5p-jIX" secondAttribute="trailing" constant="8" symbolic="YES" id="91Q-Aq-ulG"/>
<constraint firstItem="aPQ-t2-bgz" firstAttribute="centerY" secondItem="SaV-5p-jIX" secondAttribute="centerY" id="EUG-hL-jbn"/>
<constraint firstAttribute="centerY" secondItem="0R1-PX-dgn" secondAttribute="centerY" id="Huh-PB-cbs"/>
<constraint firstItem="6" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="8" id="Seo-dI-FzX"/>
<constraint firstItem="Bn2-iY-mQ3" firstAttribute="leading" secondItem="Uhl-ck-vVQ" secondAttribute="trailing" constant="8" id="TCJ-vg-IIt"/>
<constraint firstAttribute="trailing" secondItem="aPQ-t2-bgz" secondAttribute="trailing" constant="20" symbolic="YES" id="XFv-Pv-Bzq"/>
<constraint firstItem="SaV-5p-jIX" firstAttribute="leading" secondItem="Bn2-iY-mQ3" secondAttribute="trailing" constant="8" symbolic="YES" id="pAA-uU-moF"/>
<constraint firstAttribute="centerY" secondItem="6" secondAttribute="centerY" id="qak-8F-xbj"/>
<constraint firstItem="Uhl-ck-vVQ" firstAttribute="leading" secondItem="0R1-PX-dgn" secondAttribute="trailing" constant="8" id="u8d-C2-O9h"/>
<constraint firstAttribute="centerY" secondItem="Uhl-ck-vVQ" secondAttribute="centerY" id="uvE-ch-ysK"/>
<constraint firstAttribute="centerY" secondItem="Bn2-iY-mQ3" secondAttribute="centerY" id="xZJ-EZ-Nic"/>
</constraints> </constraints>
</customView> </customView>
</subviews> </subviews>
@@ -140,14 +164,14 @@
</tabViewItem> </tabViewItem>
<tabViewItem label="Trash" identifier="2" id="na6-h9-r9q"> <tabViewItem label="Trash" identifier="2" id="na6-h9-r9q">
<view key="view" id="F6S-GS-AwI"> <view key="view" id="F6S-GS-AwI">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="838" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="DXf-SC-gVG" customClass="HNHUIGradientView"> <customView translatesAutoresizingMaskIntoConstraints="NO" id="DXf-SC-gVG">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="838" height="30"/>
<subviews> <subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="szx-Hx-OrV"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="szx-Hx-OrV">
<rect key="frame" x="469" y="0.0" width="92" height="28"/> <rect key="frame" x="731" y="0.0" width="92" height="27"/>
<buttonCell key="cell" type="push" title="Empty Trash" bezelStyle="rounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Ok-oe-6AB"> <buttonCell key="cell" type="push" title="Empty Trash" bezelStyle="rounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Ok-oe-6AB">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
@@ -156,9 +180,9 @@
<action selector="emptyTrash:" target="-1" id="uIZ-CN-kXB"/> <action selector="emptyTrash:" target="-1" id="uIZ-CN-kXB"/>
</connections> </connections>
</button> </button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rf3-f0-SSx"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rf3-f0-SSx">
<rect key="frame" x="20" y="7" width="41" height="17"/> <rect key="frame" x="20" y="7" width="41" height="17"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Trash" id="8P1-Rp-sF4"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Trash" id="8P1-Rp-sF4">
<font key="font" metaFont="systemBold"/> <font key="font" metaFont="systemBold"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
@@ -171,6 +195,7 @@
<constraint firstItem="Rf3-f0-SSx" firstAttribute="centerY" secondItem="DXf-SC-gVG" secondAttribute="centerY" id="rla-Pu-8db"/> <constraint firstItem="Rf3-f0-SSx" firstAttribute="centerY" secondItem="DXf-SC-gVG" secondAttribute="centerY" id="rla-Pu-8db"/>
<constraint firstItem="szx-Hx-OrV" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="DXf-SC-gVG" secondAttribute="leading" constant="20" symbolic="YES" id="s8f-1l-4Yy"/> <constraint firstItem="szx-Hx-OrV" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="DXf-SC-gVG" secondAttribute="leading" constant="20" symbolic="YES" id="s8f-1l-4Yy"/>
<constraint firstAttribute="centerY" secondItem="szx-Hx-OrV" secondAttribute="centerY" id="sG5-pc-EzQ"/> <constraint firstAttribute="centerY" secondItem="szx-Hx-OrV" secondAttribute="centerY" id="sG5-pc-EzQ"/>
<constraint firstItem="szx-Hx-OrV" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Rf3-f0-SSx" secondAttribute="trailing" constant="8" symbolic="YES" id="xBZ-7v-80d"/>
</constraints> </constraints>
</customView> </customView>
</subviews> </subviews>
@@ -187,14 +212,14 @@
</tabViewItem> </tabViewItem>
<tabViewItem label="History" identifier="3" id="z4I-cp-nhf"> <tabViewItem label="History" identifier="3" id="z4I-cp-nhf">
<view key="view" id="iPb-SZ-Lfm"> <view key="view" id="iPb-SZ-Lfm">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="838" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="S8L-rB-h0h" customClass="HNHUIGradientView"> <customView translatesAutoresizingMaskIntoConstraints="NO" id="S8L-rB-h0h">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="838" height="30"/>
<subviews> <subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pqx-su-vAh"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pqx-su-vAh">
<rect key="frame" x="474" y="0.0" width="87" height="28"/> <rect key="frame" x="736" y="0.0" width="87" height="27"/>
<buttonCell key="cell" type="push" title="Exit History" bezelStyle="rounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ewQ-8F-e1E"> <buttonCell key="cell" type="push" title="Exit History" bezelStyle="rounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ewQ-8F-e1E">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
@@ -204,7 +229,7 @@
</buttonCell> </buttonCell>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JNP-Sd-Zh1"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JNP-Sd-Zh1">
<rect key="frame" x="379" y="0.0" width="97" height="28"/> <rect key="frame" x="641" y="0.0" width="97" height="27"/>
<buttonCell key="cell" type="push" title="Restore Entry" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="UTg-y9-4DN"> <buttonCell key="cell" type="push" title="Restore Entry" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="UTg-y9-4DN">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
@@ -213,9 +238,9 @@
<action selector="revertToHistoryEntry:" target="-1" id="n70-c5-0JJ"/> <action selector="revertToHistoryEntry:" target="-1" id="n70-c5-0JJ"/>
</connections> </connections>
</button> </button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hMK-l1-qew"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hMK-l1-qew">
<rect key="frame" x="20" y="7" width="52" height="17"/> <rect key="frame" x="20" y="7" width="52" height="17"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="History" id="ER3-Ic-v0N"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="History" id="ER3-Ic-v0N">
<font key="font" metaFont="systemBold"/> <font key="font" metaFont="systemBold"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
@@ -224,6 +249,7 @@
</subviews> </subviews>
<constraints> <constraints>
<constraint firstAttribute="centerY" secondItem="pqx-su-vAh" secondAttribute="centerY" id="7T6-QP-uaM"/> <constraint firstAttribute="centerY" secondItem="pqx-su-vAh" secondAttribute="centerY" id="7T6-QP-uaM"/>
<constraint firstItem="JNP-Sd-Zh1" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="hMK-l1-qew" secondAttribute="trailing" constant="8" symbolic="YES" id="Kqm-pr-v9M"/>
<constraint firstItem="pqx-su-vAh" firstAttribute="leading" secondItem="JNP-Sd-Zh1" secondAttribute="trailing" constant="8" symbolic="YES" id="M88-oZ-tNf"/> <constraint firstItem="pqx-su-vAh" firstAttribute="leading" secondItem="JNP-Sd-Zh1" secondAttribute="trailing" constant="8" symbolic="YES" id="M88-oZ-tNf"/>
<constraint firstItem="JNP-Sd-Zh1" firstAttribute="centerY" secondItem="S8L-rB-h0h" secondAttribute="centerY" id="SpB-ks-AjH"/> <constraint firstItem="JNP-Sd-Zh1" firstAttribute="centerY" secondItem="S8L-rB-h0h" secondAttribute="centerY" id="SpB-ks-AjH"/>
<constraint firstItem="hMK-l1-qew" firstAttribute="centerY" secondItem="S8L-rB-h0h" secondAttribute="centerY" id="Yfd-x7-x9e"/> <constraint firstItem="hMK-l1-qew" firstAttribute="centerY" secondItem="S8L-rB-h0h" secondAttribute="centerY" id="Yfd-x7-x9e"/>
@@ -244,7 +270,7 @@
</connections> </connections>
</tabViewItem> </tabViewItem>
</tabViewItems> </tabViewItems>
<point key="canvasLocation" x="104" y="293"/> <point key="canvasLocation" x="130" y="79"/>
</tabView> </tabView>
</objects> </objects>
</document> </document>

View File

@@ -0,0 +1,110 @@
{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf200
{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red9\green79\blue209;\red52\green110\blue183;
\red38\green38\blue38;}
{\*\expandedcolortbl;;\cssrgb\c0\c0\c0\cname textColor;\cssrgb\c0\c40784\c85490\cname linkColor;\csgenericrgb\c20392\c43137\c71765;
\csgenericrgb\c14902\c14902\c14902;}
\paperw11900\paperh16840\vieww25780\viewh19380\viewkind0
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\f0\b\fs24 \cf2 Project Website:\cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/mstarke/MacPass"}}{\fldrslt
\f1\b0 \cf3 MacPass}}
\f1\b0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\f0\b \cf2 \
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\
Copyright (c) 2012-2019 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\
the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\
\
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of\
\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\
\
You should have received a copy of the GNU General Public License along with this program. If not, see {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/"}}{\fldrslt \cf3 http://www.gnu.org/licenses/}}\cf0 .\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf0 \kerning1\expnd0\expndtw3
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\f0\b \cf2 \kerning1\expnd0\expndtw0 Credits:\
\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/clone1612"}}{\fldrslt \cf3 Jannick Hemelhof}}\cf0 \
\
\cf2 French translation:\cf0 {\field{\*\fldinst{HYPERLINK "mailto:gil@panix.com"}}{\fldrslt \cf3 Gil Andr\'e9}}\
\
\cf2 Italian translation:\cf0 {\field{\*\fldinst{HYPERLINK "mailto:info@francescoservida.ch"}}{\fldrslt \cf3 Francesco Servida}}\
\
\cf2 Polish translation:\cf0 {\field{\*\fldinst{HYPERLINK "http://www.webii.pl/"}}{\fldrslt \cf3 Micha\uc0\u322 Jaglewicz}}\
\
\cf2 Russian translation:\cf0 {\field{\*\fldinst{HYPERLINK "mailto:alex@mrdoggy.info"}}{\fldrslt \cf3 Aliaksandr Piatkevich}}\
\
\cf2 Simplified Chinese translation:\cf0 {\field{\*\fldinst{HYPERLINK "mailto:patchao2000@gmail.com"}}{\fldrslt \cf3 Zhao Peng}}\
\
\cf2 Spanisch translation:\cf0 {\field{\*\fldinst{HYPERLINK "https://github.com/m0yP"}}{\fldrslt \cf3 \expnd0\expndtw0\kerning0
Moises Perez}}\
\
\cf2 MacPass\kerning1\expnd0\expndtw3
\kerning1\expnd0\expndtw0 Icon:\cf0 {\field{\*\fldinst{HYPERLINK "http://iiro.jappinen.me"}}{\fldrslt \cf3 Iiro J\'e4ppinen}}\
\
\cf2 Database Icons:\cf0 {\field{\*\fldinst{HYPERLINK "https://github.com/JoannaOlsen"}}{\fldrslt \cf3 Joanna Olsen}}\cf4 \
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/robbiehanson/KissXML"}}{\fldrslt \cf3 KissXML}}\cf5 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Copyright \'a9 2012 Robbie Hanson. All rights reserved.\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/MiniKeePass/MiniKeePass"}}{\fldrslt \cf3 MiniKeePass}}\cf5 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Copyright \'a9 2011 Jason Rush and John Flanagan. All rights reserved.\cf5 \
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/mpowrie/KeePassLib"}}{\fldrslt \cf3 KeePass Database Library}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Copyright \'a9 2010 Qiang Yu. All rights reserved.\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org"}}{\fldrslt \cf3 Sparkl\kerning1\expnd0\expndtw3
e}}\cf5 \kerning1\expnd0\expndtw3
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Copyright \'a9 2006 Andy Matuschak. \kerning1\expnd0\expndtw0 All rights reserved.\kerning1\expnd0\expndtw3
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 \kerning1\expnd0\expndtw0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "http://stackoverflow.com/questions/11386876/how-to-encode-and-decode-files-as-base64-in-cocoa-objective-c"}}{\fldrslt \cf3 NSData+Base64}}\cf5 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Copyright \'a92013, {\field{\*\fldinst{HYPERLINK "http://stackoverflow.com/users/200321/denis2342"}}{\fldrslt \cf3 denis2342}}\cf3 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf5 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "http://www.cocoadev.com/index.pl?NSDataCategory"}}{\fldrslt \cf3 NSData+Gzip}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Extracted from code on the CocoaDev Wiki\cf5 \
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/karelia/SecurityInterface"}}{\fldrslt \cf3 KSPasswordField}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Code reused in HNHUISecureTextField\
Copyright \'a92012 Mike Abdullah, Karelia Software. All rights reserved.\cf5 \
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/AlanQuatermain/aqtoolkit"}}{\fldrslt \cf3 NSData+CommonCrypto}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Copyright \'a92008-2009 Jim Dovey, All rights reserved.\cf5 \
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/mattt/TransformerKit"}}{\fldrslt \cf3 TransformerKit}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\cf2 Copyright \'a92012 Mattt Thompson. All rights reserved}

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14113" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13529"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14113"/>
<capability name="box content view" minToolsVersion="7.0"/> <capability name="box content view" minToolsVersion="7.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
@@ -30,6 +30,7 @@
<outlet property="enforceKeyChangeIntervalStepper" destination="lH4-xp-5QF" id="K1S-Og-OGK"/> <outlet property="enforceKeyChangeIntervalStepper" destination="lH4-xp-5QF" id="K1S-Og-OGK"/>
<outlet property="enforceKeyChangeIntervalTextField" destination="VYh-cm-fix" id="aqu-Dm-tlH"/> <outlet property="enforceKeyChangeIntervalTextField" destination="VYh-cm-fix" id="aqu-Dm-tlH"/>
<outlet property="enforceKeyChangeOnceCheckButton" destination="VMc-Qg-eCr" id="Ith-Jn-JVX"/> <outlet property="enforceKeyChangeOnceCheckButton" destination="VMc-Qg-eCr" id="Ith-Jn-JVX"/>
<outlet property="fileVersionTextField" destination="1Ci-0B-yV5" id="hZ9-TU-hZE"/>
<outlet property="historyMaximumItemsStepper" destination="599" id="aRL-wb-JSA"/> <outlet property="historyMaximumItemsStepper" destination="599" id="aRL-wb-JSA"/>
<outlet property="historyMaximumItemsTextField" destination="593" id="NrX-e0-8Dw"/> <outlet property="historyMaximumItemsTextField" destination="593" id="NrX-e0-8Dw"/>
<outlet property="historyMaximumSizeStepper" destination="1294" id="Jbo-ZY-5h6"/> <outlet property="historyMaximumSizeStepper" destination="1294" id="Jbo-ZY-5h6"/>
@@ -50,14 +51,14 @@
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/> <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/> <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="500" height="335"/> <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="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" id="2"> <view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="500" height="336"/> <rect key="frame" x="0.0" y="0.0" width="553" height="484"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="288"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="288">
<rect key="frame" x="427" y="13" width="59" height="32"/> <rect key="frame" x="480" y="13" width="59" height="32"/>
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="289"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -70,7 +71,7 @@ DQ
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="956"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="956">
<rect key="frame" x="345" y="13" width="82" height="32"/> <rect key="frame" x="398" y="13" width="82" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="957"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -83,16 +84,16 @@ Gw
</connections> </connections>
</button> </button>
<tabView translatesAutoresizingMaskIntoConstraints="NO" id="357"> <tabView translatesAutoresizingMaskIntoConstraints="NO" id="357">
<rect key="frame" x="13" y="41" width="474" height="289"/> <rect key="frame" x="13" y="41" width="527" height="437"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<tabViewItems> <tabViewItems>
<tabViewItem label="General" identifier="1" id="358"> <tabViewItem label="General" identifier="1" id="358">
<view key="view" id="361"> <view key="view" id="361">
<rect key="frame" x="10" y="33" width="454" height="242"/> <rect key="frame" x="10" y="33" width="454" height="267"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="231"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="231">
<rect key="frame" x="154" y="200" width="280" height="22"/> <rect key="frame" x="154" y="225" width="280" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/> <constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/>
</constraints> </constraints>
@@ -103,7 +104,7 @@ Gw
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="256"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="256">
<rect key="frame" x="70" y="176" width="78" height="17"/> <rect key="frame" x="70" y="201" width="78" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -111,7 +112,7 @@ Gw
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="189"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="189">
<rect key="frame" x="46" y="204" width="102" height="17"/> <rect key="frame" x="46" y="229" width="102" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -119,7 +120,7 @@ Gw
</textFieldCell> </textFieldCell>
</textField> </textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1394"> <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1394">
<rect key="frame" x="152" y="48" width="70" height="26"/> <rect key="frame" x="152" y="73" width="70" height="26"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1395"> <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"/> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
@@ -132,7 +133,7 @@ Gw
</popUpButtonCell> </popUpButtonCell>
</popUpButton> </popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1404"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1404">
<rect key="frame" x="60" y="53" width="88" height="17"/> <rect key="frame" x="60" y="78" width="88" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -140,7 +141,7 @@ Gw
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1434"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1434">
<rect key="frame" x="107" y="23" width="41" height="17"/> <rect key="frame" x="107" y="48" width="41" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -148,7 +149,7 @@ Gw
</textFieldCell> </textFieldCell>
</textField> </textField>
<colorWell translatesAutoresizingMaskIntoConstraints="NO" id="1439" customClass="HNHUIColorWell"> <colorWell translatesAutoresizingMaskIntoConstraints="NO" id="1439" customClass="HNHUIColorWell">
<rect key="frame" x="154" y="20" width="44" height="23"/> <rect key="frame" x="154" y="45" width="44" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/> <constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/>
<constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/> <constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/>
@@ -156,7 +157,7 @@ Gw
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/> <color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</colorWell> </colorWell>
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530"> <scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530">
<rect key="frame" x="154" y="92" width="280" height="100"/> <rect key="frame" x="154" y="117" width="280" height="100"/>
<clipView key="contentView" id="WOI-1v-RCe"> <clipView key="contentView" id="WOI-1v-RCe">
<rect key="frame" x="1" y="1" width="278" height="98"/> <rect key="frame" x="1" y="1" width="278" height="98"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@@ -185,14 +186,34 @@ Gw
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
</scrollView> </scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RhU-5I-S5l">
<rect key="frame" x="75" y="20" width="73" height="17"/>
<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"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Ci-0B-yV5">
<rect key="frame" x="152" y="20" width="72" height="17"/>
<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"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="RhU-5I-S5l" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="2g6-05-Nm9"/>
<constraint firstItem="1439" firstAttribute="centerY" secondItem="1434" secondAttribute="centerY" id="3SK-ML-kPr"/> <constraint firstItem="1439" firstAttribute="centerY" secondItem="1434" secondAttribute="centerY" id="3SK-ML-kPr"/>
<constraint firstItem="231" firstAttribute="top" secondItem="361" secondAttribute="top" constant="20" symbolic="YES" id="3xl-TE-tQd"/> <constraint firstItem="231" firstAttribute="top" secondItem="361" secondAttribute="top" constant="20" symbolic="YES" id="3xl-TE-tQd"/>
<constraint firstItem="231" firstAttribute="baseline" secondItem="189" secondAttribute="baseline" constant="1" id="46f-FB-PcR"/> <constraint firstItem="231" firstAttribute="baseline" secondItem="189" secondAttribute="baseline" constant="1" id="46f-FB-PcR"/>
<constraint firstItem="1Ci-0B-yV5" firstAttribute="baseline" secondItem="RhU-5I-S5l" secondAttribute="baseline" id="4jg-Kd-kVn"/>
<constraint firstItem="1530" firstAttribute="top" secondItem="231" secondAttribute="bottom" constant="8" symbolic="YES" id="BRY-Gk-wEF"/> <constraint firstItem="1530" firstAttribute="top" secondItem="231" secondAttribute="bottom" constant="8" symbolic="YES" id="BRY-Gk-wEF"/>
<constraint firstItem="189" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="EE1-wx-54f"/> <constraint firstItem="189" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="EE1-wx-54f"/>
<constraint firstItem="1394" firstAttribute="leading" secondItem="231" secondAttribute="leading" id="EZ7-AG-XXT"/> <constraint firstItem="1394" firstAttribute="leading" secondItem="231" secondAttribute="leading" id="EZ7-AG-XXT"/>
<constraint firstItem="1Ci-0B-yV5" firstAttribute="leading" secondItem="RhU-5I-S5l" secondAttribute="trailing" constant="8" symbolic="YES" id="GGY-c2-Uhw"/>
<constraint firstItem="1Ci-0B-yV5" firstAttribute="top" secondItem="1439" secondAttribute="bottom" constant="8" symbolic="YES" id="HGD-Tw-rab"/>
<constraint firstItem="1434" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="ICF-se-FFb"/> <constraint firstItem="1434" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="ICF-se-FFb"/>
<constraint firstItem="1404" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="LeH-TL-Zoq"/> <constraint firstItem="1404" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="LeH-TL-Zoq"/>
<constraint firstItem="1404" firstAttribute="centerY" secondItem="1394" secondAttribute="centerY" id="OSA-6P-L0N"/> <constraint firstItem="1404" firstAttribute="centerY" secondItem="1394" secondAttribute="centerY" id="OSA-6P-L0N"/>
@@ -204,11 +225,13 @@ Gw
<constraint firstItem="1439" firstAttribute="top" secondItem="1394" secondAttribute="bottom" constant="8" symbolic="YES" id="ZeI-7b-IjZ"/> <constraint firstItem="1439" firstAttribute="top" secondItem="1394" secondAttribute="bottom" constant="8" symbolic="YES" id="ZeI-7b-IjZ"/>
<constraint firstItem="256" firstAttribute="trailing" secondItem="189" secondAttribute="trailing" id="al9-qI-MaZ"/> <constraint firstItem="256" firstAttribute="trailing" secondItem="189" secondAttribute="trailing" id="al9-qI-MaZ"/>
<constraint firstItem="1394" firstAttribute="leading" secondItem="1439" secondAttribute="leading" id="bFE-Ho-9Zk"/> <constraint firstItem="1394" firstAttribute="leading" secondItem="1439" secondAttribute="leading" id="bFE-Ho-9Zk"/>
<constraint firstAttribute="bottom" secondItem="1439" secondAttribute="bottom" constant="20" symbolic="YES" id="dCq-34-0z2"/>
<constraint firstItem="1394" firstAttribute="top" secondItem="1530" secondAttribute="bottom" constant="20" symbolic="YES" id="dfD-cv-lGp"/> <constraint firstItem="1394" firstAttribute="top" secondItem="1530" secondAttribute="bottom" constant="20" symbolic="YES" id="dfD-cv-lGp"/>
<constraint firstItem="RhU-5I-S5l" firstAttribute="trailing" secondItem="1434" secondAttribute="trailing" id="ff7-L0-hkA"/>
<constraint firstItem="256" firstAttribute="trailing" secondItem="1404" secondAttribute="trailing" id="gwL-uv-AGV"/> <constraint firstItem="256" firstAttribute="trailing" secondItem="1404" secondAttribute="trailing" id="gwL-uv-AGV"/>
<constraint firstAttribute="bottom" secondItem="1Ci-0B-yV5" secondAttribute="bottom" constant="20" symbolic="YES" id="js5-RZ-xg6"/>
<constraint firstItem="231" firstAttribute="leading" secondItem="189" secondAttribute="trailing" constant="8" symbolic="YES" id="uMg-uh-Qq6"/> <constraint firstItem="231" firstAttribute="leading" secondItem="189" secondAttribute="trailing" constant="8" symbolic="YES" id="uMg-uh-Qq6"/>
<constraint firstItem="256" firstAttribute="top" secondItem="189" secondAttribute="bottom" constant="11" id="z3y-bc-AMm"/> <constraint firstItem="256" firstAttribute="top" secondItem="189" secondAttribute="bottom" constant="11" id="z3y-bc-AMm"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="1Ci-0B-yV5" secondAttribute="trailing" constant="20" symbolic="YES" id="zL8-X5-0oc"/>
</constraints> </constraints>
</view> </view>
</tabViewItem> </tabViewItem>
@@ -475,8 +498,8 @@ Gw
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="1295"/> <stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="1295"/>
</stepper> </stepper>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
<rect key="frame" x="52" y="330" width="128" height="17"/> <rect key="frame" x="41" y="330" width="139" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maxium history size:" id="1269"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum history size:" id="1269">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
@@ -727,7 +750,7 @@ Gw
<constraint firstItem="956" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="Yla-YR-bgz"/> <constraint firstItem="956" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="Yla-YR-bgz"/>
</constraints> </constraints>
</view> </view>
<point key="canvasLocation" x="-1217" y="-566"/> <point key="canvasLocation" x="-2020" y="-860"/>
</window> </window>
</objects> </objects>
</document> </document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -10,7 +10,7 @@
<connections> <connections>
<outlet property="URLTextField" destination="56" id="262"/> <outlet property="URLTextField" destination="56" id="262"/>
<outlet property="addAttachmentButton" destination="177" id="w3F-U0-Rpk"/> <outlet property="addAttachmentButton" destination="177" id="w3F-U0-Rpk"/>
<outlet property="addCustomFieldButton" destination="179" id="I3F-Sp-dbI"/> <outlet property="addCustomFieldButton" destination="G9J-nn-2bu" id="vco-Lt-hkc"/>
<outlet property="addWindowAssociationButton" destination="Iy9-9L-Aev" id="kDA-Mm-lah"/> <outlet property="addWindowAssociationButton" destination="Iy9-9L-Aev" id="kDA-Mm-lah"/>
<outlet property="associationSequenceTextField" destination="NjR-ea-Y7k" id="kTb-Y5-XrZ"/> <outlet property="associationSequenceTextField" destination="NjR-ea-Y7k" id="kTb-Y5-XrZ"/>
<outlet property="attachmentTableView" destination="137" id="265"/> <outlet property="attachmentTableView" destination="137" id="265"/>
@@ -46,7 +46,7 @@
<rect key="frame" x="0.0" y="0.0" width="293" height="493"/> <rect key="frame" x="0.0" y="0.0" width="293" height="493"/>
<subviews> <subviews>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="82"> <segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="82">
<rect key="frame" x="64" y="469" width="166" height="19"/> <rect key="frame" x="57" y="469" width="179" height="19"/>
<segmentedCell key="cell" controlSize="small" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="selectOne" id="238"> <segmentedCell key="cell" controlSize="small" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="selectOne" id="238">
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
<segments> <segments>
@@ -72,7 +72,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="124"> <button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="124">
<rect key="frame" x="241" y="428" width="32" height="25"/> <rect key="frame" x="241" y="428" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="32" id="176"/> <constraint firstAttribute="width" constant="32" id="176"/>
</constraints> </constraints>
@@ -96,9 +96,9 @@
<rect key="frame" x="20" y="26" width="253" height="396"/> <rect key="frame" x="20" y="26" width="253" height="396"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="F3N-QI-Di5"> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="F3N-QI-Di5">
<rect key="frame" x="1" y="1" width="251" height="394"/> <rect key="frame" x="1" y="1" width="251" height="394"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="36" rowSizeStyle="automatic" viewBased="YES" id="137"> <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="251" height="394"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/> <size key="intercellSpacing" width="3" height="2"/>
@@ -172,7 +172,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="42g-QS-XtW"> <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="42g-QS-XtW">
<rect key="frame" x="205" y="5" width="40" height="25"/> <rect key="frame" x="205" y="6" width="40" height="23"/>
<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"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
@@ -217,11 +217,11 @@
<constraints> <constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="KFw-Ma-DSd"/> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="KFw-Ma-DSd"/>
</constraints> </constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="138"> <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="147" width="52" height="16"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="139"> <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="139">
<rect key="frame" x="37" y="1" width="16" height="2"/> <rect key="frame" x="37" y="1" width="16" height="2"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
@@ -265,21 +265,21 @@
<rect key="frame" x="0.0" y="0.0" width="291" height="712"/> <rect key="frame" x="0.0" y="0.0" width="291" height="712"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="52"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="52">
<rect key="frame" x="18" y="693" width="28" height="14"/> <rect key="frame" x="18" y="693" width="27" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Title" id="71"> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Title" id="71">
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="HNHUITextField">
<rect key="frame" x="20" y="663" width="251" height="22"/> <rect key="frame" x="20" y="663" width="251" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="7Xj-3i-fBY"/> <constraint firstAttribute="height" constant="22" id="7Xj-3i-fBY"/>
</constraints> </constraints>
<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" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="70">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <connections>
@@ -295,14 +295,14 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="HNHUITextField">
<rect key="frame" x="20" y="607" width="251" height="22"/> <rect key="frame" x="20" y="607" width="251" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="0l5-fD-0eW"/> <constraint firstAttribute="height" constant="22" id="0l5-fD-0eW"/>
</constraints> </constraints>
<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" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="68">
<font key="font" size="13" name="Menlo-Regular"/> <font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <connections>
@@ -310,14 +310,14 @@
<outlet property="nextKeyView" destination="60" id="ZPp-lg-TBS"/> <outlet property="nextKeyView" destination="60" id="ZPp-lg-TBS"/>
</connections> </connections>
</textField> </textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="56" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="56" customClass="HNHUITextField">
<rect key="frame" x="20" y="469" width="251" height="22"/> <rect key="frame" x="20" y="469" width="251" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="SoS-8e-rkN"/> <constraint firstAttribute="height" constant="22" id="SoS-8e-rkN"/>
</constraints> </constraints>
<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" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="67">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <connections>
@@ -342,7 +342,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="59"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="59">
<rect key="frame" x="20" y="519" width="251" height="25"/> <rect key="frame" x="20" y="520" width="251" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Generate" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64"> <buttonCell key="cell" type="roundTextured" title="Generate" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -352,14 +352,14 @@
<outlet property="nextKeyView" destination="56" id="rY0-PH-WBT"/> <outlet property="nextKeyView" destination="56" id="rY0-PH-WBT"/>
</connections> </connections>
</button> </button>
<secureTextField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="60" customClass="HNHUIRoundedSecureTextField"> <secureTextField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="60" customClass="HNHUISecureTextField">
<rect key="frame" x="20" y="551" width="211" height="22"/> <rect key="frame" x="20" y="551" width="211" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="VFI-jo-tOU"/> <constraint firstAttribute="height" constant="22" id="VFI-jo-tOU"/>
</constraints> </constraints>
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="63"> <secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="63">
<font key="font" size="13" name="Menlo-Regular"/> <font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<allowedInputSourceLocales> <allowedInputSourceLocales>
<string>NSAllRomanInputSourcesLocaleIdentifier</string> <string>NSAllRomanInputSourcesLocaleIdentifier</string>
@@ -371,7 +371,7 @@
</connections> </connections>
</secureTextField> </secureTextField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="61"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="61">
<rect key="frame" x="239" y="549" width="32" height="25"/> <rect key="frame" x="239" y="550" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="32" id="rSr-fw-11t"/> <constraint firstAttribute="width" constant="32" id="rSr-fw-11t"/>
</constraints> </constraints>
@@ -398,7 +398,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
<rect key="frame" x="239" y="437" width="32" height="25"/> <rect key="frame" x="239" y="438" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="32" id="Ped-nx-uti"/> <constraint firstAttribute="width" constant="32" id="Ped-nx-uti"/>
</constraints> </constraints>
@@ -441,33 +441,22 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IpW-b2-jWu" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IpW-b2-jWu" customClass="HNHUITextField">
<rect key="frame" x="20" y="50" width="251" height="22"/> <rect key="frame" x="20" y="50" width="251" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="Zfy-mh-1TF"/> <constraint firstAttribute="height" constant="22" id="Zfy-mh-1TF"/>
</constraints> </constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Hml-NR-AeS"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Hml-NR-AeS">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <connections>
<outlet property="delegate" destination="-2" id="bJ5-Un-81o"/> <outlet property="delegate" destination="-2" id="bJ5-Un-81o"/>
</connections> </connections>
</textField> </textField>
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="179">
<rect key="frame" x="200" y="100" width="71" height="25"/>
<buttonCell key="cell" type="roundTextured" title="Add Field" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="232">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="addCustomField:" target="-2" id="273"/>
<outlet property="nextKeyView" destination="193" id="aWG-La-YP3"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QSX-Xo-tcH"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QSX-Xo-tcH">
<rect key="frame" x="20" y="18" width="251" height="25"/> <rect key="frame" x="20" y="19" width="251" 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"> <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">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -477,6 +466,20 @@
<outlet property="nextKeyView" destination="53" id="HTB-dl-8aH"/> <outlet property="nextKeyView" destination="53" id="HTB-dl-8aH"/>
</connections> </connections>
</button> </button>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G9J-nn-2bu" customClass="MPContextButton">
<rect key="frame" x="216" y="101" width="55" height="23"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedRounded" trackingMode="selectOne" id="POU-2t-8fl">
<font key="font" metaFont="system"/>
<segments>
<segment image="NSAddTemplate" width="32"/>
<segment/>
</segments>
</segmentedCell>
<connections>
<action selector="addCustomField:" target="-2" id="3sZ-a1-V2r"/>
<outlet property="nextKeyView" destination="QSX-Xo-tcH" id="P9m-Wl-V3E"/>
</connections>
</segmentedControl>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="52" firstAttribute="top" secondItem="4" secondAttribute="top" constant="5" id="11"/> <constraint firstItem="52" firstAttribute="top" secondItem="4" secondAttribute="top" constant="5" id="11"/>
@@ -513,26 +516,26 @@
<constraint firstItem="QSX-Xo-tcH" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="2AA-hQ-mL7"/> <constraint firstItem="QSX-Xo-tcH" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="2AA-hQ-mL7"/>
<constraint firstItem="IpW-b2-jWu" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" id="51R-pR-KLO"/> <constraint firstItem="IpW-b2-jWu" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" id="51R-pR-KLO"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="52" secondAttribute="trailing" constant="20" symbolic="YES" id="6P6-fW-kGx"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="52" secondAttribute="trailing" constant="20" symbolic="YES" id="6P6-fW-kGx"/>
<constraint firstAttribute="trailing" secondItem="179" secondAttribute="trailing" constant="20" symbolic="YES" id="Bys-px-9xs"/>
<constraint firstAttribute="trailing" secondItem="IpW-b2-jWu" secondAttribute="trailing" constant="20" id="D0t-s7-2hT"/> <constraint firstAttribute="trailing" secondItem="IpW-b2-jWu" secondAttribute="trailing" constant="20" id="D0t-s7-2hT"/>
<constraint firstItem="0U8-TS-giU" firstAttribute="top" secondItem="179" secondAttribute="bottom" constant="8" symbolic="YES" id="GNj-yE-507"/>
<constraint firstItem="7" firstAttribute="top" secondItem="56" secondAttribute="bottom" constant="12" id="Gh9-Lg-kcm"/> <constraint firstItem="7" firstAttribute="top" secondItem="56" secondAttribute="bottom" constant="12" id="Gh9-Lg-kcm"/>
<constraint firstItem="IpW-b2-jWu" firstAttribute="top" secondItem="0U8-TS-giU" secondAttribute="bottom" constant="8" symbolic="YES" id="HSM-Aj-X9I"/> <constraint firstItem="IpW-b2-jWu" firstAttribute="top" secondItem="0U8-TS-giU" secondAttribute="bottom" constant="8" symbolic="YES" id="HSM-Aj-X9I"/>
<constraint firstItem="58" firstAttribute="top" secondItem="55" secondAttribute="bottom" constant="12" id="JiM-Dm-AG8"/> <constraint firstItem="58" firstAttribute="top" secondItem="55" secondAttribute="bottom" constant="12" id="JiM-Dm-AG8"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="57" secondAttribute="trailing" constant="20" symbolic="YES" id="N4A-wg-PdS"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="57" secondAttribute="trailing" constant="20" symbolic="YES" id="N4A-wg-PdS"/>
<constraint firstItem="179" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="OUg-H1-uyM"/>
<constraint firstItem="QSX-Xo-tcH" firstAttribute="top" secondItem="IpW-b2-jWu" secondAttribute="bottom" constant="8" symbolic="YES" id="TPp-cx-48q"/> <constraint firstItem="QSX-Xo-tcH" firstAttribute="top" secondItem="IpW-b2-jWu" secondAttribute="bottom" constant="8" symbolic="YES" id="TPp-cx-48q"/>
<constraint firstItem="8" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="7" secondAttribute="trailing" constant="8" symbolic="YES" id="Xa5-Ir-XNC"/> <constraint firstItem="8" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="7" secondAttribute="trailing" constant="8" symbolic="YES" id="Xa5-Ir-XNC"/>
<constraint firstAttribute="bottom" secondItem="QSX-Xo-tcH" secondAttribute="bottom" constant="20" symbolic="YES" id="ZdF-5c-xDa"/> <constraint firstAttribute="bottom" secondItem="QSX-Xo-tcH" secondAttribute="bottom" constant="20" symbolic="YES" id="ZdF-5c-xDa"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="0U8-TS-giU" secondAttribute="trailing" constant="20" symbolic="YES" id="a5R-eI-VuV"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="0U8-TS-giU" secondAttribute="trailing" constant="20" symbolic="YES" id="a5R-eI-VuV"/>
<constraint firstItem="0U8-TS-giU" firstAttribute="top" secondItem="G9J-nn-2bu" secondAttribute="bottom" constant="8" symbolic="YES" id="aes-tv-LHA"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="54" secondAttribute="trailing" constant="20" symbolic="YES" id="cYP-oK-dVP"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="54" secondAttribute="trailing" constant="20" symbolic="YES" id="cYP-oK-dVP"/>
<constraint firstAttribute="trailing" secondItem="G9J-nn-2bu" secondAttribute="trailing" constant="20" symbolic="YES" id="ggu-f5-LtR"/>
<constraint firstAttribute="trailing" secondItem="QSX-Xo-tcH" secondAttribute="trailing" constant="20" symbolic="YES" id="hr2-Eb-g24"/> <constraint firstAttribute="trailing" secondItem="QSX-Xo-tcH" secondAttribute="trailing" constant="20" symbolic="YES" id="hr2-Eb-g24"/>
<constraint firstItem="0U8-TS-giU" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" id="kLH-Bj-C5m"/> <constraint firstItem="0U8-TS-giU" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" id="kLH-Bj-C5m"/>
<constraint firstItem="57" firstAttribute="top" secondItem="59" secondAttribute="bottom" constant="8" symbolic="YES" id="lYe-am-xJx"/> <constraint firstItem="57" firstAttribute="top" secondItem="59" secondAttribute="bottom" constant="8" symbolic="YES" id="lYe-am-xJx"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="58" secondAttribute="trailing" constant="20" symbolic="YES" id="rbs-i7-bti"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="58" secondAttribute="trailing" constant="20" symbolic="YES" id="rbs-i7-bti"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="6" secondAttribute="trailing" constant="20" symbolic="YES" id="uuh-ba-z4h"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="6" secondAttribute="trailing" constant="20" symbolic="YES" id="uuh-ba-z4h"/>
<constraint firstItem="G9J-nn-2bu" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="z4K-PB-Qfb"/>
</constraints> </constraints>
<point key="canvasLocation" x="-525" y="-927"/> <point key="canvasLocation" x="-679" y="-1054"/>
</customView> </customView>
<view translatesAutoresizingMaskIntoConstraints="NO" id="zv7-wE-Bmg" customClass="HNHUIScrollDocumentViewAdapter"> <view translatesAutoresizingMaskIntoConstraints="NO" id="zv7-wE-Bmg" customClass="HNHUIScrollDocumentViewAdapter">
<rect key="frame" x="0.0" y="0.0" width="301" height="424"/> <rect key="frame" x="0.0" y="0.0" width="301" height="424"/>
@@ -565,14 +568,14 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cDK-DM-F5z" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cDK-DM-F5z" customClass="HNHUITextField">
<rect key="frame" x="20" y="328" width="221" height="22"/> <rect key="frame" x="20" y="328" width="221" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="2hC-UP-Iie"/> <constraint firstAttribute="height" constant="22" id="2hC-UP-Iie"/>
</constraints> </constraints>
<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"> <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"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
@@ -591,7 +594,7 @@
<rect key="frame" x="20" y="138" width="261" height="160"/> <rect key="frame" x="20" y="138" width="261" height="160"/>
<clipView key="contentView" id="aDE-WT-YIv"> <clipView key="contentView" id="aDE-WT-YIv">
<rect key="frame" x="1" y="1" width="259" height="158"/> <rect key="frame" x="1" y="1" width="259" height="158"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="caM-L6-UHC"> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="caM-L6-UHC">
<rect key="frame" x="0.0" y="0.0" width="259" height="158"/> <rect key="frame" x="0.0" y="0.0" width="259" height="158"/>
@@ -640,17 +643,16 @@
<constraints> <constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="160" id="B8z-Sq-4j9"/> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="160" id="B8z-Sq-4j9"/>
</constraints> </constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="Y4S-4R-dwJ"> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Y4S-4R-dwJ">
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="abK-py-K7A"> <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="abK-py-K7A">
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
</scrollView> </scrollView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Iy9-9L-Aev"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Iy9-9L-Aev">
<rect key="frame" x="249" y="110" width="32" height="21"/> <rect key="frame" x="249" y="107" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="18" id="VeX-Jj-eA9"/>
<constraint firstAttribute="width" constant="32" id="mjs-Yf-Cb2"/> <constraint firstAttribute="width" constant="32" id="mjs-Yf-Cb2"/>
</constraints> </constraints>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="5J6-uD-iK6"> <buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="5J6-uD-iK6">
@@ -662,10 +664,9 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AAj-Ak-z46"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AAj-Ak-z46">
<rect key="frame" x="209" y="110" width="32" height="21"/> <rect key="frame" x="209" y="107" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="32" id="vWY-ez-gy9"/> <constraint firstAttribute="width" constant="32" id="vWY-ez-gy9"/>
<constraint firstAttribute="height" constant="18" id="xwN-WB-cn2"/>
</constraints> </constraints>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSRemoveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="86n-d4-lOW"> <buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSRemoveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="86n-d4-lOW">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -708,19 +709,19 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NjR-ea-Y7k" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NjR-ea-Y7k" customClass="HNHUITextField">
<rect key="frame" x="20" y="10" width="221" height="22"/> <rect key="frame" x="20" y="10" width="221" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="oIA-8f-Jkf"/> <constraint firstAttribute="height" constant="22" id="oIA-8f-Jkf"/>
</constraints> </constraints>
<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"> <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"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="m1C-m8-BKR"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="m1C-m8-BKR">
<rect key="frame" x="249" y="8" width="32" height="25"/> <rect key="frame" x="249" y="9" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="32" id="Ek5-IH-qGo"/> <constraint firstAttribute="width" constant="32" id="Ek5-IH-qGo"/>
</constraints> </constraints>
@@ -733,7 +734,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HDS-Bz-jrr"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HDS-Bz-jrr">
<rect key="frame" x="249" y="325" width="32" height="25"/> <rect key="frame" x="249" y="326" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="32" id="CbR-2P-dZH"/> <constraint firstAttribute="width" constant="32" id="CbR-2P-dZH"/>
</constraints> </constraints>
@@ -795,7 +796,7 @@
<rect key="frame" x="1" y="1" width="259" height="268"/> <rect key="frame" x="1" y="1" width="259" height="268"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="54" rowSizeStyle="automatic" viewBased="YES" id="193"> <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" customClass="MPCustomFieldTableView">
<rect key="frame" x="0.0" y="0.0" width="259" height="268"/> <rect key="frame" x="0.0" y="0.0" width="259" height="268"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/> <size key="intercellSpacing" width="3" height="2"/>
@@ -819,15 +820,15 @@
<rect key="frame" x="1" y="1" width="256" height="54"/> <rect key="frame" x="1" y="1" width="256" height="54"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="199" customClass="HNHUIRoundedSecureTextField"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="199" customClass="HNHUISecureTextField">
<rect key="frame" x="3" y="10" width="139" height="22"/> <rect key="frame" x="3" y="10" width="139" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="22" id="212"/> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="22" id="212"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="213"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="213"/>
</constraints> </constraints>
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="214"> <textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="214">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
@@ -843,7 +844,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="198"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="198">
<rect key="frame" x="190" y="8" width="32" height="25"/> <rect key="frame" x="190" y="9" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="32" id="215"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="32" id="215"/>
</constraints> </constraints>
@@ -853,7 +854,7 @@
</buttonCell> </buttonCell>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tDI-EL-JGB"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tDI-EL-JGB">
<rect key="frame" x="150" y="8" width="32" height="25"/> <rect key="frame" x="150" y="9" width="32" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="32" id="JGO-sl-fdM"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="32" id="JGO-sl-fdM"/>
</constraints> </constraints>
@@ -870,10 +871,10 @@
<constraint firstItem="199" firstAttribute="leading" secondItem="196" secondAttribute="leading" constant="3" id="204"/> <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 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="bottom" secondItem="199" secondAttribute="bottom" constant="10" id="206"/>
<constraint firstItem="198" firstAttribute="centerY" secondItem="199" secondAttribute="centerY" id="207"/>
<constraint firstAttribute="trailing" secondItem="198" secondAttribute="trailing" constant="34" id="209"/> <constraint firstAttribute="trailing" secondItem="198" secondAttribute="trailing" constant="34" id="209"/>
<constraint firstItem="tDI-EL-JGB" firstAttribute="centerY" secondItem="199" secondAttribute="centerY" id="FJe-JG-f4a"/>
<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="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="8" symbolic="YES" id="qSi-Hi-kM3"/>
</constraints> </constraints>
<connections> <connections>
@@ -888,19 +889,20 @@
</tableColumns> </tableColumns>
</tableView> </tableView>
</subviews> </subviews>
<nil key="backgroundColor"/>
</clipView> </clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="192"> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="192">
<rect key="frame" x="1" y="130" width="259" height="16"/> <rect key="frame" x="1" y="130" width="259" height="16"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="191"> <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="191">
<rect key="frame" x="224" y="17" width="15" height="102"/> <rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<connections> <connections>
<outlet property="nextKeyView" destination="QSX-Xo-tcH" id="KP9-D4-4cC"/> <outlet property="nextKeyView" destination="G9J-nn-2bu" id="CZ9-f2-JDQ"/>
</connections> </connections>
<point key="canvasLocation" x="-899" y="-949"/> <point key="canvasLocation" x="-1317" y="-1440"/>
</scrollView> </scrollView>
</objects> </objects>
<resources> <resources>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="12121"/> <deployment identifier="macosx"/>
<capability name="box content view" minToolsVersion="7.0"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -10,10 +10,12 @@
<connections> <connections>
<outlet property="clearPasteboardOnQuitCheckButton" destination="447" id="520"/> <outlet property="clearPasteboardOnQuitCheckButton" destination="447" id="520"/>
<outlet property="clearPasteboardTimeoutPopup" destination="419" id="521"/> <outlet property="clearPasteboardTimeoutPopup" destination="419" id="521"/>
<outlet property="enableAutosaveCheckButton" destination="lz3-4U-UMI" id="L5y-58-IgH"/>
<outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/> <outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/>
<outlet property="idleTimeOutPopup" destination="584" id="809"/> <outlet property="idleTimeOutPopup" destination="584" id="809"/>
<outlet property="lockOnLogoutCheckButton" destination="5SP-Vi-1sn" id="yaI-LH-R5A"/> <outlet property="lockOnLogoutCheckButton" destination="5SP-Vi-1sn" id="yaI-LH-R5A"/>
<outlet property="lockOnSleepCheckButton" destination="630" id="810"/> <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="rememberKeyFileCheckButton" destination="bSt-Wf-FNZ" id="aQm-EA-yAN"/>
<outlet property="reopenLastDatabase" destination="530" id="878"/> <outlet property="reopenLastDatabase" destination="530" id="878"/>
<outlet property="view" destination="1" id="82"/> <outlet property="view" destination="1" id="82"/>
@@ -22,16 +24,16 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1"> <customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="400" height="391"/> <rect key="frame" x="0.0" y="0.0" width="400" height="524"/>
<subviews> <subviews>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Security" translatesAutoresizingMaskIntoConstraints="NO" id="465"> <box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Security" translatesAutoresizingMaskIntoConstraints="NO" id="465">
<rect key="frame" x="17" y="16" width="366" height="266"/> <rect key="frame" x="17" y="16" width="366" height="357"/>
<view key="contentView" id="mNh-3L-Z6E"> <view key="contentView" id="mNh-3L-Z6E">
<rect key="frame" x="1" y="1" width="364" height="250"/> <rect key="frame" x="3" y="3" width="360" height="339"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="431"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="431">
<rect key="frame" x="16" y="222" width="120" height="17"/> <rect key="frame" x="14" y="311" width="120" height="17"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="17" id="803"/> <constraint firstAttribute="height" constant="17" id="803"/>
</constraints> </constraints>
@@ -42,27 +44,28 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="419"> <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="419">
<rect key="frame" x="179" y="219" width="170" height="22"/> <rect key="frame" x="177" y="308" width="170" height="21"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="165" id="877"/> <constraint firstAttribute="width" constant="165" id="877"/>
</constraints> </constraints>
<popUpButtonCell key="cell" type="push" title="after 1 Minute" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="60" imageScaling="proportionallyDown" inset="2" selectedItem="424" id="420"> <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"/> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
<menu key="menu" title="ClipboardClearInterval" id="421"> <menu key="menu" title="ClipboardClearInterval" id="421">
<items> <items>
<menuItem title="Never" id="429"> <menuItem title="Never" state="on" id="429">
<modifierMask key="keyEquivalentModifierMask"/> <modifierMask key="keyEquivalentModifierMask"/>
</menuItem> </menuItem>
<menuItem title="after 10 Seconds" tag="10" id="422"/> <menuItem title="after 10 Seconds" tag="10" id="422"/>
<menuItem title="after 30 Seconds" tag="30" id="423"/> <menuItem title="after 30 Seconds" tag="30" id="423"/>
<menuItem title="after 1 Minute" state="on" tag="60" id="424"/> <menuItem title="after 1 Minute" tag="60" id="424"/>
<menuItem title="after 5 Minutes" tag="300" id="5gh-b6-cmG"/>
</items> </items>
</menu> </menu>
</popUpButtonCell> </popUpButtonCell>
</popUpButton> </popUpButton>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="447"> <button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="447">
<rect key="frame" x="31" y="198" width="164" height="18"/> <rect key="frame" x="29" y="287" width="164" height="18"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="14" id="773"/> <constraint firstAttribute="height" constant="14" id="773"/>
</constraints> </constraints>
@@ -72,7 +75,7 @@
</buttonCell> </buttonCell>
</button> </button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="584"> <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="584">
<rect key="frame" x="179" y="170" width="170" height="26"/> <rect key="frame" x="177" y="168" width="170" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="585"> <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"/> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
@@ -89,14 +92,14 @@
</popUpButtonCell> </popUpButtonCell>
</popUpButton> </popUpButton>
<button translatesAutoresizingMaskIntoConstraints="NO" id="630"> <button translatesAutoresizingMaskIntoConstraints="NO" id="630">
<rect key="frame" x="31" y="151" width="119" height="18"/> <rect key="frame" x="29" y="149" width="119" height="18"/>
<buttonCell key="cell" type="check" title="Lock after sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="631"> <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"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
</button> </button>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="805"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="805">
<rect key="frame" x="16" y="175" width="93" height="17"/> <rect key="frame" x="14" y="173" width="93" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="806"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="806">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -104,14 +107,14 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="bSt-Wf-FNZ"> <button verticalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="bSt-Wf-FNZ">
<rect key="frame" x="16" y="106" width="220" height="18"/> <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"> <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"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
</button> </button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5cV-xX-SUU"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5cV-xX-SUU">
<rect key="frame" x="16" y="43" width="332" height="56"/> <rect key="frame" x="18" y="41" width="324" height="56"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="ACh-7H-42N"> <textFieldCell key="cell" sendsActionOnEndEditing="YES" id="ACh-7H-42N">
<font key="font" metaFont="smallSystem"/> <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> <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>
@@ -120,7 +123,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oQr-FC-HkN"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oQr-FC-HkN">
<rect key="frame" x="162" y="7" width="190" height="32"/> <rect key="frame" x="160" 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"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -130,23 +133,53 @@
</connections> </connections>
</button> </button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="5SP-Vi-1sn"> <button translatesAutoresizingMaskIntoConstraints="NO" id="5SP-Vi-1sn">
<rect key="frame" x="31" y="131" width="129" height="18"/> <rect key="frame" x="29" y="129" 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"> <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"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nqZ-rB-mFS">
<rect key="frame" x="14" y="262" 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" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hy4-RL-dAa">
<rect key="frame" x="18" y="200" width="324" 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>
</subviews> </subviews>
<constraints> <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="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="bSt-Wf-FNZ" firstAttribute="top" secondItem="5SP-Vi-1sn" secondAttribute="bottom" constant="11" id="WUG-Uf-FCO"/> <constraint firstItem="bSt-Wf-FNZ" firstAttribute="top" secondItem="5SP-Vi-1sn" secondAttribute="bottom" constant="11" id="WUG-Uf-FCO"/>
<constraint firstItem="5SP-Vi-1sn" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Ylr-aA-jaD"/> <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="6" symbolic="YES" id="acg-vp-LeB"/> <constraint firstItem="5SP-Vi-1sn" firstAttribute="top" secondItem="630" secondAttribute="bottom" constant="6" symbolic="YES" id="acg-vp-LeB"/>
<constraint firstItem="584" firstAttribute="leading" relation="greaterThanOrEqual" 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" relation="greaterThanOrEqual" secondItem="431" secondAttribute="trailing" constant="8" symbolic="YES" id="pN3-pB-Z5I"/>
<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> </constraints>
</view> </view>
<constraints> <constraints>
<constraint firstAttribute="trailing" secondItem="419" secondAttribute="trailing" constant="16" id="1de-jU-TAq"/> <constraint firstAttribute="trailing" secondItem="419" secondAttribute="trailing" constant="16" id="1de-jU-TAq"/>
<constraint firstAttribute="trailing" secondItem="584" secondAttribute="trailing" constant="16" id="GAz-Mn-Z2y"/> <constraint firstAttribute="trailing" secondItem="584" secondAttribute="trailing" constant="16" id="GAz-Mn-Z2y"/>
<constraint firstItem="5cV-xX-SUU" firstAttribute="trailing" secondItem="oQr-FC-HkN" secondAttribute="trailing" id="IK6-0d-s7J"/>
<constraint firstAttribute="bottom" secondItem="oQr-FC-HkN" secondAttribute="bottom" constant="11" id="M71-WV-WFc"/> <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="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="805" firstAttribute="centerY" secondItem="584" secondAttribute="centerY" id="OOq-TD-dmj"/>
@@ -160,30 +193,43 @@
<constraint firstItem="805" firstAttribute="leading" secondItem="465" secondAttribute="leading" constant="16" id="g88-lI-fu4"/> <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="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="leading" relation="greaterThanOrEqual" secondItem="465" secondAttribute="leading" constant="16" id="kZ7-HL-y2Q"/>
<constraint firstItem="5cV-xX-SUU" firstAttribute="leading" secondItem="bSt-Wf-FNZ" secondAttribute="leading" id="qhV-iB-z4e"/>
<constraint firstItem="oQr-FC-HkN" firstAttribute="top" secondItem="5cV-xX-SUU" secondAttribute="bottom" constant="8" id="qsT-Cs-vVj"/> <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="447" firstAttribute="top" secondItem="419" secondAttribute="bottom" constant="8" symbolic="YES" id="u35-aE-Ui9"/>
<constraint firstItem="419" firstAttribute="leading" secondItem="584" secondAttribute="leading" id="xws-PK-qQU"/> <constraint firstItem="419" firstAttribute="leading" secondItem="584" secondAttribute="leading" id="xws-PK-qQU"/>
<constraint firstItem="630" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="ybt-cQ-JwG"/> <constraint firstItem="630" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="ybt-cQ-JwG"/>
<constraint firstItem="805" firstAttribute="top" secondItem="447" secondAttribute="bottom" constant="8" symbolic="YES" id="ywh-V0-xuC"/>
<constraint firstItem="447" firstAttribute="top" secondItem="431" secondAttribute="bottom" constant="8" symbolic="YES" id="zkd-Hf-09b"/> <constraint firstItem="447" firstAttribute="top" secondItem="431" secondAttribute="bottom" constant="8" symbolic="YES" id="zkd-Hf-09b"/>
</constraints> </constraints>
</box> </box>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888"> <box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888">
<rect key="frame" x="17" y="286" width="366" height="85"/> <rect key="frame" x="17" y="375" width="366" height="129"/>
<view key="contentView" id="cpg-tt-SHE"> <view key="contentView" id="cpg-tt-SHE">
<rect key="frame" x="1" y="1" width="364" height="69"/> <rect key="frame" x="3" y="3" width="360" height="111"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<button verticalHuggingPriority="252" translatesAutoresizingMaskIntoConstraints="NO" id="530"> <button verticalHuggingPriority="252" translatesAutoresizingMaskIntoConstraints="NO" id="530">
<rect key="frame" x="16" y="43" width="234" height="18"/> <rect key="frame" x="14" y="85" width="234" height="18"/>
<buttonCell key="cell" type="check" title="Reopen last Database after Launch" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="531"> <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"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
</button> </button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h3w-Ms-ohK"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lz3-4U-UMI">
<rect key="frame" x="16" y="20" width="93" height="17"/> <rect key="frame" x="14" y="65" width="123" 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" translatesAutoresizingMaskIntoConstraints="NO" id="3Bo-Ml-1KB">
<rect key="frame" x="18" y="45" width="324" height="14"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="clipping" 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="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="If file changes:" id="QrK-hM-Xt1"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="If file changes:" id="QrK-hM-Xt1">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -191,7 +237,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2"> <popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2">
<rect key="frame" x="113" y="13" width="234" height="26"/> <rect key="frame" x="111" y="14" width="232" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1R2-5t-LWk"> <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"/> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
@@ -200,12 +246,19 @@
</popUpButton> </popUpButton>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="3Bo-Ml-1KB" firstAttribute="leading" secondItem="cpg-tt-SHE" secondAttribute="leading" constant="20" symbolic="YES" id="2Jh-pk-bN7"/>
<constraint firstAttribute="trailing" secondItem="wIu-Sh-2a2" secondAttribute="trailing" constant="20" id="2Qw-fT-Dd8"/> <constraint firstAttribute="trailing" secondItem="wIu-Sh-2a2" secondAttribute="trailing" constant="20" id="2Qw-fT-Dd8"/>
<constraint firstAttribute="trailing" secondItem="3Bo-Ml-1KB" secondAttribute="trailing" constant="20" symbolic="YES" id="2UW-ao-hrC"/>
<constraint firstAttribute="bottom" secondItem="h3w-Ms-ohK" secondAttribute="bottom" constant="20" symbolic="YES" id="3KB-kR-5d6"/> <constraint firstAttribute="bottom" secondItem="h3w-Ms-ohK" secondAttribute="bottom" constant="20" symbolic="YES" id="3KB-kR-5d6"/>
<constraint firstItem="h3w-Ms-ohK" firstAttribute="leading" secondItem="530" secondAttribute="leading" id="4Fi-rX-8e0"/> <constraint firstItem="h3w-Ms-ohK" firstAttribute="leading" secondItem="530" secondAttribute="leading" id="4Fi-rX-8e0"/>
<constraint firstItem="lz3-4U-UMI" firstAttribute="top" secondItem="530" secondAttribute="bottom" constant="6" symbolic="YES" id="BQf-9P-8Y8"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="lz3-4U-UMI" secondAttribute="trailing" constant="20" symbolic="YES" id="Kaj-GT-zpd"/>
<constraint firstItem="wIu-Sh-2a2" firstAttribute="leading" secondItem="h3w-Ms-ohK" secondAttribute="trailing" constant="8" id="LYK-Na-Md1"/> <constraint firstItem="wIu-Sh-2a2" firstAttribute="leading" secondItem="h3w-Ms-ohK" secondAttribute="trailing" constant="8" id="LYK-Na-Md1"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="530" secondAttribute="trailing" constant="20" symbolic="YES" id="QEp-Zq-u24"/>
<constraint firstItem="wIu-Sh-2a2" firstAttribute="baseline" secondItem="h3w-Ms-ohK" secondAttribute="baseline" id="Zqx-cl-oal"/> <constraint firstItem="wIu-Sh-2a2" firstAttribute="baseline" secondItem="h3w-Ms-ohK" secondAttribute="baseline" id="Zqx-cl-oal"/>
<constraint firstItem="h3w-Ms-ohK" firstAttribute="top" secondItem="530" secondAttribute="bottom" constant="8" id="kIs-yJ-F2K"/> <constraint firstItem="h3w-Ms-ohK" firstAttribute="top" secondItem="3Bo-Ml-1KB" secondAttribute="bottom" constant="8" symbolic="YES" id="emA-Z1-LCv"/>
<constraint firstItem="lz3-4U-UMI" firstAttribute="leading" secondItem="cpg-tt-SHE" secondAttribute="leading" constant="16" id="pm7-O1-afa"/>
<constraint firstItem="3Bo-Ml-1KB" firstAttribute="top" secondItem="lz3-4U-UMI" secondAttribute="bottom" constant="8" symbolic="YES" id="xkU-ut-P9X"/>
</constraints> </constraints>
</view> </view>
<constraints> <constraints>
@@ -224,7 +277,7 @@
<constraint firstAttribute="bottom" secondItem="465" secondAttribute="bottom" constant="20" symbolic="YES" id="uwq-az-XwJ"/> <constraint firstAttribute="bottom" secondItem="465" secondAttribute="bottom" constant="20" symbolic="YES" id="uwq-az-XwJ"/>
<constraint firstItem="465" firstAttribute="top" secondItem="cpg-tt-SHE" secondAttribute="bottom" constant="5" id="wyH-HB-i2U"/> <constraint firstItem="465" firstAttribute="top" secondItem="cpg-tt-SHE" secondAttribute="bottom" constant="5" id="wyH-HB-i2U"/>
</constraints> </constraints>
<point key="canvasLocation" x="-301" y="8.5"/> <point key="canvasLocation" x="-131" y="-93"/>
</customView> </customView>
</objects> </objects>
</document> </document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13529"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -37,11 +37,11 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="23" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="23" customClass="HNHUITextField">
<rect key="frame" x="20" y="242" width="217" height="22"/> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="26">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <connections>
@@ -114,11 +114,11 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fnw-qz-IZU" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fnw-qz-IZU" customClass="HNHUITextField">
<rect key="frame" x="20" y="50" width="217" height="22"/> <rect key="frame" x="20" y="50" width="217" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="VeF-V7-i2I"> <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"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <connections>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13529"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -16,17 +16,17 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="1"> <customView id="1">
<rect key="frame" x="0.0" y="0.0" width="400" height="400"/> <rect key="frame" x="0.0" y="0.0" width="465" height="400"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews> <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"> <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="380" height="330"/> <rect key="frame" x="10" y="50" width="445" height="330"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Gwf-zs-lPT"> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Gwf-zs-lPT">
<rect key="frame" x="0.0" y="0.0" width="380" height="330"/> <rect key="frame" x="0.0" y="0.0" width="445" height="330"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<collectionView focusRingType="none" selectable="YES" id="58" customClass="MPCollectionView"> <collectionView focusRingType="none" selectable="YES" id="58" customClass="MPCollectionView">
<rect key="frame" x="0.0" y="0.0" width="380" height="330"/> <rect key="frame" x="0.0" y="0.0" width="445" height="330"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="primaryBackgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="primaryBackgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
<connections> <connections>
@@ -35,17 +35,17 @@
</collectionView> </collectionView>
</subviews> </subviews>
</clipView> </clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="59"> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="59">
<rect key="frame" x="1" y="144" width="233" height="15"/> <rect key="frame" x="1" y="144" width="233" height="15"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="60"> <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="364" y="0.0" width="16" height="268"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
</scrollView> </scrollView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="101"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="101">
<rect key="frame" x="265" y="18" width="115" height="25"/> <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"> <buttonCell key="cell" type="roundTextured" title="Use Default Icon" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="102">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -55,7 +55,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8kv-BJ-IEk"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8kv-BJ-IEk">
<rect key="frame" x="153" y="18" width="104" height="25"/> <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"> <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">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -65,7 +65,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="His-4A-hcY"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="His-4A-hcY">
<rect key="frame" x="89" y="18" width="56" height="25"/> <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"> <buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1kM-cI-P1o">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13529"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -83,7 +83,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2985"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2985">
<rect key="frame" x="81" y="194" width="118" height="24"/> <rect key="frame" x="82" y="194" width="115" height="24"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="No Selection" id="2986"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="No Selection" id="2986">
<font key="font" metaFont="system" size="20"/> <font key="font" metaFont="system" size="20"/>
<color key="textColor" name="controlShadowColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlShadowColor" catalog="System" colorSpace="catalog"/>
@@ -122,40 +122,50 @@
</textField> </textField>
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0V7-UG-vEA"> <scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0V7-UG-vEA">
<rect key="frame" x="20" y="20" width="238" height="194"/> <rect key="frame" x="20" y="20" width="238" height="194"/>
<clipView key="contentView" id="kcs-yQ-cbv"> <clipView key="contentView" drawsBackground="NO" id="kcs-yQ-cbv">
<rect key="frame" x="1" y="1" width="236" height="192"/> <rect key="frame" x="1" y="1" width="236" height="192"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <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" allowsNonContiguousLayout="YES" smartInsertDelete="YES" id="g24-gQ-foD" customClass="HNHUITextView">
<rect key="frame" x="0.0" y="0.0" width="236" height="192"/> <rect key="frame" x="0.0" y="0.0" width="236" height="192"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<size key="minSize" width="236" height="192"/> <size key="minSize" width="236" height="192"/>
<size key="maxSize" width="463" height="10000000"/> <size key="maxSize" width="463" height="10000000"/>
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> <color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
<connections> <connections>
<binding destination="-2" name="editable" keyPath="representedObject.isHistory" id="zUB-H2-SkW"> <binding destination="-2" name="editable2" keyPath="representedObject" previousBinding="3gj-Fz-0G8" id="AI9-fU-m4Z">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
<integer key="NSNoSelectionPlaceholder" value="-1"/>
<integer key="NSNotApplicablePlaceholder" value="-1"/>
<integer key="NSNullPlaceholder" value="-1"/>
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
<binding destination="-2" name="editable" keyPath="representedObject.isHistory" id="3gj-Fz-0G8">
<dictionary key="options"> <dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="-2" name="value" keyPath="representedObject.notes" id="E0d-ZH-Wbc"> <binding destination="-2" name="value" keyPath="representedObject.notes" id="Xpb-G8-gXl">
<dictionary key="options"> <dictionary key="options">
<bool key="NSConditionallySetsEditable" value="NO"/> <bool key="NSConditionallySetsEditable" value="NO"/>
<string key="NSNoSelectionPlaceholder">No Selection</string> <string key="NSNoSelectionPlaceholder">No Selection</string>
<string key="NSNullPlaceholder">None</string>
</dictionary> </dictionary>
</binding> </binding>
<outlet property="delegate" destination="-2" id="8oq-Ga-UQD"/> <outlet property="delegate" destination="-2" id="8oq-Ga-UQD"/>
</connections> </connections>
</textView> </textView>
</subviews> </subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</clipView> </clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="ozT-Yy-2vu"> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="ozT-Yy-2vu">
<rect key="frame" x="-100" y="-100" width="87" height="18"/> <rect key="frame" x="-100" y="-100" width="87" height="18"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="Dgu-8Y-sx3"> <scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="Dgu-8Y-sx3">
<rect key="frame" x="221" y="1" width="16" height="192"/> <rect key="frame" x="221" y="1" width="16" height="192"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>

View File

@@ -1,13 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="12121"/> <deployment identifier="macosx"/>
<capability name="box content view" minToolsVersion="7.0"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPIntegrationSettingsController"> <customObject id="-2" userLabel="File's Owner" customClass="MPIntegrationSettingsController">
<connections> <connections>
<outlet property="autotypeStackView" destination="j52-9L-k7c" id="Mxw-aa-elx"/>
<outlet property="autotypeWarningTextField" destination="hMJ-Mo-xOM" id="LcH-X2-TAm"/>
<outlet property="enableGlobalAutotypeCheckBox" destination="tik-Ar-FJg" id="yVA-bM-sSh"/> <outlet property="enableGlobalAutotypeCheckBox" destination="tik-Ar-FJg" id="yVA-bM-sSh"/>
<outlet property="enableQuicklookCheckBox" destination="LNw-5t-TS4" id="YiZ-Kk-0dF"/> <outlet property="enableQuicklookCheckBox" destination="LNw-5t-TS4" id="YiZ-Kk-0dF"/>
<outlet property="hotKeyTextField" destination="Kvg-he-3c8" id="c7p-1F-zth"/> <outlet property="hotKeyTextField" destination="Kvg-he-3c8" id="c7p-1F-zth"/>
@@ -16,6 +18,7 @@
<outlet property="matchTagsCheckBox" destination="9MH-jx-GpG" id="j1Y-BT-J81"/> <outlet property="matchTagsCheckBox" destination="9MH-jx-GpG" id="j1Y-BT-J81"/>
<outlet property="matchTitleCheckBox" destination="DAX-V8-Say" id="rbc-nA-1bQ"/> <outlet property="matchTitleCheckBox" destination="DAX-V8-Say" id="rbc-nA-1bQ"/>
<outlet property="matchURLCheckBox" destination="8Wz-lo-AXG" id="jTp-2n-oO7"/> <outlet property="matchURLCheckBox" destination="8Wz-lo-AXG" id="jTp-2n-oO7"/>
<outlet property="openPreferencesButton" destination="jai-b6-Qv4" id="Uq1-un-Dga"/>
<outlet property="sendCommandForControlCheckBox" destination="VK8-z4-2ci" id="nIa-ap-QfD"/> <outlet property="sendCommandForControlCheckBox" destination="VK8-z4-2ci" id="nIa-ap-QfD"/>
<outlet property="view" destination="1" id="18"/> <outlet property="view" destination="1" id="18"/>
</connections> </connections>
@@ -23,137 +26,178 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1"> <customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="400" height="366"/> <rect key="frame" x="0.0" y="0.0" width="400" height="463"/>
<subviews> <subviews>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Autotype" translatesAutoresizingMaskIntoConstraints="NO" id="P9N-HM-wER"> <box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Autotype" translatesAutoresizingMaskIntoConstraints="NO" id="P9N-HM-wER">
<rect key="frame" x="17" y="115" width="366" height="231"/> <rect key="frame" x="17" y="115" width="366" height="328"/>
<view key="contentView" id="faU-Ok-HJ3"> <view key="contentView" id="faU-Ok-HJ3">
<rect key="frame" x="1" y="1" width="364" height="215"/> <rect key="frame" x="3" y="3" width="360" height="310"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8" customClass="DDHotKeyTextField"> <stackView orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" translatesAutoresizingMaskIntoConstraints="NO" id="j52-9L-k7c">
<rect key="frame" x="79" y="161" width="89" height="22"/> <rect key="frame" x="16" y="17" width="328" height="283"/>
<constraints> <beginningViews>
<constraint firstAttribute="width" constant="89" id="Mia-b8-HCZ"/> <textField verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="328" translatesAutoresizingMaskIntoConstraints="NO" id="hMJ-Mo-xOM">
</constraints> <rect key="frame" x="-2" y="227" width="332" height="56"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="" drawsBackground="YES" id="sW8-rh-bhD" customClass="DDHotKeyTextFieldCell"> <textFieldCell key="cell" controlSize="small" id="H37-ku-aTc">
<font key="font" metaFont="system"/> <font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <string key="title">Autotype is not available, because MacPass is not allowed to control your computer. To enable Autotype, go to the Security and Privacy Preferences and add MacPass to the Accessibilty group. Changes require a restart of MacPass.</string>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textField> </textFieldCell>
<button translatesAutoresizingMaskIntoConstraints="NO" id="tik-Ar-FJg"> </textField>
<rect key="frame" x="16" y="189" width="162" height="18"/> <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jai-b6-Qv4">
<buttonCell key="cell" type="check" title="Enable global Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="1qb-Rd-jYu"> <rect key="frame" x="-6" y="191" width="160" height="32"/>
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <buttonCell key="cell" type="push" title="Open Preferences…" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="NP0-R3-m6n">
<font key="font" metaFont="system"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
</buttonCell> <font key="font" metaFont="system"/>
</button> </buttonCell>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V"> <connections>
<rect key="frame" x="16" y="164" width="57" height="17"/> <action selector="openAccessibiltyPreferences:" target="-2" id="GTg-6Z-6nd"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut" id="6oN-CH-T0O"> </connections>
<font key="font" metaFont="system"/> </button>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tik-Ar-FJg">
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <rect key="frame" x="-2" y="174" width="162" height="18"/>
</textFieldCell> <buttonCell key="cell" type="check" title="Enable global Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="1qb-Rd-jYu">
</textField> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="f5q-EW-RHf"> <font key="font" metaFont="system"/>
<rect key="frame" x="174" y="167" width="127" height="14"/> </buttonCell>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut is missing Key" id="Lxp-wI-yQy"> </button>
<font key="font" metaFont="smallSystem"/> <stackView orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d6A-Vb-CMt">
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/> <rect key="frame" x="0.0" y="146" width="328" height="22"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <beginningViews>
</textFieldCell> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V">
</textField> <rect key="frame" x="-2" y="3" width="57" height="17"/>
<button translatesAutoresizingMaskIntoConstraints="NO" id="DAX-V8-Say"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut" id="6oN-CH-T0O">
<rect key="frame" x="16" y="133" width="208" height="18"/> <font key="font" metaFont="system"/>
<buttonCell key="cell" type="check" title="Include Entry Title for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="tmL-dT-D0G"> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<font key="font" metaFont="system"/> </textFieldCell>
</buttonCell> </textField>
</button> <textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8" customClass="DDHotKeyTextField">
<button translatesAutoresizingMaskIntoConstraints="NO" id="TiO-ah-BlR"> <rect key="frame" x="61" y="0.0" width="136" height="22"/>
<rect key="frame" x="16" y="93" width="239" height="18"/> <constraints>
<buttonCell key="cell" type="check" title="Include Entry URL Host for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="B1D-j9-L8x"> <constraint firstAttribute="width" constant="89" id="Mia-b8-HCZ"/>
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> </constraints>
<font key="font" metaFont="system"/> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="" drawsBackground="YES" id="sW8-rh-bhD" customClass="DDHotKeyTextFieldCell">
</buttonCell> <font key="font" metaFont="system"/>
</button> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<button translatesAutoresizingMaskIntoConstraints="NO" id="9MH-jx-GpG"> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<rect key="frame" x="16" y="73" width="210" height="18"/> </textFieldCell>
<buttonCell key="cell" type="check" title="Include Entry Tags for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="rbu-G7-MT8"> </textField>
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="f5q-EW-RHf">
<font key="font" metaFont="system"/> <rect key="frame" x="203" y="4" width="127" height="14"/>
</buttonCell> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut is missing Key" id="Lxp-wI-yQy">
</button> <font key="font" metaFont="smallSystem"/>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VK8-z4-2ci"> <color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<rect key="frame" x="16" y="53" width="123" height="18"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<buttonCell key="cell" type="check" title="Interpret ⌃ as ⌘" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="QfO-yG-l3F"> </textFieldCell>
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> </textField>
<font key="font" metaFont="system"/> </beginningViews>
</buttonCell> <visibilityPriorities>
</button> <integer value="1000"/>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wbP-A9-jpw"> <integer value="1000"/>
<rect key="frame" x="18" y="19" width="330" height="28"/> <integer value="1000"/>
<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"> </visibilityPriorities>
<font key="font" metaFont="smallSystem"/> <customSpacing>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <real value="3.4028234663852886e+38"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <real value="3.4028234663852886e+38"/>
</textFieldCell> <real value="3.4028234663852886e+38"/>
</textField> </customSpacing>
<button translatesAutoresizingMaskIntoConstraints="NO" id="8Wz-lo-AXG"> </stackView>
<rect key="frame" x="16" y="113" width="207" height="18"/> <button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DAX-V8-Say">
<buttonCell key="cell" type="check" title="Include Entry URL for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="TzR-00-Vp3"> <rect key="frame" x="-2" y="122" width="208" height="18"/>
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <buttonCell key="cell" type="check" title="Include Entry Title for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="tmL-dT-D0G">
<font key="font" metaFont="system"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
</buttonCell> <font key="font" metaFont="system"/>
</button> </buttonCell>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8Wz-lo-AXG">
<rect key="frame" x="-2" y="100" width="206" height="18"/>
<buttonCell key="cell" type="check" title="Include Entry URL for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="TzR-00-Vp3">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TiO-ah-BlR">
<rect key="frame" x="-2" y="78" width="239" height="18"/>
<buttonCell key="cell" type="check" title="Include Entry URL Host for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="B1D-j9-L8x">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9MH-jx-GpG">
<rect key="frame" x="-2" y="56" width="210" height="18"/>
<buttonCell key="cell" type="check" title="Include Entry Tags for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="rbu-G7-MT8">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VK8-z4-2ci">
<rect key="frame" x="-2" y="34" width="122" height="18"/>
<buttonCell key="cell" type="check" title="Interpret ⌃ as ⌘" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="QfO-yG-l3F">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wbP-A9-jpw">
<rect key="frame" x="-2" y="0.0" width="332" 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"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</beginningViews>
<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"/>
</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"/>
</customSpacing>
</stackView>
</subviews> </subviews>
<constraints>
<constraint firstItem="8Wz-lo-AXG" firstAttribute="top" secondItem="DAX-V8-Say" secondAttribute="bottom" constant="6" symbolic="YES" id="MoH-z7-kAd"/>
<constraint firstItem="wbP-A9-jpw" firstAttribute="leading" secondItem="faU-Ok-HJ3" secondAttribute="leading" constant="20" symbolic="YES" id="VLP-Gn-i60"/>
<constraint firstItem="9MH-jx-GpG" firstAttribute="leading" secondItem="TiO-ah-BlR" secondAttribute="leading" id="ZD4-CI-kNs"/>
<constraint firstItem="8Wz-lo-AXG" firstAttribute="leading" secondItem="tik-Ar-FJg" secondAttribute="leading" id="djt-ZE-TVX"/>
<constraint firstItem="TiO-ah-BlR" firstAttribute="top" secondItem="8Wz-lo-AXG" secondAttribute="bottom" constant="6" symbolic="YES" id="ejm-fw-tc2"/>
<constraint firstItem="VK8-z4-2ci" firstAttribute="leading" secondItem="tik-Ar-FJg" secondAttribute="leading" id="umE-F4-nDY"/>
</constraints>
</view> </view>
<constraints> <constraints>
<constraint firstAttribute="trailing" secondItem="wbP-A9-jpw" secondAttribute="trailing" constant="16" id="2V3-QT-fHc"/> <constraint firstAttribute="trailing" secondItem="j52-9L-k7c" secondAttribute="trailing" constant="16" id="DbO-uU-dBc"/>
<constraint firstItem="DAX-V8-Say" firstAttribute="top" secondItem="Kvg-he-3c8" secondAttribute="bottom" constant="12" id="3uN-8n-txN"/> <constraint firstItem="j52-9L-k7c" firstAttribute="top" secondItem="P9N-HM-wER" secondAttribute="top" constant="25" id="GW1-NJ-TjL"/>
<constraint firstItem="Kvg-he-3c8" firstAttribute="leading" secondItem="buI-Wb-o3V" secondAttribute="trailing" constant="8" symbolic="YES" id="53L-pe-f6c"/> <constraint firstItem="j52-9L-k7c" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" constant="16" id="I0o-Ef-GNj"/>
<constraint firstAttribute="bottom" secondItem="wbP-A9-jpw" secondAttribute="bottom" constant="16" id="Cz4-ys-xjj"/> <constraint firstAttribute="bottom" secondItem="j52-9L-k7c" secondAttribute="bottom" constant="16" id="stS-Jr-dyi"/>
<constraint firstItem="tik-Ar-FJg" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" constant="16" id="DfG-iG-Cdv"/>
<constraint firstItem="tik-Ar-FJg" firstAttribute="top" secondItem="P9N-HM-wER" secondAttribute="top" constant="25" id="E3O-BW-PBU"/>
<constraint firstItem="f5q-EW-RHf" firstAttribute="leading" secondItem="Kvg-he-3c8" secondAttribute="trailing" constant="8" symbolic="YES" id="F3E-6w-vYY"/>
<constraint firstItem="wbP-A9-jpw" firstAttribute="top" secondItem="VK8-z4-2ci" secondAttribute="bottom" constant="8" symbolic="YES" id="SjT-SU-tCe"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Kvg-he-3c8" secondAttribute="trailing" constant="26" id="U4h-wP-3di"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="f5q-EW-RHf" secondAttribute="trailing" constant="26" id="Xme-uO-a5Z"/>
<constraint firstItem="Kvg-he-3c8" firstAttribute="baseline" secondItem="f5q-EW-RHf" secondAttribute="baseline" constant="3" id="Zvz-jd-nLG"/>
<constraint firstItem="Kvg-he-3c8" firstAttribute="top" secondItem="tik-Ar-FJg" secondAttribute="bottom" constant="8" symbolic="YES" id="bxR-sX-uV3"/>
<constraint firstItem="buI-Wb-o3V" firstAttribute="baseline" secondItem="Kvg-he-3c8" secondAttribute="baseline" id="her-EX-xCf"/>
<constraint firstItem="9MH-jx-GpG" firstAttribute="top" secondItem="TiO-ah-BlR" secondAttribute="bottom" constant="6" symbolic="YES" id="mDj-Hg-CFH"/>
<constraint firstItem="tik-Ar-FJg" firstAttribute="leading" secondItem="buI-Wb-o3V" secondAttribute="leading" id="qDJ-3S-cPr"/>
<constraint firstItem="VK8-z4-2ci" firstAttribute="top" secondItem="9MH-jx-GpG" secondAttribute="bottom" constant="6" symbolic="YES" id="qaN-4g-KJh"/>
<constraint firstItem="DAX-V8-Say" firstAttribute="leading" secondItem="tik-Ar-FJg" secondAttribute="leading" id="s2L-A8-WQ2"/>
<constraint firstItem="tik-Ar-FJg" firstAttribute="leading" secondItem="TiO-ah-BlR" secondAttribute="leading" id="uJP-4u-dr4"/>
</constraints> </constraints>
</box> </box>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Preview" translatesAutoresizingMaskIntoConstraints="NO" id="VVs-b5-cX9"> <box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Preview" translatesAutoresizingMaskIntoConstraints="NO" id="VVs-b5-cX9">
<rect key="frame" x="17" y="16" width="366" height="95"/> <rect key="frame" x="17" y="16" width="366" height="95"/>
<view key="contentView" id="ww4-uR-8gP"> <view key="contentView" id="ww4-uR-8gP">
<rect key="frame" x="1" y="1" width="364" height="79"/> <rect key="frame" x="3" y="3" width="360" height="77"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="LNw-5t-TS4"> <button translatesAutoresizingMaskIntoConstraints="NO" id="LNw-5t-TS4">
<rect key="frame" x="16" y="53" width="178" height="18"/> <rect key="frame" x="14" y="51" width="178" height="18"/>
<buttonCell key="cell" type="check" title="Enable Quicklook Preview" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ERs-ct-Eyx"> <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"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
</button> </button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="V6l-R9-hIj"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="V6l-R9-hIj">
<rect key="frame" x="16" y="19" width="332" height="28"/> <rect key="frame" x="14" y="17" width="332" 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"> <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"/> <font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -161,6 +205,9 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
</subviews> </subviews>
<constraints>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="LNw-5t-TS4" secondAttribute="trailing" constant="20" symbolic="YES" id="5bd-ta-CgC"/>
</constraints>
</view> </view>
<constraints> <constraints>
<constraint firstItem="V6l-R9-hIj" firstAttribute="leading" secondItem="VVs-b5-cX9" secondAttribute="leading" constant="16" id="4UQ-7R-4C6"/> <constraint firstItem="V6l-R9-hIj" firstAttribute="leading" secondItem="VVs-b5-cX9" secondAttribute="leading" constant="16" id="4UQ-7R-4C6"/>
@@ -182,7 +229,7 @@
<constraint firstItem="P9N-HM-wER" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="ulV-xL-ldJ"/> <constraint firstItem="P9N-HM-wER" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="ulV-xL-ldJ"/>
<constraint firstItem="VVs-b5-cX9" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" id="z4a-9C-78h"/> <constraint firstItem="VVs-b5-cX9" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" id="z4a-9C-78h"/>
</constraints> </constraints>
<point key="canvasLocation" x="130" y="148"/> <point key="canvasLocation" x="-357" y="-1007.5"/>
</customView> </customView>
</objects> </objects>
</document> </document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication"> <customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
@@ -145,7 +145,7 @@
<menuItem isSeparatorItem="YES" id="79"> <menuItem isSeparatorItem="YES" id="79">
<modifierMask key="keyEquivalentModifierMask" command="YES"/> <modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem> </menuItem>
<menuItem title="Merge…" id="zvE-0h-UxI"> <menuItem title="Merge With…" id="zvE-0h-UxI">
<modifierMask key="keyEquivalentModifierMask"/> <modifierMask key="keyEquivalentModifierMask"/>
<connections> <connections>
<action selector="mergeWithOther:" target="-1" id="OyM-CZ-TDD"/> <action selector="mergeWithOther:" target="-1" id="OyM-CZ-TDD"/>
@@ -162,6 +162,9 @@
</connections> </connections>
</menuItem> </menuItem>
</items> </items>
<connections>
<outlet property="delegate" destination="494" id="gzA-SE-HKO"/>
</connections>
</menu> </menu>
</menuItem> </menuItem>
<menuItem title="Export" id="tz9-yK-pOf"> <menuItem title="Export" id="tz9-yK-pOf">
@@ -250,6 +253,14 @@ CA
</items> </items>
</menu> </menu>
</menuItem> </menuItem>
<menuItem title="Item" id="3st-rv-EeQ">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Item" id="Ttt-tR-emo">
<connections>
<outlet property="delegate" destination="494" id="8Tk-fd-paV"/>
</connections>
</menu>
</menuItem>
<menuItem title="View" id="295"> <menuItem title="View" id="295">
<menu key="submenu" title="View" id="296"> <menu key="submenu" title="View" id="296">
<items> <items>
@@ -306,7 +317,7 @@ CA
</connections> </connections>
</menuItem> </menuItem>
<menuItem isSeparatorItem="YES" id="1176"/> <menuItem isSeparatorItem="YES" id="1176"/>
<menuItem title="Show Password Creator" keyEquivalent="p" id="1200"> <menuItem title="Show Password Generator" keyEquivalent="p" id="1200">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections> <connections>
<action selector="showPasswordCreator:" target="494" id="1202"/> <action selector="showPasswordCreator:" target="494" id="1202"/>
@@ -336,12 +347,14 @@ CA
</menu> </menu>
</menuItem> </menuItem>
</items> </items>
<point key="canvasLocation" x="-452" y="80"/> <point key="canvasLocation" x="-600" y="98"/>
</menu> </menu>
<customObject id="494" customClass="MPAppDelegate"> <customObject id="494" customClass="MPAppDelegate">
<connections> <connections>
<outlet property="fileNewMenuItem" destination="82" id="BUX-dy-HS2"/> <outlet property="fileNewMenuItem" destination="82" id="BUX-dy-HS2"/>
<outlet property="fixAutotypeMenuItem" destination="nx7-Vf-LiD" id="5n1-bG-JxJ"/> <outlet property="fixAutotypeMenuItem" destination="nx7-Vf-LiD" id="5n1-bG-JxJ"/>
<outlet property="importMenu" destination="4q9-u1-pcm" id="0XM-fS-Vyy"/>
<outlet property="itemMenu" destination="Ttt-tR-emo" id="cdF-dt-2h9"/>
<outlet property="saveMenuItem" destination="75" id="dsN-Im-4eZ"/> <outlet property="saveMenuItem" destination="75" id="dsN-Im-4eZ"/>
</connections> </connections>
</customObject> </customObject>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14113" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14113"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -49,7 +49,7 @@
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="x9q-qY-Jy2" secondAttribute="bottom" constant="10" id="f1c-Ha-7hR"/> <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="x9q-qY-Jy2" secondAttribute="bottom" constant="10" id="f1c-Ha-7hR"/>
<constraint firstItem="I5Q-M2-Ha7" firstAttribute="leading" secondItem="x9q-qY-Jy2" secondAttribute="leading" id="sUu-Ol-LM0"/> <constraint firstItem="I5Q-M2-Ha7" firstAttribute="leading" secondItem="x9q-qY-Jy2" secondAttribute="leading" id="sUu-Ol-LM0"/>
</constraints> </constraints>
<point key="canvasLocation" x="-239" y="-34"/> <point key="canvasLocation" x="-11" y="-31"/>
</customView> </customView>
</objects> </objects>
</document> </document>

View File

@@ -1,14 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPPasswordCreatorViewController"> <customObject id="-2" userLabel="File's Owner" customClass="MPPasswordCreatorViewController">
<connections> <connections>
<outlet property="customButton" destination="468" id="598"/> <outlet property="customButton" destination="468" id="598"/>
<outlet property="customCharactersTextField" destination="411" id="479"/> <outlet property="customCharactersTextField" destination="411" id="479"/>
<outlet property="ensureOccuranceButton" destination="RDM-JY-oF9" id="btK-Gf-vpP"/>
<outlet property="entropyIndicator" destination="635" id="676"/> <outlet property="entropyIndicator" destination="635" id="676"/>
<outlet property="entropyTextField" destination="652" id="675"/> <outlet property="entropyTextField" destination="652" id="675"/>
<outlet property="lowerCaseButton" destination="456" id="593"/> <outlet property="lowerCaseButton" destination="456" id="593"/>
@@ -27,68 +29,68 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="1"> <customView id="1">
<rect key="frame" x="0.0" y="0.0" width="351" height="291"/> <rect key="frame" x="0.0" y="0.0" width="351" height="316"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="148"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="148">
<rect key="frame" x="18" y="251" width="66" height="17"/> <rect key="frame" x="18" y="276" width="66" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Password:" id="149"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Password:" id="149">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="152"> <textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="152">
<rect key="frame" x="90" y="247" width="201" height="24"/> <rect key="frame" x="90" y="272" width="201" height="24"/>
<constraints> <constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="621"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="621"/>
</constraints> </constraints>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="153" customClass="HNHUIRoundedTextFieldCell"> <textFieldCell key="cell" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="153" customClass="HNHUITextFieldCell">
<font key="font" size="13" name="Menlo-Regular"/> <font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="173"> <slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="173">
<rect key="frame" x="88" y="221" width="205" height="19"/> <rect key="frame" x="88" y="246" width="205" height="19"/>
<sliderCell key="cell" state="on" alignment="left" maxValue="100" doubleValue="50" tickMarkPosition="above" sliderType="linear" id="174"/> <sliderCell key="cell" state="on" alignment="left" maxValue="100" doubleValue="50" tickMarkPosition="above" sliderType="linear" id="174"/>
</slider> </slider>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="178"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="178">
<rect key="frame" x="18" y="223" width="66" height="17"/> <rect key="frame" x="18" y="248" width="66" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Length:" id="179"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Length:" id="179">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="182"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="182">
<rect key="frame" x="299" y="219" width="32" height="22"/> <rect key="frame" x="299" y="244" width="32" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="32" id="eVc-Kg-bCi"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="32" id="eVc-Kg-bCi"/>
</constraints> </constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="183"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="183">
<customFormatter key="formatter" id="VRL-ed-DDG" customClass="MPNumberFormatter"/> <customFormatter key="formatter" id="VRL-ed-DDG" customClass="MPNumberFormatter"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<box autoresizesSubviews="NO" borderType="line" title="Allowed Characters" translatesAutoresizingMaskIntoConstraints="NO" id="332"> <box autoresizesSubviews="NO" borderType="line" title="Character options" translatesAutoresizingMaskIntoConstraints="NO" id="332">
<rect key="frame" x="17" y="88" width="317" height="94"/> <rect key="frame" x="17" y="88" width="317" height="119"/>
<view key="contentView" id="f93-Su-hga"> <view key="contentView" id="f93-Su-hga">
<rect key="frame" x="1" y="1" width="315" height="78"/> <rect key="frame" x="3" y="3" width="311" height="101"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="411"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="411">
<rect key="frame" x="18" y="19" width="279" height="22"/> <rect key="frame" x="16" y="42" width="279" height="22"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="412" customClass="HNHUIRoundedTextFieldCell"> <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"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="452"> <button verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="452">
<rect key="frame" x="18" y="49" width="36" height="19"/> <rect key="frame" x="16" y="72" 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"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/> <font key="font" metaFont="cellTitle"/>
@@ -98,7 +100,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="456"> <button verticalHuggingPriority="750" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="456">
<rect key="frame" x="62" y="49" width="33" height="19"/> <rect key="frame" x="60" y="72" width="33" height="19"/>
<buttonCell key="cell" type="roundRect" title="a-z" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="457"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/> <font key="font" metaFont="cellTitle"/>
@@ -108,7 +110,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" tag="4" translatesAutoresizingMaskIntoConstraints="NO" id="460"> <button verticalHuggingPriority="750" tag="4" translatesAutoresizingMaskIntoConstraints="NO" id="460">
<rect key="frame" x="103" y="49" width="35" height="19"/> <rect key="frame" x="101" y="72" width="35" height="19"/>
<buttonCell key="cell" type="roundRect" title="0-9" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="461"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/> <font key="font" metaFont="cellTitle"/>
@@ -118,7 +120,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" tag="8" translatesAutoresizingMaskIntoConstraints="NO" id="464"> <button verticalHuggingPriority="750" tag="8" translatesAutoresizingMaskIntoConstraints="NO" id="464">
<rect key="frame" x="146" y="49" width="32" height="19"/> <rect key="frame" x="144" y="72" width="32" height="19"/>
<buttonCell key="cell" type="roundRect" title="#!?" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="465"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/> <font key="font" metaFont="cellTitle"/>
@@ -128,7 +130,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="468"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="468">
<rect key="frame" x="186" y="49" width="58" height="19"/> <rect key="frame" x="184" y="72" width="58" height="19"/>
<buttonCell key="cell" type="roundRect" title="Custom" bezelStyle="roundedRect" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="469"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/> <font key="font" metaFont="cellTitle"/>
@@ -137,7 +139,20 @@
<action selector="_toggleCharacters:" target="-2" id="5CP-8c-RKX"/> <action selector="_toggleCharacters:" target="-2" id="5CP-8c-RKX"/>
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RDM-JY-oF9">
<rect key="frame" x="14" y="18" width="222" 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"/>
</buttonCell>
</button>
</subviews> </subviews>
<constraints>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="RDM-JY-oF9" secondAttribute="trailing" constant="20" symbolic="YES" id="04d-ak-mHi"/>
<constraint firstItem="RDM-JY-oF9" firstAttribute="top" secondItem="411" secondAttribute="bottom" constant="8" symbolic="YES" id="eDq-kw-W3j"/>
<constraint firstItem="RDM-JY-oF9" firstAttribute="leading" secondItem="411" secondAttribute="leading" id="lwy-YZ-Vxl"/>
<constraint firstAttribute="bottom" secondItem="RDM-JY-oF9" secondAttribute="bottom" constant="20" symbolic="YES" id="rS3-s4-ibM"/>
</constraints>
</view> </view>
<constraints> <constraints>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="468" secondAttribute="trailing" constant="16" id="1AP-Bk-63Z"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="468" secondAttribute="trailing" constant="16" id="1AP-Bk-63Z"/>
@@ -146,7 +161,6 @@
<constraint firstItem="468" firstAttribute="leading" secondItem="464" secondAttribute="trailing" constant="8" symbolic="YES" id="I61-T5-YTD"/> <constraint firstItem="468" firstAttribute="leading" secondItem="464" secondAttribute="trailing" constant="8" symbolic="YES" id="I61-T5-YTD"/>
<constraint firstItem="460" firstAttribute="leading" secondItem="456" secondAttribute="trailing" constant="8" symbolic="YES" id="IEY-Ge-pYv"/> <constraint firstItem="460" firstAttribute="leading" secondItem="456" secondAttribute="trailing" constant="8" symbolic="YES" id="IEY-Ge-pYv"/>
<constraint firstItem="468" firstAttribute="top" secondItem="332" secondAttribute="top" constant="25" id="NAr-SD-lu0"/> <constraint firstItem="468" firstAttribute="top" secondItem="332" secondAttribute="top" constant="25" id="NAr-SD-lu0"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="411" secondAttribute="bottom" constant="16" id="O0V-4Y-bhc"/>
<constraint firstItem="456" firstAttribute="top" secondItem="332" secondAttribute="top" constant="25" id="QYc-6i-WKC"/> <constraint firstItem="456" firstAttribute="top" secondItem="332" secondAttribute="top" constant="25" id="QYc-6i-WKC"/>
<constraint firstItem="460" firstAttribute="top" secondItem="332" secondAttribute="top" constant="25" id="ZaM-QU-hcG"/> <constraint firstItem="460" firstAttribute="top" secondItem="332" secondAttribute="top" constant="25" id="ZaM-QU-hcG"/>
<constraint firstItem="456" firstAttribute="leading" secondItem="452" secondAttribute="trailing" constant="8" symbolic="YES" id="bFo-86-Qj1"/> <constraint firstItem="456" firstAttribute="leading" secondItem="452" secondAttribute="trailing" constant="8" symbolic="YES" id="bFo-86-Qj1"/>
@@ -158,7 +172,7 @@
</constraints> </constraints>
</box> </box>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="494"> <button verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="494">
<rect key="frame" x="231" y="18" width="100" height="25"/> <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"> <buttonCell key="cell" type="roundTextured" title="Use Password" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="495">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -175,7 +189,7 @@
</buttonCell> </buttonCell>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="509"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="509">
<rect key="frame" x="299" y="247" width="32" height="25"/> <rect key="frame" x="299" y="273" width="32" 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"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -185,7 +199,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="613"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="613">
<rect key="frame" x="167" y="18" width="56" height="25"/> <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"> <buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="614">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -195,19 +209,19 @@
</connections> </connections>
</button> </button>
<levelIndicator verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="635"> <levelIndicator verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="635">
<rect key="frame" x="90" y="190" width="173" height="16"/> <rect key="frame" x="90" y="213" width="173" height="18"/>
<levelIndicatorCell key="cell" alignment="left" doubleValue="10" maxValue="90" warningValue="55" criticalValue="30" levelIndicatorStyle="continuousCapacity" id="636" customClass="HNHUILevelIndicatorCell"/> <levelIndicatorCell key="cell" alignment="left" doubleValue="10" maxValue="90" warningValue="55" criticalValue="30" levelIndicatorStyle="continuousCapacity" id="636" customClass="HNHUILevelIndicatorCell"/>
</levelIndicator> </levelIndicator>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="646"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="646">
<rect key="frame" x="18" y="190" width="66" height="17"/> <rect key="frame" x="18" y="215" width="66" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Entropy:" id="647"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Entropy:" id="647">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="652"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="652">
<rect key="frame" x="269" y="190" width="64" height="17"/> <rect key="frame" x="269" y="215" width="64" height="17"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="25000 bit" id="653"> <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"/> <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"/> <font key="font" metaFont="system"/>
@@ -216,7 +230,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yil-UB-jtO"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yil-UB-jtO">
<rect key="frame" x="20" y="18" width="82" height="25"/> <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"> <buttonCell key="cell" type="roundTextured" title="Set Default" bezelStyle="texturedRounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Wvs-Md-Ob8">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -226,7 +240,7 @@
</buttonCell> </buttonCell>
</button> </button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="4yb-SC-vau"> <button translatesAutoresizingMaskIntoConstraints="NO" id="4yb-SC-vau">
<rect key="frame" x="18" y="48" width="232" height="18"/> <rect key="frame" x="18" y="48" width="231" height="18"/>
<buttonCell key="cell" type="check" title="Use default only for selected entry" bezelStyle="regularSquare" imagePosition="left" inset="2" id="cfZ-5F-Nge"> <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"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -270,14 +284,16 @@
<constraint firstItem="yil-UB-jtO" firstAttribute="leading" secondItem="500" secondAttribute="leading" id="Hic-qB-mt4"/> <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="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 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="509" firstAttribute="leading" secondItem="182" secondAttribute="leading" id="QZ5-Ge-aq8"/>
<constraint firstItem="613" firstAttribute="top" 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="8" symbolic="YES" id="SoR-gh-uhq"/>
<constraint firstAttribute="bottom" secondItem="yil-UB-jtO" secondAttribute="bottom" constant="20" id="eYK-Hw-fyy"/> <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"/> <constraint firstItem="646" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="jPa-QR-GAy"/>
<constraint firstItem="178" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="pAc-di-F68"/> <constraint firstItem="178" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="pAc-di-F68"/>
<constraint firstItem="500" firstAttribute="leading" secondItem="4yb-SC-vau" secondAttribute="leading" id="xv1-5v-Ljh"/> <constraint firstItem="500" firstAttribute="leading" secondItem="4yb-SC-vau" secondAttribute="leading" id="xv1-5v-Ljh"/>
</constraints> </constraints>
<point key="canvasLocation" x="-135" y="58"/> <point key="canvasLocation" x="-237" y="-362"/>
</customView> </customView>
</objects> </objects>
<resources> <resources>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -20,17 +20,17 @@
</customObject> </customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Change Password" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> <window title="Change Password" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/> <windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/> <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="403" height="219"/> <rect key="contentRect" x="196" y="240" width="403" height="219"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/> <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" id="2"> <view key="contentView" misplaced="YES" id="2">
<rect key="frame" x="0.0" y="0.0" width="403" height="219"/> <rect key="frame" x="0.0" y="0.0" width="403" height="219"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4"> <pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="MPPathControl">
<rect key="frame" x="105" y="87" width="242" height="26"/> <rect key="frame" x="105" y="87" width="242" height="25"/>
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="23"> <pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="23">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</pathCell> </pathCell>
@@ -44,7 +44,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="108" y="59" width="236" height="25"/> <rect key="frame" x="108" y="60" width="236" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Generate Keyfile" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="21"> <buttonCell key="cell" type="roundTextured" title="Generate Keyfile" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="21">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -54,7 +54,7 @@
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7">
<rect key="frame" x="352" y="153" width="31" height="25"/> <rect key="frame" x="352" y="153" width="31" height="23"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="31" id="59"/> <constraint firstAttribute="width" constant="31" id="59"/>
</constraints> </constraints>
@@ -64,7 +64,7 @@
</buttonCell> </buttonCell>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
<rect key="frame" x="352" y="88" width="31" height="25"/> <rect key="frame" x="352" y="89" width="31" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="19"> <buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" 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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -73,14 +73,14 @@
<action selector="clearKey:" target="-2" id="65"/> <action selector="clearKey:" target="-2" id="65"/>
</connections> </connections>
</button> </button>
<secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="HNHUIRoundedSecureTextField"> <secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="HNHUISecureTextField">
<rect key="frame" x="108" y="153" width="236" height="24"/> <rect key="frame" x="108" y="152" width="236" height="24"/>
<constraints> <constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="Gin-yR-DMk"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="Gin-yR-DMk"/>
</constraints> </constraints>
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Enter Password" drawsBackground="YES" usesSingleLineMode="YES" id="18"> <secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Enter Password" drawsBackground="YES" usesSingleLineMode="YES" id="18">
<font key="font" size="13" name="Menlo-Regular"/> <font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<allowedInputSourceLocales> <allowedInputSourceLocales>
<string>NSAllRomanInputSourcesLocaleIdentifier</string> <string>NSAllRomanInputSourcesLocaleIdentifier</string>
@@ -88,18 +88,18 @@
</secureTextFieldCell> </secureTextFieldCell>
</secureTextField> </secureTextField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="10"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="10">
<rect key="frame" x="51" y="123" width="51" height="17"/> <rect key="frame" x="51" y="122" width="51" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Repeat:" id="16"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Repeat:" id="16">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="11" customClass="HNHUIRoundedSecureTextField"> <secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="11" customClass="HNHUISecureTextField">
<rect key="frame" x="108" y="119" width="236" height="24"/> <rect key="frame" x="108" y="118" width="236" height="24"/>
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Repeat Password" drawsBackground="YES" usesSingleLineMode="YES" id="15"> <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"/> <font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<allowedInputSourceLocales> <allowedInputSourceLocales>
<string>NSAllRomanInputSourcesLocaleIdentifier</string> <string>NSAllRomanInputSourcesLocaleIdentifier</string>
@@ -107,7 +107,7 @@
</secureTextFieldCell> </secureTextFieldCell>
</secureTextField> </secureTextField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="12"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="12">
<rect key="frame" x="158" y="185" width="136" height="14"/> <rect key="frame" x="158" y="184" width="136" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Missmatching Passwords" id="14"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Missmatching Passwords" id="14">
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
@@ -138,7 +138,7 @@ Gw
</connections> </connections>
</button> </button>
<button horizontalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="yKc-I9-uzv"> <button horizontalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="yKc-I9-uzv">
<rect key="frame" x="18" y="156" width="84" height="18"/> <rect key="frame" x="18" y="155" width="84" height="18"/>
<buttonCell key="cell" type="check" title="Password:" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="OQz-DA-SoY"> <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"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -189,7 +189,7 @@ Gw
<constraint firstItem="6" firstAttribute="leading" secondItem="9" secondAttribute="leading" id="zeJ-6i-fY3"/> <constraint firstItem="6" firstAttribute="leading" secondItem="9" secondAttribute="leading" id="zeJ-6i-fY3"/>
</constraints> </constraints>
</view> </view>
<point key="canvasLocation" x="-226" y="45"/> <point key="canvasLocation" x="-312" y="-21"/>
</window> </window>
</objects> </objects>
<resources> <resources>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -10,9 +10,9 @@
<connections> <connections>
<outlet property="cancelButton" destination="2pb-ZG-spA" id="YrR-Yi-dnQ"/> <outlet property="cancelButton" destination="2pb-ZG-spA" id="YrR-Yi-dnQ"/>
<outlet property="enablePasswordCheckBox" destination="d8O-Ha-rrS" id="2AI-e9-sph"/> <outlet property="enablePasswordCheckBox" destination="d8O-Ha-rrS" id="2AI-e9-sph"/>
<outlet property="errorImageView" destination="262" id="294"/>
<outlet property="errorInfoTextField" destination="268" id="67b-K9-DZd"/>
<outlet property="keyPathControl" destination="241" id="261"/> <outlet property="keyPathControl" destination="241" id="261"/>
<outlet property="messageImageView" destination="262" id="726-wK-c2h"/>
<outlet property="messageInfoTextField" destination="268" id="ahE-sq-QzR"/>
<outlet property="passwordTextField" destination="338" id="495"/> <outlet property="passwordTextField" destination="338" id="495"/>
<outlet property="togglePasswordButton" destination="408" id="493"/> <outlet property="togglePasswordButton" destination="408" id="493"/>
<outlet property="unlockButton" destination="2" id="ZRr-Ui-ExP"/> <outlet property="unlockButton" destination="2" id="ZRr-Ui-ExP"/>
@@ -22,10 +22,10 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="1"> <customView horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="524" height="303"/> <rect key="frame" x="0.0" y="0.0" width="508" height="392"/>
<subviews> <subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2">
<rect key="frame" x="318" y="64" width="83" height="32"/> <rect key="frame" x="309" y="105" width="83" height="32"/>
<buttonCell key="cell" type="push" title="Unlock" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -38,7 +38,7 @@ DQ
</connections> </connections>
</button> </button>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="17"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="17">
<rect key="frame" x="116" y="112" width="45" height="17"/> <rect key="frame" x="108" y="157" width="45" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile" id="18"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile" id="18">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -46,16 +46,13 @@ DQ
</textFieldCell> </textFieldCell>
</textField> </textField>
<pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="241" customClass="MPPathControl"> <pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="241" customClass="MPPathControl">
<rect key="frame" x="164" y="108" width="197" height="26"/> <rect key="frame" x="156" y="153" width="197" height="25"/>
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="242"> <pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="242">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</pathCell> </pathCell>
<connections>
<outlet property="delegate" destination="MfG-kk-cQe" id="9pp-rr-g4V"/>
</connections>
</pathControl> </pathControl>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="262"> <imageView translatesAutoresizingMaskIntoConstraints="NO" id="262">
<rect key="frame" x="238" y="197" width="48" height="48"/> <rect key="frame" x="230" y="241" width="48" height="48"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="48" id="273"/> <constraint firstAttribute="height" constant="48" id="273"/>
<constraint firstAttribute="width" constant="48" id="456"/> <constraint firstAttribute="width" constant="48" id="456"/>
@@ -63,21 +60,21 @@ DQ
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="02_MessageBoxWarningTemplate" id="263"/> <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="02_MessageBoxWarningTemplate" id="263"/>
</imageView> </imageView>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="268"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="268">
<rect key="frame" x="207" y="172" width="110" height="17"/> <rect key="frame" x="199" y="216" width="110" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Wrong password!" id="269"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Wrong password!" id="269">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<secureTextField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="338" customClass="HNHUIRoundedSecureTextField"> <secureTextField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="338" customClass="HNHUISecureTextField">
<rect key="frame" x="167" y="140" width="191" height="24"/> <rect key="frame" x="159" y="184" width="191" height="24"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="191" id="389"/> <constraint firstAttribute="width" constant="191" id="389"/>
</constraints> </constraints>
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Enter Password" drawsBackground="YES" usesSingleLineMode="YES" id="339"> <secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Enter Password" drawsBackground="YES" usesSingleLineMode="YES" id="339">
<font key="font" size="13" name="Menlo-Regular"/> <font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<allowedInputSourceLocales> <allowedInputSourceLocales>
<string>NSAllRomanInputSourcesLocaleIdentifier</string> <string>NSAllRomanInputSourcesLocaleIdentifier</string>
@@ -88,14 +85,14 @@ DQ
</connections> </connections>
</secureTextField> </secureTextField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="408"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="408">
<rect key="frame" x="366" y="140" width="29" height="25"/> <rect key="frame" x="357.5" y="185" width="29" height="23"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="409"> <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"/> <behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="486"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="486">
<rect key="frame" x="366" y="107" width="29" height="25"/> <rect key="frame" x="357.5" y="152" width="29" 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"> <buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" 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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -105,14 +102,14 @@ DQ
</connections> </connections>
</button> </button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="d8O-Ha-rrS"> <button translatesAutoresizingMaskIntoConstraints="NO" id="d8O-Ha-rrS">
<rect key="frame" x="80" y="143" width="81" height="18"/> <rect key="frame" x="72" y="187" width="81" height="18"/>
<buttonCell key="cell" type="check" title="Password" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="IU9-5u-jn9"> <buttonCell key="cell" type="check" title="Password" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="IU9-5u-jn9">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2pb-ZG-spA"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2pb-ZG-spA">
<rect key="frame" x="236" y="64" width="82" height="32"/> <rect key="frame" x="227" y="105" width="82" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="erj-mR-UyO"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -140,7 +137,6 @@ Gw
<constraint firstItem="241" firstAttribute="top" secondItem="338" secondAttribute="bottom" constant="8" symbolic="YES" id="476"/> <constraint firstItem="241" firstAttribute="top" secondItem="338" secondAttribute="bottom" constant="8" symbolic="YES" id="476"/>
<constraint firstItem="17" firstAttribute="bottom" secondItem="241" secondAttribute="bottom" id="478"/> <constraint firstItem="17" firstAttribute="bottom" secondItem="241" secondAttribute="bottom" id="478"/>
<constraint firstAttribute="centerX" secondItem="338" secondAttribute="centerX" id="479"/> <constraint firstAttribute="centerX" secondItem="338" secondAttribute="centerX" id="479"/>
<constraint firstItem="2" firstAttribute="top" secondItem="241" secondAttribute="bottom" constant="20" symbolic="YES" id="485"/>
<constraint firstItem="486" firstAttribute="baseline" secondItem="17" secondAttribute="baseline" id="488"/> <constraint firstItem="486" firstAttribute="baseline" secondItem="17" secondAttribute="baseline" id="488"/>
<constraint firstItem="486" firstAttribute="leading" secondItem="241" secondAttribute="trailing" constant="8" symbolic="YES" id="489"/> <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="486" firstAttribute="leading" secondItem="408" secondAttribute="leading" id="490"/>
@@ -148,14 +144,16 @@ Gw
<constraint firstItem="2" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="496"/> <constraint firstItem="2" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="496"/>
<constraint firstItem="408" firstAttribute="leading" secondItem="338" secondAttribute="trailing" constant="8" symbolic="YES" id="7qE-8F-QgB"/> <constraint firstItem="408" firstAttribute="leading" secondItem="338" secondAttribute="trailing" constant="8" symbolic="YES" id="7qE-8F-QgB"/>
<constraint firstItem="2pb-ZG-spA" firstAttribute="baseline" secondItem="2" secondAttribute="baseline" id="9nK-MH-Ozs"/> <constraint firstItem="2pb-ZG-spA" firstAttribute="baseline" secondItem="2" secondAttribute="baseline" id="9nK-MH-Ozs"/>
<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="338" firstAttribute="leading" secondItem="d8O-Ha-rrS" secondAttribute="trailing" constant="8" symbolic="YES" id="KYs-Ia-SVl"/>
<constraint firstItem="2pb-ZG-spA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="SUS-76-os4"/>
<constraint firstItem="d8O-Ha-rrS" firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="kgB-jV-OGy"/> <constraint firstItem="d8O-Ha-rrS" firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="kgB-jV-OGy"/>
<constraint firstItem="2" firstAttribute="top" secondItem="486" secondAttribute="bottom" constant="20" symbolic="YES" id="v1K-wm-EeB"/>
<constraint firstItem="d8O-Ha-rrS" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="vxq-YP-UhR"/> <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 firstItem="2" firstAttribute="leading" secondItem="2pb-ZG-spA" secondAttribute="trailing" constant="12" id="ytJ-5Z-5rT"/>
</constraints> </constraints>
<point key="canvasLocation" x="-240" y="25"/> <point key="canvasLocation" x="-217" y="-96"/>
</customView> </customView>
<customObject id="MfG-kk-cQe" customClass="MPKeyfilePathControlDelegate"/>
</objects> </objects>
<resources> <resources>
<image name="02_MessageBoxWarningTemplate" width="16" height="16"/> <image name="02_MessageBoxWarningTemplate" width="16" height="16"/>

View File

@@ -0,0 +1,179 @@
<?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">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPPickcharsViewController">
<connections>
<outlet property="characterTableView" destination="KJq-FZ-rAE" id="H5Y-kG-Mvm"/>
<outlet property="messageTextField" destination="wAr-f2-ZUQ" id="kaZ-v7-6UW"/>
<outlet property="pickedStatusTextField" destination="e2q-qh-Zlv" id="paL-BH-g7a"/>
<outlet property="pickedValueTextField" destination="KQ1-tZ-qja" id="ETe-j3-jdp"/>
<outlet property="submitButton" destination="k8l-uy-C3l" id="nLN-Wz-dGW"/>
<outlet property="togglePasswordDisplayButton" destination="hKI-WP-N93" id="ZDt-Rp-Ix2"/>
<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="410" height="220"/>
<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"/>
<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"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</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"/>
<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"/>
<clipView key="contentView" drawsBackground="NO" id="8aa-cB-mUF">
<rect key="frame" x="1" y="0.0" width="368" height="63"/>
<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"/>
<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">
<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>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="pUG-4c-rTt">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="Cell" id="Nz8-0B-uHk">
<rect key="frame" x="1" y="1" width="365" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="prY-vi-i8N">
<rect key="frame" x="0.0" y="0.0" width="365" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="v3T-2f-yWm">
<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>
</subviews>
<connections>
<outlet property="textField" destination="prY-vi-i8N" id="uX4-gz-scd"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
<connections>
<outlet property="dataSource" destination="-2" id="UrQ-DY-2jn"/>
<outlet property="delegate" destination="-2" id="JRz-9a-dkH"/>
</connections>
</tableView>
</subviews>
<nil key="backgroundColor"/>
</clipView>
<constraints>
<constraint firstAttribute="height" constant="64" id="AIX-Tc-QJA"/>
</constraints>
<scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="sA9-kc-O5g">
<rect key="frame" x="1" y="47" width="368" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="mSX-pm-wrh">
<rect key="frame" x="-100" y="-100" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<tableHeaderView key="headerView" 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"/>
<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"/>
</buttonCell>
<connections>
<action selector="submitValue:" target="-2" id="Hvu-95-9mF"/>
</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">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="reset:" target="-2" id="jCN-qH-N8O"/>
</connections>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="e2q-qh-Zlv">
<rect key="frame" x="167" y="49" width="76" height="17"/>
<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"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wAr-f2-ZUQ">
<rect key="frame" x="18" y="178" 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"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="hKI-WP-N93" secondAttribute="trailing" constant="20" symbolic="YES" id="0IY-n6-nZi"/>
<constraint firstItem="hKI-WP-N93" firstAttribute="centerY" secondItem="KQ1-tZ-qja" secondAttribute="centerY" id="1CC-7F-3GU"/>
<constraint firstItem="KQ1-tZ-qja" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="1D9-Zk-KrZ"/>
<constraint firstItem="MVS-ug-wys" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="9cE-TT-pqS"/>
<constraint firstItem="hKI-WP-N93" firstAttribute="leading" secondItem="Y8X-Bm-qLt" secondAttribute="trailing" constant="8" id="AVv-zt-6sj"/>
<constraint firstAttribute="trailing" secondItem="k8l-uy-C3l" secondAttribute="trailing" constant="20" symbolic="YES" id="Eaa-oF-Lt5"/>
<constraint firstItem="MVS-ug-wys" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="50" id="Klq-Q9-Rjp"/>
<constraint firstItem="wAr-f2-ZUQ" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="QQM-Db-MJM"/>
<constraint firstItem="Y8X-Bm-qLt" firstAttribute="leading" secondItem="KQ1-tZ-qja" secondAttribute="trailing" constant="8" id="Qxu-Wk-ckL"/>
<constraint firstAttribute="trailing" secondItem="wAr-f2-ZUQ" secondAttribute="trailing" constant="20" symbolic="YES" id="Scg-AR-d0y"/>
<constraint firstItem="Y8X-Bm-qLt" firstAttribute="centerY" secondItem="KQ1-tZ-qja" secondAttribute="centerY" id="T81-yL-LEh"/>
<constraint firstItem="e2q-qh-Zlv" firstAttribute="top" secondItem="KQ1-tZ-qja" secondAttribute="bottom" constant="8" symbolic="YES" id="UWG-aW-fsW"/>
<constraint firstAttribute="bottom" secondItem="k8l-uy-C3l" secondAttribute="bottom" constant="20" symbolic="YES" id="UXs-2n-gB5"/>
<constraint firstItem="e2q-qh-Zlv" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="WVC-0y-S19"/>
<constraint firstItem="MVS-ug-wys" firstAttribute="top" secondItem="wAr-f2-ZUQ" secondAttribute="bottom" constant="8" symbolic="YES" id="b0M-bk-j9E"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="e2q-qh-Zlv" secondAttribute="trailing" constant="20" symbolic="YES" id="fCf-pK-CXQ"/>
<constraint firstItem="k8l-uy-C3l" firstAttribute="top" secondItem="e2q-qh-Zlv" secondAttribute="bottom" constant="8" id="jwg-Z1-txO"/>
<constraint firstAttribute="trailing" secondItem="MVS-ug-wys" secondAttribute="trailing" constant="20" symbolic="YES" id="mMv-HC-fEv"/>
<constraint firstItem="KQ1-tZ-qja" firstAttribute="top" secondItem="MVS-ug-wys" secondAttribute="bottom" constant="8" symbolic="YES" id="nKb-eh-ba4"/>
<constraint firstItem="e2q-qh-Zlv" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="tE5-PK-tp0"/>
<constraint firstItem="wAr-f2-ZUQ" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="xV9-bY-eZn"/>
<constraint firstItem="k8l-uy-C3l" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="319" id="zZ5-GH-8no"/>
</constraints>
<point key="canvasLocation" x="-1009" y="-379"/>
</customView>
</objects>
<resources>
<image name="NSQuickLookTemplate" width="19" height="12"/>
</resources>
</document>

View File

@@ -0,0 +1,153 @@
<?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">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPPickfieldViewController">
<connections>
<outlet property="tableView" destination="5xi-x0-G4W" id="Tm9-fm-aqh"/>
<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="474" height="378"/>
<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"/>
<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"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="n1E-iQ-yd7">
<rect key="frame" x="381" y="13" width="79" 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"/>
</buttonCell>
<connections>
<action selector="pickField:" target="-2" id="fLO-qW-oC9"/>
</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"/>
<clipView key="contentView" id="am4-w0-FSd">
<rect key="frame" x="1" y="0.0" width="432" height="271"/>
<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"/>
<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>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="fil-tT-GXX">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<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"/>
<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"/>
<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"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<connections>
<outlet property="textField" destination="ADN-XZ-Lq7" id="7zs-7K-4Wg"/>
</connections>
</tableCellView>
<tableCellView identifier="HeaderCell" id="wpe-VG-m1j">
<rect key="frame" x="1" y="20" width="118" 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"/>
<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"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<connections>
<outlet property="textField" destination="6sH-Uk-P1B" id="4fT-uR-lzM"/>
</connections>
</tableCellView>
</prototypeCellViews>
</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>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="z1F-Bi-PBg">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
</tableColumn>
</tableColumns>
<connections>
<outlet property="dataSource" destination="-2" id="66g-fd-91p"/>
<outlet property="delegate" destination="-2" id="DaT-Xh-Etj"/>
</connections>
</tableView>
</subviews>
</clipView>
<scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="RHy-ph-0lP">
<rect key="frame" x="1" y="255" width="432" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="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"/>
<autoresizingMask key="autoresizingMask"/>
</tableHeaderView>
</scrollView>
</subviews>
<constraints>
<constraint firstItem="BDL-W9-psF" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="11J-Yq-T60"/>
<constraint firstItem="n1E-iQ-yd7" firstAttribute="top" secondItem="nlF-dy-Ttg" secondAttribute="bottom" constant="20" symbolic="YES" id="7i7-Zj-Aco"/>
<constraint firstItem="nlF-dy-Ttg" firstAttribute="top" secondItem="BDL-W9-psF" secondAttribute="bottom" constant="8" symbolic="YES" id="JQU-HY-3hx"/>
<constraint firstItem="n1E-iQ-yd7" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="P1O-O7-bxC"/>
<constraint firstItem="nlF-dy-Ttg" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="RH7-aQ-wKU"/>
<constraint firstAttribute="bottom" secondItem="n1E-iQ-yd7" secondAttribute="bottom" constant="20" symbolic="YES" id="SBF-2E-hzT"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="BDL-W9-psF" secondAttribute="trailing" constant="20" symbolic="YES" id="W73-3d-vkM"/>
<constraint firstItem="BDL-W9-psF" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="p0t-q5-CZ1"/>
<constraint firstAttribute="trailing" secondItem="n1E-iQ-yd7" secondAttribute="trailing" constant="20" symbolic="YES" id="rJE-FS-dLo"/>
<constraint firstAttribute="trailing" secondItem="nlF-dy-Ttg" secondAttribute="trailing" constant="20" symbolic="YES" id="yiP-Kc-fqd"/>
</constraints>
<point key="canvasLocation" x="104" y="-23"/>
</customView>
</objects>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="12120" systemVersion="16E195" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="12120"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -54,7 +54,7 @@
<constraint firstAttribute="height" constant="22" id="QuX-qP-qVw"/> <constraint firstAttribute="height" constant="22" id="QuX-qP-qVw"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="iEU-n3-paT"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="iEU-n3-paT"/>
</constraints> </constraints>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="mLw-O5-6D3" customClass="HNHUIRoundedTextFieldCell"> <textFieldCell key="cell" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="mLw-O5-6D3" customClass="HNHUITextFieldCell">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>

View File

@@ -0,0 +1,218 @@
<?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">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPPluginPreferencesController">
<connections>
<outlet property="addRemovePluginsControl" destination="B9Q-hq-K4N" id="Oqj-Ko-8UR"/>
<outlet property="fallbackDescriptionTextField" destination="qPL-FR-ky7" id="xCb-ED-NIX"/>
<outlet property="fallbackSettingsView" destination="wIk-iw-Tcz" id="dHl-zW-0aI"/>
<outlet property="forceIncompatiblePluginsCheckButton" destination="XIl-03-JZP" id="Aj4-rc-Ao0"/>
<outlet property="loadInsecurePlugsinCheckButton" destination="CqP-oK-S8k" id="YET-o6-7Cc"/>
<outlet property="pluginTableView" destination="Ocu-C0-03d" id="jbH-qr-bVT"/>
<outlet property="settingsView" destination="tD5-Na-7XI" id="Pa0-Tt-20U"/>
<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 translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="600" height="473"/>
<subviews>
<box borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="vBs-Ga-aq0">
<rect key="frame" x="175" y="46" width="408" height="321"/>
<view key="contentView" id="tD5-Na-7XI">
<rect key="frame" x="3" y="3" width="402" height="315"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="wIk-iw-Tcz">
<rect key="frame" x="20" y="20" width="362" height="275"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qPL-FR-ky7">
<rect key="frame" x="18" y="238" width="326" height="17"/>
<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"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="qPL-FR-ky7" firstAttribute="top" secondItem="wIk-iw-Tcz" secondAttribute="top" constant="20" symbolic="YES" id="BAH-sF-W03"/>
<constraint firstAttribute="trailing" secondItem="qPL-FR-ky7" secondAttribute="trailing" constant="20" symbolic="YES" id="HKa-7h-OiN"/>
<constraint firstItem="qPL-FR-ky7" firstAttribute="leading" secondItem="wIk-iw-Tcz" secondAttribute="leading" constant="20" symbolic="YES" id="UTY-Lu-pvl"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="qPL-FR-ky7" secondAttribute="bottom" constant="20" symbolic="YES" id="wpb-76-pxa"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstItem="wIk-iw-Tcz" firstAttribute="top" secondItem="tD5-Na-7XI" secondAttribute="top" constant="20" symbolic="YES" id="JEm-yQ-dbO"/>
<constraint firstAttribute="trailing" secondItem="wIk-iw-Tcz" secondAttribute="trailing" constant="20" symbolic="YES" id="Zfc-6L-EPa"/>
<constraint firstAttribute="bottom" secondItem="wIk-iw-Tcz" secondAttribute="bottom" constant="20" symbolic="YES" id="mGC-Qx-83s"/>
<constraint firstItem="wIk-iw-Tcz" firstAttribute="leading" secondItem="tD5-Na-7XI" secondAttribute="leading" constant="20" symbolic="YES" id="phc-Nv-2hD"/>
</constraints>
</view>
</box>
<button translatesAutoresizingMaskIntoConstraints="NO" id="CqP-oK-S8k">
<rect key="frame" x="18" y="437" width="159" 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" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
<rect key="frame" x="18" y="403" width="564" 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>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</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="315"/>
<clipView key="contentView" id="lTL-Q2-k45">
<rect key="frame" x="1" y="1" width="148" height="313"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="35" rowSizeStyle="automatic" viewBased="YES" id="Ocu-C0-03d">
<rect key="frame" x="0.0" y="0.0" width="148" height="313"/>
<autoresizingMask key="autoresizingMask"/>
<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">
<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>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="STt-PQ-Szr">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="vVt-P3-yLp" customClass="MPPluginTabelCellView">
<rect key="frame" x="1" y="1" width="145" 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="127" height="17"/>
<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"/>
<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"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="fQy-Sz-4VA" secondAttribute="bottom" constant="2" id="Flm-uU-Rzj"/>
<constraint firstAttribute="trailing" secondItem="fQy-Sz-4VA" secondAttribute="trailing" constant="2" id="Iy0-iV-Mbx"/>
<constraint firstItem="fQy-Sz-4VA" firstAttribute="top" secondItem="q1P-PD-0LW" secondAttribute="bottom" constant="2" id="RZb-58-Zwr"/>
<constraint firstItem="q1P-PD-0LW" firstAttribute="leading" secondItem="vVt-P3-yLp" secondAttribute="leading" constant="2" id="bTc-2c-BYB"/>
<constraint firstAttribute="trailing" secondItem="q1P-PD-0LW" secondAttribute="trailing" constant="20" symbolic="YES" id="gSi-vN-xzX"/>
<constraint firstItem="q1P-PD-0LW" firstAttribute="top" secondItem="vVt-P3-yLp" secondAttribute="top" id="tTs-2E-33f"/>
<constraint firstItem="fQy-Sz-4VA" firstAttribute="leading" secondItem="vVt-P3-yLp" secondAttribute="leading" constant="2" id="zLP-Ci-nUM"/>
</constraints>
<connections>
<outlet property="addionalTextField" destination="fQy-Sz-4VA" id="nr7-5w-TEg"/>
<outlet property="textField" destination="q1P-PD-0LW" id="yB7-Uf-IIx"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
</tableView>
</subviews>
</clipView>
<constraints>
<constraint firstAttribute="width" constant="150" id="ZpW-Bc-fSx"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="150" id="eXb-yq-O8y"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="UK5-gt-5o5">
<rect key="frame" x="1" y="328" width="148" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="oqL-7I-4H1">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<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">
<font key="font" metaFont="system"/>
<segments>
<segment image="NSAddTemplate" width="32"/>
<segment image="NSRemoveTemplate" width="32" tag="1"/>
</segments>
</segmentedCell>
<connections>
<action selector="addOrRemovePlugin:" target="-2" id="ywK-Vi-MR4"/>
</connections>
</segmentedControl>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SNe-cc-CZs">
<rect key="frame" x="406" 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">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="browsePlugins:" target="-2" id="16S-2u-Tmi"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XIl-03-JZP">
<rect key="frame" x="18" y="371" width="250" 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>
</subviews>
<constraints>
<constraint firstItem="CqP-oK-S8k" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" id="1Rj-zS-7t2"/>
<constraint firstItem="XIl-03-JZP" firstAttribute="top" secondItem="aoG-FD-ds8" secondAttribute="bottom" constant="16" id="2Wk-4D-AHu"/>
<constraint firstItem="vBs-Ga-aq0" firstAttribute="top" secondItem="fCk-fL-jU8" secondAttribute="top" id="2h6-C9-4N5"/>
<constraint firstItem="B9Q-hq-K4N" firstAttribute="top" secondItem="fCk-fL-jU8" secondAttribute="bottom" constant="8" symbolic="YES" id="3vA-Oh-cFO"/>
<constraint firstAttribute="bottom" secondItem="B9Q-hq-K4N" secondAttribute="bottom" constant="20" symbolic="YES" id="7HD-ji-Whc"/>
<constraint firstAttribute="trailing" secondItem="SNe-cc-CZs" secondAttribute="trailing" constant="20" symbolic="YES" id="8Je-yg-f1l"/>
<constraint firstAttribute="trailing" secondItem="aoG-FD-ds8" secondAttribute="trailing" constant="20" symbolic="YES" id="95O-Jh-0KG"/>
<constraint firstItem="vBs-Ga-aq0" firstAttribute="bottom" secondItem="fCk-fL-jU8" secondAttribute="bottom" id="BQ2-Wp-Fsh"/>
<constraint firstAttribute="bottom" secondItem="SNe-cc-CZs" secondAttribute="bottom" constant="20" symbolic="YES" id="Fqe-ch-vsS"/>
<constraint firstAttribute="trailing" secondItem="vBs-Ga-aq0" secondAttribute="trailing" constant="20" id="LUb-Un-azV"/>
<constraint firstItem="aoG-FD-ds8" firstAttribute="leading" secondItem="CqP-oK-S8k" secondAttribute="leading" id="NcW-ya-DPx"/>
<constraint firstItem="B9Q-hq-K4N" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="Rtj-Ad-zkg"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="CqP-oK-S8k" secondAttribute="trailing" constant="20" symbolic="YES" id="TXL-mf-nxu"/>
<constraint firstItem="SNe-cc-CZs" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="B9Q-hq-K4N" secondAttribute="trailing" constant="8" symbolic="YES" id="a62-en-kDA"/>
<constraint firstItem="fCk-fL-jU8" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="fzW-4b-L8S"/>
<constraint firstItem="XIl-03-JZP" firstAttribute="leading" secondItem="CqP-oK-S8k" secondAttribute="leading" id="oqX-wa-jm0"/>
<constraint firstItem="SNe-cc-CZs" firstAttribute="top" secondItem="vBs-Ga-aq0" secondAttribute="bottom" constant="8" 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="110" y="-97"/>
</customView>
</objects>
<resources>
<image name="NSAddTemplate" width="11" height="11"/>
<image name="NSRemoveTemplate" width="11" height="11"/>
</resources>
</document>

View File

@@ -1,128 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/>
<capability name="box content view" minToolsVersion="7.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPPluginSettingsController">
<connections>
<outlet property="loadInsecurePlugsinCheckButton" destination="CqP-oK-S8k" id="YET-o6-7Cc"/>
<outlet property="pluginTableView" destination="Ocu-C0-03d" id="jbH-qr-bVT"/>
<outlet property="settingsView" destination="tD5-Na-7XI" id="Pa0-Tt-20U"/>
<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 translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="520" height="434"/>
<subviews>
<box borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="vBs-Ga-aq0">
<rect key="frame" x="175" y="16" width="328" height="342"/>
<view key="contentView" id="tD5-Na-7XI">
<rect key="frame" x="1" y="1" width="326" height="340"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
</box>
<button translatesAutoresizingMaskIntoConstraints="NO" id="CqP-oK-S8k">
<rect key="frame" x="18" y="398" width="159" 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" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
<rect key="frame" x="18" y="364" width="484" height="28"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="2bX-8S-9XM">
<font key="font" metaFont="smallSystem"/>
<string key="title">If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart.</string>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCk-fL-jU8">
<rect key="frame" x="20" y="20" width="150" height="336"/>
<clipView key="contentView" id="lTL-Q2-k45">
<rect key="frame" x="1" y="1" width="148" height="334"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="Ocu-C0-03d">
<rect key="frame" x="0.0" y="0.0" width="148" height="334"/>
<autoresizingMask key="autoresizingMask"/>
<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">
<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>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="STt-PQ-Szr">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="vVt-P3-yLp">
<rect key="frame" x="1" y="1" width="145" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="q1P-PD-0LW">
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" 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>
</subviews>
<connections>
<outlet property="textField" destination="q1P-PD-0LW" id="yB7-Uf-IIx"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
</tableView>
</subviews>
</clipView>
<constraints>
<constraint firstAttribute="width" constant="150" id="ZpW-Bc-fSx"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="150" id="eXb-yq-O8y"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="UK5-gt-5o5">
<rect key="frame" x="1" y="133" width="148" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="oqL-7I-4H1">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</subviews>
<constraints>
<constraint firstItem="CqP-oK-S8k" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" id="1Rj-zS-7t2"/>
<constraint firstItem="vBs-Ga-aq0" firstAttribute="top" secondItem="fCk-fL-jU8" secondAttribute="top" id="2h6-C9-4N5"/>
<constraint firstAttribute="trailing" secondItem="aoG-FD-ds8" secondAttribute="trailing" constant="20" symbolic="YES" id="95O-Jh-0KG"/>
<constraint firstAttribute="trailing" secondItem="vBs-Ga-aq0" secondAttribute="trailing" constant="20" id="LUb-Un-azV"/>
<constraint firstItem="aoG-FD-ds8" firstAttribute="leading" secondItem="CqP-oK-S8k" secondAttribute="leading" id="NcW-ya-DPx"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="CqP-oK-S8k" secondAttribute="trailing" constant="20" symbolic="YES" id="TXL-mf-nxu"/>
<constraint firstAttribute="bottom" secondItem="fCk-fL-jU8" secondAttribute="bottom" constant="20" id="aeb-kZ-RSU"/>
<constraint firstAttribute="bottom" secondItem="vBs-Ga-aq0" secondAttribute="bottom" constant="20" id="czn-HC-o7k"/>
<constraint firstItem="fCk-fL-jU8" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="fzW-4b-L8S"/>
<constraint firstItem="CqP-oK-S8k" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="rN1-3Z-BBi"/>
<constraint firstItem="fCk-fL-jU8" firstAttribute="top" secondItem="aoG-FD-ds8" secondAttribute="bottom" constant="8" 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="108" y="118"/>
</customView>
</objects>
</document>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -25,7 +25,7 @@
<rect key="frame" x="13" y="152" width="82" height="25"/> <rect key="frame" x="13" y="152" width="82" height="25"/>
<popUpButtonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KPf-xE-gde"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="menu"/>
<menu key="menu" id="Vxk-eO-bbf"> <menu key="menu" id="Vxk-eO-bbf">
<items> <items>
<menuItem title="Get" id="142-bE-IMZ"/> <menuItem title="Get" id="142-bE-IMZ"/>
@@ -36,14 +36,14 @@
<action selector="updateReference:" target="-2" id="GzJ-Sy-IP4"/> <action selector="updateReference:" target="-2" id="GzJ-Sy-IP4"/>
</connections> </connections>
</popUpButton> </popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IFf-vC-3vk" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IFf-vC-3vk" customClass="HNHUITextField">
<rect key="frame" x="13" y="102" width="172" height="22"/> <rect key="frame" x="13" y="102" width="172" height="22"/>
<constraints> <constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="Seu-01-P53"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="Seu-01-P53"/>
</constraints> </constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="fNP-ye-2bD"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="fNP-ye-2bD">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
@@ -74,7 +74,7 @@
<rect key="frame" x="103" y="152" width="82" height="25"/> <rect key="frame" x="103" y="152" width="82" 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"> <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"/> <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"> <menu key="menu" id="j2A-qj-k7L">
<items> <items>
<menuItem title="Matching" state="on" id="yT1-XL-k6a"> <menuItem title="Matching" state="on" id="yT1-XL-k6a">
@@ -103,7 +103,7 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b36-T7-1tO" customClass="HNHUIRoundedTextField"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b36-T7-1tO" customClass="HNHUITextField">
<rect key="frame" x="13" y="50" width="172" height="22"/> <rect key="frame" x="13" y="50" width="172" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Reference" drawsBackground="YES" id="dr9-x8-kKk"> <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"/> <font key="font" metaFont="system"/>

View File

@@ -0,0 +1,197 @@
<?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">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPWelcomeViewController">
<connections>
<outlet property="tableView" destination="51b-Ql-3gM" id="g2f-YT-q5R"/>
<outlet property="view" destination="9Nv-Zl-Z9p" id="ySe-F6-puU"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<view id="9Nv-Zl-Z9p">
<rect key="frame" x="0.0" y="0.0" width="571" height="320"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stackView orientation="horizontal" alignment="centerY" spacing="2" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" translatesAutoresizingMaskIntoConstraints="NO" id="ITj-5P-sn9">
<rect key="frame" x="20" y="0.0" width="551" height="320"/>
<middleViews>
<stackView orientation="vertical" alignment="centerX" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jd3-xw-cZP">
<rect key="frame" x="165" y="0.0" width="222" height="320"/>
<middleViews>
<imageView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VWi-da-LGh">
<rect key="frame" x="47" y="115" width="128" height="128"/>
<constraints>
<constraint firstAttribute="height" constant="128" id="T0d-gp-edr"/>
<constraint firstAttribute="width" constant="128" id="Xdf-jE-D9H"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="MacPassAppIcon" id="9f2-Co-St2"/>
</imageView>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EEg-rH-sPx">
<rect key="frame" x="-2" y="78" width="226" height="29"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Welcome to MacPass" id="zdv-z8-khG">
<font key="font" metaFont="system" size="24"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</middleViews>
<endViews>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MmF-PL-dgZ">
<rect key="frame" x="39" y="22" width="144" height="32"/>
<buttonCell key="cell" type="push" title="Open Database…" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Jj3-zy-gaz">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="openDatabase:" target="-1" id="iC6-yP-ZKT"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IRO-Hz-Zjp">
<rect key="frame" x="26" y="-7" width="170" height="32"/>
<buttonCell key="cell" type="push" title="Create new Database" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Vxx-Ql-eI5">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="createNewDatabase:" target="-1" id="hbV-Rz-x5g"/>
</connections>
</button>
</endViews>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="300" id="f86-vL-FmV"/>
</constraints>
<visibilityPriorities>
<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"/>
</customSpacing>
</stackView>
</middleViews>
<endViews>
<scrollView misplaced="YES" autohidesScrollers="YES" horizontalLineScroll="40" horizontalPageScroll="10" verticalLineScroll="40" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eUA-6g-T1O">
<rect key="frame" x="389" y="0.0" width="162" height="320"/>
<clipView key="contentView" id="0Kf-Fq-by2">
<rect key="frame" x="1" y="1" width="160" height="318"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="38" rowSizeStyle="automatic" viewBased="YES" id="51b-Ql-3gM">
<rect key="frame" x="0.0" y="0.0" width="160" height="318"/>
<autoresizingMask key="autoresizingMask"/>
<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="157" minWidth="40" maxWidth="1000" id="oLj-wZ-syY">
<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>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="Fbl-HT-XIu">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="6UF-Gr-4nf">
<rect key="frame" x="1" y="1" width="157" height="38"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Kko-1G-JNn">
<rect key="frame" x="2" y="3" width="32" height="32"/>
<constraints>
<constraint firstAttribute="width" secondItem="Kko-1G-JNn" secondAttribute="height" multiplier="1:1" id="DCx-UU-29t"/>
<constraint firstAttribute="height" constant="32" id="tUG-uX-FuQ"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="9TF-9t-7gd"/>
</imageView>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Kso-jb-pRH">
<rect key="frame" x="39" y="11" width="118" height="17"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="vzM-ly-CYn">
<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>
</subviews>
<constraints>
<constraint firstItem="Kso-jb-pRH" firstAttribute="centerY" secondItem="6UF-Gr-4nf" secondAttribute="centerY" id="EFe-Eu-cwW"/>
<constraint firstItem="Kso-jb-pRH" firstAttribute="leading" secondItem="Kko-1G-JNn" secondAttribute="trailing" constant="7" id="Jlp-gO-6rv"/>
<constraint firstItem="Kko-1G-JNn" firstAttribute="leading" secondItem="6UF-Gr-4nf" secondAttribute="leading" constant="2" id="RV0-o5-iyA"/>
<constraint firstItem="Kko-1G-JNn" firstAttribute="centerY" secondItem="6UF-Gr-4nf" secondAttribute="centerY" id="oFg-c1-o9M"/>
<constraint firstAttribute="trailing" secondItem="Kso-jb-pRH" secondAttribute="trailing" constant="2" id="ptI-vC-fK9"/>
</constraints>
<connections>
<outlet property="imageView" destination="Kko-1G-JNn" id="AvW-EL-9Rw"/>
<outlet property="textField" destination="Kso-jb-pRH" id="yWg-4p-sFp"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
<connections>
<action trigger="doubleAction" selector="openRecentURL:" target="-2" id="kTu-60-aYp"/>
<outlet property="dataSource" destination="-2" id="pLD-5Q-GVH"/>
<outlet property="delegate" destination="-2" id="hO0-G9-RVy"/>
</connections>
</tableView>
</subviews>
</clipView>
<constraints>
<constraint firstAttribute="width" constant="200" id="R0Z-La-Y3C"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="bRy-ef-e76">
<rect key="frame" x="1" y="303" width="135" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="2e9-uR-dY7">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</endViews>
<constraints>
<constraint firstAttribute="bottom" secondItem="jd3-xw-cZP" secondAttribute="bottom" constant="20" id="581-be-EbR"/>
<constraint firstItem="jd3-xw-cZP" firstAttribute="top" secondItem="ITj-5P-sn9" secondAttribute="top" constant="20" id="9he-mz-Ciw"/>
<constraint firstAttribute="bottom" secondItem="eUA-6g-T1O" secondAttribute="bottom" constant="-1" id="Ejt-qZ-puH"/>
<constraint firstAttribute="trailing" secondItem="eUA-6g-T1O" secondAttribute="trailing" constant="-1" id="PEw-In-uMJ"/>
<constraint firstItem="eUA-6g-T1O" firstAttribute="top" secondItem="ITj-5P-sn9" secondAttribute="top" constant="-1" id="piI-8Q-zsE"/>
</constraints>
<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="ITj-5P-sn9" secondAttribute="trailing" id="7Bo-Jl-7Zu"/>
<constraint firstItem="ITj-5P-sn9" firstAttribute="top" secondItem="9Nv-Zl-Z9p" secondAttribute="top" id="lrE-f8-tD5"/>
<constraint firstItem="ITj-5P-sn9" firstAttribute="leading" secondItem="9Nv-Zl-Z9p" secondAttribute="leading" constant="20" id="oWL-PJ-VCT"/>
<constraint firstAttribute="bottom" secondItem="ITj-5P-sn9" secondAttribute="bottom" id="syW-TO-uwv"/>
</constraints>
<point key="canvasLocation" x="-378" y="-552"/>
</view>
</objects>
<resources>
<image name="MacPassAppIcon" width="128" height="128"/>
<image name="NSActionTemplate" width="14" height="14"/>
</resources>
</document>

View File

@@ -1,92 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPAppDelegate">
<connections>
<outlet property="welcomeWindow" destination="1" id="94"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Welcome" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<rect key="contentRect" x="196" y="240" width="448" height="255"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="448" height="255"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="160" y="107" width="128" height="128"/>
<constraints>
<constraint firstAttribute="width" constant="128" id="18"/>
<constraint firstAttribute="height" constant="128" id="19"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="MacPassAppIcon" id="4"/>
</imageView>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="23">
<rect key="frame" x="108" y="70" width="233" height="29"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Welcome to MacPass" id="24">
<font key="font" metaFont="system" size="24"/>
<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="43">
<rect key="frame" x="172" y="18" width="118" height="25"/>
<buttonCell key="cell" type="roundTextured" title="Open Database…" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="44">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="openDatabase:" target="-2" id="101"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="47">
<rect key="frame" x="20" y="18" width="144" height="25"/>
<buttonCell key="cell" type="roundTextured" title="Create new Database" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="48">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="createNewDatabase:" target="-2" id="102"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="69">
<rect key="frame" x="372" y="18" width="56" height="25"/>
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="70">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="orderOut:" target="1" id="93"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="43" secondAttribute="bottom" constant="20" symbolic="YES" id="63"/>
<constraint firstAttribute="bottom" secondItem="47" secondAttribute="bottom" constant="20" symbolic="YES" id="65"/>
<constraint firstItem="47" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="66"/>
<constraint firstItem="43" firstAttribute="leading" secondItem="47" secondAttribute="trailing" constant="8" symbolic="YES" id="68"/>
<constraint firstAttribute="bottom" secondItem="69" secondAttribute="bottom" constant="20" symbolic="YES" id="73"/>
<constraint firstAttribute="trailing" secondItem="69" secondAttribute="trailing" constant="20" symbolic="YES" id="74"/>
<constraint firstItem="3" firstAttribute="centerX" secondItem="23" secondAttribute="centerX" id="85"/>
<constraint firstItem="3" firstAttribute="top" secondItem="2" secondAttribute="top" constant="20" symbolic="YES" id="87"/>
<constraint firstItem="23" firstAttribute="top" secondItem="3" secondAttribute="bottom" constant="8" symbolic="YES" id="89"/>
<constraint firstItem="69" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="43" secondAttribute="trailing" constant="8" symbolic="YES" id="96"/>
<constraint firstItem="43" firstAttribute="top" relation="greaterThanOrEqual" secondItem="23" secondAttribute="bottom" constant="8" symbolic="YES" id="98"/>
<constraint firstItem="3" firstAttribute="centerX" secondItem="2" secondAttribute="centerX" id="100"/>
</constraints>
</view>
<point key="canvasLocation" x="133" y="85"/>
</window>
</objects>
<resources>
<image name="MacPassAppIcon" width="128" height="128"/>
</resources>
</document>

View File

@@ -25,14 +25,14 @@
@interface DDHotKey (MPKeydata) @interface DDHotKey (MPKeydata)
@property (readonly, copy) NSData *keyData; @property (readonly, copy) NSData *keyData;
@property (readonly, copy, class) NSData *defaultHotKeyData;
/** /**
Use this method to retrieve the data, since deallocation of a hotkey unregisters it, this could yield unwanted behaviour! Use this method to retrieve the data, since deallocation of a hotkey unregisters it, this could yield unwanted behaviour!
@return data for the default hot key. @return data for the default hot key.
*/ */
+ (NSData *)hotKeyDataWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags; + (NSData *)hotKeyDataWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags;
+ (NSData *)defaultHotKeyData;
+ (instancetype)defaultHotKey; + (instancetype)defaultHotKey;
+ (instancetype)defaultHotKeyWithTask:(DDHotKeyTask)task; + (instancetype)defaultHotKeyWithTask:(DDHotKeyTask)task;
+ (instancetype)hotKeyWithKeyData:(NSData *)data task:(DDHotKeyTask)task; + (instancetype)hotKeyWithKeyData:(NSData *)data task:(DDHotKeyTask)task;

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13529"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -14,7 +14,7 @@
</customObject> </customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="DatabaseWindow" animationBehavior="default" id="1"> <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="DatabaseWindow" animationBehavior="default" tabbingMode="preferred" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/> <windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
<rect key="contentRect" x="196" y="240" width="700" height="500"/> <rect key="contentRect" x="196" y="240" width="700" height="500"/>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@@ -24,8 +24,8 @@
<rect key="frame" x="0.0" y="0.0" width="694" height="595"/> <rect key="frame" x="0.0" y="0.0" width="694" height="595"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" typeSelect="NO" rowSizeStyle="automatic" headerView="676" viewBased="YES" id="55" customClass="MPTableView"> <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="572"/> <rect key="frame" x="0.0" y="0.0" width="694" height="572"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/> <size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -45,11 +45,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView identifier="StringCell" id="269"> <tableCellView identifier="StringCell" id="269">
<rect key="frame" x="1" y="1" width="104" height="17"/> <rect key="frame" x="1" y="1" width="105" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="270"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="270">
<rect key="frame" x="1" y="0.0" width="102" height="17"/> <rect key="frame" x="1" y="0.0" width="103" height="17"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="271"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="271">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -82,7 +82,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView identifier="ImageCell" id="297"> <tableCellView identifier="ImageCell" id="297">
<rect key="frame" x="109" y="1" width="144" height="17"/> <rect key="frame" x="108.5" y="1" width="144" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="298"> <imageView translatesAutoresizingMaskIntoConstraints="NO" id="298">
@@ -131,7 +131,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView identifier="PasswordCell" id="428"> <tableCellView identifier="PasswordCell" id="428">
<rect key="frame" x="256" y="1" width="118" height="17"/> <rect key="frame" x="255.5" y="1" width="118" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="429" customClass="NSSecureTextField"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="429" customClass="NSSecureTextField">
@@ -168,7 +168,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="421"> <tableCellView id="421">
<rect key="frame" x="378" y="1" width="113" height="17"/> <rect key="frame" x="377" y="1" width="113" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="422"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="422">
@@ -205,7 +205,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="616"> <tableCellView id="616">
<rect key="frame" x="494" y="1" width="199" height="17"/> <rect key="frame" x="493" y="1" width="199" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="617"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="617">
@@ -232,16 +232,16 @@
</tableView> </tableView>
</subviews> </subviews>
</clipView> </clipView>
<scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="56"> <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="579" width="694" height="16"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="58"> <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="58">
<rect key="frame" x="224" y="17" width="15" height="102"/> <rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<tableHeaderView key="headerView" id="676"> <tableHeaderView key="headerView" id="676">
<rect key="frame" x="0.0" y="0.0" width="695" height="23"/> <rect key="frame" x="0.0" y="0.0" width="694" height="23"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</tableHeaderView> </tableHeaderView>
</scrollView> </scrollView>

Binary file not shown.

View File

@@ -1,9 +1,9 @@
// //
// MPPreviewViewController.m // KPKEntry+MPCustomAttributeProperties.h
// MacPass // MacPass
// //
// Created by Michael Starke on 18/03/14. // Created by Michael Starke on 03.09.18.
// Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. // Copyright © 2018 HicknHack Software GmbH. All rights reserved.
// //
// This program is free software: you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License as published by
@@ -20,16 +20,10 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// //
#import "MPPreviewViewController.h" #import <KeePassKit/KeePassKit.h>
@interface MPPreviewViewController () FOUNDATION_EXTERN NSString *const MPCustomAttributePropertyPrefix;
@end @interface KPKEntry (MPCustomAttributeProperties)
@implementation MPPreviewViewController
- (NSString *)nibName {
return @"PreviewView";
}
@end @end

View File

@@ -0,0 +1,45 @@
//
// KPKEntry+MPCustomAttributeProperties.m
// MacPass
//
// Created by Michael Starke on 03.09.18.
// Copyright © 2018 HicknHack Software GmbH. All rights reserved.
//
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import "KPKEntry+MPCustomAttributeProperties.h"
#import <objc/runtime.h>
NSString *const MPCustomAttributePropertyPrefix = @"valueForCustomAttribute";
@implementation KPKEntry (MPCustomAttributeProperties)
// generic getter
static id propertyIMP(id self, SEL _cmd) {
NSString *propertyKey = [NSStringFromSelector(_cmd) substringFromIndex:MPCustomAttributePropertyPrefix.length];
return [self valueForAttributeWithKey:propertyKey];
}
+ (BOOL)resolveInstanceMethod:(SEL)aSEL {
if ([NSStringFromSelector(aSEL) hasPrefix:MPCustomAttributePropertyPrefix]) {
class_addMethod([self class], aSEL,(IMP)propertyIMP, "@@:");
return YES;
}
return [super resolveInstanceMethod:aSEL];
}
@end

View File

@@ -32,6 +32,8 @@ typedef NS_ENUM(NSUInteger, MPActionType) {
MPActionDelete, // Delete entry or group MPActionDelete, // Delete entry or group
MPActionCopyUsername, // copy username to pasteboard MPActionCopyUsername, // copy username to pasteboard
MPActionCopyPassword, // copy password to pasteboard MPActionCopyPassword, // copy password to pasteboard
MPActionCopyCustomAttribute, // copy a custom attribute to the pasteboard
MPActionCopyAsReference, // copy a reference to the attribute {REF:…} to the pasteboard
MPActionCopyURL, // copy url to pasteboard MPActionCopyURL, // copy url to pasteboard
MPActionOpenURL, // open url in default browser MPActionOpenURL, // open url in default browser
MPActionToggleInspector, MPActionToggleInspector,

View File

@@ -42,6 +42,8 @@
@(MPActionCopyPassword): NSStringFromSelector(@selector(copyPassword:)), @(MPActionCopyPassword): NSStringFromSelector(@selector(copyPassword:)),
@(MPActionCopyURL): NSStringFromSelector(@selector(copyURL:)), @(MPActionCopyURL): NSStringFromSelector(@selector(copyURL:)),
@(MPActionCopyUsername): NSStringFromSelector(@selector(copyUsername:)), @(MPActionCopyUsername): NSStringFromSelector(@selector(copyUsername:)),
@(MPActionCopyCustomAttribute): NSStringFromSelector(@selector(copyCustomAttribute:)),
@(MPActionCopyAsReference): NSStringFromSelector(@selector(copyAsReference:)),
@(MPActionDelete): NSStringFromSelector(@selector(delete:)), @(MPActionDelete): NSStringFromSelector(@selector(delete:)),
@(MPActionEditPassword): NSStringFromSelector(@selector(editPassword:)), @(MPActionEditPassword): NSStringFromSelector(@selector(editPassword:)),
@(MPActionOpenURL): NSStringFromSelector(@selector(openURL:)), @(MPActionOpenURL): NSStringFromSelector(@selector(openURL:)),

View File

@@ -0,0 +1,29 @@
//
// MPAddCustomFieldContextMenuDelegate.h
// MacPass
//
// Created by Michael Starke on 05.12.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
//
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import <Foundation/Foundation.h>
@interface MPAddCustomFieldContextMenuDelegate : NSObject <NSMenuDelegate>
@property (weak) NSViewController *viewController;
@end

View File

@@ -0,0 +1,80 @@
//
// MPAddCustomFieldContextMenuDelegate.m
// MacPass
//
// Created by Michael Starke on 05.12.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
//
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import "MPAddCustomFieldContextMenuDelegate.h"
#import "KeePassKit/KeePassKit.h"
NSString *const MPHMACOTPSeedAttributeKey = @"HMACOTP-Seed";
NSString *const MPHMACOTPConfigAttributeKey = @"HMACOTP-Config";
/*
HmacOtp-Secret (the UTF-8 representation of the value is the secret),
HmacOtp-Secret-Hex (secret as hex string),
HmacOtp-Secret-Base32 (secret as Base32 string)
HmacOtp-Secret-Base64 (secret as Base64 string)
HmacOtp-Counter field.
*/
@interface MPAddCustomFieldContextMenuDelegate ()
@property (readonly, nonatomic) KPKEntry *entry;
@end
@implementation MPAddCustomFieldContextMenuDelegate
- (KPKEntry *)entry {
KPKEntry *entry = self.viewController.representedObject;
if([entry isKindOfClass:KPKEntry.class]) {
return entry;
}
return nil;
}
- (void)menuNeedsUpdate:(NSMenu *)menu {
[menu removeAllItems];
//[self _setupHOTPMenuItemsToMenu:menu];
}
- (void)_setupHOTPMenuItemsToMenu:(NSMenu *)menu {
BOOL hasConfigAttribute = nil != [self.entry customAttributeWithKey:MPHMACOTPConfigAttributeKey];
if(!hasConfigAttribute) {
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"ADD_CUSTOM_ATTRIBUTE_HMACOTP_CONFIG", @"Menu item title for adding an hmacotp config attribute") action:@selector(_addHMACConfig:) keyEquivalent:@""];
item.target = self;
[menu addItem:item];
}
BOOL hasSeedAttribute = nil != [self.entry customAttributeWithKey:MPHMACOTPSeedAttributeKey];
if(!hasSeedAttribute) {
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"ADD_CUSTOM_ATTRIBUTE_HMACOTP_SEED", @"Menu item title for adding an hmacotp seed attribute") action:@selector(_addHMACSeed:) keyEquivalent:@""];
item.target = self;
[menu addItem:item];
}
}
- (IBAction)_addHMACConfig:(id)sender {
[self.entry addCustomAttribute:[[KPKAttribute alloc] initWithKey:MPHMACOTPConfigAttributeKey value:@"<config>"]];
}
- (IBAction)_addHMACSeed:(id)sender {
[self.entry addCustomAttribute:[[KPKAttribute alloc] initWithKey:MPHMACOTPSeedAttributeKey value:@"<seed>"]];
}
@end

View File

@@ -37,17 +37,14 @@
It's possible nicer to cache the entries and just update It's possible nicer to cache the entries and just update
the menu entries, that actually need updating the menu entries, that actually need updating
*/ */
MPDocument *document = [[NSDocumentController sharedDocumentController] currentDocument]; MPDocument *document = NSDocumentController.sharedDocumentController.currentDocument;
if(!document) {
[menu removeAllItems];
}
[menu removeAllItems]; [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 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]]; [menu addItem:[NSMenuItem separatorItem]];
for(KPKEntry *entry in [document.templates childEntries]) { for(KPKEntry *entry in document.templates.childEntries) {
NSString *templateMask = NSLocalizedString(@"NEW_ENTRY_WITH_TEMPLATE_%@", "Submenu to add an entry via template"); NSString *templateMask = NSLocalizedString(@"NEW_ENTRY_WITH_TEMPLATE_%@", "Submenu to add an entry via template");
NSMenuItem *templateItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:[NSString stringWithFormat:templateMask, entry.title] NSMenuItem *templateItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:templateMask, entry.title]
action:@selector(createEntryFromTemplate:) action:@selector(createEntryFromTemplate:)
keyEquivalent:@""]; keyEquivalent:@""];
templateItem.representedObject = entry.uuid; templateItem.representedObject = entry.uuid;

View File

@@ -24,20 +24,23 @@
APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings; APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
@class MPAutotypeDaemon; @class MPEntryContextMenuDelegate;
@interface MPAppDelegate : NSObject <NSApplicationDelegate, NSMenuDelegate> @interface MPAppDelegate : NSObject <NSApplicationDelegate, NSMenuDelegate>
@property (strong) IBOutlet NSWindow *passwordCreatorWindow; @property (strong) IBOutlet NSMenuItem *saveMenuItem;
@property (strong) IBOutlet NSWindow *welcomeWindow; @property (strong) IBOutlet NSMenuItem *fixAutotypeMenuItem;
@property (weak) IBOutlet NSMenuItem *saveMenuItem; @property (strong) IBOutlet NSMenuItem *fileNewMenuItem;
@property (weak) IBOutlet NSMenuItem *fixAutotypeMenuItem; @property (strong) IBOutlet NSMenu *itemMenu;
@property (weak) IBOutlet NSMenuItem *fileNewMenuItem; @property (strong) IBOutlet NSMenu *importMenu;
@property (strong, readonly) MPEntryContextMenuDelegate *itemActionMenuDelegate;
@property (nonatomic, assign) BOOL isAllowedToStoreKeyFile; @property (nonatomic, assign) BOOL isAllowedToStoreKeyFile;
- (IBAction)checkForUpdates:(id)sender; - (IBAction)checkForUpdates:(id)sender;
- (IBAction)showPreferences:(id)sender; - (IBAction)showPreferences:(id)sender;
- (IBAction)showPluginPrefences:(id)sender;
- (IBAction)showPasswordCreator:(id)sender; - (IBAction)showPasswordCreator:(id)sender;
- (IBAction)createNewDatabase:(id)sender; - (IBAction)createNewDatabase:(id)sender;
- (IBAction)openDatabase:(id)sender; - (IBAction)openDatabase:(id)sender;
@@ -50,4 +53,7 @@ APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
- (void)lockAllDocuments; - (void)lockAllDocuments;
- (void)showWelcomeWindow;
- (void)hideWelcomeWindow;
@end @end

View File

@@ -23,6 +23,7 @@
#import "MPAppDelegate.h" #import "MPAppDelegate.h"
#import "MPAutotypeDaemon.h" #import "MPAutotypeDaemon.h"
#import "MPConstants.h"
#import "MPContextMenuHelper.h" #import "MPContextMenuHelper.h"
#import "MPDockTileHelper.h" #import "MPDockTileHelper.h"
#import "MPDocument.h" #import "MPDocument.h"
@@ -32,10 +33,15 @@
#import "MPPasswordCreatorViewController.h" #import "MPPasswordCreatorViewController.h"
#import "MPPluginHost.h" #import "MPPluginHost.h"
#import "MPSettingsHelper.h" #import "MPSettingsHelper.h"
#import "MPSettingsWindowController.h" #import "MPPreferencesWindowController.h"
#import "MPStringLengthValueTransformer.h" #import "MPStringLengthValueTransformer.h"
#import "MPPrettyPasswordTransformer.h"
#import "MPTemporaryFileStorageCenter.h" #import "MPTemporaryFileStorageCenter.h"
#import "MPValueTransformerHelper.h" #import "MPValueTransformerHelper.h"
#import "MPUserNotificationCenterDelegate.h"
#import "MPWelcomeViewController.h"
#import "MPPlugin.h"
#import "MPEntryContextMenuDelegate.h"
#import "NSApplication+MPAdditions.h" #import "NSApplication+MPAdditions.h"
@@ -44,16 +50,21 @@
#import <Sparkle/Sparkle.h> #import <Sparkle/Sparkle.h>
NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDidChangeStoredKeyFilesSettings"; NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDidChangeStoredKeyFilesSettings";
NSString *const MPHelpURLKey = @"MPHelpURL";
@interface MPAppDelegate () { @interface MPAppDelegate () {
@private @private
MPDockTileHelper *_dockTileHelper; MPDockTileHelper *_dockTileHelper;
MPUserNotificationCenterDelegate *_userNotificationCenterDelegate;
BOOL _shouldOpenFile; // YES if app was started to open a BOOL _shouldOpenFile; // YES if app was started to open a
} }
@property (strong, nonatomic) MPSettingsWindowController *settingsController; @property (strong) NSWindow *welcomeWindow;
@property (strong) IBOutlet NSWindow *passwordCreatorWindow;
@property (strong, nonatomic) MPPreferencesWindowController *preferencesController;
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController; @property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
@property (strong) MPEntryContextMenuDelegate *itemActionMenuDelegate;
@end @end
@implementation MPAppDelegate @implementation MPAppDelegate
@@ -62,12 +73,15 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
[MPSettingsHelper setupDefaults]; [MPSettingsHelper setupDefaults];
[MPSettingsHelper migrateDefaults]; [MPSettingsHelper migrateDefaults];
[MPStringLengthValueTransformer registerTransformer]; [MPStringLengthValueTransformer registerTransformer];
[MPPrettyPasswordTransformer registerTransformer];
[MPValueTransformerHelper registerValueTransformer]; [MPValueTransformerHelper registerValueTransformer];
} }
- (instancetype)init { - (instancetype)init {
self = [super init]; self = [super init];
if(self) { if(self) {
_userNotificationCenterDelegate = [[MPUserNotificationCenterDelegate alloc] init];
self.itemActionMenuDelegate = [[MPEntryContextMenuDelegate alloc] init];
/* We know that we do not use the variable after instantiation */ /* We know that we do not use the variable after instantiation */
#pragma clang diagnostic push #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable" #pragma clang diagnostic ignored "-Wunused-variable"
@@ -91,7 +105,7 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
[self clearRememberdKeyFiles:nil]; [self clearRememberdKeyFiles:nil];
} }
/* Inform anyone that might be interested that we can now no longer/ or can use keyfiles */ /* Inform anyone that might be interested that we can now no longer/ or can use keyfiles */
[[NSNotificationCenter defaultCenter] postNotificationName:MPDidChangeStoredKeyFilesSettings object:self]; [NSNotificationCenter.defaultCenter postNotificationName:MPDidChangeStoredKeyFilesSettings object:self];
} }
} }
@@ -112,6 +126,11 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
for(NSMenuItem *item in items.reverseObjectEnumerator) { for(NSMenuItem *item in items.reverseObjectEnumerator) {
[fileMenu insertItem:item atIndex:insertIndex]; [fileMenu insertItem:item atIndex:insertIndex];
} }
[self.itemMenu removeAllItems];
for(NSMenuItem *item in [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuFull]) {
[self.itemMenu addItem:item];
}
self.itemMenu.delegate = self.itemActionMenuDelegate;
} }
#pragma mark - #pragma mark -
@@ -119,37 +138,41 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag { - (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag {
if(!flag) { if(!flag) {
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch]; BOOL reopen = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch];
BOOL showWelcomeScreen = YES; BOOL showWelcomeScreen = YES;
if(reopen) { if(reopen) {
showWelcomeScreen = ![self _reopenLastDocument]; showWelcomeScreen = ![((MPDocumentController *)NSDocumentController.sharedDocumentController) reopenLastDocument];
} }
if(showWelcomeScreen) { if(showWelcomeScreen) {
[self _showWelcomeWindow]; [self showWelcomeWindow];
} }
} }
return YES; return YES;
} }
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender { - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender {
return [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyOpenEmptyDatabaseOnLaunch]; return [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyOpenEmptyDatabaseOnLaunch];
} }
- (void)applicationWillFinishLaunching:(NSNotification *)notification { - (void)applicationWillFinishLaunching:(NSNotification *)notification {
_shouldOpenFile = NO; _shouldOpenFile = NO;
[[NSNotificationCenter defaultCenter] addObserver:self [NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(_applicationDidFinishRestoringWindows:) selector:@selector(_applicationDidFinishRestoringWindows:)
name:NSApplicationDidFinishRestoringWindowsNotification name:NSApplicationDidFinishRestoringWindowsNotification
object:nil]; object:nil];
} }
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
return [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyQuitOnLastWindowClose];
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
if([[MPTemporaryFileStorageCenter defaultCenter] hasPendingStorages]) { if([[MPTemporaryFileStorageCenter defaultCenter] hasPendingStorages]) {
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[[MPTemporaryFileStorageCenter defaultCenter] cleanupStorages]; [MPTemporaryFileStorageCenter.defaultCenter cleanupStorages];
[sender replyToApplicationShouldTerminate:YES]; [sender replyToApplicationShouldTerminate:YES];
}); });
return NSTerminateLater; return NSTerminateLater;
@@ -160,7 +183,9 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename { - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename {
_shouldOpenFile = YES; _shouldOpenFile = YES;
NSURL *fileURL = [NSURL fileURLWithPath:filename]; NSURL *fileURL = [NSURL fileURLWithPath:filename];
[[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:fileURL display:YES completionHandler:^(NSDocument * _Nullable document, BOOL documentWasAlreadyOpen, NSError * _Nullable error){}]; [NSDocumentController.sharedDocumentController openDocumentWithContentsOfURL:fileURL
display:YES
completionHandler:^(NSDocument * _Nullable document, BOOL documentWasAlreadyOpen, NSError * _Nullable error){}];
return YES; return YES;
} }
@@ -168,10 +193,9 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
#if defined(NO_SPARKLE) #if defined(NO_SPARKLE)
NSLog(@"Sparkle explicitly disabled!!!"); NSLog(@"Sparkle explicitly disabled!!!");
#endif #endif
/* Daemon instanziieren */ /* Initalizes Global Daemons */
[MPLockDaemon defaultDaemon]; [MPLockDaemon defaultDaemon];
[MPAutotypeDaemon defaultDaemon]; [MPAutotypeDaemon defaultDaemon];
/* Create Plugin Manager */
[MPPluginHost sharedHost]; [MPPluginHost sharedHost];
#if !defined(DEBUG) && !defined(NO_SPARKLE) #if !defined(DEBUG) && !defined(NO_SPARKLE)
/* Disable updates if in debug or nosparkle */ /* Disable updates if in debug or nosparkle */
@@ -183,7 +207,7 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
#pragma mark NSMenuDelegate #pragma mark NSMenuDelegate
- (void)menuNeedsUpdate:(NSMenu *)menu { - (void)menuNeedsUpdate:(NSMenu *)menu {
if(menu == self.saveMenuItem.menu) { if(menu == self.saveMenuItem.menu) {
MPDocument *document = [NSDocumentController sharedDocumentController].currentDocument; MPDocument *document = NSDocumentController.sharedDocumentController.currentDocument;
BOOL displayDots = (document.fileURL == nil || !document.compositeKey.hasPasswordOrKeyFile); BOOL displayDots = (document.fileURL == nil || !document.compositeKey.hasPasswordOrKeyFile);
NSString *saveTitle = displayDots ? NSLocalizedString(@"SAVE_WITH_DOTS", "Save file menu item title when save will prompt for a location to save or ask for a password/key") : NSLocalizedString(@"SAVE", "Save file menu item title when save will just save the file"); NSString *saveTitle = displayDots ? NSLocalizedString(@"SAVE_WITH_DOTS", "Save file menu item title when save will prompt for a location to save or ask for a password/key") : NSLocalizedString(@"SAVE", "Save file menu item title when save will just save the file");
self.saveMenuItem.title = saveTitle; self.saveMenuItem.title = saveTitle;
@@ -191,41 +215,67 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
if(menu == self.fixAutotypeMenuItem.menu) { if(menu == self.fixAutotypeMenuItem.menu) {
self.fixAutotypeMenuItem.hidden = !(NSEvent.modifierFlags & NSAlternateKeyMask); self.fixAutotypeMenuItem.hidden = !(NSEvent.modifierFlags & NSAlternateKeyMask);
} }
if(menu == self.importMenu) {
NSMenuItem *exportXML = menu.itemArray.firstObject;
[menu removeAllItems];
for(MPPlugin<MPImportPlugin> * plugin in MPPluginHost.sharedHost.importPlugins) {
NSMenuItem *importItem = [[NSMenuItem alloc] init];
[plugin prepareImportMenuItem:importItem];
importItem.target = nil;
importItem.action = @selector(importFromPlugin:);
}
[menu insertItem:exportXML atIndex:0];
}
} }
#pragma mark - #pragma mark -
#pragma mark Actions #pragma mark Actions
- (void)showPluginPrefences:(id)sender {
[self _showPreferencesTab:MPPreferencesTabPlugins];
}
- (void)showPreferences:(id)sender { - (void)showPreferences:(id)sender {
if(self.settingsController == nil) { [self _showPreferencesTab:MPPreferencesTabGeneral];
self.settingsController = [[MPSettingsWindowController alloc] init]; }
- (void)_showPreferencesTab:(MPPreferencesTab)tab {
if(self.preferencesController == nil) {
self.preferencesController = [[MPPreferencesWindowController alloc] init];
} }
[self.settingsController showSettings]; [self.preferencesController showPreferencesTab:tab];
} }
- (void)showPasswordCreator:(id)sender { - (void)showPasswordCreator:(id)sender {
if(!self.passwordCreatorWindow) { if(!self.passwordCreatorWindow) {
[[NSBundle mainBundle] loadNibNamed:@"PasswordCreatorWindow"owner:self topLevelObjects:nil]; self.passwordCreatorWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskResizable
backing:NSBackingStoreBuffered
defer:NO];
self.passwordCreatorWindow.releasedWhenClosed = NO;
self.passwordCreatorWindow.title = NSLocalizedString(@"PASSWORD_CREATOR_WINDOW_TITLE", @"Window title for the stand-alone password creator window");
} }
if(!self.passwordCreatorController) { if(!self.passwordCreatorController) {
self.passwordCreatorController = [[MPPasswordCreatorViewController alloc] init]; self.passwordCreatorController = [[MPPasswordCreatorViewController alloc] init];
self.passwordCreatorWindow.contentViewController = self.passwordCreatorController; self.passwordCreatorWindow.contentViewController = self.passwordCreatorController;
} }
[self.passwordCreatorController reset]; [self.passwordCreatorController reset];
[self.passwordCreatorWindow center];
[self.passwordCreatorWindow makeKeyAndOrderFront:self.passwordCreatorWindow]; [self.passwordCreatorWindow makeKeyAndOrderFront:self.passwordCreatorWindow];
} }
- (void)createNewDatabase:(id)sender { - (void)createNewDatabase:(id)sender {
[self.welcomeWindow orderOut:sender]; [self.welcomeWindow orderOut:sender];
[[NSDocumentController sharedDocumentController] newDocument:sender]; [NSDocumentController.sharedDocumentController newDocument:sender];
} }
- (void)openDatabase:(id)sender { - (void)openDatabase:(id)sender {
[self.welcomeWindow orderOut:sender]; [self.welcomeWindow orderOut:sender];
[[NSDocumentController sharedDocumentController] openDocument:sender]; [NSDocumentController.sharedDocumentController openDocument:sender];
} }
- (void)lockAllDocuments { - (void)lockAllDocuments {
for(NSDocument *document in ((NSDocumentController *)[NSDocumentController sharedDocumentController]).documents) { for(NSDocument *document in NSDocumentController.sharedDocumentController.documents) {
for(id windowController in [document.windowControllers reverseObjectEnumerator]) { for(id windowController in [document.windowControllers reverseObjectEnumerator]) {
if([windowController respondsToSelector:@selector(lock:)]) { if([windowController respondsToSelector:@selector(lock:)]) {
[windowController lock:self]; [windowController lock:self];
@@ -234,21 +284,41 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
} }
} }
- (void)showWelcomeWindow {
if(!self.welcomeWindow) {
self.welcomeWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskResizable
backing:NSBackingStoreBuffered
defer:NO];
self.welcomeWindow.releasedWhenClosed = NO;
}
if(!self.welcomeWindow.contentViewController) {
self.welcomeWindow.contentViewController = [[MPWelcomeViewController alloc] init];
}
[self.welcomeWindow center];
[self.welcomeWindow makeKeyAndOrderFront:nil];
}
- (void)hideWelcomeWindow {
[self.welcomeWindow orderOut:nil];
}
- (void)clearRememberdKeyFiles:(id)sender { - (void)clearRememberdKeyFiles:(id)sender {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyRememeberdKeysForDatabases]; [NSUserDefaults.standardUserDefaults removeObjectForKey:kMPSettingsKeyRememeberdKeysForDatabases];
} }
- (void)showHelp:(id)sender { - (void)showHelp:(id)sender {
NSString *urlString = [[NSBundle mainBundle] infoDictionary][MPHelpURLKey]; NSString *urlString = NSBundle.mainBundle.infoDictionary[MPBundleHelpURLKey];
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]]; [NSWorkspace.sharedWorkspace openURL:[NSURL URLWithString:urlString]];
} }
- (void)checkForUpdates:(id)sender { - (void)checkForUpdates:(id)sender {
#if defined(DEBUG) || defined(NO_SPARKLE) #if defined(DEBUG) || defined(NO_SPARKLE)
NSAlert *alert = [[NSAlert alloc] init]; NSAlert *alert = [[NSAlert alloc] init];
alert.messageText = NSLocalizedString(@"Updates are disabled!", @"Message text for disabled updates alert!"); alert.messageText = NSLocalizedString(@"ALERT_UPDATES_DISABLED_MESSAGE_TEXT", @"Message text for disabled updates alert!");
alert.informativeText = [NSString stringWithFormat:@"Sparkle updates are disabled for this build of %@!", NSApp.applicationName]; alert.informativeText = [NSString stringWithFormat:NSLocalizedString(@"ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!", @"Infromative text of the disabled updates alert!"), NSApp.applicationName];
[alert addButtonWithTitle:NSLocalizedString(@"OK", @"Ok button")]; [alert addButtonWithTitle:NSLocalizedString(@"OK", @"Ok Button to dismiss disabled updates alert")];
[alert runModal]; [alert runModal];
#else #else
[[SUUpdater sharedUpdater] checkForUpdates:sender]; [[SUUpdater sharedUpdater] checkForUpdates:sender];
@@ -258,75 +328,27 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
#pragma mark - #pragma mark -
#pragma mark Private Helper #pragma mark Private Helper
- (void)_applicationDidFinishRestoringWindows:(NSNotification *)notification { - (void)_applicationDidFinishRestoringWindows:(NSNotification *)notification {
NSDocumentController *documentController = [NSDocumentController sharedDocumentController]; NSArray *documents = NSDocumentController.sharedDocumentController.documents;
NSArray *documents = [documentController documents]; BOOL restoredWindows = documents.count > 0;
BOOL restoredWindows = [documents count] > 0;
for(NSDocument *document in documents) { for(NSDocument *document in documents) {
for(NSWindowController *windowController in [document windowControllers]) { for(NSWindowController *windowController in document.windowControllers) {
[windowController.window.contentView layout]; [windowController.window.contentView layout];
} }
} }
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch]; BOOL reopen = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch];
BOOL showWelcomeScreen = !restoredWindows && !_shouldOpenFile; BOOL showWelcomeScreen = !restoredWindows && !_shouldOpenFile;
if(reopen && !restoredWindows && !_shouldOpenFile) { if(reopen && !restoredWindows && !_shouldOpenFile) {
showWelcomeScreen = ![self _reopenLastDocument]; showWelcomeScreen = ![((MPDocumentController *)NSDocumentController.sharedDocumentController) reopenLastDocument];
} }
if(showWelcomeScreen) { if(showWelcomeScreen) {
[self _showWelcomeWindow]; [self showWelcomeWindow];
} }
} /* run check for accessibilty after the windowserver should have presented the UI */
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- (void)_showWelcomeWindow { [MPAutotypeDaemon.defaultDaemon checkForAccessibiltyPermissions];
[self _loadWelcomeWindow]; });
[self.welcomeWindow makeKeyAndOrderFront:nil];
}
- (void)_loadWelcomeWindow {
if(!_welcomeWindow) {
NSArray *topLevelObject;
[[NSBundle mainBundle] loadNibNamed:@"WelcomeWindow" owner:self topLevelObjects:&topLevelObject];
}
}
- (BOOL)_reopenLastDocument {
NSDocumentController *documentController = [NSDocumentController sharedDocumentController];
NSArray *documents = [documentController documents];
if([documents count] > 0) {
return YES; // The document is already open
}
NSArray *recentDocuments = [[NSDocumentController sharedDocumentController] recentDocumentURLs];
NSURL *documentUrl = nil;
if([recentDocuments count] > 0) {
documentUrl = recentDocuments[0];
}
else {
NSString *lastPath = [[NSUserDefaults standardUserDefaults] stringForKey:kMPSettingsKeyLastDatabasePath];
documentUrl =[NSURL URLWithString:lastPath];
}
BOOL isFileURL = [documentUrl isFileURL];
if(isFileURL) {
[documentController openDocumentWithContentsOfURL:documentUrl
display:YES
completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {
if(error != nil){
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText: NSLocalizedString(@"FILE_OPEN_ERROR", nil)];
[alert setInformativeText: [error localizedDescription]];
[alert setAlertStyle:NSCriticalAlertStyle ];
[alert runModal];
}
if(document == nil){
[self _showWelcomeWindow];
}
}];
}
return isFileURL;
} }
@end @end

View File

@@ -26,6 +26,7 @@
@implementation MPAttachmentTableDataSource @implementation MPAttachmentTableDataSource
- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id<NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation { - (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id<NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation {
/* allow drag between databases? */
NSPasteboard *draggingPasteBoard = [info draggingPasteboard]; NSPasteboard *draggingPasteBoard = [info draggingPasteboard];
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:@[NSURL.class] options:nil]; NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:@[NSURL.class] options:nil];
NSUInteger numberOfDirectories = 0; NSUInteger numberOfDirectories = 0;
@@ -33,7 +34,7 @@
if(url.fileURL || url.fileReferenceURL) { if(url.fileURL || url.fileReferenceURL) {
NSError *error = nil; NSError *error = nil;
NSDictionary *resourceKeys = [url resourceValuesForKeys:@[NSURLIsDirectoryKey] error:&error]; NSDictionary *resourceKeys = [url resourceValuesForKeys:@[NSURLIsDirectoryKey] error:&error];
if( [resourceKeys[ NSURLIsDirectoryKey ] boolValue] == YES ) { if([resourceKeys[NSURLIsDirectoryKey] boolValue] == YES) {
numberOfDirectories++; numberOfDirectories++;
} }
continue; continue;
@@ -43,6 +44,10 @@
if(numberOfDirectories == arrayOfURLs.count) { if(numberOfDirectories == arrayOfURLs.count) {
return NSDragOperationNone; return NSDragOperationNone;
} }
if(dropOperation == NSTableViewDropOn) {
[tableView setDropRow:row+1 dropOperation:NSTableViewDropAbove];
}
return NSDragOperationCopy; return NSDragOperationCopy;
} }
@@ -50,40 +55,67 @@
MPDocument *document = tableView.window.windowController.document; MPDocument *document = tableView.window.windowController.document;
KPKEntry *entry = document.selectedEntries.count == 1 ? document.selectedEntries.lastObject : nil; KPKEntry *entry = document.selectedEntries.count == 1 ? document.selectedEntries.lastObject : nil;
NSPasteboard *draggingPasteBoard = [info draggingPasteboard]; NSArray *arrayOfURLs = [info.draggingPasteboard readObjectsForClasses:@[NSURL.class] options:nil];
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:@[[NSURL class]] options:nil];
for(NSURL *fileUrl in arrayOfURLs) { for(NSURL *fileUrl in arrayOfURLs) {
[document addAttachment:fileUrl toEntry:entry]; [document addAttachment:fileUrl toEntry:entry];
} }
return YES; return YES;
} }
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard { - (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
return NO; [pboard declareTypes:@[NSFilesPromisePboardType] owner:nil];
MPDocument *document = tableView.window.windowController.document;
/* KPKEntry *entry = document.selectedEntries.count == 1 ? document.selectedEntries.lastObject : nil;
NSString *extension; NSMutableArray *fileNames = [[NSMutableArray alloc] init];
for(KPKBinary *binary in [entry.binaries objectsAtIndexes:rowIndexes]) {
if([rowIndexes count] != 1) { if(binary.name) {
return NO; // We only work with one file at a time [fileNames addObject:binary.name];
}
} }
MPDocument *document = [[[tableView window] windowController] document]; [pboard setPropertyList:fileNames forType:NSFilesPromisePboardType];
id entry = document.selectedEntry; return YES;
NSUInteger row = [rowIndexes lastIndex];
if([entry isKindOfClass:[Kdb3Entry class]]) {
Kdb3Entry *entryV3 = (Kdb3Entry *)entry;
extension = [entryV3.binaryDesc pathExtension];
}
else if([entry isKindOfClass:[Kdb4Entry class]]) {
Kdb4Entry *entryV4 = (Kdb4Entry *)entry;
BinaryRef *binaryRef = entryV4.binaries[row];
extension = [binaryRef.key pathExtension];
}
NSString *uti = CFBridgingRelease(UTTypeCreatePreferredIdentifierForTag( kUTTagClassFilenameExtension, (__bridge CFStringRef)(extension), NULL ));
[pboard setPropertyList:@[uti] forType:(NSString *)kPasteboardTypeFilePromiseContent];
[pboard setPropertyList:@[uti] forType:(NSString *)kPasteboardTypeFileURLPromise ];
return YES;*/
} }
- (NSArray<NSString *> *)tableView:(NSTableView *)tableView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)indexSet {
MPDocument *document = tableView.window.windowController.document;
KPKEntry *entry = document.selectedEntries.count == 1 ? document.selectedEntries.lastObject : nil;
NSMutableArray<NSString *> *fileNames = [[NSMutableArray alloc] init];
NSArray<KPKBinary *> *draggedBinaries = [entry.binaries objectsAtIndexes:indexSet];
for(KPKBinary *binary in draggedBinaries) {
if(binary.name) {
[fileNames addObject:binary.name];
dispatch_queue_t queue = dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0);
dispatch_async(queue, ^{
NSError *error;
NSURL *saveLocation = [dropDestination URLByAppendingPathComponent:binary.name];
BOOL success = [binary saveToLocation:saveLocation error:&error];
if(!success && error) {
dispatch_async(dispatch_get_main_queue(), ^{
[NSApp presentError:error];
});
}
});
}
}
return [fileNames copy];
}
/*
- (id<NSPasteboardWriting>)tableView:(NSTableView *)tableView pasteboardWriterForRow:(NSInteger)row {
MPDocument *document = tableView.window.windowController.document;
KPKEntry *entry = document.selectedEntries.count == 1 ? document.selectedEntries.lastObject : nil;
if(!entry) {
return nil;
}
if (@available(macOS 10.12, *)) {
KPKBinary *binary = entry.binaries[row];
NSFilePromiseProvider *provider = [[NSFilePromiseProvider alloc] initWithFileType:(NSString *)kUTTypeXML delegate:binary];
return provider;
}
return nil;
}
*/
@end @end

View File

@@ -45,7 +45,7 @@
NSTableCellView *view; NSTableCellView *view;
if([selectedIndexes containsIndex:row]) { if([selectedIndexes containsIndex:row]) {
MPSelectedAttachmentTableCellView *cellView = [tableView makeViewWithIdentifier:@"SelectedCell" owner:tableView]; MPSelectedAttachmentTableCellView *cellView = [tableView makeViewWithIdentifier:@"SelectedCell" owner:tableView];
[cellView.actionButton setMenu:[self allocateActionMenu]]; cellView.actionButton.menu = [self allocateActionMenu];
view = cellView; view = cellView;
} }
else { else {

View File

@@ -41,7 +41,7 @@
static dispatch_once_t onceToken; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ dispatch_once(&onceToken, ^{
NSMutableArray *fields = [[NSMutableArray alloc] init]; NSMutableArray *fields = [[NSMutableArray alloc] init];
for(NSString *attribute in [KPKFormat sharedFormat].entryDefaultKeys) { for(NSString *attribute in KPKFormat.sharedFormat.entryDefaultKeys) {
[fields addObject:[NSString stringWithFormat:@"{%@}", attribute]]; [fields addObject:[NSString stringWithFormat:@"{%@}", attribute]];
} }
[fields addObject:@"{S:Custom}"]; [fields addObject:@"{S:Custom}"];
@@ -54,7 +54,7 @@
} }
- (void)dealloc { - (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]; [NSNotificationCenter.defaultCenter removeObserver:self];
} }
- (NSString *)nibName { - (NSString *)nibName {

View File

@@ -5,6 +5,20 @@
// Created by Michael Starke on 26.10.17. // Created by Michael Starke on 26.10.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved. // Copyright © 2017 HicknHack Software GmbH. All rights reserved.
// //
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>

View File

@@ -5,7 +5,20 @@
// Created by Michael Starke on 26.10.17. // Created by Michael Starke on 26.10.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved. // Copyright © 2017 HicknHack Software GmbH. All rights reserved.
// //
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import "MPAutotypeCandidateSelectionViewController.h" #import "MPAutotypeCandidateSelectionViewController.h"
#import "MPAutotypeContext.h" #import "MPAutotypeContext.h"
#import "MPAutotypeDaemon.h" #import "MPAutotypeDaemon.h"
@@ -29,6 +42,8 @@
- (void)viewDidLoad { - (void)viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
self.selectAutotypeContextButton.enabled = NO; self.selectAutotypeContextButton.enabled = NO;
NSNotification *notification = [NSNotification notificationWithName:NSTableViewSelectionDidChangeNotification object:self.contextTableView];
[self tableViewSelectionDidChange:notification];
} }
#pragma mark NSTableViewDataSource #pragma mark NSTableViewDataSource
@@ -42,8 +57,9 @@
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; NSTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
MPAutotypeContext *context = self.candidates[row]; MPAutotypeContext *context = self.candidates[row];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@", context.entry.title, context.maskedEvaluatedCommand]]; NSString *maskedEvaluatedCommand = context.maskedEvaluatedCommand;
[string setAttributes:@{NSForegroundColorAttributeName: NSColor.disabledControlTextColor} range:NSMakeRange(context.entry.title.length + 1, context.maskedEvaluatedCommand.length)]; NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@", context.entry.title, maskedEvaluatedCommand]];
[string setAttributes:@{NSForegroundColorAttributeName: NSColor.disabledControlTextColor} range:NSMakeRange((string.length - maskedEvaluatedCommand.length), maskedEvaluatedCommand.length)];
view.textField.attributedStringValue = string; view.textField.attributedStringValue = string;
view.imageView.image = context.entry.iconImage; view.imageView.image = context.entry.iconImage;
return view; return view;
@@ -61,7 +77,7 @@
- (void)selectAutotypeContext:(id)sender { - (void)selectAutotypeContext:(id)sender {
NSInteger selectedRow = self.contextTableView.selectedRow; NSInteger selectedRow = self.contextTableView.selectedRow;
if(selectedRow >= 0 && selectedRow < self.candidates.count) { if(selectedRow >= 0 && selectedRow < self.candidates.count) {
[[MPAutotypeDaemon defaultDaemon] selectAutotypeCandiate:self.candidates[selectedRow]]; [MPAutotypeDaemon.defaultDaemon selectAutotypeCandiate:self.candidates[selectedRow]];
} }
else { else {
[self cancelSelection:sender]; // cancel since the selection was invalid! [self cancelSelection:sender]; // cancel since the selection was invalid!

View File

@@ -22,12 +22,14 @@
#import "MPAutotypeClear.h" #import "MPAutotypeClear.h"
#import "MPKeyMapper.h" #import "MPKeyMapper.h"
#import "MPKeyTyper.h"
#import <Carbon/Carbon.h> #import <Carbon/Carbon.h>
@implementation MPAutotypeClear @implementation MPAutotypeClear
- (NSString *)description { - (NSString *)description {
return [[self class] description]; return self.class.description;
} }
- (void)execute { - (void)execute {
@@ -36,8 +38,8 @@
NSLog(@"Unable to generate key code for 'A'"); NSLog(@"Unable to generate key code for 'A'");
return; return;
} }
[self sendPressKey:key.keyCode modifierFlags:kCGEventFlagMaskCommand]; [MPKeyTyper sendKey:MPMakeModifiedKey(kCGEventFlagMaskCommand, key.keyCode)];
[self sendPressKey:kVK_Delete modifierFlags:0]; [MPKeyTyper sendKey:MPMakeModifiedKey(0, kVK_Delete)];
} }
@end @end

View File

@@ -21,7 +21,6 @@
// //
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MPModifiedKey.h"
@class MPAutotypeContext; @class MPAutotypeContext;
/** /**
@@ -30,7 +29,6 @@
* entry point for creating AutotypeCommands. You should never need to build a command on your own. * entry point for creating AutotypeCommands. You should never need to build a command on your own.
*/ */
@interface MPAutotypeCommand : NSObject @interface MPAutotypeCommand : NSObject
@property (readonly, strong) MPAutotypeContext *context; @property (readonly, strong) MPAutotypeContext *context;
/** /**
@@ -44,22 +42,6 @@
*/ */
+ (NSArray *)commandsForContext:(MPAutotypeContext *)context; + (NSArray *)commandsForContext:(MPAutotypeContext *)context;
/**
* Sends a KeyPress Event with the supplied modifier flags and Keycode
* Any existing modifiers will be disabled for this event. If the user
* presses any key, those will be ignored during this event
*
* @param keyCode virtual KeyCode to be sent
* @param flags modifier flags for the key press event
*/
- (void)sendPressKey:(CGKeyCode)keyCode modifierFlags:(CGEventFlags)flags;
- (void)sendPressKey:(MPModifiedKey)key;
/**
* Convenience message to be sent for executing a simple paste command
*/
- (void)sendPasteKeyCode;
/** /**
* Executes the Autotype Command. * Executes the Autotype Command.
*/ */

View File

@@ -21,443 +21,17 @@
// //
#import "MPAutotypeCommand.h" #import "MPAutotypeCommand.h"
#import "MPAutotypeParser.h"
#import "MPAutotypePaste.h"
#import "MPAutotypeKeyPress.h"
#import "MPAutotypeClear.h"
#import "MPAutotypeDelay.h"
#import "MPAutotypeContext.h" #import "MPAutotypeContext.h"
#import "MPKeyMapper.h"
#import "KeePassKit/KeePassKit.h"
#import <Carbon/Carbon.h>
#import <CommonCrypto/CommonCrypto.h>
static CGKeyCode kMPFunctionKeyCodes[] = {
kVK_F1,
kVK_F2,
kVK_F3,
kVK_F4,
kVK_F5,
kVK_F6,
kVK_F7,
kVK_F8,
kVK_F9,
kVK_F10,
kVK_F11,
kVK_F12,
kVK_F13,
kVK_F14,
kVK_F15,
kVK_F16,
kVK_F17,
kVK_F18,
kVK_F19
};
static CGKeyCode kMPNumpadKeyCodes[] = {
kVK_ANSI_Keypad0,
kVK_ANSI_Keypad1,
kVK_ANSI_Keypad2,
kVK_ANSI_Keypad3,
kVK_ANSI_Keypad4,
kVK_ANSI_Keypad5,
kVK_ANSI_Keypad6,
kVK_ANSI_Keypad7,
kVK_ANSI_Keypad8,
kVK_ANSI_Keypad9
};
@interface NSNumber (AutotypeCommand)
@property (nonatomic, readonly, assign) CGEventFlags eventFlagsValue;
@property (nonatomic, readonly, assign) CGKeyCode keyCodeValue;
@end
@implementation NSNumber (AutotypeCommand)
- (CGEventFlags)eventFlagsValue {
return (CGEventFlags)self.integerValue;
}
- (CGKeyCode)keyCodeValue {
return (CGKeyCode)self.integerValue;
}
@end
@interface MPAutotypeParserContext : NSObject
@property (strong) NSMutableArray *commands;
@property (copy) NSString *commandString;
@property (assign) CGEventFlags activeModifiers;
@property (assign) BOOL obfuscate;
- (instancetype)initWithString:(NSString *)commandString modifiers:(CGEventFlags)modifiers commands:(NSMutableArray *)commands;
@end
@implementation MPAutotypeParserContext
- (instancetype)initWithString:(NSString *)commandString modifiers:(CGEventFlags)modifiers commands:(NSMutableArray *)commands {
self = [super init];
if(self) {
_commands = commands;
_commandString = [commandString copy];
_activeModifiers = modifiers;
}
return self;
}
@end
@implementation MPAutotypeCommand @implementation MPAutotypeCommand
+ (NSDictionary *)_keypressCommands {
static NSDictionary *keypressCommands;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
keypressCommands = @{ kKPKAutotypeBackspace : @(kVK_Delete),
//kKPKAutotypeBreak : @0,
kKPKAutotypeCapsLock : @(kVK_CapsLock),
kKPKAutotypeDelete : @(kVK_ForwardDelete),
kKPKAutotypeDown : @(kVK_DownArrow),
kKPKAutotypeEnd : @(kVK_End),
kKPKAutotypeEnter : @(kVK_Return),
kKPKAutotypeEscape : @(kVK_Escape),
kKPKAutotypeHelp : @(kVK_Help),
kKPKAutotypeHome : @(kVK_Home),
//kKPKAutotypeInsert : @(),
kKPKAutotypeLeft : @(kVK_LeftArrow),
kKPKAutotypeLeftWindows : @(kVK_Command),
//kKPKAutotypeNumlock : @(),
kKPKAutotypePageDown : @(kVK_PageDown),
kKPKAutotypePageUp : @(kVK_PageUp),
//kKPKAutotypePrintScreen : @(),
kKPKAutotypeRight : @(kVK_RightArrow),
kKPKAutotypeRightWindows : @(kVK_Command),
//kKPKAutotypeScrollLock : @(),
kKPKAutotypeSpace : @(kVK_Space),
kKPKAutotypeTab : @(kVK_Tab),
kKPKAutotypeUp : @(kVK_UpArrow),
kKPKAutotypeWindows : @(kVK_Command)
};
});
return keypressCommands;
}
/* Commands that are actually just one symbol to be pasted */
+ (NSDictionary *)_characterCommands {
static NSDictionary *characterCommands;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
characterCommands = @{
kKPKAutotypePlus: @"+",
kKPKAutotypeCaret: @"^",
kKPKAutotypePercent: @"%",
kKPKAutotypeTilde : @"~",
kKPKAutotypeRoundBracketLeft : @"(",
kKPKAutotypeRoundBracketRight : @")",
kKPKAutotypeSquareBracketLeft : @"[",
kKPKAutotypeSquareBracketRight : @"]",
kKPKAutotypeCurlyBracketLeft: @"{",
kKPKAutotypeCurlyBracketRight: @"}"
};
});
return characterCommands;
}
/**
* Mapping for modifier to CGEventFlags.
*
* @return dictionary with commands as keys and CGEventFlags as wrapped values
*/
+ (NSDictionary *)_modifierCommands {
static NSDictionary *modifierCommands;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
modifierCommands = @{
kKPKAutotypeAlt : @(kCGEventFlagMaskAlternate),
kKPKAutotypeControl : @(kCGEventFlagMaskControl),
kKPKAutotypeShift : @(kCGEventFlagMaskShift)
};
});
return modifierCommands;
}
+ (NSArray *)commandsForContext:(MPAutotypeContext *)context { + (NSArray *)commandsForContext:(MPAutotypeContext *)context {
if(!context.valid) { if(!context.valid) {
return nil; return @[];
} }
NSUInteger reserverd = MAX(1,context.normalizedCommand.length / 4); MPAutotypeParser *parser = [[MPAutotypeParser alloc] initWithContext:context];
NSMutableArray *commands = [[NSMutableArray alloc] initWithCapacity:reserverd]; return parser.commands;
NSMutableArray __block *commandRanges = [[NSMutableArray alloc] initWithCapacity:reserverd];
NSRegularExpression *commandRegExp = [[NSRegularExpression alloc] initWithPattern:@"\\{[^\\{\\}]+\\}" options:NSRegularExpressionCaseInsensitive error:0];
NSAssert(commandRegExp, @"RegExp is constant. Has to work all the time");
[commandRegExp enumerateMatchesInString:context.evaluatedCommand options:0 range:NSMakeRange(0, context.evaluatedCommand.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
@autoreleasepool {
[commandRanges addObject:[NSValue valueWithRange:result.range]];
}
}];
/* add range at the end as terminator */
[commandRanges addObject:[NSValue valueWithRange:NSMakeRange(context.evaluatedCommand.length, 0)]];
NSUInteger location = 0;
CGEventFlags modifiers = 0;
for(NSValue *rangeValue in commandRanges) {
NSRange commandRange = rangeValue.rangeValue;
/* All non-commands will get translated into key presses if possible, otherwiese into paste commands */
if(location < commandRange.location) {
/* If there were modifiers we need to use the next single stroke and update the modifier command */
if(modifiers) {
NSString *modifiedKey = [context.evaluatedCommand substringWithRange:NSMakeRange(location, 1)];
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifierMask:modifiers character:modifiedKey];
if(press) {
[commands addObject:press];
}
modifiers = 0;
location++;
}
NSRange textRange = NSMakeRange(location, commandRange.location - location);
if(textRange.length > 0) {
NSString *textValue = [context.evaluatedCommand substringWithRange:textRange];
[self _appendTextCommandWithContent:textValue toCommands:commands obfusctate:context.entry.autotype.obfuscateDataTransfer];
}
}
/* Test for modifer Key */
NSString *commandString = [context.evaluatedCommand substringWithRange:commandRange];
/* append commands for non-modifer keys */
if(![self _updateModifierMask:&modifiers forCommand:commandString]) {
[self _appendCommandForString:commandString toCommands:commands activeModifer:modifiers obfuscate:context.entry.autotype.obfuscateDataTransfer];
modifiers = 0; // Reset the modifers;
}
location = commandRange.location + commandRange.length;
}
return commands;
}
+ (void)_appendTextCommandWithContent:(NSString *)pasteContent toCommands:(NSMutableArray *)commands obfusctate:(BOOL)obfuscate {
if(obfuscate) {
[self _appendObfuscatedPasteCommandForContent:pasteContent toCommands:commands];
}
else {
MPAutotypePaste *pasteCommand = [[MPAutotypePaste alloc] initWithString:pasteContent];
[commands addObject:pasteCommand];
}
}
+ (void)_appendObfuscatedPasteCommandForContent:(NSString *)pasteContent toCommands:(NSMutableArray *)commands {
if(!pasteContent) {
return;
}
@autoreleasepool {
/*
* obfuscate entered data using Two-Channel Auto-Type Obfuscation
* refer to KeePass documentation for more information
* http://keepass.info/help/v2/autotype_obfuscation.html
*/
NSMutableString *paste = [@"" mutableCopy];
NSMutableArray<NSValue *> *typeKeys = [[NSMutableArray alloc] init];
/*
* seed the random number generator using the first 4 bytes of the string's SHA1
* this ensures that you get the same string split every time for a given string
*/
const char *cstr = [pasteContent cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:pasteContent.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (unsigned int)data.length, digest);
srandom(*((unsigned int*)digest));
for (NSUInteger i = 0; i < pasteContent.length; i++) {
NSUInteger part = random() % 2;
NSString *key = [pasteContent substringWithRange:NSMakeRange(i, 1)];
MPModifiedKey mKey = [MPKeyMapper modifiedKeyForCharacter:key];
/* append unknown keycodes to the paste since we can't type them */
if (part == 0 || mKey.keyCode == kMPUnknownKeyCode) {
[paste appendString:key];
[typeKeys addObject:[NSValue valueWithModifiedKey:MPMakeModifiedKey(0, kVK_RightArrow)]];
}
else {
[typeKeys addObject:[NSValue valueWithModifiedKey:mKey ]];
}
}
/* move to the end of the content */
for (NSUInteger i = typeKeys.count; i < pasteContent.length; i++) {
[typeKeys addObject:[NSValue valueWithModifiedKey:MPMakeModifiedKey(0, kVK_RightArrow)]];
}
/* add paste command */
MPAutotypePaste *pasteCommand = [[MPAutotypePaste alloc] initWithString:paste];
[commands addObject:pasteCommand];
/* add keypress commands */
if(typeKeys.count > 0) {
for(NSUInteger i = 0; i < paste.length; i++) {
[commands addObject:[[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(0, kVK_LeftArrow)]];
}
for(NSUInteger i = 0; i < typeKeys.count; i++) {
[commands addObject:[[MPAutotypeKeyPress alloc] initWithModifiedKey:typeKeys[i].modifiedKeyValue]];
}
}
}
}
+ (void)_appendCommandForString:(NSString *)commandString toCommands:(NSMutableArray *)commands activeModifer:(CGEventFlags)flags obfuscate:(BOOL)obfuscate {
if(!commandString || !commandString.length) {
return;
}
/* Simple Special Press */
NSString *uppercaseCommand = commandString.uppercaseString;
NSNumber *keyCodeNumber = [self _keypressCommands][uppercaseCommand];
if(nil != keyCodeNumber) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(flags, keyCodeNumber.keyCodeValue)];
if(press) {
[commands addObject:press];
}
return; // Done
}
/* {PLUS}, {TILDE}, {PERCENT}, {+}, etc */
NSString *character = [self _characterCommands][uppercaseCommand];
if(character) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifierMask:flags character:character];
if(press) {
[commands addObject:press];
}
return; // Done
}
/* F1-16 */
NSRegularExpression *functionKeyRegExp = [[NSRegularExpression alloc] initWithPattern:kKPKAutotypeFunctionMaskRegularExpression options:NSRegularExpressionCaseInsensitive error:0];
NSTextCheckingResult *functionResult = [functionKeyRegExp firstMatchInString:commandString options:0 range:NSMakeRange(0, commandString.length)];
if(functionResult && functionResult.numberOfRanges == 2) {
NSString *numberString = [commandString substringWithRange:[functionResult rangeAtIndex:1]];
NSScanner *numberScanner = [[NSScanner alloc] initWithString:numberString];
NSInteger functionNumber = 0;
if([numberScanner scanInteger:&functionNumber] && functionNumber >= 1 && functionNumber <= 19) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(flags, kMPFunctionKeyCodes[functionNumber-1])];
if(press) {
[commands addObject:press];
}
return; // Done
}
}
/* Numpad0-9 */
NSRegularExpression *numpadKeyRegExp = [[NSRegularExpression alloc] initWithPattern:kKPKAutotypeKeypaddNumberMaskRegularExpression options:NSRegularExpressionCaseInsensitive error:0];
NSTextCheckingResult *numpadResult = [numpadKeyRegExp firstMatchInString:commandString options:0 range:NSMakeRange(0, commandString.length)];
if(numpadResult && numpadResult.numberOfRanges == 2) {
NSString *numberString = [commandString substringWithRange:[numpadResult rangeAtIndex:1]];
NSScanner *numberScanner = [[NSScanner alloc] initWithString:numberString];
NSInteger numpadNumber = 0;
if([numberScanner scanInteger:&numpadNumber] && numpadNumber >= 0 && numpadNumber <= 9) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(flags, kMPNumpadKeyCodes[numpadNumber])];
if(press) {
[commands addObject:press];
}
return; // Done
}
}
/* Clearfield */
if([kKPKAutotypeClearField isEqualToString:uppercaseCommand]) {
[commands addObject:[[MPAutotypeClear alloc] init]];
return; // Done
}
// TODO: add {APPLICATION <appname>}
/* Delay */
NSString *delayPattern = [[NSString alloc] initWithFormat:@"\\{(%@|%@)[ |=]+([0-9]+)\\}",
kKPKAutotypeDelay,
kKPKAutotypeVirtualKey/*,
kKPKAutotypeVirtualExtendedKey,
kKPKAutotypeVirtualNonExtendedKey*/];
NSRegularExpression *delayRegExp = [[NSRegularExpression alloc] initWithPattern:delayPattern options:NSRegularExpressionCaseInsensitive error:0];
NSAssert(delayRegExp, @"Regex for delay should work!");
NSTextCheckingResult *result = [delayRegExp firstMatchInString:commandString options:0 range:NSMakeRange(0, commandString.length)];
if(result && (result.numberOfRanges == 3)) {
NSString *uppercaseCommand = [[commandString substringWithRange:[result rangeAtIndex:1]] uppercaseString];
NSString *valueString = [commandString substringWithRange:[result rangeAtIndex:2]];
NSScanner *numberScanner = [[NSScanner alloc] initWithString:valueString];
NSInteger value;
if([numberScanner scanInteger:&value]) {
if([kKPKAutotypeDelay isEqualToString:uppercaseCommand]) {
if(MAX(0, value) <= 0) {
return; // Value too low, just skipp
}
[commands addObject:[[MPAutotypeDelay alloc] initWithDelay:value]];
return; // Done
}
else if([kKPKAutotypeVirtualKey isEqualToString:uppercaseCommand]) {
NSLog(@"Virtual key strokes aren't supported yet!");
// TODO add key
}
}
else {
NSLog(@"Unable to parse value part in command:%@", commandString);
}
}
else {
/* Fallback */
[self _appendTextCommandWithContent:commandString toCommands:commands obfusctate:obfuscate];
}
}
+ (BOOL)_updateModifierMask:(CGEventFlags *)mask forCommand:(NSString *)commandString {
NSAssert(mask != NULL, @"Input pointer missing!");
if(mask == NULL) {
return NO;
}
NSNumber *flagNumber = [self _modifierCommands][commandString.uppercaseString];
if(!flagNumber) {
return NO; // No modifier key, just leave
}
CGEventFlags flags = flagNumber.eventFlagsValue;
*mask |= flags;
return YES;
}
- (void)sendPressKey:(MPModifiedKey)key {
[self sendPressKey:key.keyCode modifierFlags:key.modifier];
}
- (void)sendPressKey:(CGKeyCode)keyCode modifierFlags:(CGEventFlags)flags {
CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStatePrivate);
if(NULL == eventSource) {
return; // We could not create our own source, abort!
}
CGEventRef pressKey = CGEventCreateKeyboardEvent (eventSource, keyCode, YES);
CGEventRef releaseKey = CGEventCreateKeyboardEvent (eventSource, keyCode, NO);
/*
Set the modifiers to the ones we want
We use our private event source so no modifier reset should be needed
*/
CGEventSetFlags(pressKey, flags);
CGEventSetFlags(releaseKey, flags);
/* Send the event */
CGEventPost(kCGHIDEventTap, pressKey);
usleep(0.05 * NSEC_PER_MSEC);
CGEventPost(kCGHIDEventTap, releaseKey);
CFRelease(pressKey);
CFRelease(releaseKey);
CFRelease(eventSource);
}
- (void)sendPasteKeyCode {
MPModifiedKey mKey = [MPKeyMapper modifiedKeyForCharacter:@"v"];
if(mKey.keyCode == kMPUnknownKeyCode) {
return; // We did not find a mapping for "V"
}
[self sendPressKey:mKey.keyCode modifierFlags:kCGEventFlagMaskCommand];
} }
- (void)execute { - (void)execute {

View File

@@ -41,11 +41,16 @@
@property (nonatomic, readonly, copy) NSString *command; @property (nonatomic, readonly, copy) NSString *command;
@property (nonatomic, readonly, copy) NSString *normalizedCommand; @property (nonatomic, readonly, copy) NSString *normalizedCommand;
/** /**
* Command with placeholders and references resolved * Command with placeholders and references resolved.
* This will evaluate any placeholder regardless of side-effects.
* If you need to evaluat the command without interaction, you should call kpk_finalValueForEntry:options: directly on the normalizedCommand.
*/ */
@property (nonatomic, readonly, copy) NSString *evaluatedCommand; @property (nonatomic, readonly, copy) NSString *evaluatedCommand;
/** /**
@return command with placeholders and references resolved but masked password placeholder @return command with placeholders and references resolved but masked password placeholder.
This will call kpk_finalValueForEntry:options on the normalizedCommand with options set to KPKCommandEvaluationOptionSkipUserInteraction and KPKCommandEvaluationOptionReadOnly.
This way it is ensured that the value can be used in UI without any intereference or data changes!
*/ */
@property (nonatomic, readonly, copy) NSString *maskedEvaluatedCommand; @property (nonatomic, readonly, copy) NSString *maskedEvaluatedCommand;
/** /**
@@ -57,7 +62,7 @@
* Designated initializer * Designated initializer
* *
* @param entry Entry to use * @param entry Entry to use
* @param sequence Keystroke Sequence to use * @param sequence Keystroke Sequence to use, this is usefull to override any sequences stored in the entry
* *
* @return AutotypeSequnce with the entry and keystroke in places * @return AutotypeSequnce with the entry and keystroke in places
*/ */
@@ -65,4 +70,6 @@
- (instancetype)initWithDefaultSequenceForEntry:(KPKEntry *)entry; - (instancetype)initWithDefaultSequenceForEntry:(KPKEntry *)entry;
- (instancetype)initWithWindowAssociation:(KPKWindowAssociation *)association; - (instancetype)initWithWindowAssociation:(KPKWindowAssociation *)association;
- (BOOL)isEqualToAutotypeContext:(MPAutotypeContext *)context;
@end @end

View File

@@ -57,6 +57,19 @@
return copy; return copy;
} }
- (BOOL)isEqual:(id)object {
return [self isEqualToAutotypeContext:object];
}
- (BOOL)isEqualToAutotypeContext:(MPAutotypeContext *)context {
if(![context isKindOfClass:self.class]) {
return NO;
}
if(KPKComparsionDifferent == [self.entry compareToEntry:context.entry]) {
return NO;
}
return [self.normalizedCommand isEqualToString:context.normalizedCommand];
}
- (BOOL)valid { - (BOOL)valid {
return (self.normalizedCommand != nil); return (self.normalizedCommand != nil);
@@ -73,7 +86,7 @@
NSString *passwordPlaceholder = [NSString stringWithFormat:@"{%@}",kKPKPasswordKey]; NSString *passwordPlaceholder = [NSString stringWithFormat:@"{%@}",kKPKPasswordKey];
NSString *normalized = self.normalizedCommand; NSString *normalized = self.normalizedCommand;
NSString *masked = [normalized stringByReplacingOccurrencesOfString:passwordPlaceholder withString:@"•••" options:NSCaseInsensitiveSearch range:NSMakeRange(0, normalized.length)]; NSString *masked = [normalized stringByReplacingOccurrencesOfString:passwordPlaceholder withString:@"•••" options:NSCaseInsensitiveSearch range:NSMakeRange(0, normalized.length)];
return [[masked kpk_finalValueForEntry:self.entry] copy]; return [[masked kpk_finalValueForEntry:self.entry options:KPKCommandEvaluationOptionSkipUserInteraction|KPKCommandEvaluationOptionReadOnly] copy];
} }
- (NSString *)description { - (NSString *)description {

View File

@@ -25,7 +25,7 @@
@class DDHotKey; @class DDHotKey;
@class KPKEntry; @class KPKEntry;
@class MPAutotypeContext; @class MPAutotypeContext;
@class MPAutotypeExecutionContext;
/** /**
* The autotype daemon is responsible for registering the global hotkey and to perform any autotype actions * The autotype daemon is responsible for registering the global hotkey and to perform any autotype actions
*/ */
@@ -34,11 +34,16 @@
@property (strong) IBOutlet NSWindow *matchSelectionWindow; @property (strong) IBOutlet NSWindow *matchSelectionWindow;
@property (weak) IBOutlet NSPopUpButton *matchSelectionButton; @property (weak) IBOutlet NSPopUpButton *matchSelectionButton;
@property (readonly, strong) DDHotKey *registredHotKey; @property (readonly, strong) DDHotKey *registredHotKey;
@property (readonly, strong, class) MPAutotypeDaemon *defaultDaemon;
@property (nonatomic, readonly) BOOL autotypeSupported; // YES if the system allows for Autotype. NO if the user has denied this.
+ (instancetype)defaultDaemon;
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
- (void)checkForAccessibiltyPermissions;
- (void)openAccessibiltyPreferences;
- (void)performAutotypeForEntry:(KPKEntry *)entry; - (void)performAutotypeForEntry:(KPKEntry *)entry;
- (void)performAutotypeForEntry:(KPKEntry *)entry overrideSequence:(NSString *)sequence;
- (void)selectAutotypeCandiate:(MPAutotypeContext *)context; - (void)selectAutotypeCandiate:(MPAutotypeContext *)context;
- (void)cancelAutotypeCandidateSelection; - (void)cancelAutotypeCandidateSelection;

View File

@@ -22,23 +22,22 @@
#import "MPAutotypeDaemon.h" #import "MPAutotypeDaemon.h"
#import "MPDocument.h" #import "MPDocument.h"
#import "MPDocumentWindowController.h"
#import "MPAutotypeCommand.h" #import "MPAutotypeCommand.h"
#import "MPAutotypeContext.h" #import "MPAutotypeContext.h"
#import "MPAutotypePaste.h" #import "MPAutotypePaste.h"
#import "MPPasteBoardController.h" #import "MPPasteBoardController.h"
#import "MPSettingsHelper.h" #import "MPSettingsHelper.h"
#import "MPAutotypeCandidateSelectionViewController.h"
#import "MPUserNotificationCenterDelegate.h"
#import "NSApplication+MPAdditions.h" #import "NSApplication+MPAdditions.h"
#import "NSUserNotification+MPAdditions.h"
#import "MPAutotypeCandidateSelectionViewController.h"
#import "KeePassKit/KeePassKit.h"
#import "DDHotKeyCenter.h" #import "DDHotKeyCenter.h"
#import "DDHotKey+MacPassAdditions.h" #import "DDHotKey+MacPassAdditions.h"
#import "KeePassKit/KeePassKit.h"
#import <Carbon/Carbon.h> #import <Carbon/Carbon.h>
NSString *const kMPWindowTitleKey = @"kMPWindowTitleKey"; NSString *const kMPWindowTitleKey = @"kMPWindowTitleKey";
@@ -52,11 +51,14 @@ NSString *const kMPProcessIdentifierKey = @"kMPProcessIdentifierKey";
@property (assign) pid_t targetPID; // The pid of the process we want to sent commands to @property (assign) pid_t targetPID; // The pid of the process we want to sent commands to
@property (copy) NSString *targetWindowTitle; // The title of the window that we are targeting @property (copy) NSString *targetWindowTitle; // The title of the window that we are targeting
@property (strong) NSRunningApplication *previousApplication; // The application that was active before we got invoked @property (strong) NSRunningApplication *previousApplication; // The application that was active before we got invoked
@property (assign) NSTimeInterval userActionRequested;
@end @end
@implementation MPAutotypeDaemon @implementation MPAutotypeDaemon
@dynamic autotypeSupported;
#pragma mark - #pragma mark -
#pragma mark Lifecylce #pragma mark Lifecylce
@@ -80,33 +82,42 @@ static MPAutotypeDaemon *_sharedInstance;
if (self) { if (self) {
_enabled = NO; _enabled = NO;
_targetPID = -1; _targetPID = -1;
_userActionRequested = NSDate.distantPast.timeIntervalSinceReferenceDate;
[self bind:NSStringFromSelector(@selector(enabled)) [self bind:NSStringFromSelector(@selector(enabled))
toObject:[NSUserDefaultsController sharedUserDefaultsController] toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEnableGlobalAutotype] withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEnableGlobalAutotype]
options:nil]; options:nil];
[self bind:NSStringFromSelector(@selector(hotKeyData)) [self bind:NSStringFromSelector(@selector(hotKeyData))
toObject:[NSUserDefaultsController sharedUserDefaultsController] toObject:NSUserDefaultsController.sharedUserDefaultsController
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyGlobalAutotypeKeyDataKey] withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyGlobalAutotypeKeyDataKey]
options:nil]; options:nil];
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self [NSWorkspace.sharedWorkspace.notificationCenter addObserver:self
selector:@selector(_didDeactivateApplication:) selector:@selector(_didDeactivateApplication:)
name:NSWorkspaceDidDeactivateApplicationNotification name:NSWorkspaceDidDeactivateApplicationNotification
object:nil]; object:nil];
} }
return self; return self;
} }
- (void)dealloc { - (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]; [NSNotificationCenter.defaultCenter removeObserver:self];
[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self]; [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self];
[self unbind:NSStringFromSelector(@selector(enabled))]; [self unbind:NSStringFromSelector(@selector(enabled))];
[self unbind:NSStringFromSelector(@selector(hotKeyData))]; [self unbind:NSStringFromSelector(@selector(hotKeyData))];
} }
#pragma mark - #pragma mark -
#pragma mark Properties #pragma mark Properties
- (BOOL)autotypeSupported {
if(@available(macOS 10.14, *)) {
return AXIsProcessTrusted();
}
/* macOS 10.13 and lower allows us to send key events regardless of accessibilty trust */
return YES;
}
- (void)setEnabled:(BOOL)enabled { - (void)setEnabled:(BOOL)enabled {
if(_enabled != enabled) { if(_enabled != enabled) {
_enabled = enabled; _enabled = enabled;
@@ -124,9 +135,53 @@ static MPAutotypeDaemon *_sharedInstance;
} }
} }
- (void)checkForAccessibiltyPermissions {
if(!self.enabled) {
return;
}
BOOL hideAlert = NO;
if(nil != [NSUserDefaults.standardUserDefaults objectForKey:kMPSettingsKeyAutotypeHideAccessibiltyWarning]) {
hideAlert = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyAutotypeHideAccessibiltyWarning];
}
if(hideAlert || self.autotypeSupported) {
return;
}
else {
NSAlert *alert = [[NSAlert alloc] init];
alert.alertStyle = NSWarningAlertStyle;
alert.messageText = NSLocalizedString(@"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_MESSAGE_TEXT", @"Alert message displayed when Autotype performs self check and lacks accessibilty permissions");
alert.informativeText = NSLocalizedString(@"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_INFORMATIVE_TEXT", @"Alert informative text displayed when Autotype performs self check and lacks accessibilty permissions");
alert.showsSuppressionButton = YES;
[alert addButtonWithTitle:NSLocalizedString(@"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK", @"Button in dialog to leave autotype disabled and continiue!")];
[alert addButtonWithTitle:NSLocalizedString(@"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OPEN_PREFERENCES", @"Button in dialog to open accessibilty preferences pane!")];
NSModalResponse returnCode = [alert runModal];
BOOL suppressWarning = (alert.suppressionButton.state == NSOnState);
[NSUserDefaults.standardUserDefaults setBool:suppressWarning forKey:kMPSettingsKeyAutotypeHideAccessibiltyWarning];
switch(returnCode) {
case NSAlertFirstButtonReturn: {
/* ok, ignore */
break;
}
case NSAlertSecondButtonReturn:
/* open prefs */
[self openAccessibiltyPreferences];
break;
default:
break;
}
}
}
- (void)openAccessibiltyPreferences {
[NSWorkspace.sharedWorkspace openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"]];
}
#pragma mark - #pragma mark -
#pragma mark Autotype Invocation #pragma mark Autotype Invocation
- (void)performAutotypeForEntry:(KPKEntry *)entry { - (void)performAutotypeForEntry:(KPKEntry *)entry {
[self performAutotypeForEntry:entry overrideSequence:nil];
}
- (void)performAutotypeForEntry:(KPKEntry *)entry overrideSequence:(NSString *)sequence {
if(entry) { if(entry) {
[self _updateTargeInformationForApplication:self.previousApplication]; [self _updateTargeInformationForApplication:self.previousApplication];
[self _performAutotypeForEntry:entry]; [self _performAutotypeForEntry:entry];
@@ -134,7 +189,7 @@ static MPAutotypeDaemon *_sharedInstance;
} }
- (void)_didPressHotKey { - (void)_didPressHotKey {
[self _updateTargetInfoForFrontMostApplication]; [self _updateTargetInformationForFrontMostApplication];
[self _performAutotypeForEntry:nil]; [self _performAutotypeForEntry:nil];
} }
@@ -158,21 +213,37 @@ static MPAutotypeDaemon *_sharedInstance;
#pragma mark Autotype Execution #pragma mark Autotype Execution
- (void)_performAutotypeForEntry:(KPKEntry *)entryOrNil { - (void)_performAutotypeForEntry:(KPKEntry *)entryOrNil {
NSInteger pid = [NSProcessInfo processInfo].processIdentifier; /*if(!self.autotypeSupported) {
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = NSApp.applicationName;
notification.informativeText = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_MACPASS_HAS_NO_ACCESSIBILTY_PERMISSIONS", "Notification: Autotype failed, MacPass has no permission to send key strokes");
notification.actionButtonTitle = NSLocalizedString(@"OPEN_PREFERENCES", "Action button in Notification to show the Accessibilty preferences");
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeShowAccessibiltyPreferences };
notification.showsButtons = YES;
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
return;
}*/
NSInteger pid = NSProcessInfo.processInfo.processIdentifier;
if(self.targetPID == pid) { if(self.targetPID == pid) {
return; // We do not perform Autotype on ourselves return; // We do not perform Autotype on ourselves
} }
/* find autotype documents */ /* find autotype documents */
NSArray *documents = [NSApp orderedDocuments]; NSArray *documents = NSApp.orderedDocuments;
/* No open document, inform the user and return without any action */ /* No open document, inform the user and return without any action */
if(documents.count == 0) { if(documents.count == 0) {
NSUserNotification *notification = [[NSUserNotification alloc] init]; NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = NSApp.applicationName; notification.title = NSApp.applicationName;
notification.informativeText = NSLocalizedString(@"AUTOTYPE_OVERLAY_NO_DOCUMENTS", "Notification: Autotype failed, no documents are open"); notification.informativeText = NSLocalizedString(@"AUTOTYPE_OVERLAY_NO_DOCUMENTS", "Notification: Autotype failed, no documents are open");
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; notification.actionButtonTitle = NSLocalizedString(@"OPEN_DOCUMENT", "Action button in Notification to open a document");
return; notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeOpenDocumentRequest };
notification.showsButtons = YES;
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
self.userActionRequested = NSDate.date.timeIntervalSinceReferenceDate;
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didUnlockDatabase:) name:MPDocumentDidUnlockDatabaseNotification object:nil];
return; // Unlock should trigger autotype
} }
NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) { NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
MPDocument *document = evaluatedObject; MPDocument *document = evaluatedObject;
return !document.encrypted;}]; return !document.encrypted;}];
@@ -182,8 +253,12 @@ static MPAutotypeDaemon *_sharedInstance;
[NSApp activateIgnoringOtherApps:YES]; [NSApp activateIgnoringOtherApps:YES];
[NSApp.mainWindow makeKeyAndOrderFront:self]; [NSApp.mainWindow makeKeyAndOrderFront:self];
/* show the actual document window to the user */ /* show the actual document window to the user */
[documents.firstObject showWindows]; MPDocument *document = documents.firstObject;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didUnlockDatabase:) name:MPDocumentDidUnlockDatabaseNotification object:nil]; [document showWindows];
MPDocumentWindowController *wc = document.windowControllers.firstObject;
[wc showPasswordInputWithMessage:NSLocalizedString(@"AUTOTYPE_MESSAGE_UNLOCK_DATABASE", @"Message displayed to the user to unlock the database to perform global autotype")];
self.userActionRequested = NSDate.date.timeIntervalSinceReferenceDate;
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didUnlockDatabase:) name:MPDocumentDidUnlockDatabaseNotification object:nil];
return; // wait for the unlock to happen return; // wait for the unlock to happen
} }
@@ -195,13 +270,14 @@ static MPAutotypeDaemon *_sharedInstance;
if(!entryOrNil) { if(!entryOrNil) {
NSUserNotification *notification = [[NSUserNotification alloc] init]; NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = NSApp.applicationName; notification.title = NSApp.applicationName;
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeFeedback };
if(context) { if(context) {
notification.informativeText = NSLocalizedString(@"AUTOTYPE_OVERLAY_SINGLE_MATCH", "Notification: Autotype found a single match."); notification.informativeText = [NSString stringWithFormat:NSLocalizedString(@"AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@", "Notification: Autotype found a single match for %@ (string placeholder)."), self.targetWindowTitle];
} }
else { else {
notification.informativeText = [NSString stringWithFormat:NSLocalizedString(@"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@", "Noticiation: Autotype failed to find a match for %@ (string placeholder)"), self.targetWindowTitle]; notification.informativeText = [NSString stringWithFormat:NSLocalizedString(@"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@", "Noticiation: Autotype failed to find a match for %@ (string placeholder)"), self.targetWindowTitle];
} }
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; [NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
} }
[self _performAutotypeForContext:context]; [self _performAutotypeForContext:context];
} }
@@ -233,17 +309,18 @@ static MPAutotypeDaemon *_sharedInstance;
if(nil == context) { if(nil == context) {
return; // No context to work with return; // No context to work with
} }
if([self _orderApplicationToFront:self.targetPID]) { if([self _orderApplicationToFront:self.targetPID]) {
/* Sleep a bit after the app was activated */ /* Sleep a bit after the app was activated */
/* TODO - we can use a saver way and use a notification to check if the app actally was activated */ /* TODO - we might be able to a notification to check if the app actally was activated instead of guessing a waiting time */
usleep(1 * NSEC_PER_MSEC); usleep(1 * NSEC_PER_MSEC);
} }
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ for(MPAutotypeCommand *command in [MPAutotypeCommand commandsForContext:context]) {
NSArray<MPAutotypeCommand *> *commands = [MPAutotypeCommand commandsForContext:context]; /* dispatch commands to main thread since most of them translate key events which is disallowed on background thread */
for(MPAutotypeCommand *command in commands) { dispatch_async(dispatch_get_main_queue(), ^{
[command execute]; [command execute];
} });
}); }
} }
#pragma mark - #pragma mark -
@@ -294,16 +371,17 @@ static MPAutotypeDaemon *_sharedInstance;
} }
- (void)_presentSelectionWindow:(NSArray *)candidates { - (void)_presentSelectionWindow:(NSArray *)candidates {
if(!self.matchSelectionWindow) { if(!self.matchSelectionWindow) {
self.matchSelectionWindow = [[NSPanel alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100) self.matchSelectionWindow = [[NSPanel alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSWindowStyleMaskNonactivatingPanel|NSWindowStyleMaskTitled styleMask:NSWindowStyleMaskNonactivatingPanel|NSWindowStyleMaskTitled
backing:NSBackingStoreRetained backing:NSBackingStoreRetained
defer:YES]; defer:YES];
self.matchSelectionWindow.level = NSScreenSaverWindowLevel; self.matchSelectionWindow.level = kCGAssistiveTechHighWindowLevel;
MPAutotypeCandidateSelectionViewController *vc = [[MPAutotypeCandidateSelectionViewController alloc] init]; MPAutotypeCandidateSelectionViewController *vc = [[MPAutotypeCandidateSelectionViewController alloc] init];
vc.candidates = candidates; vc.candidates = candidates;
self.matchSelectionWindow.collectionBehavior |= (NSWindowCollectionBehaviorFullScreenAuxiliary |
NSWindowCollectionBehaviorMoveToActiveSpace |
NSWindowCollectionBehaviorTransient );
self.matchSelectionWindow.contentViewController = vc; self.matchSelectionWindow.contentViewController = vc;
} }
@@ -315,8 +393,18 @@ static MPAutotypeDaemon *_sharedInstance;
#pragma mark MPDocument Notifications #pragma mark MPDocument Notifications
- (void)_didUnlockDatabase:(NSNotification *)notification { - (void)_didUnlockDatabase:(NSNotification *)notification {
/* Remove ourselves and call again to search matches */ /* Remove ourselves and call again to search matches */
[[NSNotificationCenter defaultCenter] removeObserver:self]; [NSNotificationCenter.defaultCenter removeObserver:self name:MPDocumentDidUnlockDatabaseNotification object:nil];
[self _performAutotypeForEntry:nil]; NSTimeInterval now = NSDate.date.timeIntervalSinceReferenceDate;
if(now - self.userActionRequested > 30) {
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = NSApp.applicationName;
notification.informativeText = NSLocalizedString(@"AUTOTYPE_TIMED_OUT", "Notficication: Autotype timed out");
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeFeedback };
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
}
else {
[self _performAutotypeForEntry:nil];
}
} }
#pragma mark - #pragma mark -
@@ -330,15 +418,15 @@ static MPAutotypeDaemon *_sharedInstance;
#pragma mark Application information #pragma mark Application information
- (BOOL)_orderApplicationToFront:(pid_t)processIdentifier { - (BOOL)_orderApplicationToFront:(pid_t)processIdentifier {
NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier]; NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier];
NSRunningApplication *frontApplication = [NSWorkspace sharedWorkspace].frontmostApplication; NSRunningApplication *frontApplication = NSWorkspace.sharedWorkspace.frontmostApplication;
if(frontApplication.processIdentifier == processIdentifier) { if(frontApplication.processIdentifier == processIdentifier) {
return NO; return NO;
} }
[runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps]; [runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps];
return YES; return YES;
} }
- (void)_updateTargetInfoForFrontMostApplication { - (void)_updateTargetInformationForFrontMostApplication {
[self _updateTargeInformationForApplication:[NSWorkspace sharedWorkspace].frontmostApplication]; [self _updateTargeInformationForApplication:NSWorkspace.sharedWorkspace.frontmostApplication];
} }
- (void)_updateTargeInformationForApplication:(NSRunningApplication *)application { - (void)_updateTargeInformationForApplication:(NSRunningApplication *)application {

View File

@@ -28,8 +28,34 @@
@interface MPAutotypeKeyPress : MPAutotypeCommand @interface MPAutotypeKeyPress : MPAutotypeCommand
@property (readonly, assign) MPModifiedKey key; @property (readonly, assign) MPModifiedKey key;
@property (readonly, copy) NSString *character;
/**
Initializes a command with the given keycode and modifier mask
MacPass will update the modifiers according to user preferences to accomodate
for command-control differences between windows/linux and macOS
The virtual key code is used as-is without and re-mapping.
This will result in unexpected behaviour for keyboard layouts other tha us-ascii
use initWithModifierMask:character to initalized the key press command to ensurue the
correct character is typed regardless of the keyboard layout
@param key The modified key to be pressed
@return The press key command with the supplied argurments set
*/
- (instancetype)initWithModifiedKey:(MPModifiedKey)key; - (instancetype)initWithModifiedKey:(MPModifiedKey)key;
/**
Initalizes a command with the given modifier mask and the character to be typed.
A suitable keycode and modifier
@param modiferMask Modifiers mask to use when typing the character
@param character The character to be typed. It is ecnoureaded to use single characters
@return The type command to type the supplied character with the given modifiers
*/
- (instancetype)initWithModifierMask:(CGEventFlags)modiferMask character:(NSString *)character; - (instancetype)initWithModifierMask:(CGEventFlags)modiferMask character:(NSString *)character;
@end @end

View File

@@ -23,42 +23,44 @@
#import "MPAutotypeKeyPress.h" #import "MPAutotypeKeyPress.h"
#import "MPFlagsHelper.h" #import "MPFlagsHelper.h"
#import "MPKeyMapper.h" #import "MPKeyMapper.h"
#import "MPKeyTyper.h"
#import "MPSettingsHelper.h" #import "MPSettingsHelper.h"
@interface MPAutotypeKeyPress ()
@property (copy) NSString *character;
@end
@implementation MPAutotypeKeyPress @implementation MPAutotypeKeyPress
static CGEventFlags _updateModifierMaskForCurrentDefaults(CGEventFlags modifiers) { - (instancetype)initWithModifiedKey:(MPModifiedKey)key {
BOOL sendCommand = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeySendCommandForControlKey]; return [self _initWithModifiedKey:key text:nil];
if(sendCommand && MPIsFlagSetInOptions(kCGEventFlagMaskControl, modifiers)) {
return (modifiers ^ kCGEventFlagMaskControl) | kCGEventFlagMaskCommand;
}
return modifiers;
} }
- (instancetype)initWithModifiedKey:(MPModifiedKey)key { - (instancetype)_initWithModifiedKey:(MPModifiedKey)key text:(NSString *)text {
self = [super init]; self = [super init];
if(self) { if(self) {
_character = [text copy];
_key = key; _key = key;
_key.modifier = _updateModifierMaskForCurrentDefaults(_key.modifier);
} }
return self; return self;
} }
- (instancetype)initWithModifierMask:(CGEventFlags)modiferMask keyCode:(CGKeyCode)code {
self = [self initWithModifiedKey:MPMakeModifiedKey(modiferMask, code)];
return self;
}
- (instancetype)initWithModifierMask:(CGEventFlags)modiferMask character:(NSString *)character { - (instancetype)initWithModifierMask:(CGEventFlags)modiferMask character:(NSString *)character {
MPModifiedKey mappedKey = [MPKeyMapper modifiedKeyForCharacter:character]; /* try to map the character */
if(mappedKey.keyCode == kMPUnknownKeyCode) { if(modiferMask) {
self = nil; MPModifiedKey mappedKey = [MPKeyMapper modifiedKeyForCharacter:character];
if(mappedKey.keyCode == kMPUnknownKeyCode) {
NSLog(@"Error. Unable to determine virtual key for character %@ to send with modifiers %llu.", character, modiferMask);
self = nil;
}
else {
mappedKey.modifier = modiferMask;
self = [self _initWithModifiedKey:mappedKey text:nil];
}
} }
else { else {
if(mappedKey.modifier && (modiferMask != mappedKey.modifier)) { self = [self _initWithModifiedKey:MPMakeModifiedKey(0, 0) text:character];
NSLog(@"Supplied modifiers for character %@ do not match required modifiers", character);
}
self = [self initWithModifierMask:modiferMask keyCode:mappedKey.keyCode];
} }
return self; return self;
} }
@@ -71,8 +73,12 @@ static CGEventFlags _updateModifierMaskForCurrentDefaults(CGEventFlags modifiers
if(![self isValid]) { if(![self isValid]) {
return; // no valid command. Stop. return; // no valid command. Stop.
} }
//CGKeyCode mappedKey = [self _transformKeyCode]; if(self.character) {
[self sendPressKey:self.key]; [MPKeyTyper sendText:self.character];
}
else {
[MPKeyTyper sendKey:self.key];
}
} }
- (BOOL)isValid { - (BOOL)isValid {
@@ -82,3 +88,4 @@ static CGEventFlags _updateModifierMaskForCurrentDefaults(CGEventFlags modifiers
} }
@end @end

View File

@@ -0,0 +1,25 @@
//
// MPAutotypeParser.h
// MacPass
//
// Created by Michael Starke on 02.11.18.
// Copyright © 2018 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class MPAutotypeCommand;
@class MPAutotypeContext;
@interface MPAutotypeParser : NSObject
@property (nonatomic, copy, readonly) NSArray<MPAutotypeCommand *> *commands;
@property (readonly, strong) MPAutotypeContext *context;
- (instancetype)initWithContext:(MPAutotypeContext *)context;
@end
NS_ASSUME_NONNULL_END

428
MacPass/MPAutotypeParser.m Normal file
View File

@@ -0,0 +1,428 @@
//
// MPAutotypeParser.m
// MacPass
//
// Created by Michael Starke on 02.11.18.
// Copyright © 2018 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypeParser.h"
#import "MPAutotypeClear.h"
#import "MPAutotypeContext.h"
#import "MPAutotypeDelay.h"
#import "MPAutotypeKeyPress.h"
#import "MPAutotypePaste.h"
#import "MPKeyMapper.h"
#import "MPFlagsHelper.h"
#import "MPSettingsHelper.h"
#import "NSString+MPComposedCharacterAdditions.h"
#import <KeePassKit/KeePassKit.h>
#import <Carbon/Carbon.h>
#import <CommonCrypto/CommonCrypto.h>
static CGKeyCode kMPFunctionKeyCodes[] = {
kVK_F1,
kVK_F2,
kVK_F3,
kVK_F4,
kVK_F5,
kVK_F6,
kVK_F7,
kVK_F8,
kVK_F9,
kVK_F10,
kVK_F11,
kVK_F12,
kVK_F13,
kVK_F14,
kVK_F15,
kVK_F16,
kVK_F17,
kVK_F18,
kVK_F19
};
static CGKeyCode kMPNumpadKeyCodes[] = {
kVK_ANSI_Keypad0,
kVK_ANSI_Keypad1,
kVK_ANSI_Keypad2,
kVK_ANSI_Keypad3,
kVK_ANSI_Keypad4,
kVK_ANSI_Keypad5,
kVK_ANSI_Keypad6,
kVK_ANSI_Keypad7,
kVK_ANSI_Keypad8,
kVK_ANSI_Keypad9
};
@interface NSNumber (AutotypeCommand)
@property (nonatomic, readonly, assign) CGEventFlags eventFlagsValue;
@property (nonatomic, readonly, assign) CGKeyCode keyCodeValue;
@end
@implementation NSNumber (AutotypeCommand)
- (CGEventFlags)eventFlagsValue {
return (CGEventFlags)self.integerValue;
}
- (CGKeyCode)keyCodeValue {
return (CGKeyCode)self.integerValue;
}
@end
@interface MPAutotypeParser ()
@property (strong) NSMutableArray<MPAutotypeCommand *> *mutableCommands;
@property (strong, nonatomic, readonly) NSDictionary *keyPressCommands;
@property (strong, nonatomic, readonly) NSDictionary *characterCommands;
@property (strong, nonatomic, readonly) NSDictionary *modifierCommands;
@end
@implementation MPAutotypeParser
@dynamic commands;
@dynamic keyPressCommands;
@dynamic characterCommands;
@dynamic modifierCommands;
- (NSDictionary *)keypressCommands {
static NSDictionary *keypressCommands;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
keypressCommands = @{ kKPKAutotypeBackspace : @(kVK_Delete),
//kKPKAutotypeBreak : @0,
kKPKAutotypeCapsLock : @(kVK_CapsLock),
kKPKAutotypeDelete : @(kVK_ForwardDelete),
kKPKAutotypeDown : @(kVK_DownArrow),
kKPKAutotypeEnd : @(kVK_End),
kKPKAutotypeEnter : @(kVK_Return),
kKPKAutotypeEscape : @(kVK_Escape),
kKPKAutotypeHelp : @(kVK_Help),
kKPKAutotypeHome : @(kVK_Home),
//kKPKAutotypeInsert : @(),
kKPKAutotypeLeft : @(kVK_LeftArrow),
kKPKAutotypeLeftWindows : @(kVK_Command),
//kKPKAutotypeNumlock : @(),
kKPKAutotypePageDown : @(kVK_PageDown),
kKPKAutotypePageUp : @(kVK_PageUp),
//kKPKAutotypePrintScreen : @(),
kKPKAutotypeRight : @(kVK_RightArrow),
kKPKAutotypeRightWindows : @(kVK_Command),
//kKPKAutotypeScrollLock : @(),
kKPKAutotypeSpace : @(kVK_Space),
kKPKAutotypeTab : @(kVK_Tab),
kKPKAutotypeUp : @(kVK_UpArrow),
kKPKAutotypeWindows : @(kVK_Command)
};
});
return keypressCommands;
}
/* Commands that are actually just one symbol to be pasted */
- (NSDictionary *)characterCommands {
static NSDictionary *characterCommands;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
characterCommands = @{
kKPKAutotypePlus: @"+",
kKPKAutotypeCaret: @"^",
kKPKAutotypePercent: @"%",
kKPKAutotypeTilde : @"~",
kKPKAutotypeRoundBracketLeft : @"(",
kKPKAutotypeRoundBracketRight : @")",
kKPKAutotypeSquareBracketLeft : @"[",
kKPKAutotypeSquareBracketRight : @"]",
kKPKAutotypeCurlyBracketLeft: @"{",
kKPKAutotypeCurlyBracketRight: @"}"
};
});
return characterCommands;
}
/**
* Mapping for modifier to CGEventFlags.
*
* @return dictionary with commands as keys and CGEventFlags as wrapped values
*/
- (NSDictionary *)modifierCommands {
static NSDictionary *modifierCommands;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
modifierCommands = @{
kKPKAutotypeAlt : @(kCGEventFlagMaskAlternate),
kKPKAutotypeControl : @(kCGEventFlagMaskControl),
kKPKAutotypeShift : @(kCGEventFlagMaskShift)
};
});
return modifierCommands;
}
- (instancetype)initWithContext:(MPAutotypeContext *)context {
self = [super init];
if(self) {
_context = context;
}
return self;
}
- (NSArray<MPAutotypeCommand *> *)commands {
if(!self.mutableCommands) {
[self _parseCommands];
}
return [self.mutableCommands copy];
}
- (void)_parseCommands {
if(!self.context.valid) {
return;
}
NSUInteger reserverd = MAX(1,self.context.normalizedCommand.length / 4);
self.mutableCommands = [[NSMutableArray alloc] initWithCapacity:reserverd];
NSMutableArray __block *commandRanges = [[NSMutableArray alloc] initWithCapacity:reserverd];
NSRegularExpression *commandRegExp = [[NSRegularExpression alloc] initWithPattern:@"\\{[^\\{\\}]+\\}" options:NSRegularExpressionCaseInsensitive error:0];
NSAssert(commandRegExp, @"RegExp is constant. Has to work all the time");
[commandRegExp enumerateMatchesInString:self.context.evaluatedCommand options:0 range:NSMakeRange(0, self.context.evaluatedCommand.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
@autoreleasepool {
[commandRanges addObject:[NSValue valueWithRange:result.range]];
}
}];
/* add range at the end as terminator */
[commandRanges addObject:[NSValue valueWithRange:NSMakeRange(self.context.evaluatedCommand.length, 0)]];
NSUInteger location = 0;
CGEventFlags modifiers = 0;
for(NSValue *rangeValue in commandRanges) {
NSRange commandRange = rangeValue.rangeValue;
/* All non-commands will get translated into key presses if possible, otherwiese into paste commands */
if(location < commandRange.location) {
/* If there were modifiers we need to use the next single stroke and update the modifier command */
if(modifiers) {
NSString *modifiedKey = [self.context.evaluatedCommand substringWithRange:NSMakeRange(location, 1)];
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifierMask:modifiers character:modifiedKey];
if(press) {
[self.mutableCommands addObject:press];
}
modifiers = 0;
location++;
}
NSRange textRange = NSMakeRange(location, commandRange.location - location);
if(textRange.length > 0) {
NSString *textValue = [self.context.evaluatedCommand substringWithRange:textRange];
[self _appendTextCommandWithContent:textValue];
}
}
/* Test for modifer Key */
NSString *commandString = [self.context.evaluatedCommand substringWithRange:commandRange];
/* append commands for non-modifer keys */
if(![self _updateModifierMask:&modifiers forCommand:commandString]) {
[self _appendCommandForString:commandString activeModifer:modifiers];
modifiers = 0; // Reset the modifers;
}
location = commandRange.location + commandRange.length;
}
}
- (BOOL)_updateModifierMask:(CGEventFlags *)mask forCommand:(NSString *)commandString {
NSAssert(mask != NULL, @"Input pointer missing!");
if(mask == NULL) {
return NO;
}
NSNumber *flagNumber = self.modifierCommands[commandString.uppercaseString];
if(!flagNumber) {
return NO; // No modifier key, just leave
}
CGEventFlags flags = flagNumber.eventFlagsValue;
BOOL useCommandForControl = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeySendCommandForControlKey];
if(useCommandForControl && flags == kCGEventFlagMaskControl) {
flags = kCGEventFlagMaskCommand;
}
*mask |= flags;
return YES;
}
- (void)_appendCommandForString:(NSString *)commandString activeModifer:(CGEventFlags)flags {
if(!commandString || !commandString.length) {
return;
}
/* Simple Special Press */
NSString *uppercaseCommand = commandString.uppercaseString;
NSNumber *keyCodeNumber = self.keypressCommands[uppercaseCommand];
if(nil != keyCodeNumber) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(flags, keyCodeNumber.keyCodeValue)];
if(press) {
[self.mutableCommands addObject:press];
}
return; // Done
}
/* {PLUS}, {TILDE}, {PERCENT}, {+}, etc */
NSString *character = self.characterCommands[uppercaseCommand];
if(character) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifierMask:flags character:character];
if(press) {
[self.mutableCommands addObject:press];
}
return; // Done
}
/* F1-16 */
static NSRegularExpression *functionKeyRegExp;
static NSRegularExpression *numpadKeyRegExp;
static NSRegularExpression *delayRegExp;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *delayPattern = [[NSString alloc] initWithFormat:@"\\{(%@|%@)[ |=]+([0-9]+)\\}",
kKPKAutotypeDelay,
kKPKAutotypeVirtualKey/*,
kKPKAutotypeVirtualExtendedKey,
kKPKAutotypeVirtualNonExtendedKey*/];
functionKeyRegExp = [[NSRegularExpression alloc] initWithPattern:kKPKAutotypeFunctionMaskRegularExpression options:NSRegularExpressionCaseInsensitive error:0];
numpadKeyRegExp = [[NSRegularExpression alloc] initWithPattern:kKPKAutotypeKeypaddNumberMaskRegularExpression options:NSRegularExpressionCaseInsensitive error:0];
delayRegExp = [[NSRegularExpression alloc] initWithPattern:delayPattern options:NSRegularExpressionCaseInsensitive error:0];
});
NSTextCheckingResult *functionResult = [functionKeyRegExp firstMatchInString:commandString options:0 range:NSMakeRange(0, commandString.length)];
if(functionResult && functionResult.numberOfRanges == 2) {
NSString *numberString = [commandString substringWithRange:[functionResult rangeAtIndex:1]];
NSScanner *numberScanner = [[NSScanner alloc] initWithString:numberString];
NSInteger functionNumber = 0;
if([numberScanner scanInteger:&functionNumber] && functionNumber >= 1 && functionNumber <= 19) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(flags, kMPFunctionKeyCodes[functionNumber-1])];
if(press) {
[self.mutableCommands addObject:press];
}
return; // Done
}
}
/* Numpad0-9 */
NSTextCheckingResult *numpadResult = [numpadKeyRegExp firstMatchInString:commandString options:0 range:NSMakeRange(0, commandString.length)];
if(numpadResult && numpadResult.numberOfRanges == 2) {
NSString *numberString = [commandString substringWithRange:[numpadResult rangeAtIndex:1]];
NSScanner *numberScanner = [[NSScanner alloc] initWithString:numberString];
NSInteger numpadNumber = 0;
if([numberScanner scanInteger:&numpadNumber] && numpadNumber >= 0 && numpadNumber <= 9) {
MPAutotypeKeyPress *press = [[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(flags, kMPNumpadKeyCodes[numpadNumber])];
if(press) {
[self.mutableCommands addObject:press];
}
return; // Done
}
}
/* Clearfield */
if([kKPKAutotypeClearField isEqualToString:uppercaseCommand]) {
[self.mutableCommands addObject:[[MPAutotypeClear alloc] init]];
return; // Done
}
// TODO: add {APPLICATION <appname>}
/* Delay */
NSTextCheckingResult *result = [delayRegExp firstMatchInString:commandString options:0 range:NSMakeRange(0, commandString.length)];
if(result && (result.numberOfRanges == 3)) {
NSString *uppercaseCommand = [[commandString substringWithRange:[result rangeAtIndex:1]] uppercaseString];
NSString *valueString = [commandString substringWithRange:[result rangeAtIndex:2]];
NSScanner *numberScanner = [[NSScanner alloc] initWithString:valueString];
NSInteger value;
if([numberScanner scanInteger:&value]) {
if([kKPKAutotypeDelay isEqualToString:uppercaseCommand]) {
if(MAX(0, value) <= 0) {
return; // Value too low, just skipp
}
[self.mutableCommands addObject:[[MPAutotypeDelay alloc] initWithDelay:value]];
return; // Done
}
else if([kKPKAutotypeVirtualKey isEqualToString:uppercaseCommand]) {
NSLog(@"Virtual key strokes aren't supported yet!");
// TODO add key
}
}
else {
NSLog(@"Unable to parse value part in command:%@", commandString);
}
}
else {
/* Fallback */
[self _appendTextCommandWithContent:commandString];
}
}
- (void)_appendTextCommandWithContent:(NSString *)content {
if(content.length == 0) {
return;
}
BOOL obfuscate = self.context.entry.autotype.obfuscateDataTransfer;
if(obfuscate) {
@autoreleasepool {
/*
* obfuscate entered data using Two-Channel Auto-Type Obfuscation
* refer to KeePass documentation for more information
* http://keepass.info/help/v2/autotype_obfuscation.html
*/
NSMutableString *paste = [[NSMutableString alloc] initWithString:@""];
//NSMutableArray<NSValue *> *typeKeys = [[NSMutableArray alloc] init];
NSMutableArray<MPAutotypeCommand *> *typeCommands = [[NSMutableArray alloc] init];
/*
* seed the random number generator using the first 4 bytes of the string's SHA1
* this ensures that you get the same string split every time for a given string
*/
const char *cstr = [content cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:content.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (unsigned int)data.length, digest);
srandom(*((unsigned int*)digest));
for(NSString *key in content.composedCharacters) {
NSUInteger part = random() % 2;
if (part == 0) {
[paste appendString:key];
[typeCommands addObject:[[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(0, kVK_RightArrow)]];
}
else {
[typeCommands addObject:[[MPAutotypeKeyPress alloc] initWithModifierMask:0 character:key]];
}
}
/* move to the end of the content */
for (NSUInteger i = typeCommands.count; i < content.composedCharacterLength; i++) {
[typeCommands addObject:[[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(0, kVK_RightArrow)]];
}
/* add paste command */
MPAutotypePaste *pasteCommand = [[MPAutotypePaste alloc] initWithString:paste];
[self.mutableCommands addObject:pasteCommand];
/* add keypress commands */
if(typeCommands.count > 0) {
for(NSUInteger i = 0; i < paste.composedCharacterLength; i++) {
MPAutotypeKeyPress *pressLeftArrowCommand = [[MPAutotypeKeyPress alloc] initWithModifiedKey:MPMakeModifiedKey(0, kVK_LeftArrow)];
if(pressLeftArrowCommand) {
[self.mutableCommands addObject:pressLeftArrowCommand];
}
}
[self.mutableCommands addObjectsFromArray:typeCommands];
}
}
}
else {
for(NSString *character in content.composedCharacters) {
MPAutotypeKeyPress *keyPress = [[MPAutotypeKeyPress alloc] initWithModifierMask:0 character:character];
if(keyPress) {
[self.mutableCommands addObject:keyPress];
}
}
}
}
@end

View File

@@ -22,6 +22,7 @@
#import "MPAutotypePaste.h" #import "MPAutotypePaste.h"
#import "MPPasteBoardController.h" #import "MPPasteBoardController.h"
#import "MPKeyTyper.h"
#import "KeePassKit/KeePassKit.h" #import "KeePassKit/KeePassKit.h"
@@ -51,12 +52,11 @@
- (void)execute { - (void)execute {
if([self.pasteData length] > 0) { if([self.pasteData length] > 0) {
MPPasteBoardController *controller = [MPPasteBoardController defaultController]; [MPPasteBoardController.defaultController stashObjects];
[controller stashObjects]; [MPPasteBoardController.defaultController copyObjectsWithoutTimeout:@[self.pasteData]];
[controller copyObjectsWithoutTimeout:@[self.pasteData]]; [MPKeyTyper sendPaste];
[self sendPasteKeyCode]; usleep(0.2 * NSEC_PER_MSEC); // on 10.10 we need to wait a bit before restoring the pasteboard contents
usleep(0.1 * NSEC_PER_MSEC); // on 10.10 we need to wait a bit before restoring the pasteboard contents [MPPasteBoardController.defaultController restoreObjects];
[controller restoreObjects];
} }
} }

View File

@@ -5,6 +5,20 @@
// Created by Michael Starke on 18.09.17. // Created by Michael Starke on 18.09.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved. // Copyright © 2017 HicknHack Software GmbH. All rights reserved.
// //
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>

View File

@@ -5,6 +5,20 @@
// Created by Michael Starke on 18.09.17. // Created by Michael Starke on 18.09.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved. // Copyright © 2017 HicknHack Software GmbH. All rights reserved.
// //
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import "MPCollectionView.h" #import "MPCollectionView.h"

View File

@@ -5,6 +5,20 @@
// Created by Michael Starke on 15.09.17. // Created by Michael Starke on 15.09.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved. // Copyright © 2017 HicknHack Software GmbH. All rights reserved.
// //
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>

View File

@@ -5,6 +5,20 @@
// Created by Michael Starke on 15.09.17. // Created by Michael Starke on 15.09.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved. // Copyright © 2017 HicknHack Software GmbH. All rights reserved.
// //
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import "MPCollectionViewItem.h" #import "MPCollectionViewItem.h"
#import "MPIconSelectViewController.h" #import "MPIconSelectViewController.h"

View File

@@ -25,9 +25,19 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
/**
Common UTIs
*/
FOUNDATION_EXPORT NSString *const MPPasteBoardType; FOUNDATION_EXPORT NSString *const MPPasteBoardType;
FOUNDATION_EXPORT NSString *const MPKdbDocumentUTI; FOUNDATION_EXPORT NSString *const MPKdbDocumentUTI;
FOUNDATION_EXPORT NSString *const MPKdbxDocumentUTI; FOUNDATION_EXPORT NSString *const MPKdbxDocumentUTI;
FOUNDATION_EXPORT NSString *const MPPluginUTI;
/**
Bundle keys
*/
FOUNDATION_EXPORT NSString *const MPBundleHelpURLKey;
FOUNDATION_EXPORT NSString *const MPBundlePluginRepositoryURLKey;
FOUNDATION_EXPORT NSString *const MPPluginCompatibilityURLKey;
#endif #endif

View File

@@ -22,6 +22,12 @@
#import "MPConstants.h" #import "MPConstants.h"
NSString *const MPPasteBoardType = @"com.hicknhack.macpass.pasteboard"; NSString *const MPPasteBoardType = @"com.hicknhack.macpass.pasteboard";
NSString *const MPKdbDocumentUTI = @"com.hicknhack.macpass.kdb"; NSString *const MPKdbDocumentUTI = @"com.hicknhack.macpass.kdb";
NSString *const MPKdbxDocumentUTI = @"com.hicknhack.macpass.kdbx"; NSString *const MPKdbxDocumentUTI = @"com.hicknhack.macpass.kdbx";
NSString *const MPPluginUTI = @"com.hicknhack.macpass.plugin";
NSString *const MPBundleHelpURLKey = @"MPHelpURL";
NSString *const MPBundlePluginRepositoryURLKey = @"MPPluginRepositoryURL";
NSString *const MPPluginCompatibilityURLKey = @"MPPluginCompatibilityURLKey";

View File

@@ -23,18 +23,17 @@
#import "MPViewController.h" #import "MPViewController.h"
#import "MPDocument.h" #import "MPDocument.h"
@class HNHUIGradientView;
@class MPDocument; @class MPDocument;
@interface MPContextBarViewController : MPViewController @interface MPContextBarViewController : MPViewController <NSStackViewDelegate>
@property (weak) IBOutlet NSButton *titleButton; @property (weak) IBOutlet NSButton *titleButton;
@property (weak) IBOutlet NSButton *usernameButton; @property (weak) IBOutlet NSButton *usernameButton;
@property (weak) IBOutlet NSButton *passwordButton; @property (weak) IBOutlet NSButton *passwordButton;
@property (weak) IBOutlet NSButton *urlButton; @property (weak) IBOutlet NSButton *urlButton;
@property (weak) IBOutlet NSButton *notesButton; @property (weak) IBOutlet NSButton *notesButton;
@property (weak) IBOutlet NSButton *duplicatePasswordsButton;
@property (weak) IBOutlet NSPopUpButton *specialFilterPopUpButton; @property (weak) IBOutlet NSPopUpButton *specialFilterPopUpButton;
@property (weak) IBOutlet NSButton *everywhereButton;
- (void)registerNotificationsForDocument:(MPDocument *)document; - (void)registerNotificationsForDocument:(MPDocument *)document;

View File

@@ -41,17 +41,17 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
@interface MPContextBarViewController () @interface MPContextBarViewController ()
@property (strong) NSString *selectMenuItemTitle;
@property (strong) NSString *multipleMenuItemTitle;
@property (nonatomic, assign) MPContextTab activeTab; @property (nonatomic, assign) MPContextTab activeTab;
/* Filter */ /* Filter */
@property (weak) IBOutlet NSButton *filterDoneButton; @property (weak) IBOutlet NSButton *filterDoneButton;
@property (weak) IBOutlet NSTextField *filterLabelTextField;
/* History */ /* History */
@property (weak) IBOutlet HNHUIGradientView *historyBar;
@property (weak) IBOutlet NSTextField *historyLabel; @property (weak) IBOutlet NSTextField *historyLabel;
@property (weak) IBOutlet NSButton *exitHistoryButton; @property (weak) IBOutlet NSButton *exitHistoryButton;
/* Trash*/ /* Trash*/
@property (weak) IBOutlet HNHUIGradientView *trashBar;
@property (weak) IBOutlet NSButton *emptyTrashButton; @property (weak) IBOutlet NSButton *emptyTrashButton;
@end @end
@@ -66,27 +66,18 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
#pragma mark Livecycle #pragma mark Livecycle
- (void)dealloc { - (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]; [NSNotificationCenter.defaultCenter removeObserver:self];
} }
- (void)awakeFromNib { - (void)awakeFromNib {
self.filterLabelTextField.cell.backgroundStyle = NSBackgroundStyleRaised; self.selectMenuItemTitle = NSLocalizedString(@"SELECT_FILTER_WITH_DOTS", "Menu displayed as popup selection for search options if no filter is selected");
//self.historyBar.activeGradient = [[NSGradient alloc] initWithStartingColor:[[NSColor orangeColor] shadowWithLevel:0.2] endingColor:[[NSColor orangeColor] highlightWithLevel:0.2]]; self.multipleMenuItemTitle = NSLocalizedString(@"MULTIPLE_FILTERS_ACTIVE_WITH_DOTS", "Menu displayed as popup selection for search options when multiple items are selected");
/* Setup Trash Bar color */
if(!HNHUIIsRunningOnYosemiteOrNewer()) {
NSArray *activeColors = @[[NSColor colorWithCalibratedWhite:0.2 alpha:1],[NSColor colorWithCalibratedWhite:0.4 alpha:1]];
NSArray *inactiveColors = @[[NSColor colorWithCalibratedWhite:0.3 alpha:1],[NSColor colorWithCalibratedWhite:0.6 alpha:1]];
self.trashBar.activeGradient = [[NSGradient alloc] initWithColors:activeColors];
self.trashBar.inactiveGradient = [[NSGradient alloc] initWithColors:inactiveColors];
//self.emptyTrashButton.textColor = [NSColor whiteColor];
}
[self.view bind:NSSelectedIndexBinding toObject:self withKeyPath:NSStringFromSelector(@selector(activeTab)) options:nil]; [self.view bind:NSSelectedIndexBinding toObject:self withKeyPath:NSStringFromSelector(@selector(activeTab)) options:nil];
/* Setup Filter Bar buttons and menu */ /* Setup Filter Bar buttons and menu */
NSInteger tags[] = { MPEntrySearchTitles, MPEntrySearchUsernames, MPEntrySearchPasswords, MPEntrySearchNotes, MPEntrySearchUrls }; NSInteger tags[] = { MPEntrySearchTitles, MPEntrySearchUsernames, MPEntrySearchPasswords, MPEntrySearchNotes, MPEntrySearchUrls, MPEntrySearchAllAttributes };
NSArray<NSControl *> *buttons = @[self.titleButton, self.usernameButton, self.passwordButton, self.notesButton, self.urlButton ]; NSArray<NSControl *> *buttons = @[self.titleButton, self.usernameButton, self.passwordButton, self.notesButton, self.urlButton, self.everywhereButton ];
for(NSUInteger iIndex = 0; iIndex < buttons.count; iIndex++) { for(NSUInteger iIndex = 0; iIndex < buttons.count; iIndex++) {
buttons[iIndex].action = @selector(toggleSearchFlags:); buttons[iIndex].action = @selector(toggleSearchFlags:);
buttons[iIndex].tag = tags[iIndex]; buttons[iIndex].tag = tags[iIndex];
@@ -94,25 +85,25 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
NSInteger specialTags[] = { MPEntrySearchDoublePasswords, MPEntrySearchExpiredEntries }; NSInteger specialTags[] = { MPEntrySearchDoublePasswords, MPEntrySearchExpiredEntries };
NSArray *titles = @[ NSLocalizedString(@"SEARCH_DUPLICATE_PASSWORDS", "Search option: Find duplicate passwords"), NSLocalizedString(@"SEARCH_EXPIRED_ENTRIES", "Search option: Find expired entries") ]; NSArray *titles = @[ NSLocalizedString(@"SEARCH_DUPLICATE_PASSWORDS", "Search option: Find duplicate passwords"), NSLocalizedString(@"SEARCH_EXPIRED_ENTRIES", "Search option: Find expired entries") ];
NSMenu *specialMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"CUSTOM_SEARCH_FILTER_MENU", @"Title for menu for custom search filters")]; NSMenu *specialMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"CUSTOM_SEARCH_FILTER_MENU", @"Title for menu for custom search filters")];
[specialMenu addItemWithTitle:NSLocalizedString(@"SELECT_FILTER_WITH_DOTS", "Menu displayed as popup selection for search options") action:NULL keyEquivalent:@""]; [specialMenu addItemWithTitle:self.selectMenuItemTitle action:NULL keyEquivalent:@""];
[specialMenu itemAtIndex:0].enabled = NO; NSMenuItem *selectItem = specialMenu.itemArray.firstObject;
[specialMenu itemAtIndex:0].tag = MPEntrySearchNone; selectItem.enabled = NO;
[specialMenu itemAtIndex:0].action = @selector(toggleSearchFlags:); selectItem.tag = MPEntrySearchNone;
for(NSInteger iIndex = 0; iIndex < (sizeof(specialTags)/sizeof(NSInteger)); iIndex++) { for(NSInteger iIndex = 0; iIndex < (sizeof(specialTags)/sizeof(NSInteger)); iIndex++) {
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:titles[iIndex] action:@selector(toggleSearchFlags:) keyEquivalent:@""]; NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:titles[iIndex] action:@selector(toggleSearchFlags:) keyEquivalent:@""];
item.tag = specialTags[iIndex]; item.tag = specialTags[iIndex];
[specialMenu addItem:item]; [specialMenu addItem:item];
} }
[self.specialFilterPopUpButton setMenu:specialMenu]; self.specialFilterPopUpButton.menu = specialMenu;
[self _updateFilterButtons]; [self _updateFilterButtons];
} }
#pragma mark MPDocument Notifications #pragma mark MPDocument Notifications
- (void)registerNotificationsForDocument:(MPDocument *)document { - (void)registerNotificationsForDocument:(MPDocument *)document {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateFilterButtons) name:MPDocumentDidChangeSearchFlags object:document]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_updateFilterButtons) name:MPDocumentDidChangeSearchFlags object:document];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didEnterSearch:) name:MPDocumentDidEnterSearchNotification object:document]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didEnterSearch:) name:MPDocumentDidEnterSearchNotification object:document];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_showEntryHistory:) name:MPDocumentShowEntryHistoryNotification object:document]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_showEntryHistory:) name:MPDocumentShowEntryHistoryNotification object:document];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didChangeCurrentItem:) name:MPDocumentCurrentItemChangedNotification object:document]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didChangeCurrentItem:) name:MPDocumentCurrentItemChangedNotification object:document];
} }
- (void)_didEnterSearch:(NSNotification *)notification { - (void)_didEnterSearch:(NSNotification *)notification {
@@ -134,42 +125,90 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
} }
} }
/* - (void)stackView:(NSStackView *)stackView willDetachViews:(NSArray<NSView *> *)views {
- (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector { for(NSView *view in views) {
if(commandSelector == @selector(insertNewline:)) { if([view isKindOfClass:NSButton.class]) {
[self _didChangeFilter]; NSButton *button = (NSButton *)view;
} NSMenu *menu = self.specialFilterPopUpButton.menu;
return NO; NSMenuItem *item = [menu itemWithTag:button.tag];
} if(item) {
*/ return; // no duplicates
}
item = [self _menuItemForButton:button];
if(item) {
if(menu.itemArray.count == 3) {
[menu addItem:[NSMenuItem separatorItem]];
}
[menu addItem:item];
}
}
}
[self _updateFilterButtons];
}
- (void)stackView:(NSStackView *)stackView didReattachViews:(NSArray<NSView *> *)views {
for(NSView *view in views) {
if([view isKindOfClass:NSButton.class]) {
NSButton *button = (NSButton *)view;
NSMenu *menu = self.specialFilterPopUpButton.menu;
NSMenuItem *item = [menu itemWithTag:button.tag];
if(item) {
[menu removeItem:item];
if(menu.itemArray.count == 4) {
[menu removeItemAtIndex:3];
}
}
}
}
[self _updateFilterButtons];
}
#pragma mark UI Helper #pragma mark UI Helper
- (void)_updateFilterButtons { - (void)_updateFilterButtons {
MPDocument *document = self.windowController.document; MPDocument *document = self.windowController.document;
MPEntrySearchFlags currentFlags = document.searchContext.searchFlags; MPEntrySearchFlags currentFlags = document.searchContext.searchFlags;
self.duplicatePasswordsButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchDoublePasswords, currentFlags));
self.notesButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchNotes, currentFlags)); self.notesButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchNotes, currentFlags));
self.passwordButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchPasswords, currentFlags)); self.passwordButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchPasswords, currentFlags));
self.titleButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchTitles, currentFlags)); self.titleButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchTitles, currentFlags));
self.urlButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchUrls, currentFlags)); self.urlButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchUrls, currentFlags));
self.usernameButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchUsernames, currentFlags)); self.usernameButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchUsernames, currentFlags));
NSInteger selectedTag = MPEntrySearchNone; self.everywhereButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchAllAttributes, currentFlags));
for(NSMenuItem *item in [[self.specialFilterPopUpButton menu] itemArray]) { NSMutableSet *activeTags = [[NSMutableSet alloc] init];
for(NSMenuItem *item in self.specialFilterPopUpButton.menu.itemArray) {
MPEntrySearchFlags flag = item.tag; MPEntrySearchFlags flag = item.tag;
if(flag == MPEntrySearchNone) { if(flag == MPEntrySearchNone) {
item.state = NSOffState; item.state = NSOffState;
item.enabled = NO; item.enabled = NO;
continue;
}
BOOL isActive = MPIsFlagSetInOptions(flag, currentFlags);
if(isActive) {
[activeTags addObject:@(flag)];
}
item.state = HNHUIStateForBool(isActive);
}
NSMenuItem *item = [self.specialFilterPopUpButton.menu itemWithTag:MPEntrySearchNone];
if(activeTags.count > 1) {
item.title = self.multipleMenuItemTitle;
[self.specialFilterPopUpButton selectItemWithTag:MPEntrySearchNone];
}
else {
item.title = self.selectMenuItemTitle;
if(activeTags.count == 1) {
NSInteger tag = [activeTags.anyObject integerValue];
[self.specialFilterPopUpButton selectItemWithTag:tag];
} }
else { else {
BOOL isActive = MPIsFlagSetInOptions(flag, currentFlags); [self.specialFilterPopUpButton selectItemWithTag:MPEntrySearchNone];
if(isActive) {
selectedTag = flag;
}
item.state = HNHUIStateForBool(isActive);
} }
} }
[self.specialFilterPopUpButton selectItemWithTag:selectedTag]; }
- (NSMenuItem *)_menuItemForButton:(NSButton *)button {
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:button.title action:@selector(toggleSearchFlags:) keyEquivalent:@""];
item.tag = button.tag;
return item;
} }
@end @end

View File

@@ -22,12 +22,10 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
@interface MPContextToolbarButton : NSSegmentedControl @interface MPContextButton : NSSegmentedControl
@property (nonatomic, strong) NSMenu *contextMenu;
- (void)setImage:(NSImage *)image; - (void)setImage:(NSImage *)image;
- (void)setContextMenu:(NSMenu *)menu;
- (NSControlSize)controlSize;
- (void)setControlSize:(NSControlSize)controlSize;
@end @end

View File

@@ -20,42 +20,52 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// //
#import "MPContextToolbarButton.h" #import "MPContextButton.h"
#import "MPSegmentedContextCell.h" #import "MPSegmentedContextCell.h"
@interface MPContextToolbarButton () { @interface MPContextButton ()
@private
NSMenu *_contextMenu;
}
@end @end
@implementation MPContextToolbarButton @implementation MPContextButton
- (id)initWithFrame:(NSRect)frame { - (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithFrame:frame]; self = [super initWithCoder:coder];
if (self) { if(self) {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:[self cell]]; [self _setup];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
MPSegmentedContextCell *cell = [[MPSegmentedContextCell alloc] initWithCoder:unarchiver];
self.cell = cell;
self.focusRingType = NSFocusRingTypeNone;
self.segmentCount = 2;
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
self.segmentStyle = NSSegmentStyleTexturedSquare;
[cell setWidth:31 forSegment:0];
[cell setWidth:17 forSegment:1];
NSImage *contextTriangle = [[NSBundle mainBundle] imageForResource:@"contextTriangleTemplate"];
[self setImage:contextTriangle forSegment:1];
cell.contextMenuAction = @selector(showContextMenu:);
cell.contextMenuTarget = self;
} }
return self; return self;
} }
- (instancetype)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self _setup];
}
return self;
}
- (void)_setup {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:[self cell]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
MPSegmentedContextCell *cell = [[MPSegmentedContextCell alloc] initWithCoder:unarchiver];
self.cell = cell;
self.focusRingType = NSFocusRingTypeNone;
self.segmentStyle = NSSegmentStyleTexturedSquare;
self.segmentCount = 2;
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
[cell setWidth:31 forSegment:0];
[cell setWidth:17 forSegment:1];
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
NSImage *contextTriangle = [NSBundle.mainBundle imageForResource:@"contextTriangleTemplate"];
[self setImage:contextTriangle forSegment:1];
cell.contextMenuAction = @selector(showContextMenu:);
cell.contextMenuTarget = self;
}
- (void)setContextMenu:(NSMenu *)menu { - (void)setContextMenu:(NSMenu *)menu {
if(_contextMenu != menu) { if(_contextMenu != menu) {
_contextMenu = menu; _contextMenu = menu;
@@ -106,25 +116,11 @@
default: default:
break; break;
} }
if([self.superclass instancesRespondToSelector:@selector(setControlSize:)]) { super.controlSize = controlSize;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability"
super.controlSize = controlSize;
#pragma clang diagnostic pop
}
else {
self.cell.controlSize = controlSize;
}
} }
- (NSControlSize)controlSize { - (NSControlSize)controlSize {
if([self.superclass instancesRespondToSelector:@selector(controlSize)]) { return super.controlSize;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability"
return super.controlSize;
#pragma clang diagnostic pop
}
return self.cell.controlSize;
} }
@end @end

View File

@@ -41,6 +41,6 @@ typedef NS_OPTIONS(NSUInteger, MPContextMenuItemsFlags) {
Creates an array of menuitems to be used as a menu 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 Automatically sets up actions, so you need to take care of the responder chain
*/ */
+ (NSArray *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags; + (NSArray <NSMenuItem *> *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags;
@end @end

View File

@@ -33,7 +33,7 @@ static void MPContextmenuHelperBeginSection(NSMutableArray *items) {
@implementation MPContextMenuHelper @implementation MPContextMenuHelper
+ (NSArray *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags { + (NSArray<NSMenuItem *> *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags {
BOOL const insertCreate = MPIsFlagSetInOptions(MPContextMenuCreate, flags); BOOL const insertCreate = MPIsFlagSetInOptions(MPContextMenuCreate, flags);
BOOL const insertDelete = MPIsFlagSetInOptions(MPContextMenuDelete, flags); BOOL const insertDelete = MPIsFlagSetInOptions(MPContextMenuDelete, flags);
@@ -118,8 +118,7 @@ static void MPContextmenuHelperBeginSection(NSMutableArray *items) {
if(insertAutotype) { if(insertAutotype) {
NSMenuItem *performAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"PERFORM_AUTOTYPE_FOR_ENTRY", @"Menu item to perform autotype with the selected entry") NSMenuItem *performAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"PERFORM_AUTOTYPE_FOR_ENTRY", @"Menu item to perform autotype with the selected entry")
action:[MPActionHelper actionOfType:MPActionPerformAutotypeForSelectedEntry] action:[MPActionHelper actionOfType:MPActionPerformAutotypeForSelectedEntry]
keyEquivalent:@"a"]; keyEquivalent:@"t"];
performAutotype.keyEquivalentModifierMask = (performAutotype.keyEquivalentModifierMask | NSControlKeyMask);
[items addObject:performAutotype]; [items addObject:performAutotype];
} }
if(insertHistory) { if(insertHistory) {

View File

@@ -1,9 +1,9 @@
// //
// MPPreviewViewController.h // MPCustomFieldTableView.h
// MacPass // MacPass
// //
// Created by Michael Starke on 18/03/14. // Created by Michael Starke on 11.09.18.
// Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. // Copyright © 2018 HicknHack Software GmbH. All rights reserved.
// //
// This program is free software: you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License as published by
@@ -20,8 +20,8 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// //
#import "MPViewController.h" #import <Cocoa/Cocoa.h>
@interface MPPreviewViewController : MPViewController @interface MPCustomFieldTableView : NSTableView
@end @end

View File

@@ -0,0 +1,40 @@
//
// MPCustomFieldTableView.m
// MacPass
//
// Created by Michael Starke on 11.09.18.
// Copyright © 2018 HicknHack Software GmbH. All rights reserved.
//
// 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
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import "MPCustomFieldTableView.h"
@implementation MPCustomFieldTableView
/*
on macOS 10.11 and lower, the height is not calculated correctly
*/
- (NSSize)intrinsicContentSize {
if(@available(macOS 10.12, *)) {
return [super intrinsicContentSize];
}
if(self.numberOfRows > 0) {
return NSMakeSize(-1, self.numberOfRows * self.rowHeight);
}
return NSMakeSize(-1, -1);
}
@end

View File

@@ -32,27 +32,34 @@ NSInteger MPCustomFieldIndexFromTag(NSInteger tag) {
return MAX(-1, tag - MPCustomFieldTagOffset); return MAX(-1, tag - MPCustomFieldTagOffset);
} }
NSInteger MPCustomFieldTagFromIndex(NSInteger index) {
return (index + MPCustomFieldTagOffset);
}
@implementation MPCustomFieldTableViewDelegate @implementation MPCustomFieldTableViewDelegate
/* - (void)tableView:(NSTableView *)tableView didRemoveRowView:(NSTableRowView *)rowView forRow:(NSInteger)row {
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row { if(@available(macOS 10.12, *)) {
static NSTextFieldCell *cell; // 10.12 and higher are working correctly
static dispatch_once_t onceToken; }
dispatch_once(&onceToken, ^{ else {
cell = [[NSTextFieldCell alloc] init]; [tableView invalidateIntrinsicContentSize];
}); }
}
cell.stringValue = @"Mutli!";
NSTableColumn *column = tableView.tableColumns.firstObject; - (void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row {
NSRect frame = NSMakeRect(0, 0, column.width, CGFLOAT_MAX); if(@available(macOS 10.12, *)) {
return [cell cellSizeForBounds:frame].height + 38; // 10.12 and higher are working correctly
}
else {
[tableView invalidateIntrinsicContentSize];
}
} }
*/
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
MPCustomFieldTableCellView *view = [tableView makeViewWithIdentifier:@"SelectedCell" owner:tableView]; MPCustomFieldTableCellView *view = [tableView makeViewWithIdentifier:@"SelectedCell" owner:tableView];
[view.labelTextField bind:NSValueBinding [view.labelTextField bind:NSValueBinding
toObject:view toObject:view
withKeyPath:@"objectValue.key" withKeyPath:@"objectValue.key"
@@ -63,12 +70,12 @@ NSInteger MPCustomFieldIndexFromTag(NSInteger tag) {
options:nil]; options:nil];
[view.protectedButton bind:NSValueBinding [view.protectedButton bind:NSValueBinding
toObject:view toObject:view
withKeyPath:@"objectValue.isProtected" withKeyPath:@"objectValue.protect"
options:nil]; options:nil];
[view.valueTextField bind:NSStringFromSelector(@selector(showPassword)) [view.valueTextField bind:NSStringFromSelector(@selector(showPassword))
toObject:view toObject:view
withKeyPath:@"objectValue.isProtected" withKeyPath:@"objectValue.protect"
options:@{NSValueTransformerNameBindingOption: NSNegateBooleanTransformerName}]; options:@{NSValueTransformerNameBindingOption: NSNegateBooleanTransformerName}];
@@ -79,7 +86,7 @@ NSInteger MPCustomFieldIndexFromTag(NSInteger tag) {
options:@{NSConditionallySetsEditableBindingOption: @NO }]; options:@{NSConditionallySetsEditableBindingOption: @NO }];
} }
view.valueTextField.tag = (MPCustomFieldTagOffset + row); view.valueTextField.tag = MPCustomFieldTagFromIndex(row);
view.valueTextField.delegate = self.viewController; view.valueTextField.delegate = self.viewController;
view.removeButton.target = self.viewController; view.removeButton.target = self.viewController;

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