339 Commits

Author SHA1 Message Date
michael starke
1d823af4b9 Expiration settings are not undoable 2014-03-17 21:52:51 +01:00
michael starke
fd789f195e Added settings screenshot 2014-03-17 21:37:28 +01:00
michael starke
39a0d1a0de Updated screenshots 2014-03-17 21:36:31 +01:00
michael starke
82b3a3deba Added 0.4 note to Readme 2014-03-17 21:21:20 +01:00
michael starke
3053ea712e Bumped Build number 2014-03-17 21:16:52 +01:00
michael starke
2f5691f1dd Fixed issue with root group not being properly initialised when reading KDB files
Custom icons now stored in KeepassX format in KDB files
2014-03-17 21:03:38 +01:00
michael starke
a837d8cd44 Fixed #154 Hitting backspace deletes the selected attachment 2014-03-17 18:51:22 +01:00
michael starke
e6a14dc7ae Disabled auto type in settings as it's not read yet 2014-03-17 18:51:03 +01:00
michael starke
00da9013a8 Included TransformerKit for easier NSValueTransformer generation
Date picking for expiry dates now works
2014-03-17 18:09:58 +01:00
michael starke
51a59d73c6 Implemented datePicking controller. Refactored popup handling in MPInspectorViewController 2014-03-17 00:07:25 +01:00
michael starke
6bbaccdb25 Fixed issue with database color storage in KDB files 2014-03-16 00:21:51 +01:00
michael starke
b0a664ab3f Removed gradient divider for notes
Notes are hidden on empty selection
2014-03-16 00:05:56 +01:00
michael starke
1f75722e67 Notes are now displayed in a split view inside the inspector 2014-03-15 22:16:56 +01:00
michael starke
43b835d518 Fixed issue with root property being not reatained 2014-03-15 19:53:03 +01:00
michael starke
8dee783c4c Removed dark Trash gradient as the button text wasn't readable
Fixed issue with creating entries form templates
2014-03-15 17:15:45 +01:00
michael starke
3678161802 Added Tags stubs 2014-03-14 21:36:15 +01:00
michael starke
24274f472c Fixed compiler warnings
Tags can be edited (no search, no central registration yet)
2014-03-14 01:35:00 +01:00
michael starke
e99414a318 Removed obsolete forward declaration 2014-03-13 23:19:18 +01:00
michael starke
c93bdc6e1c Xcode 5.1 update 2014-03-13 23:14:14 +01:00
michael starke
ef0d6e55d6 Fixed #142 2014-03-12 22:02:49 +01:00
michael starke
5b69453868 fixed #152 Sorting now ignored case. All previously saved sorting settings in the entry view will be reverted to the default behaviour 2014-03-11 22:01:28 +01:00
michael starke
fa4a805f8f Disabled hotkey registration for now 2014-03-10 22:49:59 +01:00
michael starke
4d29c351ff Renamed Buttons to current behaviour (everywhere search not implemented for now) 2014-03-09 18:21:41 +01:00
michael starke
f0964d04b9 Fixes #153 (mentioned in #152)
Save as now asks for a Password if none was set.
2014-03-09 18:18:13 +01:00
michael starke
2e0613dad5 Updated dates 2014-03-08 02:25:21 +01:00
michael starke
9161a8b8f3 Updated to current Sparkle version 2014-03-08 02:15:18 +01:00
michael starke
1a2659d311 Double-Password search (bound to everywhere filter butter for testing) 2014-03-07 01:55:06 +01:00
michael starke
41ba8f57ba Search toggle now actually toggles. 2014-03-06 00:57:31 +01:00
michael starke
fd2256917e Updated localizations 2014-03-06 00:11:42 +01:00
michael starke
856a470ee5 Fixed encoding to be UTF16 with BOM on french localization 2014-03-05 22:13:08 +01:00
michael starke
a55773919c Merge branch 'master' of https://github.com/mstarke/MacPass 2014-03-05 21:59:37 +01:00
Michael Starke
4bffe388ba Merge pull request #150 from MBibal/patch-1
Quelques mises à jour - Google says: "Some updates"
2014-03-05 21:57:36 +01:00
MBibal
febead0751 Quelques mises à jour 2014-03-05 19:24:00 +01:00
michael starke
f90c126f03 Fixed numerus NSCopying bugs in KeePassKit 2014-03-05 11:41:36 +01:00
michael starke
33a367c676 Merge branch 'master' of https://github.com/mstarke/MacPass 2014-03-04 20:26:30 +01:00
michael starke
08c7dfa650 Add/Remove window associations works via gui. KeePassKit updated to bubble auto type sequence for associations if none is set. 2014-03-04 20:26:10 +01:00
Michael Starke
b00c7258f6 Update README.md 2014-03-04 13:02:31 +01:00
michael starke
0af0d08082 Fixed Typos in KPKErrorCode
Removed unused error message switch since the errors get localized correctly
2014-03-03 00:21:02 +01:00
michael starke
de30cf5407 Updated localizations for KeePassKit Errors 2014-03-02 00:15:39 +01:00
michael starke
9dff3070c9 no password and no key file on KDB files now get handled correctly 2014-03-02 00:15:14 +01:00
michael starke
aa716dd5f8 Used system defaults for minimum and maximum size on search toolbar item 2014-02-28 23:40:43 +01:00
michael starke
7643d1982d fixes #148 Search get's cleared when documents are locked 2014-02-28 23:35:16 +01:00
michael starke
0c4ddf3127 MPToolbarDelegate now takes care of the toolbar manipulation.
Toolbar is shown when search is started if it was hidden. If search revealed the toolbar, it will be hidden after the search is exited
If the toolbar was using text only mode, it switches to icon/text mode and then back to text mode after the search - there might be a better way to deal with this by simply using a menu for the search.
2014-02-28 20:36:10 +01:00
michael starke
7f03985eff Simple cloning added. 2014-02-27 22:33:43 +01:00
michael starke
90d5bc9ef2 Search structurally works again. Filtering is not polished. 2014-02-27 21:54:59 +01:00
michael starke
4273e41142 MPDocument now does the searching and notifies anyone that want to be informed 2014-02-27 21:31:45 +01:00
michael starke
c1d6574172 Cmd+F Selects old search string 2014-02-27 01:53:41 +01:00
michael starke
ffabda0242 Context bar display now works again. Search is still broken 2014-02-27 01:40:50 +01:00
michael starke
61310d2300 It's getting there again :) 2014-02-26 23:04:00 +01:00
michael starke
51bb22a9b7 Moving more stuff about context bar into the document away from the EntryViewController.
Some refactorings considering notification registration.
2014-02-26 21:17:35 +01:00
michael starke
ff6b29d23c Added contributors 2014-02-26 21:16:52 +01:00
michael starke
f6dc2193de Refactored Notification setup to use only the document as object 2014-02-25 22:49:41 +01:00
michael starke
21f299bdff Moved search to MPDocument. Not working properly at the moment 2014-02-25 22:23:53 +01:00
michael starke
de00a42f02 broke commit 2014-02-24 23:27:05 +01:00
michael starke
81dc24d9b2 Broken commit - refactoring search 2014-02-24 12:05:41 +01:00
michael starke
c084d49d95 Placing search in the Toolbar again 2014-02-23 21:17:14 +01:00
michael starke
1122cfbbde Code cleanup 2014-02-23 20:22:59 +01:00
michael starke
4db333fbc5 Adoped secure coding 2014-02-23 12:16:17 +01:00
michael starke
a2b8a15e46 Removed obsolte code
Updated documentation to correct style
2014-02-22 11:55:44 +01:00
michael starke
ae38cdce32 Minor change to codestyle 2014-02-22 11:39:28 +01:00
michael starke
f899fdca0f Added window shake on wrong password entry 2014-02-21 19:07:05 +01:00
michael starke
4b6db6c07a compiles again 2014-02-20 21:50:24 +01:00
michael starke
6e50d2bc5e Minor progress on parsing commands 2014-02-20 21:39:48 +01:00
michael starke
a046555aee More progress on Autotype command parsing 2014-02-20 00:35:32 +01:00
michael starke
ae544ae810 ATTENTION: The Search bar is broken, as I was in the process of caching it. Focus is on Autotype for now. Search should be fixed afterwards. Sorry for any inconveniences! 2014-02-19 22:33:18 +01:00
michael starke
5dd0f8234c Updated normalization and validation test. 2014-02-19 22:30:56 +01:00
michael starke
7f16310a4d Started creation of Autotype out of normalized command strings 2014-02-19 19:45:00 +01:00
michael starke
24d0c3a6ee Autotype settings are now correctly bound to the defaults 2014-02-19 19:44:14 +01:00
michael starke
84cd196d54 Normalization now can expand repeated keystrokes 2014-02-19 17:44:34 +01:00
michael starke
a73986de28 Normalization now works
Tested Normalization
2014-02-19 02:45:37 +01:00
michael starke
9575777cc7 Removed AutotypeParser as this is now handled by an NSString Cateogriy in KeePassKit 2014-02-19 01:53:14 +01:00
michael starke
81bcd15d80 Combined KeePassHttp and Autotype preferences in one window
Added enable auto type preferences key
2014-02-18 13:00:56 +01:00
michael starke
e976398a5e Selection Dialog for multiple matching entries sketched 2014-02-17 21:45:06 +01:00
michael starke
c4b7dc1c64 Updated DDHotKey to current version 2014-02-17 00:21:39 +01:00
michael starke
530bb7ce30 Extended NSUUID extension
Reference Retrieval now can be used with "undashed" ID strings
Added NSUUID+KeePassKit Test
2014-02-17 00:09:25 +01:00
michael starke
356a8f524e Resolving of references added (but not finished) 2014-02-16 02:23:00 +01:00
michael starke
1f1c6d5dcb Migrated project to XCTest 2014-02-15 18:35:56 +01:00
michael starke
edd2d89d30 Placeholder substation reworked 2014-02-15 18:35:13 +01:00
michael starke
f634ed09d0 Actions for add and remove of window associations stubbed
Autotype inspector binding extended
2014-02-14 22:39:55 +01:00
michael starke
62bec29ec8 Updated Valdiation 2014-02-14 22:38:46 +01:00
michael starke
20908fe161 Extracted more element names into separate file 2014-02-14 03:18:36 +01:00
michael starke
944114309f Updated file locations 2014-02-14 02:41:00 +01:00
michael starke
5d64951ef2 Browser selection now populates the menu. Selection is not used and not saved for now. 2014-02-13 23:47:14 +01:00
michael starke
d98f4b40da added instancetype were applicable instead of id 2014-02-13 23:46:48 +01:00
michael starke
ed5d048028 WindowAssocitations get listed in Autotype tab 2014-02-13 21:31:51 +01:00
michael starke
aa6fd74ce7 Separated auto type into it's own view 2014-02-13 20:49:30 +01:00
michael starke
4e7cc1edb0 properties expose immutable copies of mutable internal structures 2014-02-13 00:28:07 +01:00
michael starke
5661765dbf Added Autotype layout to entry view.
Fixed ARC bug in placeholder evaluation
2014-02-12 22:17:34 +01:00
michael starke
422d74ee5c Moved defaults cleanup for key file from document to app delegate.
Added clear button to settings to remove any keys stored
2014-02-12 20:51:36 +01:00
michael starke
b82bc8c9e9 Fixed #143 Save now uses dots only when prompt will be displayed 2014-02-12 12:51:34 +01:00
michael starke
4f55d93451 Restrucuterde Autotype commands a bit 2014-02-11 20:58:27 +01:00
michael starke
0d66451e0c Added default Autotpy sequence inheritance 2014-02-11 20:57:58 +01:00
michael starke
fe2acc1827 Extended Update settings. 2014-02-10 20:37:27 +01:00
michael starke
929c4f121c Updates Licenses 2014-02-07 19:18:52 +01:00
michael starke
2df1a1f36a Reverted to unsigned applications.
Added public certificate for signed Sparkle updates
Removed non-working AutoType code fragments for now
2014-02-07 19:08:56 +01:00
michael starke
d6dcb96ba5 Interims commit. Broken. Doesn compile 2014-02-07 00:46:28 +01:00
michael starke
c5cc511dcd Filtermode settings bugs fixed (menu items do not get selected corruptly) 2014-02-05 23:27:42 +01:00
michael starke
4c107644b4 Work in progress on drop-down filter selection 2014-02-05 21:16:37 +01:00
michael starke
e84bebb4d4 Added tab for update settings
Minor fixes to sparkle integration
2014-02-04 21:36:11 +01:00
michael starke
9ba441b002 Added Sparkle to project (nothing integrated) 2014-02-04 20:05:24 +01:00
michael starke
1bd68d0194 Fixed problem with tab order when another tab was displayed in the context bar
Began reworking filter selection in context bar
2014-01-29 12:20:16 +01:00
michael starke
b1b1ac35b4 Merge branch 'master' of https://github.com/mstarke/MacPass 2014-01-22 11:52:50 +01:00
michael starke
500140d5a2 Simple approach to fix Issue #137. Tab navigates to the entry view after the "done" button 2014-01-22 11:52:36 +01:00
Michael Starke
8abd9ab2c9 added flattr button 2014-01-06 18:08:19 +01:00
michael starke
09d5efa38e Removed caching for trash and templates as it does not get correctly updated when the respective groups get deleted 2014-01-06 17:44:54 +01:00
michael starke
3385f09c2c Removed edit button from interface as it's not fully supported.
Refactored editing button actions to be localisations safe
Added a candle editing button to cancel the edit process
2014-01-03 20:54:20 +01:00
michael starke
76ab4b8489 Reverted KeePassKit commit 2014-01-03 20:10:15 +01:00
Michael Starke
33aceee511 Merge pull request #134 from cseng/master
Some bug fixes and enhancements
2014-01-03 11:05:14 -08:00
Chhom Seng
4abe4940ae Revert the KeePassKit commit.
I seem to have performed this commit wrong.
2014-01-02 22:16:34 -07:00
Chhom Seng
5c7e387ac3 Revert "Added minor code to test that the database was decrypted successfully. The cryptorStatus != kCCSuccess conditional never seems to be triggered after testing with several bad passwords."
This reverts commit f125e2fb41.
2014-01-02 22:14:01 -07:00
michael starke
744ecc4f2a Merge branch 'master' of https://github.com/mstarke/MacPass 2014-01-02 11:38:51 +01:00
michael starke
3e5133c5ff Minor fix to deselection Entries 2014-01-02 11:21:30 +01:00
Chhom Seng
da93396ee7 Implemented Edit button; it must be clicked to modify an entry. 2014-01-01 19:10:03 -07:00
Chhom Seng
ce838f6b7a Implemented context menu validation. 2014-01-01 18:03:25 -07:00
Chhom Seng
1bb753173a Fixed issue with blank outline and entry views if the inspector was hidden before unlocking the database. 2013-12-31 22:01:26 -07:00
Chhom Seng
35400ec2eb Disabled code signing so that the project can be built and run.
This is for my own purposes because I don’t have an Apple Developer
subscription.
2013-12-29 23:05:12 -07:00
Chhom Seng
f125e2fb41 Added minor code to test that the database was decrypted successfully. The cryptorStatus != kCCSuccess conditional never seems to be triggered after testing with several bad passwords. 2013-12-29 23:04:00 -07:00
Michael Starke
dea89d2360 Added info about file format conversion in KeepassX 2013-12-27 11:00:57 +01:00
Michael Starke
3b5f1698d3 Update README.md 2013-12-27 10:57:23 +01:00
Michael Starke
88240deb3e Merge pull request #133 from jhalstead85/master
Update Readme
2013-12-27 01:52:49 -08:00
Josh Halstead
80808efe6c Updated Readme 2013-12-26 17:18:26 -06:00
Josh Halstead
dd5c46c23a Fixed a typo in the Readme
s/Dowload/Download/g and used more consistent wording in 
places.
2013-12-26 17:17:02 -06:00
michael starke
37f7f8123a Fixed missing binding to enable trahs in settings tab
Updated copy/drag and drop to changed KeePassKit
2013-12-20 19:50:23 +01:00
michael starke
aa52079664 Extracte KeePassKit localisations into separater file 2013-12-20 19:49:40 +01:00
michael starke
758cce4e9f Fixed issue with custom icons not being correctly mapped 2013-12-20 01:17:51 +01:00
michael starke
6cb7d49e69 Fixed more password input fonts 2013-12-18 18:42:25 +01:00
Michael Starke
ab9560c414 Merge pull request #131 from fenderle/master
Set remaining password fields to fixed width font (#97)
2013-12-18 09:35:19 -08:00
Frank Enderle
b293baad34 Set remaining password fields to fixed width font (#97) 2013-12-18 16:17:37 +01:00
michael starke
08f897437b Some documentation added for KeePassHttp stuff 2013-12-18 11:41:20 +01:00
michael starke
9fbf42322f Removed test button 2013-12-18 02:32:56 +01:00
michael starke
92d963a9ef Extracted context bar for trash, history and filter browsing. Some regressions in focus handling were introduced. History tab will go away as this will be incorporated in the entry comparable to searching. Code cleanup. Moved copying to KeePassKit 2013-12-18 02:29:25 +01:00
michael starke
21355101ed Added cancel button to icon selection view 2013-12-13 01:13:52 +01:00
michael starke
6b1aff9449 Fixed tests. Layout for filterBar now uses only two constants and animates a constant instead of adding and removing a bunch of constraints all the time. 2013-12-12 11:20:36 +01:00
michael starke
28fdf9f57a Fixed merging issue 2013-12-12 02:14:15 +01:00
Michael Starke
a01e5ce54f Merge pull request #126 from fenderle/master
Fixes search field (Issue #65)
2013-12-11 17:10:18 -08:00
michael starke
467b600673 Removed non-functional binding for now 2013-12-12 02:05:50 +01:00
michael starke
5a4cf2152a Fixed layout constraint issues on filter bar display 2013-12-12 01:20:20 +01:00
michael starke
b1e392abbe Fixed issues with binary parsing in history entries 2013-12-10 23:05:40 +01:00
michael starke
24126c00cb Merge branch 'master' of https://github.com/mstarke/MacPass 2013-12-08 01:47:38 +01:00
michael starke
20fbf29b92 Fixed #120 KeePass didn't like non-compact empty XML elements. MacPass now stores everything with compacted empty elements. 2013-12-08 01:47:21 +01:00
Frank Enderle
7215677b86 Fixes search field (Issue #65) 2013-12-08 00:37:41 +01:00
Michael Starke
8bb2428a96 Removed appearnceType property in WelcomeWindow.xib since it crashed Xcode on 10.8 2013-12-07 15:21:00 +01:00
michael starke
fe08f5fee7 Code cleanup 2013-12-05 23:51:22 +01:00
michael starke
4d9aa8cc02 Fixed issue with composite key storing not updating the MasterKeyChanged date (this should be moved to KeePassKit)
Fixed #120 (at least that's what I hope ;) )
2013-12-04 21:22:29 +01:00
michael starke
fa52de144c Using bindings for iconImage for instant updates
Icon setting now gets registered via NSUndoManager
Refactored iconId property
2013-12-04 01:57:54 +01:00
michael starke
c59ce56f4d Optimized IconHelper to only create internal structures once, not all the time. 2013-12-03 20:58:27 +01:00
michael starke
385a56c489 Updated Icons 2013-12-03 20:56:05 +01:00
michael starke
02a670ac7c Changed templates and trash to simple property setter instead of custom functions 2013-12-03 00:39:51 +01:00
michael starke
1964adb439 Merged pull request #117 2013-12-02 17:15:13 +01:00
michael starke
336fe02e2d Added Import from XML functionality. KPKXmlTreeReader is not fully working with all possible formats (zipped or non zipped data) 2013-12-02 02:06:21 +01:00
michael starke
3f1e7d36c9 Merge branch 'master' of https://github.com/mstarke/MacPass 2013-12-01 23:11:07 +01:00
michael starke
bb88534daa Stubbed workflow settings to select preferred browser for URL handling 2013-12-01 23:10:52 +01:00
michael starke
f266375a09 Added entry creation via templates 2013-12-01 23:10:25 +01:00
michael starke
d16ebfc4d7 Added category for easy item copying with respect to UUID uniqueness 2013-12-01 23:09:45 +01:00
Michael Starke
2c22a75d82 Fixed issue link 2013-12-01 21:26:29 +01:00
michael starke
2bc5e8a337 Added download and build instructions, since it seems to be an reoccurring issue to get things running :) 2013-12-01 21:24:26 +01:00
michael starke
1a6d5114b9 IconSelectionView now can be used to set default icons. Setting other Icons is broken for now. Setting custom icons doesn't work at all. 2013-12-01 02:29:37 +01:00
michael starke
36e493101a Fixed error that resulted in always trying to save a key file even if none was used 2013-11-30 19:31:32 +01:00
michael starke
871b3a5c45 Added licenses 2013-11-30 19:09:27 +01:00
michael starke
ebfc0f91eb Extracting running application to be able to activate it after having the entry selection dialog. 2013-11-29 18:58:45 +01:00
michael starke
96f854133e Extracted AutotypeParser 2013-11-29 18:38:56 +01:00
michael starke
c14bcf497e Some reshuffling of the Autotype Code.
Added preferences key for Ctrl/Command swapping, since this might be a problem in multi platform use cases
2013-11-28 01:42:00 +01:00
michael starke
213bb3d51f Added method to put focus on group, entry or inspector view via keyboard shortcuts. This might be better done via a simple "cmd + arrow" shortcut to move about 2013-11-27 01:04:06 +01:00
michael starke
839c87102c progress on searching auto type candidates 2013-11-25 02:39:22 +01:00
michael starke
4173141108 Added placeholder strings and updates to correspond to enable/disable of password in unlock and change password window 2013-11-24 00:50:17 +01:00
michael starke
b0856ad2df Fixed wrongfully setting password when password is disabled in editPasswordWindow
Removed some debug logging
2013-11-24 00:00:14 +01:00
Michael Starke
ce61fafc53 Merge pull request #113 from andrewschleifer/password
Only enable password entry fields when option is checked
2013-11-23 14:40:16 -08:00
Andrew Schleifer
4f0fc87037 Only Enable password entry fields when option is checked 2013-11-23 16:24:27 -06:00
michael starke
e38be4e147 Fixed pragma typos 2013-11-23 21:35:08 +01:00
michael starke
7c103abd53 Added removed validation but calling into central document function, since the responder needs to validate the menu items #112 2013-11-23 21:34:10 +01:00
michael starke
582bc52532 Merge branch 'master' of https://github.com/mstarke/MacPass 2013-11-23 21:12:10 +01:00
michael starke
77461a12e2 Added check box to password entry view to allow "no password" as currently only empty strings were allowed 2013-11-23 21:11:56 +01:00
michael starke
503acbad42 Tracking key changes to enable better support to remember updateded keys on files with changed passwords. 2013-11-23 21:11:21 +01:00
Michael Starke
fd269c0701 Update README.md
Fixed typos
2013-11-23 20:31:05 +01:00
michael starke
41d17b678e Updated the Readme to distinguish differences between Binary and Master relases 2013-11-23 19:23:37 +01:00
michael starke
504459564b Added super calls to ensure proper interface element validation #112 2013-11-23 18:30:53 +01:00
Michael Starke
245524e260 Merge pull request #112 from andrewschleifer/validation
Centralise the Validation
2013-11-23 09:26:08 -08:00
Andrew Schleifer
71939a4497 consolidate other validations 2013-11-23 10:46:07 -06:00
Andrew Schleifer
62a4f9f3e3 centralize all the UI validation in MPDocument 2013-11-22 22:31:11 -06:00
Andrew Schleifer
4290e92535 New MPActionHelper for editPassword: 2013-11-22 22:30:24 -06:00
michael starke
5fba430335 Added warning for key file remembering to general preferences 2013-11-23 04:19:32 +01:00
michael starke
d186a2f318 Fixed regression in reopening documents introduced in previous commit 2013-11-23 04:08:20 +01:00
michael starke
73f21c06e0 Fixed validation issue that did occur because of #110 for ToolBarItems.
**Introduced** regression bug in windows on launch.
2013-11-23 01:14:55 +01:00
michael starke
ee4d100ce1 Merge branch 'master' of https://github.com/mstarke/MacPass 2013-11-23 01:07:26 +01:00
Michael Starke
e67413bc94 Merge pull request #110 from andrewschleifer/fullscreen
Enable fullscreen option for document windows
2013-11-22 16:07:18 -08:00
michael starke
7f08157363 Changed validation for Toolbar items to be not hard coded 2013-11-23 01:06:06 +01:00
Andrew Schleifer
806534d5ea Enable fullscreen for document windows 2013-11-19 16:07:23 -06:00
michael starke
65e1c01282 Restructure reopening of Files. Introduced some regression with the welcome screen being shown too often. 2013-11-18 01:30:02 +01:00
michael starke
12a29121e5 Updated documentation
small refactorings on the key file settings
2013-11-18 00:12:35 +01:00
michael starke
9192504939 Refactored key file storing into the document. 2013-11-17 23:59:36 +01:00
michael starke
cb64396172 Small refactorings 2013-11-17 23:58:38 +01:00
michael starke
8450fa210d Fixed issue with modification dates being modified on KDB file read 2013-11-17 20:10:07 +01:00
michael starke
d2e3582221 Disabled unsave logging 2013-11-17 20:00:34 +01:00
michael starke
42dbe388ed The initial password input now can remember the keys used for any files. This is fragile as it just maps files to keys. Migth as well work hash based. Also password edit doesn't preselect the key file 2013-11-17 03:33:58 +01:00
michael starke
04bc714352 editing tags now gets registered with the undo manager 2013-11-17 03:33:01 +01:00
michael starke
c7b5bdac74 Added Autotype stubbs
Some changes to handle remebering key files in the password input
2013-11-16 00:07:14 +01:00
michael starke
3e56f2269d Added assertion 2013-11-16 00:05:26 +01:00
michael starke
14130d0aa0 Added settings to remember last used key file. Functionality still missing 2013-11-16 00:05:11 +01:00
michael starke
190bca5201 Added allEntries and allGroups to MPDocument as adapter to KPKTree calls 2013-11-16 00:03:28 +01:00
michael starke
eeb440fa1c Sped up table view creation to reuse date formatter 2013-11-16 00:02:54 +01:00
michael starke
c4a4996082 Set default button in password change dialog 2013-11-09 23:16:26 +01:00
michael starke
e8a44117f4 Fixed #104. Saving untitled documents now should work 2013-11-09 23:11:16 +01:00
michael starke
56938909df fixed #93 #106 for good.
resolved some Autolayout issues
2013-11-08 19:14:04 +01:00
michael starke
952489089e Expanded height of outline view elements a bit more. 2013-11-05 20:56:00 +01:00
michael starke
82f5d812e5 Fixed squashed outline view layout
Fixed missing passwords on saved files
2013-11-05 01:00:57 +01:00
michael starke
2ed2346c92 Fixed issue that prevented files with keys from being decrypted properly 2013-11-05 00:26:36 +01:00
michael starke
00c43ef50f Updated more xibs to Xcode 5
Fixed KeePassKit issue on savin kdbx files with deleted objects
2013-11-04 21:26:31 +01:00
michael starke
52b734239f Fixed layout constraints bug in InspectorView
Updated more xibs to Xcode 5 format
More stubbing regarding autotype
2013-11-04 00:26:19 +01:00
michael starke
2c8dba441a Updated KeePassKit (updated documentation) 2013-11-04 00:24:21 +01:00
Michael Starke
2accaada1a Merge pull request #101 from Schtee/master
Fixed tab ordering
2013-10-31 15:14:24 -07:00
Stephen Taylor
514318a156 Fixed tab ordering 2013-10-31 21:30:50 +00:00
michael starke
8f6622102b Refactored password handling in Document. Now only the composite key is stored and not the plain password and key file URL. This for now breaks the change password dialog a bit. Needs to be addressed.
Started conceptualising for auto type functionality
2013-10-31 21:10:10 +01:00
michael starke
55b4ce648f Added dynamic visibility for edit button. Button should only be used if history is enabled and thus will be saved. Otherwise direct editing should be possible 2013-10-23 03:01:12 +02:00
michael starke
620be11f0d Fixed #93. Formatter are now cleaned up on reused table cell views 2013-10-21 19:11:39 +02:00
michael starke
89105c6e90 Refactored unlocking to be done via notifications not direct calls to enable background unlocking by keepasshttp 2013-10-21 01:09:14 +02:00
michael starke
5711f82d13 Updated view to Xcode 5 format 2013-10-20 20:07:37 +02:00
michael starke
373b7f6381 Hidden unused edit button in inspector
Fixed wrong displayed group name for search results.
2013-10-20 19:47:26 +02:00
michael starke
09263b4559 Approprate naming for service protocol
Minor code cleanup
2013-10-20 19:38:57 +02:00
michael starke
5d90b23569 Fixed #64 Attachment count is now displayable as a column in the entry view 2013-10-15 23:20:46 +02:00
michael starke
8a7b2f8085 Database settings now store and load color of db and compression algorithm
Fixed wrong sort descriptor for modificationDate on entry view table
2013-10-15 00:26:57 +02:00
michael starke
63a756039c Fixed: UUID on copy operation are generated for copied items
Fixed: Export to XML Dialog now shows hide extension button
Fixed: Export to XML Dialog now uses XML as default file type (and thus extension)
2013-09-30 10:26:46 +02:00
michael starke
e54790b745 Minor updates 2013-09-24 11:22:41 +02:00
michael starke
d9f457e1cb Fixed error in saving KDB files using the root group. Resulted in wrong group level 2013-09-20 01:55:03 +02:00
michael starke
accfdbc4f2 Fixed MPDocument tests to work again 2013-09-20 01:54:02 +02:00
michael starke
71eec7d86a Removed obsolete code 2013-09-19 00:19:42 +02:00
michael starke
61490cfb65 Fixed issue in error handling of corrupt KDB files
Refactored Base64 category to please static analyser
2013-09-19 00:19:18 +02:00
michael starke
868950e873 Upgraded project to XCode 5
Fixed warnings in XCode 5
2013-09-19 00:06:29 +02:00
michael starke
6a6b1e1ba5 Fixed error in setting Notes 2013-09-19 00:06:05 +02:00
michael starke
98a58ba3ea root group in KDB files now gets expanded by default, as this information isn't stored inside the KDB file format 2013-09-16 23:58:20 +02:00
michael starke
9a0b64de6e Fixed issue with KDB files not being saved on Cmd+S 2013-09-16 23:56:42 +02:00
michael starke
c2922d5ead Added Names for Copy actions 2013-09-16 23:44:47 +02:00
michael starke
d7f82bf88f Copy and drag between documents should work now 2013-09-16 21:25:55 +02:00
michael starke
eeb6cfbe95 Fixed #86 2013-09-16 02:07:35 +02:00
michael starke
dc84dd86e9 Tweaked Spacings. Unified Spacings for Groups and Entries view 2013-09-16 02:01:00 +02:00
Michael Starke
c1ae159260 Merge pull request #88 from gurgeous/master
minor whitespace cleanup, fixes #87
2013-09-15 16:55:58 -07:00
amd
7a3fdca30b minor whitespace cleanup, fixes #87 2013-09-15 15:56:47 -07:00
michael starke
64e56fd876 Changed drag and drop architecture to use pasteboard and encoded entries/groups
First steps to enhance drag and drop to for cross document dragging and inter-document copying
2013-09-15 23:41:02 +02:00
michael starke
bd9587dddd Code cleanup in KeePassKit 2013-09-15 23:39:51 +02:00
michael starke
a7114b3ef2 Added NSPasteboardWriting and NSPasteboardReading to KPKGroup and KPKEntry 2013-09-12 01:04:30 +02:00
michael starke
2d84f2f8f8 Merged Advanced and Templates of database settings into on - Advanced
Added encryption rounds benchmark and setting to security tab (non-functional setter, benchmark works)
2013-09-11 00:54:26 +02:00
michael starke
5796333a2e Fixed #61 searching in passwords is now supported
Fixed #80 nested groups can be selected as templates or trash
Trash UUID now get's stored correctly
Enhanced and fixed some undo errors in moving groups and/or entries
Added action names for moving groups/entries via drag and drop
2013-09-10 00:57:47 +02:00
michael starke
5511dd1207 Fixed issue with nested groups in KDB files not being loaded properly 2013-09-06 20:59:36 +02:00
michael starke
fb88d8d498 Removed Autotype damon
Added DDHotKey for Global Hotkey registration
2013-09-05 19:46:46 +02:00
michael starke
add5074daa Fixed issue that resulted in password change button being disabled for empty password/keys after canceling the lossy save warning dialog 2013-09-04 23:55:56 +02:00
michael starke
2e5f03b515 Cleaned up Stringsfile 2013-09-04 23:39:39 +02:00
michael starke
b903fa1ee2 Removed unused Error.strings 2013-09-04 23:18:01 +02:00
michael starke
b21d375278 Added simple wrapper to add error codes on description 2013-09-04 21:27:58 +02:00
michael starke
6bfa2b87ee Missing commit for error display 2013-09-04 21:27:38 +02:00
michael starke
7ba43eceec Implemented alert dialog functionality to warn on saving unsupported features in a KDB file. 2013-09-04 21:27:19 +02:00
michael starke
34f031a372 Enhanced error display of password input view. Now aloe localized errors are reported (this needs to be filtered, as the user doesn't need to know all the details) 2013-09-04 21:26:46 +02:00
michael starke
b162fcb7c3 Fixed issue in SaveAccessoryViewController that resulted in wrong version for XML files selection 2013-09-04 21:26:11 +02:00
michael starke
5b15e466c7 Fixed issue on that resulted in infinite reading KDB files
Fixed issue with data streamer to correctly set location on bytes skipped
Fixed issue with data streamer to report end of data correctly
2013-09-04 21:25:32 +02:00
michael starke
4a8b1207c5 Re-enabled password request before saving a database that has no password and key
Stripped logging code
Fixed issue with save panel not being updated correctly when panel is just reshown
2013-09-04 02:15:22 +02:00
michael starke
06862e7a42 Fixed issue in undo operation for binary manipulation
Fixed issue with wrong group depth level in KDB writer
Fixed issue in tree building in KDB reader
2013-09-04 02:14:04 +02:00
michael starke
957e8bab5a Fixed save issue that resulted in appkit throwing an error because of atomic write option
Fixed issue with wrong file type being selected in save dialog
Fixed issue with hidden warning box on save dialog when data loss will occur
2013-09-03 21:20:09 +02:00
michael starke
aea17f4428 Enabled drag and drop of urls to create entries 2013-09-03 20:57:01 +02:00
michael starke
91c9a720e7 Removed MiniKeePass lib Submodule 2013-09-03 20:56:43 +02:00
michael starke
a915c4fcf8 Expires checkbox bound to entry model data 2013-09-03 20:38:28 +02:00
michael starke
e7cdf352f8 Group inspector now correctly edits expires flag and search and auto type inheritance 2013-09-03 01:26:03 +02:00
michael starke
de13be4db8 Fixed default auto type and search settings for groups 2013-09-03 01:25:28 +02:00
michael starke
9c28e27ffa Fixed group moving issue
Fixed missing tree setting for entries and group on KDB reading
2013-09-03 00:59:07 +02:00
michael starke
2829e66877 Update KeePassKit (Fixed Group order and Icon issue)
Enhanced database locking to actually encrypt the data although the file is not stored before (so changes might get lost)
Changed version handling a bit to make future export/save as possible
2013-09-03 00:44:55 +02:00
michael starke
0ae2946466 Fixed issue with binary data loading of KDB files
Fixed issue with username wrongfully set by title setter
2013-09-01 15:19:25 +02:00
michael starke
95b60a9624 Updated KeePassKit to development version 2013-09-01 02:17:03 +02:00
michael starke
5e4254b45f Started Move to KeePassKit - Project compiles but does NOT work properly
Removed MiniKeePass Categories.
Moved Random streams form MiniKeePass to KeePassKit
Changed MacPass to use KeePassKit
2013-09-01 02:16:27 +02:00
michael starke
319d165141 Added credits for translation 2013-08-31 01:04:22 +02:00
michael starke
a427cdec6d Added french localization provided by Gil André 2013-08-31 00:59:55 +02:00
michael starke
79d423df95 Fixed wrong handling of non expiring entries in KDB format
Fixed wrong usage of 0 as GroupID in KDB format
2013-08-30 20:23:41 +02:00
michael starke
b9ff153346 Fixed error in Time encoding in KDB format 2013-08-29 23:40:39 +02:00
michael starke
a82a552011 Fixed compatibility issues with Keepass KDB files 2013-08-29 12:11:04 +02:00
michael starke
4c12ec324c Updated submodule 2013-08-28 10:04:16 +02:00
michael starke
4cfd124d9d Updated KeePassKit 2013-08-26 12:07:37 +02:00
michael starke
9ef3aeb857 Updated KeePassKit 2013-08-23 01:16:10 +02:00
michael starke
899c65d8fd Save and restore outline tree state on save/load. Currently only on kdbx files. 2013-08-23 01:14:30 +02:00
michael starke
3cacbd33a8 Updated KeePassKit submodule 2013-08-22 00:58:04 +02:00
michael starke
84f91361a6 Updated submodule 2013-08-21 00:46:45 +02:00
michael starke
214a192a4d Fixed typo 2013-08-21 00:45:44 +02:00
michael starke
30a5f1d0b0 Updated submodule
Updated writing test to actually test something
2013-08-20 22:30:09 +02:00
michael starke
e8124b0415 Updated KeePassKit submodule
Added save to Kdbx test
2013-08-20 03:30:57 +02:00
michael starke
f80226ee6c Updated submodule
fixed wrong password test
2013-08-19 23:18:17 +02:00
michael starke
724644c1bf Updated submodules
Added test databases
2013-08-19 22:42:52 +02:00
michael starke
aa4b6dc08e Updated submodule 2013-08-18 01:44:07 +02:00
michael starke
46dfb19c95 Updated submodule 2013-08-18 01:33:28 +02:00
michael starke
032b9a32ee Updated submodule 2013-08-17 23:24:00 +02:00
michael starke
d30bcac236 Updated submodule
Fixed error in Autotype test (password wrong)
2013-08-17 15:39:40 +02:00
michael starke
bbd0062301 Minor GUI changes
Updated KeePassKit submodule
Added test stub for autotype parsing
2013-08-17 01:45:18 +02:00
michael starke
f335825c44 fixed #62 application now shows a welcome screen if no other window is opened
fixed #79 modification data can be used as table column
fixed #74 added group sorting in search results
2013-08-16 04:00:08 +02:00
michael starke
dcef431c5c Drag and Drop of files to Finder started 2013-08-16 01:54:14 +02:00
michael starke
5ce44e909c Fixed #69
Opene Files will block the reopening mechanism.
Restored windows will still be reopened, but the open file will be the front most window.
2013-08-15 23:05:27 +02:00
michael starke
9c69bd6528 Experiments with globe hot-key via EventTaps instead of Carbon API
Drag and Drop of entries and groups reworked
Minor fixes in Tests
2013-08-15 22:45:54 +02:00
michael starke
16f10942ee Added tests for placeholder mapping 2013-08-15 02:11:11 +02:00
michael starke
fc7aa100b9 Updated submodule 2013-08-14 23:31:33 +02:00
michael starke
706a06e389 Added welcome screen to remove confusion on initial launch 2013-08-14 23:29:44 +02:00
michael starke
3a4d72767b Small fixes to context toolbar button
Added more database icons
2013-08-14 01:15:10 +02:00
michael starke
e0f2351c80 Fixed layout issues in Group inspector
Added key-file generator fixes #25 #76
Improvements on the context menu toolbar button to add templates entries
2013-08-13 20:50:42 +02:00
michael starke
5254ce0fe4 Extendend color test
Some experiments on the segmented toolbar button
Updated keepasskit submodule
2013-08-13 02:52:16 +02:00
michael starke
b6d6485c60 Updated submodule 2013-08-12 01:39:07 +02:00
michael starke
86e97ad767 Restrucutred Settings and extracts Password edit
Introduced custom save palen accessory view to enable save in different formats (unfunctional for now)
Started reworking drag and drop of entries and groups
2013-08-11 17:58:39 +02:00
michael starke
116b3b3253 Fixed error that issues a save every time settings were stored 2013-08-10 01:48:39 +02:00
michael starke
714563250b Updated Submodule.
Fixed Hexcolor test
2013-08-09 23:34:50 +02:00
michael starke
f586127cd1 Toolbar now should get autosaved 2013-08-09 15:42:12 +02:00
michael starke
4b42493376 Updated submodule
Added Test for Hashed data
2013-08-09 01:58:43 +02:00
michael starke
bc0af02be4 Updated submodule 2013-08-08 01:52:55 +02:00
michael starke
7f7bd010b2 Added more database icons 2013-08-08 01:50:46 +02:00
michael starke
e688eaa776 Updated submodule 2013-08-07 20:22:48 +02:00
michael starke
864dea83f4 Updated submodule 2013-08-07 00:15:10 +02:00
michael starke
28488d4eb9 Updated MiniKeePassLib 2013-08-06 01:31:49 +02:00
michael starke
9b31caf577 Updated keepasskit 2013-08-06 01:31:14 +02:00
michael starke
fab5618634 Updated Readme 2013-08-05 22:13:21 +02:00
michael starke
b913d37797 Added loading tests for meta entries
Added Test KDB database with custom icon
2013-08-05 21:26:06 +02:00
michael starke
f87e60442e Some work to get Drag and Drop back up again. Might be useful to postpone it until KeePassKit is ready to replace MiniKeePassLib 2013-08-04 23:16:41 +02:00
michael starke
450bc3d4dd Entropy is now calculated for Custom Alphabets in Password Generator View
Custom String in Password Generator View are now filtered to only include unique characters
2013-08-04 03:41:09 +02:00
michael starke
9d22494bf4 Drag and Drop support for File attachments 2013-08-02 00:10:08 +02:00
michael starke
560d9ce941 Fixed issue with notes field not being properly bound to Group notes 2013-08-01 19:40:30 +02:00
michael starke
115537c95b Copy on disabled TextFields now possible. This behavior will be used when edit mode is added.
Fixed include issue
Added Tests for NSCoding compliance of KPKAttribute, KPKEntry and KPKBinary
2013-08-01 01:33:27 +02:00
michael starke
83eb0edad2 Kdb handling optimized 2013-07-31 03:23:29 +02:00
michael starke
8efcd79581 Default Username gets saved 2013-07-31 02:53:05 +02:00
michael starke
780c8782e6 Updated Localization
Added configureable Table headers in Entry view
2013-07-31 02:50:13 +02:00
michael starke
31f456929c Added Template editing.
Creating with templates not supported yet.

Templates are listed in Context-Menu under the AddEntry Toolbar
Toolbar Button is missing an Arrow for now. Control-Size is not working correctly for now
Nested Template or Trash groups aren't considered, this is a bug!
Minor changes to the UI (Settings tabs now use common icons)
Added Workflow-Settings tab to extract all the custom action possible on entries. The copy or open on URL dbl-click setting will move over to this tab.
2013-07-30 20:37:59 +02:00
michael starke
80d9dfb1cb Merge branch 'master' of https://github.com/lotz/MacPass into lotz-master 2013-07-30 12:05:48 +02:00
michael starke
2fc8e801ab Added stubbed GUI for group inspector 2013-07-30 12:03:55 +02:00
Kurt
ad07c0de6c Adding a setting to enable launching URLs on double-click 2013-07-29 21:31:29 -04:00
michael starke
e33a9fdc93 Enhanced Context menu on outline view 2013-07-30 00:23:25 +02:00
michael starke
514477d6fc Iconselection view now shows available icons 2013-07-28 14:14:32 +02:00
michael starke
07dae46b4c Fixed #39 Overall search behavior ironed out.
Fixed #71 Added A simple entropy calculation for purely random generated passwords
Added separate Views for Group and Entry Inspector
Added "no Selection" view for Inpsector
2013-07-28 13:31:37 +02:00
michael starke
e050840b6f Updated Submodules 2013-07-28 13:27:18 +02:00
michael starke
7ffcc0e43e Fixed #70
Empty keys for custom fields are handled correctly
2013-07-27 22:24:19 +02:00
michael starke
5378410937 Updated submodules
Unfinished Toolbar Button
2013-07-27 02:56:35 +02:00
michael starke
3dfadd7af1 Updates to the Toolbar 2013-07-27 00:19:16 +02:00
michael starke
5920697811 Removed obsolte Files
Added ToolbarButton to be used as context-menu
2013-07-27 00:18:58 +02:00
michael starke
b96810db1b Experimented with URL draggin and Entry creationg 2013-07-26 02:12:09 +02:00
michael starke
4172d10aa7 Search bar is now animated 2013-07-25 02:46:53 +02:00
michael starke
a6622148a0 Changed Inspectorview to 3 tabs. Notes are now at the first tab. 2013-07-25 01:49:15 +02:00
michael starke
af4336e94b Experimenting in Inspector with readonly inputs 2013-07-24 03:04:11 +02:00
michael starke
4a35d0d4ff Refactored the selection tracking to be in the document now
Filtering should work reliably now. No "sticking" of entries
Fixed #42. Deleted entries now result in desolation.
2013-07-24 01:05:49 +02:00
michael starke
8087085fc0 Updated KeePassKit Submodule
Minor changes to localization
2013-07-22 02:32:36 +02:00
michael starke
9ced3fce0b Changed password/keyfile requesting. No password/keyfile is enforced until you want to save the file. 2013-07-22 00:02:14 +02:00
michael starke
acc800c9e6 Fixed #59 Password length input is nu read only. Not a nice solution but for now working
Attachments for Kdb and Kdbx Databases are now supported. Save, Add, Delete
2013-07-21 23:23:45 +02:00
michael starke
45cb4a2652 Updated Credits 2013-07-21 14:41:37 +02:00
296 changed files with 14523 additions and 28531 deletions

12
.gitmodules vendored
View File

@@ -1,9 +1,6 @@
[submodule "KissXML"] [submodule "KissXML"]
path = KissXML path = KissXML
url = https://github.com/robbiehanson/KissXML.git url = https://github.com/robbiehanson/KissXML.git
[submodule "MiniKeePassLib"]
path = MiniKeePassLib
url = https://mstarke@github.com/mstarke/MiniKeePassLib.git
[submodule "HNHUi"] [submodule "HNHUi"]
path = HNHUi path = HNHUi
url = https://mstarke@github.com/mstarke/HNHUi.git url = https://mstarke@github.com/mstarke/HNHUi.git
@@ -13,3 +10,12 @@
[submodule "KeePassKit"] [submodule "KeePassKit"]
path = KeePassKit path = KeePassKit
url = https://mstarke@github.com/mstarke/KeePassKit url = https://mstarke@github.com/mstarke/KeePassKit
[submodule "DDHotKey"]
path = DDHotKey
url = https://github.com/davedelong/DDHotKey.git
[submodule "Sparkle"]
path = Sparkle
url = https://github.com/mstarke/Sparkle.git
[submodule "TransformerKit"]
path = TransformerKit
url = https://github.com/mattt/TransformerKit.git

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 102 KiB

1
DDHotKey Submodule

Submodule DDHotKey added at 6e52b1f475

2
HNHUi

Submodule HNHUi updated: c32f87da30...90ff9d2e35

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "0460" LastUpgradeVersion = "0510"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -25,7 +25,7 @@
<TestAction <TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "NO"
buildConfiguration = "Debug"> buildConfiguration = "Debug">
<Testables> <Testables>
<TestableReference <TestableReference
@@ -33,7 +33,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "4C45FB19178E09ED0010007D" BlueprintIdentifier = "4C45FB19178E09ED0010007D"
BuildableName = "MacPassTests.octest" BuildableName = "MacPassTests.xctest"
BlueprintName = "MacPassTests" BlueprintName = "MacPassTests"
ReferencedContainer = "container:MacPass.xcodeproj"> ReferencedContainer = "container:MacPass.xcodeproj">
</BuildableReference> </BuildableReference>
@@ -48,6 +48,13 @@
ReferencedContainer = "container:MacPass.xcodeproj"> ReferencedContainer = "container:MacPass.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<EnvironmentVariables>
<EnvironmentVariable
key = "NSZombieEnabled"
value = "YES"
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPAutotypeDaemon">
<connections>
<outlet property="matchSelectionButton" destination="tAw-72-pSm" id="2a0-3C-UUB"/>
<outlet property="matchSelectionWindow" destination="1" id="ZYa-oC-Nfs"/>
<outlet property="performAutotypeButton" destination="Jlm-i9-jVy" id="Qjk-sL-Yqk"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<window title="Autotype Selection" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" oneShot="NO" releasedWhenClosed="NO" wantsToBeColor="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES"/>
<rect key="contentRect" x="196" y="240" width="370" height="156"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="370" height="156"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NdQ-vM-dHT">
<rect key="frame" x="123" y="13" width="82" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="WJJ-kW-fak">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="orderOut:" target="-1" id="dcI-TT-kq3"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jlm-i9-jVy">
<rect key="frame" x="205" y="13" width="151" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Perform Autotype" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AER-eU-kcu">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="499" translatesAutoresizingMaskIntoConstraints="NO" id="tAw-72-pSm">
<rect key="frame" x="111" y="58" width="242" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="TAr-ZQ-aDu">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="7RT-wh-F0R">
<items>
<menuItem title="Item 3" id="HzV-Dh-6B9"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="q1d-ED-T5M">
<rect key="frame" x="18" y="102" width="334" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="There are multiple matches for the current Window. Please select which macht should be used." id="ehp-xc-B5g">
<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" translatesAutoresizingMaskIntoConstraints="NO" id="Epz-xU-9TM">
<rect key="frame" x="18" y="64" width="89" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Match to use:" id="pLz-Kc-yPh">
<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="NdQ-vM-dHT" firstAttribute="top" secondItem="tAw-72-pSm" secondAttribute="bottom" constant="20" symbolic="YES" id="7nN-gT-KRY"/>
<constraint firstItem="tAw-72-pSm" firstAttribute="trailing" secondItem="Jlm-i9-jVy" secondAttribute="trailing" id="BUy-GV-a8U"/>
<constraint firstItem="tAw-72-pSm" firstAttribute="top" secondItem="q1d-ED-T5M" secondAttribute="bottom" constant="20" id="Bwf-bJ-2AY"/>
<constraint firstItem="Jlm-i9-jVy" firstAttribute="leading" secondItem="NdQ-vM-dHT" secondAttribute="trailing" constant="12" symbolic="YES" id="DHs-Xz-gcZ"/>
<constraint firstAttribute="bottom" secondItem="NdQ-vM-dHT" secondAttribute="bottom" constant="20" symbolic="YES" id="Eua-I4-kKg"/>
<constraint firstItem="tAw-72-pSm" firstAttribute="trailing" secondItem="q1d-ED-T5M" secondAttribute="trailing" id="MsD-dU-YC8"/>
<constraint firstItem="Epz-xU-9TM" firstAttribute="baseline" secondItem="tAw-72-pSm" secondAttribute="baseline" id="O99-nG-qmf"/>
<constraint firstItem="Epz-xU-9TM" firstAttribute="leading" secondItem="q1d-ED-T5M" secondAttribute="leading" id="Vcg-aa-5pd"/>
<constraint firstAttribute="trailing" secondItem="q1d-ED-T5M" secondAttribute="trailing" constant="20" symbolic="YES" id="Wcu-aH-ONq"/>
<constraint firstItem="q1d-ED-T5M" firstAttribute="top" secondItem="2" secondAttribute="top" constant="20" symbolic="YES" id="eAk-Qk-bjO"/>
<constraint firstItem="q1d-ED-T5M" firstAttribute="top" relation="greaterThanOrEqual" secondItem="2" secondAttribute="top" constant="20" symbolic="YES" id="fCH-CB-BfF"/>
<constraint firstItem="Jlm-i9-jVy" firstAttribute="baseline" secondItem="NdQ-vM-dHT" secondAttribute="baseline" id="tOu-bn-J1u"/>
<constraint firstItem="q1d-ED-T5M" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="uCQ-aQ-3je"/>
<constraint firstItem="tAw-72-pSm" firstAttribute="leading" secondItem="Epz-xU-9TM" secondAttribute="trailing" constant="8" symbolic="YES" id="wJ9-T1-rT8"/>
</constraints>
</view>
</window>
</objects>
</document>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner"/>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<window title="Clone Entry" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" wantsToBeColor="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="287" height="115"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="287" height="115"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SZv-a7-ifG">
<rect key="frame" x="196" y="13" width="77" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Clone" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="SfB-Er-9Rw">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="XpT-SI-BXo">
<rect key="frame" x="75" y="79" width="103" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="clone history" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="oD5-qB-8vK">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="r9h-fj-Sew">
<rect key="frame" x="75" y="59" width="137" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="clone attachments" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="hah-2H-RqN">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="j5y-Yw-WYI">
<rect key="frame" x="111" y="13" width="82" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="XYx-Ie-si3">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="XpT-SI-BXo" firstAttribute="top" secondItem="2" secondAttribute="top" constant="20" symbolic="YES" id="9Ro-Kb-xO4"/>
<constraint firstItem="r9h-fj-Sew" firstAttribute="top" secondItem="XpT-SI-BXo" secondAttribute="bottom" constant="6" symbolic="YES" id="JFD-Va-WFi"/>
<constraint firstItem="r9h-fj-Sew" firstAttribute="centerX" secondItem="2" secondAttribute="centerX" id="fDQ-Tk-yhX"/>
<constraint firstAttribute="trailing" secondItem="SZv-a7-ifG" secondAttribute="trailing" constant="20" symbolic="YES" id="hhb-E3-WP7"/>
<constraint firstItem="j5y-Yw-WYI" firstAttribute="baseline" secondItem="SZv-a7-ifG" secondAttribute="baseline" id="kkG-ta-sym"/>
<constraint firstItem="j5y-Yw-WYI" firstAttribute="top" secondItem="r9h-fj-Sew" secondAttribute="bottom" constant="20" symbolic="YES" id="mAF-ad-rDG"/>
<constraint firstItem="SZv-a7-ifG" firstAttribute="leading" secondItem="j5y-Yw-WYI" secondAttribute="trailing" constant="15" id="vId-Wx-Snz"/>
<constraint firstItem="XpT-SI-BXo" firstAttribute="leading" secondItem="r9h-fj-Sew" secondAttribute="leading" id="vUr-UJ-DzQ"/>
</constraints>
</view>
</window>
</objects>
</document>

230
MacPass/ContextBar.xib Normal file
View File

@@ -0,0 +1,230 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPContextBarViewController">
<connections>
<outlet property="duplicatePasswordsButton" destination="hMB-2T-pBD" id="dWH-3p-fy6"/>
<outlet property="emptyTrashButton" destination="szx-Hx-OrV" id="i1Y-qB-TW3"/>
<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="historyLabel" destination="gGR-f0-dcr" id="slx-9D-8k8"/>
<outlet property="notesButton" destination="SaV-5p-jIX" id="sQc-nE-BOP"/>
<outlet property="passwordButton" destination="Uhl-ck-vVQ" id="I35-Nv-6jK"/>
<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="usernameButton" destination="0R1-PX-dgn" id="TWQ-1y-9cl"/>
<outlet property="view" destination="8MB-fC-M2Q" id="wYX-Cc-yoV"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<tabView type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="8MB-fC-M2Q">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<font key="font" metaFont="system"/>
<tabViewItems>
<tabViewItem label="Filter" identifier="1" id="Ud6-Nz-6PS">
<view key="view" id="caQ-XO-RkM">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1" customClass="HNHGradientView">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="6" y="8" width="45" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search:" id="7">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="O7W-cn-eUP">
<rect key="frame" x="57" y="6" width="42" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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" translatesAutoresizingMaskIntoConstraints="NO" id="0R1-PX-dgn">
<rect key="frame" x="107" y="6" width="77" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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="192" y="6" width="74" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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="38" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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="320" y="6" width="50" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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" translatesAutoresizingMaskIntoConstraints="NO" id="hMB-2T-pBD">
<rect key="frame" x="378" y="6" width="144" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="recessed" title="Duplicate Passwords" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="G1B-En-dc2">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstAttribute="centerY" secondItem="O7W-cn-eUP" secondAttribute="centerY" id="2uC-wS-HDi"/>
<constraint firstAttribute="centerY" secondItem="hMB-2T-pBD" secondAttribute="centerY" id="4rl-iO-76L"/>
<constraint firstItem="O7W-cn-eUP" firstAttribute="leading" secondItem="6" secondAttribute="trailing" constant="8" symbolic="YES" id="5hN-x3-XlX"/>
<constraint firstItem="0R1-PX-dgn" firstAttribute="leading" secondItem="O7W-cn-eUP" secondAttribute="trailing" constant="8" symbolic="YES" id="67f-i6-eOb"/>
<constraint firstAttribute="centerY" secondItem="SaV-5p-jIX" secondAttribute="centerY" id="7ch-eZ-Hzh"/>
<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" relation="greaterThanOrEqual" secondItem="hMB-2T-pBD" secondAttribute="trailing" constant="20" symbolic="YES" id="jAm-sk-ErW"/>
<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"/>
<constraint firstItem="hMB-2T-pBD" firstAttribute="leading" secondItem="SaV-5p-jIX" secondAttribute="trailing" constant="8" symbolic="YES" id="zRT-y1-oMu"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstItem="1" firstAttribute="leading" secondItem="caQ-XO-RkM" secondAttribute="leading" id="3yS-J0-xZL"/>
<constraint firstAttribute="bottom" secondItem="1" secondAttribute="bottom" id="Z4A-sK-v8K"/>
<constraint firstItem="1" firstAttribute="top" secondItem="caQ-XO-RkM" secondAttribute="top" id="a5u-p3-ay5"/>
<constraint firstAttribute="trailing" secondItem="1" secondAttribute="trailing" id="hTR-dg-7Ql"/>
</constraints>
</view>
</tabViewItem>
<tabViewItem label="Trash" identifier="2" id="na6-h9-r9q">
<view key="view" id="F6S-GS-AwI">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="DXf-SC-gVG" customClass="HNHGradientView">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="szx-Hx-OrV">
<rect key="frame" x="478" y="5" width="78" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="roundTextured" title="Empty Trash" bezelStyle="texturedRounded" 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"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
<connections>
<action selector="emptyTrash:" target="-1" id="uIZ-CN-kXB"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="szx-Hx-OrV" secondAttribute="trailing" constant="20" symbolic="YES" id="J9z-j0-T14"/>
<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"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstItem="DXf-SC-gVG" firstAttribute="leading" secondItem="F6S-GS-AwI" secondAttribute="leading" id="8z9-Fw-xiU"/>
<constraint firstAttribute="bottom" secondItem="DXf-SC-gVG" secondAttribute="bottom" id="FUk-Mw-Kld"/>
<constraint firstItem="DXf-SC-gVG" firstAttribute="top" secondItem="F6S-GS-AwI" secondAttribute="top" id="j4h-gk-JVJ"/>
<constraint firstAttribute="trailing" secondItem="DXf-SC-gVG" secondAttribute="trailing" id="wap-ZJ-5Rw"/>
</constraints>
</view>
<connections>
<outlet property="initialFirstResponder" destination="szx-Hx-OrV" id="Cqa-Po-xMe"/>
</connections>
</tabViewItem>
<tabViewItem label="History" identifier="3" id="z4I-cp-nhf">
<view key="view" id="iPb-SZ-Lfm">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="S8L-rB-h0h" customClass="HNHGradientView">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gGR-f0-dcr">
<rect key="frame" x="18" y="6" width="38" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="8LU-cT-rsU">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pqx-su-vAh">
<rect key="frame" x="483" y="5" width="73" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="roundTextured" title="Exit History" bezelStyle="texturedRounded" 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"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstAttribute="centerY" secondItem="pqx-su-vAh" secondAttribute="centerY" id="7T6-QP-uaM"/>
<constraint firstAttribute="centerY" secondItem="gGR-f0-dcr" secondAttribute="centerY" id="KMF-ev-v2h"/>
<constraint firstItem="pqx-su-vAh" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="gGR-f0-dcr" secondAttribute="trailing" constant="8" symbolic="YES" id="Wb1-xK-zZF"/>
<constraint firstItem="gGR-f0-dcr" firstAttribute="leading" secondItem="S8L-rB-h0h" secondAttribute="leading" constant="20" symbolic="YES" id="gFm-N8-pwn"/>
<constraint firstAttribute="trailing" secondItem="pqx-su-vAh" secondAttribute="trailing" constant="20" symbolic="YES" id="mao-02-HsJ"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstItem="S8L-rB-h0h" firstAttribute="leading" secondItem="iPb-SZ-Lfm" secondAttribute="leading" id="5jN-VU-DkD"/>
<constraint firstAttribute="trailing" secondItem="S8L-rB-h0h" secondAttribute="trailing" id="VAt-ZA-0A2"/>
<constraint firstAttribute="bottom" secondItem="S8L-rB-h0h" secondAttribute="bottom" id="bz5-FS-Gg2"/>
<constraint firstItem="S8L-rB-h0h" firstAttribute="top" secondItem="iPb-SZ-Lfm" secondAttribute="top" id="mW1-xp-CdF"/>
</constraints>
</view>
<connections>
<outlet property="initialFirstResponder" destination="pqx-su-vAh" id="bi5-CA-b4P"/>
</connections>
</tabViewItem>
</tabViewItems>
</tabView>
</objects>
</document>

File diff suppressed because it is too large Load Diff

103
MacPass/DatePickingView.xib Normal file
View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="1070" defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5053"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPDatePickingViewController">
<connections>
<outlet property="datePicker" destination="3" id="YOw-gi-A02"/>
<outlet property="presetPopupButton" destination="15" id="VJh-of-PEU"/>
<outlet property="view" destination="1" id="2"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<customView id="1">
<rect key="frame" x="0.0" y="0.0" width="316" height="259"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<datePicker horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="20" y="91" width="277" height="148"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<datePickerCell key="cell" borderStyle="bezel" alignment="left" datePickerStyle="clockAndCalendar" id="4">
<font key="font" metaFont="system"/>
<calendarDate key="date" timeIntervalSinceReferenceDate="-595929600" calendarFormat="%Y-%m-%d %H:%M:%S %z">
<!--1982-02-12 08:00:00 -0800-->
<timeZone key="timeZone" name="US/Pacific">
<data key="data">
VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
</data>
</timeZone>
</calendarDate>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<datePickerElements key="datePickerElements" year="YES" month="YES" day="YES" hour="YES" minute="YES" second="YES"/>
</datePickerCell>
</datePicker>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="15">
<rect key="frame" x="18" y="47" width="281" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="16">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="17"/>
</popUpButtonCell>
</popUpButton>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="25">
<rect key="frame" x="226" y="18" width="70" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="roundTextured" title="Use Date" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="useDate:" target="-2" id="34n-E5-FQq"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="29">
<rect key="frame" x="162" y="18" width="56" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="30">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="cancel:" target="-2" id="eww-6g-58Z"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="3" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="13"/>
<constraint firstItem="3" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="14"/>
<constraint firstItem="15" firstAttribute="top" secondItem="3" secondAttribute="bottom" constant="20" symbolic="YES" id="21"/>
<constraint firstItem="15" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="22"/>
<constraint firstAttribute="trailing" secondItem="15" secondAttribute="trailing" constant="20" symbolic="YES" id="24"/>
<constraint firstAttribute="trailing" secondItem="25" secondAttribute="trailing" constant="20" symbolic="YES" id="27"/>
<constraint firstItem="29" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="35"/>
<constraint firstAttribute="bottom" secondItem="25" secondAttribute="bottom" constant="20" symbolic="YES" id="36"/>
<constraint firstAttribute="trailing" secondItem="3" secondAttribute="trailing" constant="20" id="6Qs-OP-VRr"/>
<constraint firstItem="25" firstAttribute="centerY" secondItem="29" secondAttribute="centerY" id="M8N-5g-ClS"/>
<constraint firstItem="25" firstAttribute="leading" secondItem="29" secondAttribute="trailing" constant="8" symbolic="YES" id="on5-xg-jcC"/>
<constraint firstItem="25" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" symbolic="YES" id="sxX-fk-xaJ"/>
</constraints>
</customView>
</objects>
</document>

View File

@@ -1,205 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13A603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<data> <dependencies>
<int key="IBDocument.SystemTarget">1080</int> <deployment defaultVersion="1080" identifier="macosx"/>
<string key="IBDocument.SystemVersion">12E55</string> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
<string key="IBDocument.InterfaceBuilderVersion">3084</string> </dependencies>
<string key="IBDocument.AppKitVersion">1187.39</string> <objects>
<string key="IBDocument.HIToolboxVersion">626.00</string> <customObject id="-2" userLabel="File's Owner" customClass="MPDocumentWindowController">
<object class="NSMutableDictionary" key="IBDocument.PluginVersions"> <connections>
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> <outlet property="splitView" destination="697" id="700"/>
<string key="NS.object.0">3084</string> <outlet property="window" destination="1" id="501"/>
</object> </connections>
<array key="IBDocument.IntegratedClassDependencies"> </customObject>
<string>NSCustomObject</string> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<string>NSSplitView</string> <customObject id="-3" userLabel="Application"/>
<string>NSView</string> <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" wantsToBeColor="NO" visibleAtLaunch="NO" frameAutosaveName="DatabaseWindow" animationBehavior="default" id="1">
<string>NSWindowTemplate</string> <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
</array> <windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
<array key="IBDocument.PluginDependencies"> <rect key="contentRect" x="196" y="240" width="700" height="500"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1028"/>
</array> <view key="contentView" id="2">
<object class="NSMutableDictionary" key="IBDocument.Metadata"> <rect key="frame" x="0.0" y="0.0" width="700" height="500"/>
<string key="NS.key.0">PluginDependencyRecalculationVersion</string> <autoresizingMask key="autoresizingMask"/>
<integer value="1" key="NS.object.0"/> </view>
</object> </window>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> <splitView autosaveName="" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="697">
<object class="NSCustomObject" id="1001"> <rect key="frame" x="0.0" y="0.0" width="560" height="194"/>
<string key="NSClassName">MPDocumentWindowController</string> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</object> </splitView>
<object class="NSCustomObject" id="1003"> </objects>
<string key="NSClassName">FirstResponder</string> </document>
</object>
<object class="NSCustomObject" id="1004">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSWindowTemplate" id="1005">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{196, 240}, {700, 500}}</string>
<int key="NSWTFlags">1618477056</int>
<string key="NSWindowTitle">Window</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
<nil key="NSUserInterfaceItemIdentifier"/>
<object class="NSView" key="NSWindowView" id="1006">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews"/>
<string key="NSFrameSize">{700, 500}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
</object>
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<string key="NSFrameAutosaveName">DatabaseWindow</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
<object class="NSSplitView" id="903506498">
<reference key="NSNextResponder"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews"/>
<string key="NSFrameSize">{560, 194}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSIsVertical">YES</bool>
<int key="NSDividerStyle">2</int>
<string key="NSAutosaveName"/>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="1005"/>
</object>
<int key="connectionID">501</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">splitView</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="903506498"/>
</object>
<int key="connectionID">700</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1001"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1003"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1004"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">1</int>
<reference key="object" ref="1005"/>
<array class="NSMutableArray" key="children">
<reference ref="1006"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="1006"/>
<array class="NSMutableArray" key="children"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">697</int>
<reference key="object" ref="903506498"/>
<reference key="parent" ref="0"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES" key="1.IBNSWindowAutoPositionCentersHorizontal"/>
<boolean value="YES" key="1.IBNSWindowAutoPositionCentersVertical"/>
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1.IBWindowTemplateEditedContentRect">{{357, 418}, {480, 270}}</string>
<boolean value="NO" key="1.NSWindowTemplate.visibleAtLaunch"/>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="697.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/>
<boolean value="NO" key="697.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="697.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">743</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">MPDocumentWindowController</string>
<string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="editPassword:">id</string>
<string key="exportDatabase:">id</string>
<string key="showDatabaseSettings:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="editPassword:">
<string key="name">editPassword:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="exportDatabase:">
<string key="name">exportDatabase:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="showDatabaseSettings:">
<string key="name">showDatabaseSettings:</string>
<string key="candidateClassName">id</string>
</object>
</dictionary>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">splitView</string>
<string key="NS.object.0">NSSplitView</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">splitView</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">splitView</string>
<string key="candidateClassName">NSSplitView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPDocumentWindowController.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<bool key="IBDocument.UseAutolayout">YES</bool>
</data>
</archive>

View File

@@ -0,0 +1,886 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="1070" defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5053"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryInspectorViewController">
<connections>
<outlet property="URLTextField" destination="56" id="262"/>
<outlet property="addAssociationButton" destination="Iy9-9L-Aev" id="HQH-Ad-9my"/>
<outlet property="associationSequenceTextField" destination="NjR-ea-Y7k" id="kTb-Y5-XrZ"/>
<outlet property="attachmentTableView" destination="137" id="265"/>
<outlet property="autotypView" destination="zv7-wE-Bmg" id="m1g-dk-hFv"/>
<outlet property="customEntrySequenceTextField" destination="cDK-DM-F5z" id="CDU-Oq-AHP"/>
<outlet property="customFieldsTableView" destination="193" id="266"/>
<outlet property="enableAutotypeCheckButton" destination="kdV-Xa-8p3" id="vlC-HP-lBv"/>
<outlet property="expiresCheckButton" destination="7" id="286"/>
<outlet property="generalView" destination="4" id="270"/>
<outlet property="generatePasswordButton" destination="59" id="282"/>
<outlet property="infoTabControl" destination="82" id="264"/>
<outlet property="passwordTextField" destination="60" id="263"/>
<outlet property="removeAssociationButton" destination="AAj-Ak-z46" id="7Xj-Tf-8CI"/>
<outlet property="tabView" destination="83" id="269"/>
<outlet property="tagsTokenField" destination="5" id="287"/>
<outlet property="titleTextField" destination="53" id="260"/>
<outlet property="togglePassword" destination="61" id="268"/>
<outlet property="usernameTextField" destination="55" id="261"/>
<outlet property="view" destination="3" id="250"/>
<outlet property="windowAssociationsTableView" destination="caM-L6-UHC" id="n5M-f8-z24"/>
<outlet property="windowTitleComboBox" destination="rD3-Wn-ZFX" id="rd3-kO-jfj"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<view translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="0.0" y="0.0" width="293" height="529"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="82">
<rect key="frame" x="35" y="505" width="223" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<segmentedCell key="cell" controlSize="small" alignment="left" style="texturedSquare" trackingMode="selectOne" id="238">
<font key="font" metaFont="smallSystem"/>
<segments>
<segment label="General" selected="YES"/>
<segment label="Files" tag="1"/>
<segment label="Custom"/>
<segment label="Autotype"/>
</segments>
</segmentedCell>
</segmentedControl>
<tabView drawsBackground="NO" type="noTabsNoBorder" initialItem="110" translatesAutoresizingMaskIntoConstraints="NO" id="83">
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<font key="font" metaFont="system"/>
<tabViewItems>
<tabViewItem label="General" identifier="1" id="110">
<view key="view" id="111">
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
</tabViewItem>
<tabViewItem label="Attachments" identifier="" id="109">
<view key="view" id="123">
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="124">
<rect key="frame" x="241" y="466" width="32" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="176"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="177">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<action selector="addAttachment:" target="-2" id="271"/>
</connections>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="126">
<rect key="frame" x="18" y="469" width="77" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="73" id="136"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Attachments" id="135">
<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>
<scrollView autohidesScrollers="YES" horizontalLineScroll="38" horizontalPageScroll="10" verticalLineScroll="38" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="125" customClass="HNHScrollView">
<rect key="frame" x="20" y="26" width="253" height="432"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="F3N-QI-Di5">
<rect key="frame" x="1" y="1" width="251" height="430"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="36" rowSizeStyle="automatic" viewBased="YES" id="137">
<rect key="frame" x="0.0" y="0.0" width="251" height="430"/>
<autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="alternateSelectedControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="248" minWidth="40" maxWidth="1000" id="140">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="142">
<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="NormalCell" id="143">
<rect key="frame" x="1" y="1" width="248" height="36"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="144">
<rect key="frame" x="3" y="2" width="32" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="153"/>
<constraint firstAttribute="height" constant="32" id="154"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="152"/>
</imageView>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="145">
<rect key="frame" x="41" y="10" width="206" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="151">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="144" firstAttribute="leading" secondItem="143" secondAttribute="leading" constant="3" id="146"/>
<constraint firstItem="144" firstAttribute="centerY" secondItem="143" secondAttribute="centerY" id="147"/>
<constraint firstItem="144" firstAttribute="centerY" secondItem="145" secondAttribute="centerY" id="148"/>
<constraint firstAttribute="trailing" secondItem="145" secondAttribute="trailing" constant="3" id="149"/>
<constraint firstItem="145" firstAttribute="leading" secondItem="144" secondAttribute="trailing" constant="8" symbolic="YES" id="150"/>
</constraints>
<connections>
<outlet property="imageView" destination="144" id="239"/>
<outlet property="textField" destination="145" id="240"/>
</connections>
</tableCellView>
<tableCellView identifier="SelectedCell" id="141" customClass="MPSelectedAttachmentTableCellView">
<rect key="frame" x="1" y="39" width="248" height="36"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="167">
<rect key="frame" x="3" y="2" width="32" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="height" constant="32" id="168"/>
<constraint firstAttribute="width" constant="32" id="169"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="170"/>
</imageView>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="166">
<rect key="frame" x="41" y="10" width="126" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="171">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="156">
<rect key="frame" x="213" y="8" width="32" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="172"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="173">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
<string key="keyEquivalent" base64-UTF8="YES">
CA
</string>
</buttonCell>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="155">
<rect key="frame" x="173" y="8" width="32" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="174"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="26_FileSaveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="175">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="167" firstAttribute="leading" secondItem="141" secondAttribute="leading" constant="3" id="157"/>
<constraint firstItem="167" firstAttribute="centerY" secondItem="166" secondAttribute="centerY" id="158"/>
<constraint firstItem="167" firstAttribute="centerY" secondItem="141" secondAttribute="centerY" id="159"/>
<constraint firstItem="166" firstAttribute="leading" secondItem="167" secondAttribute="trailing" constant="8" symbolic="YES" id="160"/>
<constraint firstItem="155" firstAttribute="baseline" secondItem="156" secondAttribute="baseline" id="161"/>
<constraint firstItem="155" firstAttribute="top" secondItem="166" secondAttribute="top" id="162"/>
<constraint firstItem="155" firstAttribute="leading" secondItem="166" secondAttribute="trailing" constant="8" symbolic="YES" id="163"/>
<constraint firstAttribute="trailing" secondItem="156" secondAttribute="trailing" constant="3" id="164"/>
<constraint firstItem="156" firstAttribute="leading" secondItem="155" secondAttribute="trailing" constant="8" symbolic="YES" id="165"/>
</constraints>
<connections>
<outlet property="imageView" destination="167" id="244"/>
<outlet property="removeButton" destination="156" id="247"/>
<outlet property="saveButton" destination="155" id="246"/>
<outlet property="textField" destination="166" id="245"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
</tableView>
</subviews>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</clipView>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="KFw-Ma-DSd"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="138">
<rect key="frame" x="1" y="147" width="52" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="139">
<rect key="frame" x="37" y="1" width="16" height="2"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</subviews>
<constraints>
<constraint firstItem="126" firstAttribute="top" secondItem="123" secondAttribute="top" constant="20" symbolic="YES" id="127"/>
<constraint firstItem="126" firstAttribute="leading" secondItem="123" secondAttribute="leading" constant="20" symbolic="YES" id="128"/>
<constraint firstItem="125" firstAttribute="leading" secondItem="123" secondAttribute="leading" constant="20" symbolic="YES" id="129"/>
<constraint firstAttribute="trailing" secondItem="125" secondAttribute="trailing" constant="20" symbolic="YES" id="130"/>
<constraint firstItem="125" firstAttribute="top" secondItem="123" secondAttribute="top" constant="45" id="131"/>
<constraint firstAttribute="trailing" secondItem="124" secondAttribute="trailing" constant="20" symbolic="YES" id="133"/>
<constraint firstItem="124" firstAttribute="baseline" secondItem="126" secondAttribute="baseline" id="134"/>
<constraint firstAttribute="bottom" secondItem="125" secondAttribute="bottom" constant="26" id="281"/>
</constraints>
</view>
<connections>
<outlet property="initialFirstResponder" destination="124" id="HDR-d9-QyI"/>
</connections>
</tabViewItem>
<tabViewItem label="Fields" identifier="" id="108">
<view key="view" id="178">
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="179">
<rect key="frame" x="241" y="466" width="32" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="231"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="only" 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="cellTitle"/>
</buttonCell>
<connections>
<action selector="addCustomField:" target="-2" id="273"/>
</connections>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="181">
<rect key="frame" x="18" y="469" width="79" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Custom Fields" id="190">
<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>
<scrollView borderType="line" autohidesScrollers="YES" horizontalLineScroll="56" horizontalPageScroll="10" verticalLineScroll="56" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="180" customClass="HNHScrollView">
<rect key="frame" x="16" y="26" width="261" height="433"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="k8G-zp-BXZ">
<rect key="frame" x="1" y="1" width="259" height="431"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="54" rowSizeStyle="automatic" viewBased="YES" id="193">
<rect key="frame" x="0.0" y="0.0" width="259" height="431"/>
<autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="256" minWidth="40" maxWidth="1000" id="194">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="197">
<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="SelectedCell" id="196" customClass="MPCustomFieldTableCellView">
<rect key="frame" x="1" y="1" width="256" height="54"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="199">
<rect key="frame" x="3" y="10" width="212" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="height" constant="22" id="212"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="213"/>
</constraints>
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="214" customClass="HNHRoundedTextFieldCell">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="200">
<rect key="frame" x="1" y="40" width="256" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="210"/>
</constraints>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" placeholderString="Title" id="211">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="198">
<rect key="frame" x="223" y="11" width="32" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="215"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="216">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="200" firstAttribute="leading" secondItem="196" secondAttribute="leading" constant="3" id="201"/>
<constraint firstItem="200" firstAttribute="trailing" secondItem="198" secondAttribute="trailing" id="202"/>
<constraint firstItem="200" firstAttribute="top" secondItem="196" secondAttribute="top" id="203"/>
<constraint firstItem="199" firstAttribute="leading" secondItem="196" secondAttribute="leading" constant="3" id="204"/>
<constraint firstItem="199" firstAttribute="top" secondItem="200" secondAttribute="bottom" constant="8" symbolic="YES" id="205"/>
<constraint firstAttribute="bottom" secondItem="199" secondAttribute="bottom" constant="10" id="206"/>
<constraint firstItem="198" firstAttribute="centerY" secondItem="199" secondAttribute="centerY" id="207"/>
<constraint firstItem="198" firstAttribute="leading" secondItem="199" secondAttribute="trailing" constant="8" symbolic="YES" id="208"/>
<constraint firstAttribute="trailing" secondItem="198" secondAttribute="trailing" constant="1" id="209"/>
</constraints>
<connections>
<outlet property="labelTextField" destination="200" id="242"/>
<outlet property="removeButton" destination="198" id="243"/>
<outlet property="valueTextField" destination="199" id="241"/>
</connections>
</tableCellView>
<tableCellView identifier="NormalCell" id="195" customClass="MPCustomFieldTableCellView">
<rect key="frame" x="1" y="57" width="256" height="54"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="224">
<rect key="frame" x="3" y="10" width="250" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="height" constant="22" id="226"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="227"/>
</constraints>
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="225" customClass="HNHRoundedTextFieldCell">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="223">
<rect key="frame" x="1" y="40" width="256" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="229"/>
<constraint firstAttribute="width" constant="252" id="230"/>
</constraints>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" placeholderString="Title" id="228">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="223" firstAttribute="leading" secondItem="195" secondAttribute="leading" constant="3" id="217"/>
<constraint firstItem="223" firstAttribute="top" secondItem="195" secondAttribute="top" id="218"/>
<constraint firstItem="224" firstAttribute="leading" secondItem="195" secondAttribute="leading" constant="3" id="219"/>
<constraint firstItem="224" firstAttribute="top" secondItem="223" secondAttribute="bottom" constant="8" symbolic="YES" id="220"/>
<constraint firstAttribute="bottom" secondItem="224" secondAttribute="bottom" constant="10" id="221"/>
<constraint firstAttribute="trailing" secondItem="224" secondAttribute="trailing" constant="3" id="222"/>
</constraints>
<connections>
<outlet property="labelTextField" destination="223" id="249"/>
<outlet property="valueTextField" destination="224" id="248"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
</tableView>
</subviews>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</clipView>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="Car-Dj-KWv"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="192">
<rect key="frame" x="1" y="119" width="223" height="15"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="191">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</subviews>
<constraints>
<constraint firstItem="181" firstAttribute="top" secondItem="178" secondAttribute="top" constant="20" symbolic="YES" id="182"/>
<constraint firstItem="181" firstAttribute="leading" secondItem="178" secondAttribute="leading" constant="20" symbolic="YES" id="183"/>
<constraint firstItem="180" firstAttribute="leading" secondItem="178" secondAttribute="leading" constant="16" id="184" userLabel="Horizontal Space - Scroll View - Table View - View"/>
<constraint firstItem="180" firstAttribute="top" secondItem="179" secondAttribute="bottom" constant="8" symbolic="YES" id="185"/>
<constraint firstAttribute="trailing" secondItem="180" secondAttribute="trailing" constant="16" id="186"/>
<constraint firstAttribute="trailing" secondItem="179" secondAttribute="trailing" constant="20" symbolic="YES" id="188"/>
<constraint firstItem="179" firstAttribute="baseline" secondItem="181" secondAttribute="baseline" id="189"/>
<constraint firstAttribute="bottom" secondItem="180" secondAttribute="bottom" constant="26" id="280"/>
</constraints>
</view>
<connections>
<outlet property="initialFirstResponder" destination="179" id="wSu-XB-L1r"/>
</connections>
</tabViewItem>
<tabViewItem label="Autotype" identifier="" id="hK7-Dx-yjH">
<view key="view" id="2py-ab-4ZU">
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
</tabViewItem>
</tabViewItems>
</tabView>
</subviews>
<constraints>
<constraint firstItem="83" firstAttribute="leading" secondItem="3" secondAttribute="leading" id="85"/>
<constraint firstItem="83" firstAttribute="trailing" secondItem="3" secondAttribute="trailing" id="86"/>
<constraint firstItem="82" firstAttribute="top" secondItem="3" secondAttribute="top" constant="5" id="89"/>
<constraint firstAttribute="centerX" secondItem="82" secondAttribute="centerX" id="90"/>
<constraint firstItem="83" firstAttribute="bottom" secondItem="3" secondAttribute="bottom" id="254"/>
<constraint firstItem="83" firstAttribute="top" secondItem="3" secondAttribute="top" constant="26" id="279"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="82" secondAttribute="trailing" constant="20" symbolic="YES" id="4df-0Y-ggz"/>
<constraint firstItem="82" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="3" secondAttribute="leading" constant="20" symbolic="YES" id="zU6-5h-Swa"/>
</constraints>
</view>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="HNHScrollDocumentViewAdapter">
<rect key="frame" x="0.0" y="0.0" width="252" height="398"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="52">
<rect key="frame" x="18" y="379" width="28" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Title" id="71">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="HNHRoundedTextField">
<rect key="frame" x="20" y="349" width="212" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="nextKeyView" destination="55" id="zdp-8L-2De"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="54">
<rect key="frame" x="18" y="323" width="57" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Username" id="69">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="HNHRoundedTextField">
<rect key="frame" x="20" y="293" width="212" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="nextKeyView" destination="56" id="XBy-DG-08B"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="56" customClass="HNHRoundedTextField">
<rect key="frame" x="20" y="237" width="212" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="nextKeyView" destination="60" id="1Df-fB-wSk"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="57">
<rect key="frame" x="18" y="267" width="25" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="URL" id="66">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="58">
<rect key="frame" x="18" y="211" width="57" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Password" id="65">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="59">
<rect key="frame" x="20" y="152" width="212" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="roundRect" title="Generate" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<action selector="_popUpPasswordGenerator:" target="-2" id="272"/>
</connections>
</button>
<secureTextField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="60" customClass="HNHRoundedSecureTextField">
<rect key="frame" x="20" y="179" width="173" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<allowedInputSourceLocales>
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
</allowedInputSourceLocales>
</secureTextFieldCell>
<connections>
<outlet property="nextKeyView" destination="61" id="5yc-GS-oVG"/>
</connections>
</secureTextField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="61">
<rect key="frame" x="201" y="177" width="31" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="62">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<outlet property="nextKeyView" destination="59" id="ZRe-l9-kNq"/>
</connections>
</button>
<button horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="7">
<rect key="frame" x="18" y="129" width="67" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="78">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<outlet property="nextKeyView" destination="8" id="SbJ-ZA-mXZ"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
<rect key="frame" x="201" y="128" width="31" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="31" id="Ped-nx-uti"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="77">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<action selector="pickExpiryDate:" target="-1" id="DQK-sp-SIL"/>
<outlet property="nextKeyView" destination="5" id="Yg4-Ua-HVe"/>
</connections>
</button>
<tokenField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="20" y="20" width="212" height="77"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="height" constant="77" id="80"/>
</constraints>
<tokenFieldCell key="cell" selectable="YES" editable="YES" borderStyle="bezel" alignment="left" drawsBackground="YES" allowsEditingTextAttributes="YES" id="81">
<font key="font" metaFont="cellTitle"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</tokenFieldCell>
</tokenField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="18" y="105" width="29" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tags" id="79">
<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 firstItem="52" firstAttribute="top" secondItem="4" secondAttribute="top" constant="5" id="11"/>
<constraint firstItem="52" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="12"/>
<constraint firstItem="53" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="13"/>
<constraint firstItem="53" firstAttribute="top" secondItem="52" secondAttribute="bottom" constant="8" symbolic="YES" id="14"/>
<constraint firstAttribute="trailing" secondItem="53" secondAttribute="trailing" constant="20" symbolic="YES" id="15"/>
<constraint firstItem="54" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="16"/>
<constraint firstItem="54" firstAttribute="top" secondItem="53" secondAttribute="bottom" constant="12" id="17"/>
<constraint firstItem="55" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="18"/>
<constraint firstItem="55" firstAttribute="top" secondItem="54" secondAttribute="bottom" constant="8" symbolic="YES" id="19"/>
<constraint firstAttribute="trailing" secondItem="55" secondAttribute="trailing" constant="20" symbolic="YES" id="20"/>
<constraint firstItem="57" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="21"/>
<constraint firstItem="57" firstAttribute="top" secondItem="55" secondAttribute="bottom" constant="12" id="22"/>
<constraint firstItem="56" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="23"/>
<constraint firstItem="56" firstAttribute="top" secondItem="57" secondAttribute="bottom" constant="8" symbolic="YES" id="24"/>
<constraint firstAttribute="trailing" secondItem="56" secondAttribute="trailing" constant="20" symbolic="YES" id="25"/>
<constraint firstItem="58" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="26"/>
<constraint firstItem="58" firstAttribute="trailing" secondItem="54" secondAttribute="trailing" id="27"/>
<constraint firstItem="58" firstAttribute="top" secondItem="56" secondAttribute="bottom" constant="12" id="28"/>
<constraint firstItem="60" firstAttribute="top" secondItem="58" secondAttribute="bottom" constant="8" symbolic="YES" id="29"/>
<constraint firstItem="60" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="30"/>
<constraint firstItem="59" firstAttribute="top" secondItem="61" secondAttribute="bottom" constant="8" symbolic="YES" id="31"/>
<constraint firstItem="59" firstAttribute="top" secondItem="60" secondAttribute="bottom" constant="8" symbolic="YES" id="32"/>
<constraint firstItem="59" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="33"/>
<constraint firstAttribute="trailing" secondItem="59" secondAttribute="trailing" constant="20" symbolic="YES" id="34"/>
<constraint firstItem="61" firstAttribute="leading" secondItem="60" secondAttribute="trailing" constant="8" symbolic="YES" id="40"/>
<constraint firstAttribute="trailing" secondItem="61" secondAttribute="trailing" constant="20" symbolic="YES" id="41"/>
<constraint firstItem="7" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="42"/>
<constraint firstItem="7" firstAttribute="centerY" secondItem="8" secondAttribute="centerY" id="43"/>
<constraint firstItem="6" firstAttribute="top" secondItem="7" secondAttribute="bottom" constant="12" id="44"/>
<constraint firstItem="6" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="45"/>
<constraint firstAttribute="trailing" secondItem="8" secondAttribute="trailing" constant="20" symbolic="YES" id="47"/>
<constraint firstItem="5" firstAttribute="top" secondItem="6" secondAttribute="bottom" constant="8" symbolic="YES" id="48"/>
<constraint firstItem="5" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="49"/>
<constraint firstAttribute="trailing" secondItem="5" secondAttribute="trailing" constant="20" symbolic="YES" id="50"/>
<constraint firstAttribute="bottom" secondItem="5" secondAttribute="bottom" constant="20" symbolic="YES" id="51"/>
<constraint firstItem="7" firstAttribute="top" secondItem="59" secondAttribute="bottom" constant="8" symbolic="YES" id="QPJ-9m-AzZ"/>
<constraint firstItem="8" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="7" secondAttribute="trailing" constant="8" symbolic="YES" id="Xa5-Ir-XNC"/>
</constraints>
</customView>
<view translatesAutoresizingMaskIntoConstraints="NO" id="zv7-wE-Bmg" customClass="HNHScrollDocumentViewAdapter">
<rect key="frame" x="0.0" y="0.0" width="301" height="420"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="kdV-Xa-8p3">
<rect key="frame" x="18" y="394" width="125" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="KzZ-r3-FPC"/>
</constraints>
<buttonCell key="cell" type="check" title="Enable Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="9Nx-mE-DK3">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cDK-DM-F5z" customClass="HNHRoundedTextField">
<rect key="frame" x="20" y="340" width="261" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Custom Entry Sequence" drawsBackground="YES" id="R2X-Ex-c6q">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="45R-v4-ywl">
<rect key="frame" x="18" y="370" width="107" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype Sequence" id="bQ5-0E-h3O">
<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>
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2YH-c2-Cwc">
<rect key="frame" x="20" y="152" width="261" height="150"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<clipView key="contentView" id="aDE-WT-YIv">
<rect key="frame" x="1" y="1" width="259" height="148"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<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">
<rect key="frame" x="0.0" y="0.0" width="259" height="148"/>
<autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="256" minWidth="40" maxWidth="1000" id="Wdn-k1-39b">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="ep5-bQ-cfZ">
<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="WindowAssociationCell" id="jI3-t8-8bp">
<rect key="frame" x="1" y="1" width="256" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JgP-7K-Ugw">
<rect key="frame" x="0.0" y="0.0" width="256" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="dyA-lo-PGa">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<connections>
<outlet property="textField" destination="JgP-7K-Ugw" id="EIY-vk-jbY"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
</tableView>
</subviews>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</clipView>
<constraints>
<constraint firstAttribute="height" constant="150" id="oXw-x1-wDN"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="Y4S-4R-dwJ">
<rect key="frame" x="1" y="1" width="0.0" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="abK-py-K7A">
<rect key="frame" x="236" y="17" width="16" height="0.0"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iR3-FU-MYu">
<rect key="frame" x="18" y="314" width="115" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Window Associations" id="ned-1Q-FXA">
<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>
<comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rD3-Wn-ZFX">
<rect key="frame" x="20" y="72" width="264" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="1" id="VLq-Hn-aei">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</comboBoxCell>
</comboBox>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HQa-of-iwh">
<rect key="frame" x="18" y="104" width="73" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Window Title" id="bkO-Bk-AuX">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NjR-ea-Y7k" customClass="HNHRoundedTextField">
<rect key="frame" x="20" y="20" width="261" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Custom Window Sequence" drawsBackground="YES" id="fW9-9p-wwR">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="z03-zW-GN3">
<rect key="frame" x="18" y="50" width="100" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Window Sequence" id="RQB-bR-MC0">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Iy9-9L-Aev">
<rect key="frame" x="249" y="125" width="32" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="Hrx-IM-m0t"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="5J6-uD-iK6">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<action selector="addWindowAssociation:" target="-2" id="U5q-Gf-tsI"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AAj-Ak-z46">
<rect key="frame" x="209" y="125" width="32" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="MWF-fs-BGy"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="86n-d4-lOW">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<action selector="removeWindowAssociation:" target="-2" id="hAz-SO-hJ0"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="Iy9-9L-Aev" secondAttribute="trailing" constant="20" symbolic="YES" id="2tF-0S-Uh3"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="HQa-of-iwh" secondAttribute="trailing" constant="20" symbolic="YES" id="49X-og-jiH"/>
<constraint firstAttribute="bottom" secondItem="NjR-ea-Y7k" secondAttribute="bottom" constant="20" id="6O4-ax-cRS"/>
<constraint firstItem="iR3-FU-MYu" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" id="A9A-s9-Uxd"/>
<constraint firstItem="rD3-Wn-ZFX" firstAttribute="top" secondItem="HQa-of-iwh" secondAttribute="bottom" constant="8" symbolic="YES" id="CsD-L7-GWP"/>
<constraint firstItem="45R-v4-ywl" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="Edh-ho-Lv4"/>
<constraint firstItem="AAj-Ak-z46" firstAttribute="top" secondItem="2YH-c2-Cwc" secondAttribute="bottom" constant="8" symbolic="YES" id="IhT-0P-coR"/>
<constraint firstItem="z03-zW-GN3" firstAttribute="top" secondItem="rD3-Wn-ZFX" secondAttribute="bottom" constant="12" id="LUT-jk-X5v"/>
<constraint firstItem="2YH-c2-Cwc" firstAttribute="top" secondItem="iR3-FU-MYu" secondAttribute="bottom" constant="12" id="MCI-NO-05E"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="2YH-c2-Cwc" secondAttribute="trailing" constant="20" symbolic="YES" id="O3C-Hb-iDd"/>
<constraint firstItem="HQa-of-iwh" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="UCa-5s-YxT"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="z03-zW-GN3" secondAttribute="trailing" constant="20" symbolic="YES" id="W9F-Zp-Y1T"/>
<constraint firstItem="Iy9-9L-Aev" firstAttribute="top" secondItem="2YH-c2-Cwc" secondAttribute="bottom" constant="8" symbolic="YES" id="Xta-1Z-L0X"/>
<constraint firstAttribute="trailing" secondItem="rD3-Wn-ZFX" secondAttribute="trailing" constant="20" symbolic="YES" id="Yey-Zd-zuV"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="iR3-FU-MYu" secondAttribute="trailing" constant="20" symbolic="YES" id="ZsL-PU-USs"/>
<constraint firstItem="rD3-Wn-ZFX" firstAttribute="top" secondItem="AAj-Ak-z46" secondAttribute="bottom" constant="30" id="aiS-LW-IeX"/>
<constraint firstAttribute="trailing" secondItem="NjR-ea-Y7k" secondAttribute="trailing" constant="20" symbolic="YES" id="cN1-2d-o3C"/>
<constraint firstAttribute="trailing" secondItem="cDK-DM-F5z" secondAttribute="trailing" constant="20" id="fqg-py-wYA"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="45R-v4-ywl" secondAttribute="trailing" constant="20" symbolic="YES" id="iU3-O5-N9P"/>
<constraint firstAttribute="trailing" secondItem="2YH-c2-Cwc" secondAttribute="trailing" constant="20" symbolic="YES" id="joZ-Xp-GWa"/>
<constraint firstItem="2YH-c2-Cwc" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="l4D-Ut-RDl"/>
<constraint firstItem="rD3-Wn-ZFX" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="mOq-z9-gZ7"/>
<constraint firstItem="Iy9-9L-Aev" firstAttribute="leading" secondItem="AAj-Ak-z46" secondAttribute="trailing" constant="8" symbolic="YES" id="od1-7v-pgA"/>
<constraint firstItem="kdV-Xa-8p3" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="oy3-gl-jXr"/>
<constraint firstItem="cDK-DM-F5z" firstAttribute="top" secondItem="45R-v4-ywl" secondAttribute="bottom" constant="8" symbolic="YES" id="pPJ-Lz-E1A"/>
<constraint firstItem="z03-zW-GN3" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="qB3-Td-jrt"/>
<constraint firstItem="45R-v4-ywl" firstAttribute="top" secondItem="kdV-Xa-8p3" secondAttribute="bottom" constant="12" id="smb-K4-i2A"/>
<constraint firstItem="NjR-ea-Y7k" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="tD5-lh-PpM"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="kdV-Xa-8p3" secondAttribute="trailing" constant="20" symbolic="YES" id="u88-Ma-UHS"/>
<constraint firstItem="iR3-FU-MYu" firstAttribute="top" secondItem="cDK-DM-F5z" secondAttribute="bottom" constant="12" id="w6Y-lj-fSi"/>
<constraint firstItem="kdV-Xa-8p3" firstAttribute="top" secondItem="zv7-wE-Bmg" secondAttribute="top" constant="10" id="xEZ-mY-WzX"/>
<constraint firstItem="cDK-DM-F5z" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" id="zPT-KL-YRT"/>
<constraint firstItem="NjR-ea-Y7k" firstAttribute="top" secondItem="z03-zW-GN3" secondAttribute="bottom" constant="8" symbolic="YES" id="zc6-0f-Uhk"/>
</constraints>
</view>
</objects>
<resources>
<image name="26_FileSaveTemplate" width="16" height="16"/>
<image name="NSActionTemplate" width="14" height="14"/>
<image name="NSAddTemplate" width="8" height="8"/>
<image name="NSQuickLookTemplate" width="21" height="16"/>
<image name="NSRemoveTemplate" width="8" height="8"/>
</resources>
</document>

File diff suppressed because it is too large Load Diff

View File

@@ -1,989 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1080</int>
<string key="IBDocument.SystemVersion">12E55</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.39</string>
<string key="IBDocument.HIToolboxVersion">626.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">3084</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBNSLayoutConstraint</string>
<string>NSButton</string>
<string>NSButtonCell</string>
<string>NSCustomObject</string>
<string>NSCustomView</string>
<string>NSSearchField</string>
<string>NSSearchFieldCell</string>
<string>NSTextField</string>
<string>NSTextFieldCell</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="NSCustomObject" id="1001">
<string key="NSClassName">MPEntryViewController</string>
</object>
<object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1004">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSCustomView" id="1005">
<reference key="NSNextResponder"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSSearchField" id="498286707">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{242, 6}, {100, 19}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="113591000"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSSearchFieldCell" key="NSCell" id="456364439">
<int key="NSCellFlags">342884416</int>
<int key="NSCellFlags2">268567616</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport" id="26">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">11</double>
<int key="NSfFlags">3100</int>
</object>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="498286707"/>
<bool key="NSDrawsBackground">YES</bool>
<int key="NSTextBezelStyle">1</int>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlTextColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MAA</bytes>
</object>
</object>
<object class="NSButtonCell" key="NSSearchButtonCell">
<int key="NSCellFlags">0</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">search</string>
<reference key="NSControlView" ref="498286707"/>
<string key="NSAction">_searchFieldSearch:</string>
<reference key="NSTarget" ref="456364439"/>
<int key="NSButtonFlags">138690560</int>
<int key="NSButtonFlags2">0</int>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" key="NSCancelButtonCell">
<int key="NSCellFlags">0</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">clear</string>
<array class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
<dictionary class="NSMutableDictionary">
<string key="AXDescription">cancel</string>
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
</dictionary>
</array>
<reference key="NSControlView" ref="498286707"/>
<string key="NSAction">_searchFieldCancel:</string>
<reference key="NSTarget" ref="456364439"/>
<int key="NSButtonFlags">138690560</int>
<int key="NSButtonFlags2">0</int>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<int key="NSMaximumRecents">255</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="113591000">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{350, 6}, {42, 17}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="791616402">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">Done</string>
<reference key="NSSupport" ref="26"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="113591000"/>
<int key="NSButtonFlags">-2038153216</int>
<int key="NSButtonFlags2">164</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="340435610">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{188, 6}, {38, 17}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="498286707"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="149174717">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">URL</string>
<object class="NSFont" key="NSSupport" id="29">
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">12</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="340435610"/>
<int key="NSButtonFlags">-1232846848</int>
<int key="NSButtonFlags2">173</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="902262560">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{104, 6}, {76, 17}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="340435610"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="397857591">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">Username</string>
<reference key="NSSupport" ref="29"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="902262560"/>
<int key="NSButtonFlags">-1232846848</int>
<int key="NSButtonFlags2">173</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="906526407">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{5, 7}, {44, 14}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="7073340"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="169652421">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">272761856</int>
<string key="NSContents">Search:</string>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">11</double>
<int key="NSfFlags">3357</int>
</object>
<string key="NSCellIdentifier">_NS:1535</string>
<reference key="NSControlView" ref="906526407"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">disabledControlTextColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC4zMzMzMzMzMzMzAA</bytes>
</object>
</object>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="7073340">
<reference key="NSNextResponder" ref="1005"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{54, 5}, {42, 19}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="902262560"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="819315342">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">Title</string>
<reference key="NSSupport" ref="29"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="7073340"/>
<int key="NSButtonFlags">-1232846848</int>
<int key="NSButtonFlags2">173</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrameSize">{400, 30}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="906526407"/>
<string key="NSClassName">HNHGradientView</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterBar</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="1005"/>
</object>
<int key="connectionID">48</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterTitleButton</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="7073340"/>
</object>
<int key="connectionID">57</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterUsernameButton</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="902262560"/>
</object>
<int key="connectionID">58</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterURLButton</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="340435610"/>
</object>
<int key="connectionID">59</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterLabelTextField</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="906526407"/>
</object>
<int key="connectionID">60</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">clearFilter:</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="113591000"/>
</object>
<int key="connectionID">75</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterDoneButton</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="113591000"/>
</object>
<int key="connectionID">76</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">_toggleFilterSpace:</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="902262560"/>
</object>
<int key="connectionID">77</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">_toggleFilterSpace:</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="340435610"/>
</object>
<int key="connectionID">78</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">_toggleFilterSpace:</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="7073340"/>
</object>
<int key="connectionID">79</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">filterSearchField</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="498286707"/>
</object>
<int key="connectionID">95</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1001"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1003"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1004"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">1</int>
<reference key="object" ref="1005"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="548170831">
<reference key="firstItem" ref="113591000"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="498286707"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="533969344">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="113591000"/>
<int key="secondAttribute">10</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="207946731">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="113591000"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="312382951">
<reference key="firstItem" ref="498286707"/>
<int key="firstAttribute">5</int>
<int key="relation">1</int>
<reference key="secondItem" ref="340435610"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="120785100">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="498286707"/>
<int key="secondAttribute">10</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="959342076">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="340435610"/>
<int key="secondAttribute">10</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="112675040">
<reference key="firstItem" ref="340435610"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="902262560"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="160109106">
<reference key="firstItem" ref="902262560"/>
<int key="firstAttribute">11</int>
<int key="relation">0</int>
<reference key="secondItem" ref="340435610"/>
<int key="secondAttribute">11</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="900015786">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="902262560"/>
<int key="secondAttribute">10</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="1039511012">
<reference key="firstItem" ref="902262560"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="7073340"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="441665485">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="7073340"/>
<int key="secondAttribute">10</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="181006535">
<reference key="firstItem" ref="7073340"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="906526407"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="274700398">
<reference key="firstItem" ref="906526407"/>
<int key="firstAttribute">4</int>
<int key="relation">0</int>
<reference key="secondItem" ref="902262560"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="201173489">
<reference key="firstItem" ref="906526407"/>
<int key="firstAttribute">11</int>
<int key="relation">0</int>
<reference key="secondItem" ref="7073340"/>
<int key="secondAttribute">11</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="777287174">
<reference key="firstItem" ref="906526407"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1005"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<reference ref="7073340"/>
<reference ref="906526407"/>
<reference ref="902262560"/>
<reference ref="340435610"/>
<reference ref="113591000"/>
<reference ref="498286707"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="7073340"/>
<array class="NSMutableArray" key="children">
<reference ref="819315342"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">3</int>
<reference key="object" ref="819315342"/>
<reference key="parent" ref="7073340"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">6</int>
<reference key="object" ref="906526407"/>
<array class="NSMutableArray" key="children">
<reference ref="169652421"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">7</int>
<reference key="object" ref="169652421"/>
<reference key="parent" ref="906526407"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">30</int>
<reference key="object" ref="777287174"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">32</int>
<reference key="object" ref="181006535"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">34</int>
<reference key="object" ref="201173489"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">35</int>
<reference key="object" ref="902262560"/>
<array class="NSMutableArray" key="children">
<reference ref="397857591"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">36</int>
<reference key="object" ref="397857591"/>
<reference key="parent" ref="902262560"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">38</int>
<reference key="object" ref="1039511012"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">40</int>
<reference key="object" ref="340435610"/>
<array class="NSMutableArray" key="children">
<reference ref="149174717"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">41</int>
<reference key="object" ref="149174717"/>
<reference key="parent" ref="340435610"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">43</int>
<reference key="object" ref="112675040"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">54</int>
<reference key="object" ref="959342076"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">55</int>
<reference key="object" ref="441665485"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">56</int>
<reference key="object" ref="900015786"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">61</int>
<reference key="object" ref="113591000"/>
<array class="NSMutableArray" key="children">
<reference ref="791616402"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">62</int>
<reference key="object" ref="791616402"/>
<reference key="parent" ref="113591000"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">66</int>
<reference key="object" ref="274700398"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">69</int>
<reference key="object" ref="533969344"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">73</int>
<reference key="object" ref="160109106"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">80</int>
<reference key="object" ref="498286707"/>
<array class="NSMutableArray" key="children">
<reference ref="456364439"/>
<object class="IBNSLayoutConstraint" id="817657248">
<reference key="firstItem" ref="498286707"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">100</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="498286707"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">81</int>
<reference key="object" ref="456364439"/>
<reference key="parent" ref="498286707"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">86</int>
<reference key="object" ref="120785100"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">87</int>
<reference key="object" ref="312382951"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">83</int>
<reference key="object" ref="548170831"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">63</int>
<reference key="object" ref="207946731"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">93</int>
<reference key="object" ref="817657248"/>
<reference key="parent" ref="498286707"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="1.IBNSViewMetadataConstraints">
<reference ref="777287174"/>
<reference ref="201173489"/>
<reference ref="274700398"/>
<reference ref="181006535"/>
<reference ref="441665485"/>
<reference ref="1039511012"/>
<reference ref="900015786"/>
<reference ref="160109106"/>
<reference ref="112675040"/>
<reference ref="959342076"/>
<reference ref="120785100"/>
<reference ref="312382951"/>
<reference ref="207946731"/>
<reference ref="533969344"/>
<reference ref="548170831"/>
</array>
<boolean value="NO" key="1.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/>
<boolean value="NO" key="1.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="2.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="32.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="35.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="35.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="38.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="40.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="40.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="41.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="43.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="54.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="55.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="6.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="61.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="61.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="62.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="63.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="66.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="69.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="80.IBNSViewMetadataConstraints">
<reference ref="817657248"/>
</array>
<boolean value="NO" key="80.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="80.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="81.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="87.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="93.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">95</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">HNHGradientView</string>
<string key="superclassName">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/HNHGradientView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPEntryViewController</string>
<string key="superclassName">MPViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">_toggleFilterSpace:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">_toggleFilterSpace:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">_toggleFilterSpace:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="entryTable">NSTableView</string>
<string key="filterBar">NSView</string>
<string key="filterDoneButton">NSButton</string>
<string key="filterLabelTextField">NSTextField</string>
<string key="filterSearchField">NSSearchField</string>
<string key="filterTitleButton">NSButton</string>
<string key="filterURLButton">NSButton</string>
<string key="filterUsernameButton">NSButton</string>
<string key="tableToTop">NSLayoutConstraint</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="entryTable">
<string key="name">entryTable</string>
<string key="candidateClassName">NSTableView</string>
</object>
<object class="IBToOneOutletInfo" key="filterBar">
<string key="name">filterBar</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="filterDoneButton">
<string key="name">filterDoneButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterLabelTextField">
<string key="name">filterLabelTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="filterSearchField">
<string key="name">filterSearchField</string>
<string key="candidateClassName">NSSearchField</string>
</object>
<object class="IBToOneOutletInfo" key="filterTitleButton">
<string key="name">filterTitleButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterURLButton">
<string key="name">filterURLButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="filterUsernameButton">
<string key="name">filterUsernameButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="tableToTop">
<string key="name">tableToTop</string>
<string key="candidateClassName">NSLayoutConstraint</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPEntryViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPViewController</string>
<string key="superclassName">NSViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSLayoutConstraint</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<bool key="IBDocument.UseAutolayout">YES</bool>
</data>
</archive>

View File

@@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="1070" defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5053"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPGroupInspectorViewController">
<connections>
<outlet property="autotypePopupButton" destination="240" id="285"/>
<outlet property="contentView" destination="38" id="Dv7-1B-VeH"/>
<outlet property="expireDateSelectButton" destination="4" id="Bzg-8k-0OS"/>
<outlet property="expiresCheckButton" destination="5" id="283"/>
<outlet property="searchPopupButton" destination="229" id="284"/>
<outlet property="titleTextField" destination="23" id="35"/>
<outlet property="view" destination="37" id="45"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="37" customClass="HNHScrollView">
<rect key="frame" x="0.0" y="0.0" width="257" height="201"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<clipView key="contentView" id="HjA-kA-fcX">
<rect key="frame" x="0.0" y="0.0" width="257" height="201"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view translatesAutoresizingMaskIntoConstraints="NO" id="38" customClass="HNHScrollDocumentViewAdapter">
<rect key="frame" x="0.0" y="0.0" width="257" height="201"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="24">
<rect key="frame" x="18" y="182" width="35" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Name" id="25">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="23" customClass="HNHRoundedTextField">
<rect key="frame" x="20" y="152" width="217" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="18" y="128" width="67" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="32">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button focusRingType="exterior" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4">
<rect key="frame" x="206" y="127" width="31" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="31" id="l5I-EF-dHs"/>
</constraints>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" focusRingType="exterior" imageScaling="proportionallyDown" inset="2" id="33">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<action selector="pickExpiryDate:" target="-1" id="KIc-p2-zJQ"/>
</connections>
</button>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="229">
<rect key="frame" x="18" y="72" width="222" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="230">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="231">
<items>
<menuItem title="Inherit Search Settings" tag="-1" id="232">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Include in Search" id="233"/>
<menuItem title="Exclude from Search" tag="1" id="234"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="240">
<rect key="frame" x="18" y="17" width="222" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="242">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="243">
<items>
<menuItem title="Inherit Autotype Settings" tag="-1" id="246"/>
<menuItem title="Enable Autotype" id="245"/>
<menuItem title="Disable Autotype" tag="1" id="244"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="264">
<rect key="frame" x="18" y="104" width="40" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search" id="265">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="276">
<rect key="frame" x="18" y="49" width="53" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype" id="277">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="240" firstAttribute="top" secondItem="276" secondAttribute="bottom" constant="8" id="6Pu-PB-xxy"/>
<constraint firstItem="23" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="ABR-Ef-1ss"/>
<constraint firstAttribute="trailing" secondItem="229" secondAttribute="trailing" constant="20" symbolic="YES" id="Anv-gp-aTi"/>
<constraint firstAttribute="trailing" secondItem="4" secondAttribute="trailing" constant="20" id="D99-L7-ojR"/>
<constraint firstItem="240" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="E0a-1e-KR9"/>
<constraint firstItem="5" firstAttribute="centerY" secondItem="4" secondAttribute="centerY" id="FdF-Pn-yY2"/>
<constraint firstItem="5" firstAttribute="top" secondItem="23" secondAttribute="bottom" constant="8" symbolic="YES" id="GFF-xs-Nuj"/>
<constraint firstItem="4" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="5" secondAttribute="trailing" constant="8" symbolic="YES" id="HDo-Yu-P02"/>
<constraint firstItem="24" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="OhC-BP-oPg"/>
<constraint firstAttribute="trailing" secondItem="240" secondAttribute="trailing" constant="20" symbolic="YES" id="V4d-R9-46P"/>
<constraint firstAttribute="trailing" secondItem="23" secondAttribute="trailing" constant="20" id="Vej-zI-z2w"/>
<constraint firstItem="24" firstAttribute="top" secondItem="38" secondAttribute="top" constant="5" id="Wk6-kJ-fTY"/>
<constraint firstItem="5" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="ZaF-lS-pN8"/>
<constraint firstItem="276" firstAttribute="top" secondItem="229" secondAttribute="bottom" constant="12" id="c0H-cE-rnF"/>
<constraint firstItem="23" firstAttribute="top" secondItem="24" secondAttribute="bottom" constant="8" id="kbc-Eb-FPr"/>
<constraint firstItem="229" firstAttribute="top" secondItem="264" secondAttribute="bottom" constant="8" id="pDa-nw-ByQ"/>
<constraint firstItem="264" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="qnB-Pd-MqU"/>
<constraint firstItem="229" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="sCg-Na-ouj"/>
<constraint firstItem="276" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="xLc-Rz-374"/>
<constraint firstItem="264" firstAttribute="top" secondItem="5" secondAttribute="bottom" constant="12" id="xe7-ue-Wip"/>
<constraint firstAttribute="bottom" secondItem="240" secondAttribute="bottom" constant="20" symbolic="YES" id="zhA-eR-h1f"/>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstItem="38" firstAttribute="top" secondItem="HjA-kA-fcX" secondAttribute="top" id="Alo-CY-dgK"/>
<constraint firstAttribute="bottom" secondItem="38" secondAttribute="bottom" id="FbE-Hu-Y9V"/>
<constraint firstAttribute="trailing" secondItem="38" secondAttribute="trailing" id="HP8-rS-ooi"/>
<constraint firstItem="38" firstAttribute="leading" secondItem="HjA-kA-fcX" secondAttribute="leading" id="h7m-U5-sA4"/>
</constraints>
</clipView>
<scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="39">
<rect key="frame" x="0.0" y="185" width="257" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="40">
<rect key="frame" x="-100" y="-100" width="16" height="413"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</objects>
<resources>
<image name="NSActionTemplate" width="14" height="14"/>
</resources>
</document>

View File

@@ -1,694 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13A603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<data> <dependencies>
<int key="IBDocument.SystemTarget">1080</int> <deployment defaultVersion="1080" identifier="macosx"/>
<string key="IBDocument.SystemVersion">12D78</string> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
<string key="IBDocument.InterfaceBuilderVersion">3084</string> </dependencies>
<string key="IBDocument.AppKitVersion">1187.37</string> <objects>
<string key="IBDocument.HIToolboxVersion">626.00</string> <customObject id="-2" userLabel="File's Owner" customClass="MPIconSelectViewController">
<object class="NSMutableDictionary" key="IBDocument.PluginVersions"> <connections>
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> <outlet property="iconCollectionView" destination="58" id="77"/>
<string key="NS.object.0">3084</string> <outlet property="view" destination="1" id="56"/>
</object> </connections>
<array key="IBDocument.IntegratedClassDependencies"> </customObject>
<string>IBNSLayoutConstraint</string> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<string>NSButton</string> <customObject id="-3" userLabel="Application"/>
<string>NSButtonCell</string> <customView id="1">
<string>NSCollectionView</string> <rect key="frame" x="0.0" y="0.0" width="400" height="340"/>
<string>NSCollectionViewItem</string> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<string>NSCustomObject</string> <subviews>
<string>NSCustomView</string> <scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="57" customClass="HNHScrollView">
<string>NSScrollView</string> <rect key="frame" x="10" y="50" width="380" height="280"/>
<string>NSScroller</string> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</array> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Gwf-zs-lPT">
<array key="IBDocument.PluginDependencies"> <rect key="frame" x="0.0" y="0.0" width="380" height="280"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</array> <subviews>
<object class="NSMutableDictionary" key="IBDocument.Metadata"> <collectionView focusRingType="none" id="58">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string> <rect key="frame" x="0.0" y="0.0" width="380" height="280"/>
<integer value="1" key="NS.object.0"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</object> <color key="primaryBackgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> <connections>
<object class="NSCustomObject" id="1001"> <outlet property="itemPrototype" destination="61" id="63"/>
<string key="NSClassName">MPIconSelectViewController</string> </connections>
</object> </collectionView>
<object class="NSCustomObject" id="1003"> </subviews>
<string key="NSClassName">FirstResponder</string> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</object> </clipView>
<object class="NSCustomObject" id="1004"> <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="59">
<string key="NSClassName">NSApplication</string> <rect key="frame" x="1" y="144" width="233" height="15"/>
</object> <autoresizingMask key="autoresizingMask"/>
<object class="NSCustomView" id="1005"> </scroller>
<reference key="NSNextResponder"/> <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="60">
<int key="NSvFlags">268</int> <rect key="frame" x="234" y="1" width="15" height="143"/>
<array class="NSMutableArray" key="NSSubviews"> <autoresizingMask key="autoresizingMask"/>
<object class="NSButton" id="317760263"> </scroller>
<reference key="NSNextResponder" ref="1005"/> </scrollView>
<int key="NSvFlags">268</int> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="101">
<string key="NSFrame">{{147, 18}, {118, 25}}</string> <rect key="frame" x="263" y="18" width="117" height="25"/>
<reference key="NSSuperview" ref="1005"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<reference key="NSWindow"/> <buttonCell key="cell" type="roundTextured" title="Use Default Icon" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="102">
<reference key="NSNextKeyView"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<string key="NSReuseIdentifierKey">_NS:22</string> <font key="font" metaFont="system"/>
<bool key="NSEnabled">YES</bool> </buttonCell>
<object class="NSButtonCell" key="NSCell" id="619274271"> <connections>
<int key="NSCellFlags">-2080374784</int> <action selector="useDefault:" target="-2" id="129"/>
<int key="NSCellFlags2">134217728</int> </connections>
<string key="NSContents">Use Default Icon</string> </button>
<object class="NSFont" key="NSSupport" id="747112258"> <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="His-4A-hcY">
<string key="NSName">LucidaGrande</string> <rect key="frame" x="199" y="18" width="56" height="25"/>
<double key="NSSize">13</double> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<int key="NSfFlags">1044</int> <buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1kM-cI-P1o">
</object> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<string key="NSCellIdentifier">_NS:22</string> <font key="font" metaFont="system"/>
<reference key="NSControlView" ref="317760263"/> </buttonCell>
<int key="NSButtonFlags">-2038153216</int> <connections>
<int key="NSButtonFlags2">163</int> <action selector="cancel:" target="-2" id="cRO-8u-npC"/>
<string key="NSAlternateContents"/> </connections>
<string key="NSKeyEquivalent"/> </button>
<int key="NSPeriodicDelay">400</int> </subviews>
<int key="NSPeriodicInterval">75</int> <constraints>
</object> <constraint firstItem="57" firstAttribute="top" secondItem="1" secondAttribute="top" constant="10" id="88"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool> <constraint firstAttribute="bottom" secondItem="101" secondAttribute="bottom" constant="20" symbolic="YES" id="107"/>
</object> <constraint firstAttribute="trailing" secondItem="101" secondAttribute="trailing" constant="20" symbolic="YES" id="108"/>
<object class="NSScrollView" id="170990502"> <constraint firstAttribute="trailing" secondItem="57" secondAttribute="trailing" constant="10" id="110"/>
<reference key="NSNextResponder" ref="1005"/> <constraint firstItem="57" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="10" id="111"/>
<int key="NSvFlags">4364</int> <constraint firstItem="101" firstAttribute="top" secondItem="57" secondAttribute="bottom" constant="8" symbolic="YES" id="112"/>
<array class="NSMutableArray" key="NSSubviews"> </constraints>
<object class="NSClipView" id="785205210"> </customView>
<reference key="NSNextResponder" ref="170990502"/> <collectionViewItem id="61">
<int key="NSvFlags">2304</int> <connections>
<array class="NSMutableArray" key="NSSubviews"> <outlet property="view" destination="113" id="128"/>
<object class="NSCollectionView" id="697027275"> </connections>
<reference key="NSNextResponder" ref="785205210"/> </collectionViewItem>
<int key="NSvFlags">4370</int> <customView id="113">
<string key="NSFrameSize">{243, 238}</string> <rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<reference key="NSSuperview" ref="785205210"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<reference key="NSWindow"/> <subviews>
<reference key="NSNextKeyView" ref="319187659"/> <button translatesAutoresizingMaskIntoConstraints="NO" id="114">
<string key="NSReuseIdentifierKey">_NS:80</string> <rect key="frame" x="4" y="4" width="32" height="32"/>
<string key="NSMinGridSize">{0, 0}</string> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<string key="NSMaxGridSize">{0, 0}</string> <constraints>
<int key="NSMaxNumberOfGridRows">0</int> <constraint firstAttribute="width" constant="32" id="161"/>
<int key="NSMaxNumberOfGridColumns">0</int> <constraint firstAttribute="height" constant="32" id="162"/>
<array key="NSBackgroundColors"> </constraints>
<object class="NSColor" id="228713979"> <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSAddTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="115">
<int key="NSColorSpace">6</int> <behavior key="behavior" lightByContents="YES"/>
<string key="NSCatalogName">System</string> <font key="font" metaFont="system"/>
<string key="NSColorName">windowBackgroundColor</string> </buttonCell>
<object class="NSColor" key="NSColor"> <connections>
<int key="NSColorSpace">3</int> <action selector="_selectImage:" target="-2" id="eFg-h5-9jy"/>
<bytes key="NSWhite">MC41AA</bytes> <binding destination="61" name="image" keyPath="representedObject" id="139"/>
</object> </connections>
</object> </button>
</array> </subviews>
<int key="NSDraggingSourceMaskForLocal">-1</int> <constraints>
<int key="NSDraggingSourceMaskForNonLocal">0</int> <constraint firstItem="114" firstAttribute="centerY" secondItem="113" secondAttribute="centerY" id="168"/>
</object> <constraint firstItem="114" firstAttribute="centerX" secondItem="113" secondAttribute="centerX" id="169"/>
</array> </constraints>
<string key="NSFrame">{{1, 1}, {243, 238}}</string> </customView>
<reference key="NSSuperview" ref="170990502"/> </objects>
<reference key="NSWindow"/> <resources>
<reference key="NSNextKeyView" ref="697027275"/> <image name="NSAddTemplate" width="8" height="8"/>
<string key="NSReuseIdentifierKey">_NS:78</string> </resources>
<reference key="NSDocView" ref="697027275"/> </document>
<object class="NSColor" key="NSBGColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlBackgroundColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<int key="NScvFlags">2</int>
</object>
<object class="NSScroller" id="319187659">
<reference key="NSNextResponder" ref="170990502"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{234, 1}, {15, 143}}</string>
<reference key="NSSuperview" ref="170990502"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="775158265"/>
<string key="NSReuseIdentifierKey">_NS:82</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="170990502"/>
<string key="NSAction">_doScroller:</string>
<double key="NSCurValue">1</double>
<double key="NSPercent">0.89655172824859619</double>
</object>
<object class="NSScroller" id="775158265">
<reference key="NSNextResponder" ref="170990502"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 144}, {233, 15}}</string>
<reference key="NSSuperview" ref="170990502"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="317760263"/>
<string key="NSReuseIdentifierKey">_NS:91</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="170990502"/>
<string key="NSAction">_doScroller:</string>
<double key="NSPercent">0.63157892227172852</double>
</object>
</array>
<string key="NSFrame">{{20, 50}, {245, 240}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="785205210"/>
<string key="NSReuseIdentifierKey">_NS:76</string>
<int key="NSsFlags">133682</int>
<reference key="NSVScroller" ref="319187659"/>
<reference key="NSHScroller" ref="775158265"/>
<reference key="NSContentView" ref="785205210"/>
<double key="NSMinMagnification">0.25</double>
<double key="NSMaxMagnification">4</double>
<double key="NSMagnification">1</double>
</object>
</array>
<string key="NSFrameSize">{285, 310}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="170990502"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCollectionViewItem" id="417473882"/>
<object class="NSCustomView" id="340719917">
<reference key="NSNextResponder"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="612603831">
<reference key="NSNextResponder" ref="340719917"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{10, 10}, {40, 40}}</string>
<reference key="NSSuperview" ref="340719917"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="344314901">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="747112258"/>
<string key="NSCellIdentifier">_NS:9</string>
<reference key="NSControlView" ref="612603831"/>
<int key="NSButtonFlags">-2039201792</int>
<int key="NSButtonFlags2">65</int>
<object class="NSCustomResource" key="NSNormalImage">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSAddTemplate</string>
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</array>
<string key="NSFrameSize">{60, 60}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="612603831"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSClassName">NSView</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="1005"/>
</object>
<int key="connectionID">56</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">iconCollectionView</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="697027275"/>
</object>
<int key="connectionID">77</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">useDefault:</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="317760263"/>
</object>
<int key="connectionID">129</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">itemPrototype</string>
<reference key="source" ref="697027275"/>
<reference key="destination" ref="417473882"/>
</object>
<int key="connectionID">63</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="417473882"/>
<reference key="destination" ref="340719917"/>
</object>
<int key="connectionID">128</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1001"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1003"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1004"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">1</int>
<reference key="object" ref="1005"/>
<array class="NSMutableArray" key="children">
<reference ref="170990502"/>
<object class="IBNSLayoutConstraint" id="494913411">
<reference key="firstItem" ref="317760263"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="170990502"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="851764901">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="317760263"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="809281010">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">4</int>
<int key="relation">0</int>
<reference key="secondItem" ref="317760263"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="1060216757">
<reference key="firstItem" ref="170990502"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1005"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="523638618">
<reference key="firstItem" ref="1005"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="170990502"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="655672626">
<reference key="firstItem" ref="170990502"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="1005"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="1005"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<reference ref="317760263"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">57</int>
<reference key="object" ref="170990502"/>
<array class="NSMutableArray" key="children">
<reference ref="697027275"/>
<reference ref="775158265"/>
<reference ref="319187659"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">58</int>
<reference key="object" ref="697027275"/>
<reference key="parent" ref="170990502"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">59</int>
<reference key="object" ref="775158265"/>
<reference key="parent" ref="170990502"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">60</int>
<reference key="object" ref="319187659"/>
<reference key="parent" ref="170990502"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">61</int>
<reference key="object" ref="417473882"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">88</int>
<reference key="object" ref="655672626"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">101</int>
<reference key="object" ref="317760263"/>
<array class="NSMutableArray" key="children">
<reference ref="619274271"/>
</array>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">102</int>
<reference key="object" ref="619274271"/>
<reference key="parent" ref="317760263"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">107</int>
<reference key="object" ref="809281010"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">108</int>
<reference key="object" ref="851764901"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">110</int>
<reference key="object" ref="523638618"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">111</int>
<reference key="object" ref="1060216757"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">112</int>
<reference key="object" ref="494913411"/>
<reference key="parent" ref="1005"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">113</int>
<reference key="object" ref="340719917"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="436230129">
<reference key="firstItem" ref="340719917"/>
<int key="firstAttribute">10</int>
<int key="relation">0</int>
<reference key="secondItem" ref="612603831"/>
<int key="secondAttribute">10</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="340719917"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="766436605">
<reference key="firstItem" ref="340719917"/>
<int key="firstAttribute">9</int>
<int key="relation">0</int>
<reference key="secondItem" ref="612603831"/>
<int key="secondAttribute">9</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="340719917"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<reference ref="612603831"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">114</int>
<reference key="object" ref="612603831"/>
<array class="NSMutableArray" key="children">
<reference ref="344314901"/>
<object class="IBNSLayoutConstraint" id="463236706">
<reference key="firstItem" ref="612603831"/>
<int key="firstAttribute">8</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">40</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="612603831"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
<object class="IBNSLayoutConstraint" id="477773969">
<reference key="firstItem" ref="612603831"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">40</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="612603831"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="340719917"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">115</int>
<reference key="object" ref="344314901"/>
<reference key="parent" ref="612603831"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">121</int>
<reference key="object" ref="477773969"/>
<reference key="parent" ref="612603831"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">123</int>
<reference key="object" ref="463236706"/>
<reference key="parent" ref="612603831"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">126</int>
<reference key="object" ref="766436605"/>
<reference key="parent" ref="340719917"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">127</int>
<reference key="object" ref="436230129"/>
<reference key="parent" ref="340719917"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="1.IBNSViewMetadataConstraints">
<reference ref="655672626"/>
<reference ref="523638618"/>
<reference ref="1060216757"/>
<reference ref="809281010"/>
<reference ref="851764901"/>
<reference ref="494913411"/>
</array>
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="101.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="101.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="102.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="107.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="108.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="110.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="111.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="112.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="113.IBNSViewMetadataConstraints">
<reference ref="766436605"/>
<reference ref="436230129"/>
</array>
<string key="113.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array key="114.IBNSViewMetadataConstraints">
<reference ref="477773969"/>
<reference ref="463236706"/>
</array>
<boolean value="NO" key="114.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="114.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="115.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="121.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="123.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="126.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="127.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="57.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference key="58.IBCollectionViewIntegration.primaryColor" ref="228713979"/>
<string key="58.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="59.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="60.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="61.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="88.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">129</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">MPIconSelectViewController</string>
<string key="superclassName">MPViewController</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">iconCollectionView</string>
<string key="NS.object.0">NSCollectionView</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">iconCollectionView</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">iconCollectionView</string>
<string key="candidateClassName">NSCollectionView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPIconSelectViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPViewController</string>
<string key="superclassName">NSViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSCollectionViewItem</string>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="imageView">NSImageView</string>
<string key="textField">NSTextField</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="imageView">
<string key="name">imageView</string>
<string key="candidateClassName">NSImageView</string>
</object>
<object class="IBToOneOutletInfo" key="textField">
<string key="name">textField</string>
<string key="candidateClassName">NSTextField</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/NSCollectionViewItem.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSLayoutConstraint</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
<string key="NS.key.0">NSAddTemplate</string>
<string key="NS.object.0">{8, 8}</string>
</object>
<bool key="IBDocument.UseAutolayout">YES</bool>
</data>
</archive>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPIntegrationSettingsController">
<connections>
<outlet property="enableGlobalAutotypeCheckbutton" destination="tik-Ar-FJg" id="d2f-69-2BP"/>
<outlet property="enableServerCheckbutton" destination="2" id="17"/>
<outlet property="view" destination="1" id="18"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
<rect key="frame" x="0.0" y="0.0" width="400" height="179"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" title="Keepass HTTP" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="KbH-0Q-5Tw">
<rect key="frame" x="17" y="105" width="366" height="54"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView">
<rect key="frame" x="1" y="1" width="364" height="38"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="2">
<rect key="frame" x="16" y="12" width="187" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="Enable KeePassHttp server" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="3">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
</view>
<constraints>
<constraint firstItem="2" firstAttribute="top" secondItem="KbH-0Q-5Tw" secondAttribute="top" constant="25" id="I1K-oc-SCv"/>
<constraint firstAttribute="bottom" secondItem="2" secondAttribute="bottom" constant="11" id="IfW-lq-9Nf"/>
<constraint firstItem="2" firstAttribute="leading" secondItem="KbH-0Q-5Tw" secondAttribute="leading" constant="16" id="Xod-Hc-0rx"/>
</constraints>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</box>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" title="Autotype" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="P9N-HM-wER">
<rect key="frame" x="17" y="16" width="366" height="85"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView">
<rect key="frame" x="1" y="1" width="364" height="69"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8">
<rect key="frame" x="79" y="15" width="46" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="⌘⌥M" drawsBackground="YES" id="sW8-rh-bhD">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="tik-Ar-FJg">
<rect key="frame" x="16" y="43" width="168" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="Enable global Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="1qb-Rd-jYu">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V">
<rect key="frame" x="16" y="17" width="57" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut" id="6oN-CH-T0O">
<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>
</view>
<constraints>
<constraint firstItem="tik-Ar-FJg" firstAttribute="top" secondItem="P9N-HM-wER" secondAttribute="top" constant="25" id="1HW-Ac-jq4"/>
<constraint firstAttribute="bottom" secondItem="Kvg-he-3c8" secondAttribute="bottom" constant="12" id="3bK-25-sTQ"/>
<constraint firstItem="buI-Wb-o3V" firstAttribute="baseline" secondItem="Kvg-he-3c8" secondAttribute="baseline" id="49G-2q-5ye"/>
<constraint firstItem="Kvg-he-3c8" firstAttribute="leading" secondItem="buI-Wb-o3V" secondAttribute="trailing" constant="8" symbolic="YES" id="Khi-Pi-iBU"/>
<constraint firstItem="Kvg-he-3c8" firstAttribute="top" secondItem="tik-Ar-FJg" secondAttribute="bottom" constant="8" symbolic="YES" id="cn1-4v-XHZ"/>
<constraint firstItem="tik-Ar-FJg" firstAttribute="leading" secondItem="buI-Wb-o3V" secondAttribute="leading" id="eVT-oc-Oz8"/>
<constraint firstItem="tik-Ar-FJg" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" constant="16" id="rMB-zA-WBv"/>
</constraints>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</box>
</subviews>
<constraints>
<constraint firstAttribute="width" constant="400" id="19"/>
<constraint firstAttribute="trailing" secondItem="KbH-0Q-5Tw" secondAttribute="trailing" constant="20" symbolic="YES" id="0x4-nr-DuM"/>
<constraint firstItem="KbH-0Q-5Tw" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="dln-JS-u45"/>
<constraint firstItem="P9N-HM-wER" firstAttribute="leading" secondItem="KbH-0Q-5Tw" secondAttribute="leading" id="iZD-AQ-EeG"/>
<constraint firstItem="KbH-0Q-5Tw" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="mtr-dI-3QM"/>
<constraint firstItem="P9N-HM-wER" firstAttribute="top" secondItem="KbH-0Q-5Tw" secondAttribute="bottom" constant="8" symbolic="YES" id="oFy-uk-HLJ"/>
<constraint firstItem="P9N-HM-wER" firstAttribute="trailing" secondItem="KbH-0Q-5Tw" secondAttribute="trailing" id="sIZ-ZD-A8K"/>
<constraint firstAttribute="bottom" secondItem="P9N-HM-wER" secondAttribute="bottom" constant="20" symbolic="YES" id="tUs-qA-SKq"/>
</constraints>
</customView>
</objects>
</document>

View File

@@ -0,0 +1,15 @@
//
// KPKNode+IconImage.h
// MacPass
//
// Created by Michael Starke on 31.08.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KPKNode.h"
@interface KPKNode (IconImage)
@property (nonatomic, readonly) NSImage *iconImage;
@end

View File

@@ -0,0 +1,32 @@
//
// KPKNode+IconImage.m
// MacPass
//
// Created by Michael Starke on 31.08.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KPKNode+IconImage.h"
#import "KPKIcon.h"
#import "KPKTree.h"
#import "KPKMetaData.h"
#import "MPIconHelper.h"
@implementation KPKNode (IconImage)
+ (NSSet *)keyPathsForValuesAffectingIconImage {
return [NSSet setWithArray:@[@"iconUUID", @"iconId"]];
}
- (NSImage *)iconImage {
if(self.iconUUID) {
KPKIcon *icon = [self.tree.metaData findIcon:self.iconUUID];
if(icon && icon.image) {
return icon.image;
}
}
return [MPIconHelper icon:(MPIconType)self.iconId];
}
@end

View File

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

View File

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

View File

@@ -1,15 +0,0 @@
//
// Kdb3Tree+NewTree.h
// MacPass
//
// Created by Michael Starke on 21.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb3Node.h"
@interface Kdb3Tree (NewTree)
+ (Kdb3Tree *)templateTree;
@end

View File

@@ -1,54 +0,0 @@
//
// Kdb3Tree+NewTree.m
// MacPass
//
// Created by Michael Starke on 21.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb3Tree+NewTree.h"
@implementation Kdb3Tree (NewTree)
+ (Kdb3Tree *)templateTree {
Kdb3Tree *tree = [[Kdb3Tree alloc] init];
Kdb3Group *rootGroup = [[Kdb3Group alloc] init];
rootGroup.name = @"%ROOT%";
tree.root = rootGroup;
KdbGroup *parentGroup = [tree createGroup:rootGroup];
parentGroup.name = NSLocalizedString(@"GENERAL", "General");
parentGroup.image = 48;
[rootGroup addGroup:parentGroup];
KdbGroup *group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"WINDOWS", "Windows");
group.image = 38;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"NETWORK", "Network");
group.image = 3;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"INTERNET", "Internet");
group.image = 1;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"EMAIL", "EMail");
group.image = 19;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"HOMEBANKING", "Homebanking");
group.image = 37;
[parentGroup addGroup:group];
return tree;
}
@end

View File

@@ -1,23 +0,0 @@
//
// Kdb4Entry+KVOAdditions.h
// MacPass
//
// Created by Michael Starke on 28.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Node.h"
@interface Kdb4Entry (KVOAdditions)
- (NSUInteger)countOfStringFields;
- (StringField *)objectInStringFieldsAtIndex:(NSUInteger)index;
- (void)removeObjectFromStringFieldsAtIndex:(NSUInteger)anIndex;
- (void)insertObject:(StringField *)stringfield inStringFieldsAtIndex:(NSUInteger)anIndex;
- (NSUInteger)countOfBinaries;
- (BinaryRef *)objectInBinariesAtIndex:(NSUInteger)index;
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index;
- (void)insertObject:(BinaryRef *)binary inBinariesAtIndex:(NSUInteger)index;
@end

View File

@@ -1,47 +0,0 @@
//
// Kdb4Entry+KVOAdditions.m
// MacPass
//
// Created by Michael Starke on 28.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Entry+KVOAdditions.h"
@implementation Kdb4Entry (KVOAdditions)
/* Entries */
- (NSUInteger)countOfStringFields {
return [self.stringFields count];
}
- (StringField *)objectInStringFieldsAtIndex:(NSUInteger)index {
return (self.stringFields)[index];
}
- (void)insertObject:(StringField *)stringfield inStringFieldsAtIndex:(NSUInteger)anIndex {
[self.stringFields insertObject:stringfield atIndex:anIndex];
}
- (void)removeObjectFromStringFieldsAtIndex:(NSUInteger)anIndex {
[self.stringFields removeObjectAtIndex:anIndex];
}
/* Binaries */
- (NSUInteger)countOfBinaries {
return [self.binaries count];
}
- (BinaryRef *)objectInBinariesAtIndex:(NSUInteger)index {
return (self.binaries)[index];
}
- (void)insertObject:(BinaryRef *)binary inBinariesAtIndex:(NSUInteger)index {
[self.binaries insertObject:binary atIndex:index];
}
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index {
[self.binaries removeObjectAtIndex:index];
}
@end

View File

@@ -1,15 +0,0 @@
//
// Kdb4Entry+MPAdditions.h
// MacPass
//
// Created by Michael Starke on 19.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Node.h"
@interface Kdb4Entry (MPAdditions)
- (NSString *)uniqueKeyForProposal:(NSString *)key;
@end

View File

@@ -1,34 +0,0 @@
//
// Kdb4Entry+MPAdditions.m
// MacPass
//
// Created by Michael Starke on 19.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Entry+MPAdditions.h"
@implementation Kdb4Entry (MPAdditions)
- (NSString *)uniqueKeyForProposal:(NSString *)key {
/*
FIXME: Introduce some cachin behaviour. We iterate over after every single edit
*/
NSArray *defaultKeys = @[ FIELD_TITLE,
FIELD_USER_NAME,
FIELD_PASSWORD,
FIELD_URL,
FIELD_NOTES ];
NSMutableSet *keys = [[NSMutableSet alloc] initWithArray:defaultKeys];
for(StringField *field in self.stringFields) {
[keys addObject:field.key];
}
NSUInteger counter = 1;
NSString *base = key;
while([keys containsObject:key]) {
key = [NSString stringWithFormat:@"%@-%ld", base, counter++];
}
return key;
}
@end

View File

@@ -1,19 +0,0 @@
//
// Kdb4Tree+KVOAdditions.h
// MacPass
//
// Created by Michael Starke on 27.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Node.h"
@interface Kdb4Tree (KVOAdditions)
- (void)insertObject:(Binary *)binary inBinariesAtIndex:(NSUInteger)index;
- (void)insertObject:(CustomIcon *)icon inCustomIconsAtIndex:(NSUInteger)index;
- (CustomIcon *)objectInCustomIconsAtIndex:(NSUInteger)index;
- (Binary *)objectInBinariesAtIndex:(NSUInteger)index;
@end

View File

@@ -1,29 +0,0 @@
//
// Kdb4Tree+KVOAdditions.m
// MacPass
//
// Created by Michael Starke on 27.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Tree+KVOAdditions.h"
@implementation Kdb4Tree (KVOAdditions)
- (void)insertObject:(Binary *)binary inBinariesAtIndex:(NSUInteger)index {
[self.binaries insertObject:binary atIndex:index];
}
- (void)insertObject:(CustomIcon *)icon inCustomIconsAtIndex:(NSUInteger)index {
[self.customIcons insertObject:icon atIndex:index];
}
- (Binary *)objectInBinariesAtIndex:(NSUInteger)index {
return (self.binaries)[index];
}
- (CustomIcon *)objectInCustomIconsAtIndex:(NSUInteger)index {
return (self.customIcons)[index];
}
@end

View File

@@ -1,16 +0,0 @@
//
// Kdb4Tree+NewTree.h
// MacPass
//
// Created by Michael Starke on 21.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Node.h"
@interface Kdb4Tree (NewTree)
+(Kdb4Tree *)templateTree;
+(Kdb4Tree *)demoTree;
@end

View File

@@ -1,123 +0,0 @@
//
// Kdb4Tree+NewTree.m
// MacPass
//
// Created by Michael Starke on 21.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb4Tree+NewTree.h"
@implementation Kdb4Tree (NewTree)
+ (Kdb4Tree *)templateTree {
NSDate *currentTime = [NSDate date];
Kdb4Tree *tree = [[Kdb4Tree alloc] init];
tree.generator = @"MacPass";
tree.databaseName = NSLocalizedString(@"DATABASE", "");
tree.databaseNameChanged = currentTime;
tree.databaseDescription = @"";
tree.databaseDescriptionChanged = currentTime;
tree.defaultUserName = @"";
tree.defaultUserNameChanged = currentTime;
tree.maintenanceHistoryDays = 365;
tree.color = @"";
tree.masterKeyChanged = currentTime;
tree.masterKeyChangeRec = -1;
tree.masterKeyChangeForce = -1;
tree.protectTitle = NO;
tree.protectUserName = NO;
tree.protectPassword = YES;
tree.protectUrl = NO;
tree.protectNotes = NO;
tree.recycleBinEnabled = YES;
tree.recycleBinUuid = [UUID nullUuid];
tree.recycleBinChanged = currentTime;
tree.entryTemplatesGroup = [UUID nullUuid];
tree.entryTemplatesGroupChanged = currentTime;
tree.historyMaxItems = 10;
tree.historyMaxSize = 6 * 1024 * 1024; // 6 MB
tree.lastSelectedGroup = [UUID nullUuid];
tree.lastTopVisibleGroup = [UUID nullUuid];
KdbGroup *parentGroup = [tree createGroup:nil];
parentGroup.name = NSLocalizedString(@"GENERAL", "General");
parentGroup.image = 48;
tree.root = parentGroup;
KdbGroup *group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"WINDOWS", "Windows");
group.image = 38;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"NETWORK", "Network");
group.image = 3;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"INTERNET", "Internet");
group.image = 1;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"EMAIL", "EMail");
group.image = 19;
[parentGroup addGroup:group];
group = [tree createGroup:parentGroup];
group.name = NSLocalizedString(@"HOMEBANKING", "Homebanking");
group.image = 37;
[parentGroup addGroup:group];
return tree;
}
+ (Kdb4Tree *)demoTree {
NSDate *currentTime = [NSDate date];
Kdb4Tree *tree = [[Kdb4Tree alloc] init];
tree.generator = @"MacPass";
tree.databaseName = @"Icon Demonstation";
tree.databaseNameChanged = currentTime;
tree.databaseDescription = @"This database just has all default icons as groups in the tree";
tree.databaseDescriptionChanged = currentTime;
tree.defaultUserName = @"";
tree.defaultUserNameChanged = currentTime;
tree.maintenanceHistoryDays = 365;
tree.color = @"";
tree.masterKeyChanged = currentTime;
tree.masterKeyChangeRec = -1;
tree.masterKeyChangeForce = -1;
tree.protectTitle = NO;
tree.protectUserName = NO;
tree.protectPassword = YES;
tree.protectUrl = NO;
tree.protectNotes = NO;
tree.recycleBinEnabled = YES;
tree.recycleBinUuid = [UUID nullUuid];
tree.recycleBinChanged = currentTime;
tree.entryTemplatesGroup = [UUID nullUuid];
tree.entryTemplatesGroupChanged = currentTime;
tree.historyMaxItems = 10;
tree.historyMaxSize = 6 * 1024 * 1024; // 6 MB
tree.lastSelectedGroup = [UUID nullUuid];
tree.lastTopVisibleGroup = [UUID nullUuid];
KdbGroup *parentGroup = [tree createGroup:nil];
parentGroup.name = @"General";
parentGroup.image = 48;
tree.root = parentGroup;
for(NSUInteger iImageIndex = 0; iImageIndex < 69; iImageIndex++) {
KdbGroup *group = [tree createGroup:parentGroup];
group.name = [NSString stringWithFormat:@"Group %ld", iImageIndex];
group.image = iImageIndex;
[parentGroup addGroup:group];
}
return tree;
}
@end

View File

@@ -1,15 +0,0 @@
//
// KdbEntry+MPAdditions.h
// MacPass
//
// Created by Michael Starke on 01.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
@interface KdbEntry (MPAdditions)
@property (nonatomic, readonly) NSImage *icon;
@end

View File

@@ -1,21 +0,0 @@
//
// KdbEntry+MPAdditions.m
// MacPass
//
// Created by Michael Starke on 01.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbEntry+MPAdditions.h"
#import "Kdb3Node.h"
#import "Kdb4Node.h"
#import "MPIconHelper.h"
@implementation KdbEntry (MPAdditions)
- (NSImage *)icon {
return [MPIconHelper icon:(MPIconType)self.image];
}
@end

View File

@@ -1,15 +0,0 @@
//
// KdbEntry+MPTreeTools.h
// MacPass
//
// Created by Michael Starke on 10.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
@interface KdbEntry (MPTreeTools)
- (NSUInteger)indexInParent;
@end

View File

@@ -1,21 +0,0 @@
//
// KdbEntry+MPTreeTools.m
// MacPass
//
// Created by Michael Starke on 10.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbEntry+MPTreeTools.h"
@implementation KdbEntry (MPTreeTools)
- (NSUInteger)indexInParent {
if(self.parent) {
return [self.parent.entries indexOfObject:self];
}
return NSNotFound;
}
@end

View File

@@ -1,36 +0,0 @@
//
// KdbEntry+Undo.h
// MacPass
//
// Created by Michael Starke on 12.05.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
APPKIT_EXTERN NSString *const MPEntryTitleUndoableKey;
APPKIT_EXTERN NSString *const MPEntryUsernameUndoableKey;
APPKIT_EXTERN NSString *const MPEntryPasswordUndoableKey;
APPKIT_EXTERN NSString *const MPEntryUrlUndoableKey;
APPKIT_EXTERN NSString *const MPEntryNotesUndoableKey;
@interface KdbEntry (Undo)
- (NSString *)titleUndoable;
- (NSString *)usernameUndoable;
- (NSString *)passwordUndoable;
- (NSString *)urlUndoable;
- (NSString *)notesUndoable;
- (void)setTitleUndoable:(NSString *)title;
- (void)setUsernameUndoable:(NSString *)username;
- (void)setPasswordUndoable:(NSString *)password;
- (void)setUrlUndoable:(NSString *)url;
- (void)setNotesUndoable:(NSString *)notes;
- (void)deleteUndoable;
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index;
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index;
@end

View File

@@ -1,159 +0,0 @@
//
// KdbEntry+Undo.m
// MacPass
//
// Created by Michael Starke on 12.05.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbEntry+Undo.h"
#import "KdbGroup+Undo.h"
#import "KdbGroup+KVOAdditions.h"
#import "KdbGroup+MPTreeTools.h"
NSString *const MPEntryTitleUndoableKey = @"titleUndoable";
NSString *const MPEntryUsernameUndoableKey = @"usernameUndoable";
NSString *const MPEntryPasswordUndoableKey = @"passwordUndoable";
NSString *const MPEntryUrlUndoableKey = @"urlUndoable";
NSString *const MPEntryNotesUndoableKey = @"notesUndoable";
#ifndef MPSetActionName
#define MPSetActionName(key, comment) \
if(![[self undoManager] isUndoing]) {\
[[self undoManager] setActionName:[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]];\
}
#endif
@implementation KdbEntry (Undo)
- (NSUndoManager *)undoManager {
return [[[NSDocumentController sharedDocumentController] currentDocument] undoManager];
}
- (NSString *)titleUndoable {
return [self title];
}
- (NSString *)usernameUndoable {
return [self username];
}
- (NSString *)passwordUndoable {
return [self password];
}
- (NSString *)urlUndoable {
return [self url];
}
- (NSString *)notesUndoable {
return [self notes];
}
- (void)setTitleUndoable:(NSString *)title {
[[self undoManager] registerUndoWithTarget:self selector:@selector(setTitleUndoable:) object:self.title];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
}
[self setLastModificationTime:[NSDate date]];
[self setTitle:title];
}
- (void)setUsernameUndoable:(NSString *)username {
[[self undoManager] registerUndoWithTarget:self selector:@selector(setUsernameUndoable:) object:self.username];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"SET_USERNAME", "Undo set username")];
}
[self setLastModificationTime:[NSDate date]];
[self setUsername:username];
}
- (void)setPasswordUndoable:(NSString *)password {
[[self undoManager] registerUndoWithTarget:self selector:@selector(setPasswordUndoable:) object:self.password];
MPSetActionName(@"SET_PASSWORT", "Undo set password");
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
}
[self setLastModificationTime:[NSDate date]];
[self setPassword:password];
}
- (void)setUrlUndoable:(NSString *)url {
[[self undoManager] registerUndoWithTarget:self selector:@selector(setUrlUndoable:) object:self.url];
MPSetActionName(@"SET_URL", "Undo set URL");
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
}
[self setLastModificationTime:[NSDate date]];
[self setUrl:url];
}
- (void)setNotesUndoable:(NSString *)notes {
[[self undoManager] registerUndoWithTarget:self selector:@selector(setNotesUndoable:) object:self.notes];
MPSetActionName(@"SET_NOTES", "Set Notes");
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
}
[self setLastModificationTime:[NSDate date]];
[self setNotes:notes];
}
- (void)deleteUndoable {
if(!self.parent) {
return; // No parent to be removed from
}
NSUInteger oldIndex = [self.parent.entries indexOfObject:self];
if(oldIndex == NSNotFound) {
return; // We're not in our parents entries list
}
[[[self undoManager] prepareWithInvocationTarget:self.parent] addEntryUndoable:self atIndex:oldIndex];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"DELETE_ENTRY", "Set Title")];
}
//[[NSNotificationCenter defaultCenter] postNotificationName:@"" object:self userInfo:nil];
[self.parent removeObjectFromEntriesAtIndex:oldIndex];
}
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index {
[self _moveToGroup:group atIndex:index actionName:NSLocalizedString(@"MOVE_ENTRY", "Move Group")];
}
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index {
[self _moveToGroup:trash atIndex:index actionName:NSLocalizedString(@"TRASH_ENTRY", "Move Entry to Trash")];
}
- (void)_moveToGroup:(KdbGroup *)group atIndex:(NSUInteger)index actionName:(NSString *)name {
if(!group || !self.parent) {
return; // Nothing to be moved about
}
NSUInteger oldIndex = [self.parent.entries indexOfObject:self];
if(oldIndex == NSNotFound) {
return; // Not found in entries of parent!
}
[[[self undoManager] prepareWithInvocationTarget:self] _moveToGroup:self.parent atIndex:oldIndex actionName:name];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:name];
}
[self.parent removeObjectFromEntriesAtIndex:oldIndex];
// Old indices might be wrong, correct them if necessary
index = MIN(index, [group.entries count]);
[group insertObject:self inEntriesAtIndex:index];
}
@end

View File

@@ -1,25 +0,0 @@
//
// KdbGroup+KVOAdditions.h
// MacPass
//
// Created by Michael Starke on 08.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
@interface KdbGroup (KVOAdditions)
/* KVO Accesors for the entries */
- (KdbEntry *)objectInEntriesAtIndex:(NSUInteger)index;
- (NSUInteger)countOfEntries;
- (void)insertObject:(KdbEntry *)entry inEntriesAtIndex:(NSUInteger)index;
- (void)removeObjectFromEntriesAtIndex:(NSUInteger)index;
/* KVO Accessors for the groups */
- (KdbGroup *)objectInGroupsAtIndex:(NSUInteger)index;
- (NSUInteger)countOfGroups;
- (void)insertObject:(KdbGroup *)group inGroupsAtIndex:(NSUInteger)index;
- (void)removeObjectFromGroupsAtIndex:(NSUInteger)index;
@end

View File

@@ -1,51 +0,0 @@
//
// KdbGroup+KVOAdditions.m
// MacPass
//
// Created by Michael Starke on 08.06.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbGroup+KVOAdditions.h"
@implementation KdbGroup (KVOAdditions)
- (void)insertObject:(KdbEntry *)entry inEntriesAtIndex:(NSUInteger)index {
entry.parent = self;
[_entries insertObject:entry atIndex:index];
}
- (void)removeObjectFromEntriesAtIndex:(NSUInteger)index {
KdbEntry *entry = _entries[index];
[_entries removeObjectAtIndex:index];
entry.parent = nil;
}
- (NSUInteger)countOfEntries {
return [self.entries count];
}
- (KdbEntry *)objectInEntriesAtIndex:(NSUInteger)index {
return self.entries[index];
}
- (KdbGroup *)objectInGroupsAtIndex:(NSUInteger)index {
return self.groups[index];
}
- (NSUInteger)countOfGroups {
return [self.groups count];
}
- (void)insertObject:(KdbGroup *)group inGroupsAtIndex:(NSUInteger)index {
group.parent = self;
[_groups insertObject:group atIndex:index];
}
- (void)removeObjectFromGroupsAtIndex:(NSUInteger)index {
KdbGroup *group = (self.groups)[index];
[_groups removeObjectAtIndex:index];
group.parent = nil;
}
@end

View File

@@ -1,22 +0,0 @@
//
// KdbGroup+MPAdditions.h
// MacPass
//
// Created by Michael Starke on 01.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
@interface KdbGroup (MPAdditions)
/* Adapter to load images based on icon index */
@property (nonatomic, readonly) NSImage *icon;
/* Walks the tree up to the root element */
- (KdbGroup *)root;
/* Removes all Groups and Entries from this group*/
- (void)clear;
@end

View File

@@ -1,36 +0,0 @@
//
// KdbGroup+MPAdditions.m
// MacPass
//
// Created by Michael Starke on 01.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbGroup+MPAdditions.h"
#import "KdbGroup+KVOAdditions.h"
#import "MPIconHelper.h"
@implementation KdbGroup (MPAdditions)
- (NSImage *)icon {
return [MPIconHelper icon:(MPIconType)self.image];
}
- (KdbGroup *)root {
if(self.parent) {
return [self.parent root];
}
return self;
}
- (void)clear {
NSUInteger groupCount = [_groups count];
for(NSInteger index = (groupCount - 1); index > -1; index--) {
[self removeObjectFromGroupsAtIndex:index];
}
NSUInteger entryCount = [_entries count];
for(NSInteger index = (entryCount - 1); index > -1; index--) {
[self removeObjectFromEntriesAtIndex:index];
}
}
@end

View File

@@ -1,25 +0,0 @@
//
// KdbGroup+MPTreeTools.h
// MacPass
//
// Created by michael starke on 19.02.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
@class UUID;
@interface KdbGroup (MPTreeTools)
/* Returns all groups under this group and it's subgroups */
- (NSArray *)childGroups;
/* Returns all entries under this group and it's subgroups */
- (NSArray *)childEntries;
/* Returns the entry with the UUID */
- (KdbEntry *)entryForUUID:(UUID *)uuid;
/* Returns the group with the UUID */
- (KdbGroup *)groupForUUID:(UUID *)uuid;
- (BOOL)isAnchestorOfGroup:(KdbGroup *)group;
@end

View File

@@ -1,66 +0,0 @@
//
// KdbGroup+MPTreeTools.m
// MacPass
//
// Created by michael starke on 19.02.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbGroup+MPTreeTools.h"
#import "Kdb4Node.h"
#import "Kdb3Node.h"
@implementation KdbGroup (MPTreeTools)
- (NSArray *)childGroups {
NSMutableArray *childGroups = [NSMutableArray arrayWithCapacity:[self.groups count]];
[childGroups addObjectsFromArray:self.groups];
for(KdbGroup *childGroup in self.groups) {
[childGroups addObjectsFromArray:[childGroup childGroups]];
}
return childGroups;
}
- (NSArray *)childEntries {
NSMutableArray *childEntries = [NSMutableArray arrayWithCapacity:[self.groups count] + [self.entries count]];
[childEntries addObjectsFromArray:self.entries];
for( KdbGroup *childGroup in self.groups) {
[childEntries addObjectsFromArray:[childGroup childEntries]];
}
return childEntries;
}
- (KdbEntry *)entryForUUID:(UUID *)uuid {
NSArray *childEntries = [self childEntries];
NSArray *filterdEntries = [childEntries filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [uuid isEqual:(UUID *)[evaluatedObject uuid]];
}]];
NSAssert([filterdEntries count] <= 1, @"UUID hast to be unique");
return [filterdEntries lastObject];
}
- (KdbGroup *)groupForUUID:(UUID *)uuid {
NSArray *childGroups = [self childGroups];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [uuid isEqual:(UUID *)[evaluatedObject uuid]];
}];
NSArray *filteredGroups = [childGroups filteredArrayUsingPredicate:predicate];
NSAssert([filteredGroups count] <= 1, @"UUID hast to be unique");
return [filteredGroups lastObject];
}
- (BOOL)isAnchestorOfGroup:(KdbGroup *)group {
if(group == nil) {
return NO;
}
KdbGroup *ancestor = self.parent;
while(ancestor.parent) {
if(group == self) {
return YES;
}
ancestor = ancestor.parent;
}
return NO;
}
@end

View File

@@ -1,26 +0,0 @@
//
// KdbGroup+Undo.h
// MacPass
//
// Created by Michael Starke on 18.05.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
APPKIT_EXTERN NSString *const MPGroupNameUndoableKey;
@interface KdbGroup (Undo)
- (NSUndoManager *)undoManager;
- (NSString *)nameUndoable;
- (void)setNameUndoable:(NSString *)newName;
- (void)deleteUndoable;
- (void)addGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index;
- (void)addEntryUndoable:(KdbEntry *)entry atIndex:(NSUInteger)index;
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index;
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index;
@end

View File

@@ -1,108 +0,0 @@
//
// KdbGroup+Undo.m
// MacPass
//
// Created by Michael Starke on 18.05.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbGroup+Undo.h"
#import "KdbGroup+KVOAdditions.h"
#import "KdbEntry+Undo.h"
NSString *const MPGroupNameUndoableKey = @"nameUndoable";
@implementation KdbGroup (Undo)
- (NSUndoManager *)undoManager {
return [[[NSDocumentController sharedDocumentController] currentDocument] undoManager];
}
- (NSString *)nameUndoable {
return [self name];
}
- (void)setNameUndoable:(NSString *)newName {
[[self undoManager] registerUndoWithTarget:self selector:@selector(setNameUndoable:) object:self.name];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"SET_NAME", "Set Name")];
}
self.name = newName;
}
- (void)deleteUndoable {
if(!self.parent) {
return;
}
NSUInteger oldIndex = [self.parent.groups indexOfObject:self];
if(oldIndex == NSNotFound) {
return; // Inconsistent data
}
[[[self undoManager] prepareWithInvocationTarget:self.parent] addGroupUndoable:self atIndex:oldIndex];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"DELETE_GROUP", "Delete Group")];
}
[self.parent removeObjectFromGroupsAtIndex:oldIndex];
}
- (void)addGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index {
if(!group) {
return;
}
[[[self undoManager] prepareWithInvocationTarget:group] deleteUndoable];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"ADD_GROUP", "Add Group")];
}
index = MIN(index, [group.groups count]);
[self insertObject:group inGroupsAtIndex:index];
}
- (void)addEntryUndoable:(KdbEntry *)entry atIndex:(NSUInteger)index {
if(!entry) {
return;
}
index = MIN(index, [self.entries count]);
[[[self undoManager] prepareWithInvocationTarget:entry] deleteUndoable];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:NSLocalizedString(@"ADD_ENTRY", "Add Entry")];
}
[self insertObject:entry inEntriesAtIndex:index];
}
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index {
[self _moveToGroup:group atIndex:index actionName:NSLocalizedString(@"MOVE_GROUP", "Move Group" )];
}
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index {
[self _moveToGroup:trash atIndex:index actionName:NSLocalizedString(@"TRASH_GROUP", "Move Group to Trash")];
}
- (void)_moveToGroup:(KdbGroup *)group atIndex:(NSUInteger)index actionName:(NSString *)actionName {
if(!self.parent || !group) {
return; // No target or origin
}
NSUInteger oldIndex = [self.parent.groups indexOfObject:self];
if(oldIndex == NSNotFound) {
return; // We aren't in our parents groups list.
}
[[[self undoManager] prepareWithInvocationTarget:self] moveToGroupUndoable:self.parent atIndex:oldIndex];
if(![[self undoManager] isUndoing]) {
[[self undoManager] setActionName:actionName];
}
[self.parent removeObjectFromGroupsAtIndex:oldIndex];
index = MIN(index, [group.groups count]);
[group insertObject:self inGroupsAtIndex:index];
}
@end

View File

@@ -1,20 +0,0 @@
//
// KdbTree+MPAdditions.h
// MacPass
//
// Created by michael starke on 20.02.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "Kdb.h"
@class BinaryRef;
@class Binary;
@interface KdbTree (MPAdditions)
- (NSArray *)allEntries;
- (NSArray *)allGroups;
@end

View File

@@ -1,26 +0,0 @@
//
// KdbTree+MPAdditions.m
// MacPass
//
// Created by michael starke on 20.02.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "KdbTree+MPAdditions.h"
#import "KdbGroup+MPTreeTools.h"
#import "NSMutableData+Base64.h"
#import "Kdb3Node.h"
#import "Kdb4Node.h"
@implementation KdbTree (MPAdditions)
- (NSArray *)allGroups {
return [self.root childGroups];
}
- (NSArray *)allEntries {
return [self.root childEntries];
}
@end

View File

@@ -9,9 +9,11 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
typedef NS_ENUM(NSUInteger, MPActionType) { typedef NS_ENUM(NSUInteger, MPActionType) {
MPUnkownAction, // Netural element to be used for returns MPUnkownAction, // Neutral element to be used for returns
MPActionAddEntry, // Add an new entry MPActionAddEntry, // Add an new entry
MPActionAddGroup, // Add a new group MPActionAddGroup, // Add a new group
MPActionCloneEntry, // Simply clone an entry (inlcuding history)
MPActionCloneEntryWithOptions, // Request user inptu what clone
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
@@ -19,12 +21,28 @@ typedef NS_ENUM(NSUInteger, MPActionType) {
MPActionOpenURL, // open url in default browser MPActionOpenURL, // open url in default browser
MPActionToggleInspector, MPActionToggleInspector,
MPActionLock, // show the lock screen MPActionLock, // show the lock screen
MPActionEmptyTrash // empties the trashcan, if there is one MPActionEmptyTrash, // empties the trashcan, if there is one
MPActionEditPassword, // change the database password
MPActionDatabaseSettings, // Show the settings for the database
MPActionEditTemplateGroup, // Edit the Template group
MPActionExportXML, // Exporte as XML
MPActionImportXML // Import form XML
}; };
/**
* Helper to retrieve commonly used actions
*/
@interface MPActionHelper : NSObject @interface MPActionHelper : NSObject
/**
* Call this to retrieve a selector for a common used action
* @param type The action type as MPActionType
* @return selector for this action type
*/
+ (SEL)actionOfType:(MPActionType)type; + (SEL)actionOfType:(MPActionType)type;
/**
* Helper to retrieve the MPActionType for a given selection
* @param action Selector to find the type for
* @return MPActionTpype for action, if no match was found MPUnknownAction is returned
*/
+ (MPActionType)typeForAction:(SEL)action; + (MPActionType)typeForAction:(SEL)action;
@end @end

View File

@@ -15,16 +15,23 @@
static dispatch_once_t onceToken; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ dispatch_once(&onceToken, ^{
actionDict = @{ actionDict = @{
@(MPActionAddEntry) : @"createEntry:", @(MPActionAddEntry): @"createEntry:",
@(MPActionAddGroup) : @"createGroup:", @(MPActionAddGroup): @"createGroup:",
@(MPActionCopyPassword) : @"copyPassword:", @(MPActionCloneEntry): @"cloneEntry:",
@(MPActionCopyURL) : @"copyURL:", @(MPActionCloneEntryWithOptions): @"cloneEntryWithOptions:",
@(MPActionCopyUsername) : @"copyUsername:", @(MPActionCopyPassword): @"copyPassword:",
@(MPActionDelete) : @"deleteNode:", @(MPActionCopyURL): @"copyURL:",
@(MPActionOpenURL) : @"openURL:", @(MPActionCopyUsername): @"copyUsername:",
@(MPActionToggleInspector) : @"toggleInspector:", @(MPActionDelete): @"delete:",
@(MPActionLock) : @"lock:", @(MPActionEditPassword): @"editPassword:",
@(MPActionEmptyTrash) : @"emptyTrash:" @(MPActionOpenURL): @"openURL:",
@(MPActionToggleInspector): @"toggleInspector:",
@(MPActionLock): @"lock:",
@(MPActionEmptyTrash): @"emptyTrash:",
@(MPActionDatabaseSettings): @"showDatabaseSettings:",
@(MPActionEditTemplateGroup): @"editTemplateGroup:",
@(MPActionExportXML): @"exportAsXML",
@(MPActionImportXML): @"importFromXMl",
}; };
}); });
return actionDict; return actionDict;
@@ -40,6 +47,7 @@
NSArray *selectors = [[self _actionDictionary] allValues]; NSArray *selectors = [[self _actionDictionary] allValues];
NSUInteger index = [selectors indexOfObject:selectorString]; NSUInteger index = [selectors indexOfObject:selectorString];
if(index == NSNotFound) { if(index == NSNotFound) {
// Test for default Actions?
return MPUnkownAction; return MPUnkownAction;
} }
NSArray *keys = [[self _actionDictionary] allKeysForObject:selectorString]; NSArray *keys = [[self _actionDictionary] allKeysForObject:selectorString];

View File

@@ -0,0 +1,27 @@
//
// MPAddEntryContextMenuDelegate.h
// MacPass
//
// Created by Michael Starke on 30.07.13.
// Copyright (c) 2013 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 MPAddEntryContextMenuDelegate : NSObject <NSMenuDelegate>
@end

View File

@@ -0,0 +1,63 @@
//
// MPAddEntryContextMenuDelegate.m
// MacPass
//
// Created by Michael Starke on 30.07.13.
// Copyright (c) 2013 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 "MPAddEntryContextMenuDelegate.h"
#import "MPDocument.h"
#import "MPDocumentWindowController.h"
#import "MPActionHelper.h"
#import "KPKEntry.h"
#import "KPKGroup.h"
#define EDIT_TEMPLATES_ITEM_TAG 10;
@implementation MPAddEntryContextMenuDelegate
- (void)menuNeedsUpdate:(NSMenu *)menu {
/*
The Method is rather brute force
It's possible nicer to cache the entries and just update
the menu entries, that actually need updating
*/
MPDocument *document = [[NSDocumentController sharedDocumentController] currentDocument];
if(!document) {
[menu removeAllItems];
}
[menu removeAllItems];
[menu addItemWithTitle:NSLocalizedString(@"EDIT_TEMPLATE_GROUP", "") action:[MPActionHelper actionOfType:MPActionEditTemplateGroup] keyEquivalent:@""];
[menu addItem:[NSMenuItem separatorItem]];
for(KPKEntry *entry in [document.templates childEntries]) {
NSString *templateMask = NSLocalizedString(@"NEW_ENTRY_WITH_TEMPLATE_%@", "");
NSMenuItem *templateItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:[NSString stringWithFormat:templateMask, entry.title]
action:@selector(createEntryFromTemplate:)
keyEquivalent:@""];
[templateItem setRepresentedObject:entry.uuid];
[menu addItem:templateItem];
}
/* If there are no entries, add a note as disabled menu item */
if([[menu itemArray] count] == 2) {
[menu addItemWithTitle:NSLocalizedString(@"NO_TEMPLATES", "") action:NULL keyEquivalent:@""];
}
}
@end

View File

@@ -5,14 +5,42 @@
// Created by Michael Starke on 19.07.12. // Created by Michael Starke on 19.07.12.
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved. // Copyright (c) 2012 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>
@interface MPAppDelegate : NSObject <NSApplicationDelegate> FOUNDATION_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
@interface MPAppDelegate : NSObject <NSApplicationDelegate, NSMenuDelegate>
@property (strong) IBOutlet NSWindow *passwordCreatorWindow; @property (strong) IBOutlet NSWindow *passwordCreatorWindow;
@property (strong) IBOutlet NSWindow *welcomeWindow;
@property (weak) IBOutlet NSMenuItem *saveMenuItem;
@property (nonatomic, assign) BOOL isAllowedToStoreKeyFile;
- (IBAction)showPreferences:(id)sender;
- (IBAction)showPasswordCreator:(id)sender; - (IBAction)showPasswordCreator:(id)sender;
- (IBAction)createNewDatabase:(id)sender;
- (IBAction)openDatabase:(id)sender;
/**
* Clears the stored key files for any documents.
* @param sender sender of this action
*/
- (IBAction)clearRememberdKeyFiles:(id)sender;
- (NSString *)applicationName; - (NSString *)applicationName;
- (void)lockAllDocuments; - (void)lockAllDocuments;

View File

@@ -5,69 +5,164 @@
// Created by Michael Starke on 19.07.12. // Created by Michael Starke on 19.07.12.
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved. // Copyright (c) 2012 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 "MPAppDelegate.h" #import "MPAppDelegate.h"
#import "MPSettingsWindowController.h" #import "MPSettingsWindowController.h"
#import "MPPasswordCreatorViewController.h" #import "MPPasswordCreatorViewController.h"
#import "MPSettingsHelper.h" #import "MPSettingsHelper.h"
#import "MPUppercaseStringValueTransformer.h"
#import "MPStringLengthValueTransformer.h" #import "MPStringLengthValueTransformer.h"
#import "MPValueTransformerHelper.h"
#import "MPServerDaemon.h" #import "MPServerDaemon.h"
#import "MPLockDaemon.h" #import "MPLockDaemon.h"
#import "MPAutotypeDaemon.h"
#import "MPDocumentWindowController.h" #import "MPDocumentWindowController.h"
#import "MPDocument.h"
#import "KPKCompositeKey.h"
NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDidChangeStoredKeyFilesSettings";
@interface MPAppDelegate () { @interface MPAppDelegate () {
@private @private
MPServerDaemon *serverDaemon; MPServerDaemon *serverDaemon;
MPLockDaemon *lockDaemon; MPLockDaemon *lockDaemon;
MPAutotypeDaemon *autotypeDaemon;
BOOL _restoredWindows; // YES if windows where restored at launch
BOOL _shouldOpenFile; // YES if app was started to open a
} }
@property (strong, nonatomic) MPSettingsWindowController *settingsController; @property (strong, nonatomic) MPSettingsWindowController *settingsController;
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController; @property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
- (IBAction)showPreferences:(id)sender;
@end @end
@implementation MPAppDelegate @implementation MPAppDelegate
+ (void)initialize { + (void)initialize {
[MPSettingsHelper setupDefaults]; [MPSettingsHelper setupDefaults];
[MPUppercaseStringValueTransformer registerTransformer]; [MPSettingsHelper migrateDefaults];
[MPStringLengthValueTransformer registerTransformer]; [MPStringLengthValueTransformer registerTransformer];
[MPValueTransformerHelper registerValueTransformer];
} }
- (void)dealloc { - (void)dealloc {
[self unbind:@"isAllowedToStoreKeyFile"];
[[NSNotificationCenter defaultCenter] removeObserver:self]; [[NSNotificationCenter defaultCenter] removeObserver:self];
} }
#pragma mark Properties
- (void)setIsAllowedToStoreKeyFile:(BOOL)isAllowedToStoreKeyFile {
if(_isAllowedToStoreKeyFile != isAllowedToStoreKeyFile) {
_isAllowedToStoreKeyFile = isAllowedToStoreKeyFile;
/* cleanup on disable */
if(!self.isAllowedToStoreKeyFile) {
[self clearRememberdKeyFiles:nil];
}
/* Inform anyone that might be interested that we can now no longer/ or can use keyfiles */
[[NSNotificationCenter defaultCenter] postNotificationName:MPDidChangeStoredKeyFilesSettings object:self];
}
}
- (void)awakeFromNib {
_isAllowedToStoreKeyFile = NO;
/* Update the at the save menu */
[[self.saveMenuItem menu] setDelegate:self];
/* We want to inform anyone about the changes to keyFile remmebering */
[self bind:@"isAllowedToStoreKeyFile"
toObject:[NSUserDefaultsController sharedUserDefaultsController]
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases]
options:nil];
}
#pragma mark -
#pragma mark NSApplicationDelegate
- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag {
if(!flag) {
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch];
BOOL showWelcomeScreen = YES;
if(reopen) {
showWelcomeScreen = ![self _reopenLastDocument];
}
if(showWelcomeScreen) {
[self _showWelcomeWindow];
}
}
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 {
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch]; _restoredWindows = NO;
if(reopen) { _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)application:(NSApplication *)sender openFile:(NSString *)filename {
_shouldOpenFile = YES;
NSURL *fileURL = [NSURL fileURLWithPath:filename];
[[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:fileURL display:YES completionHandler:nil];
return YES;
} }
- (void)applicationDidFinishLaunching:(NSNotification *)notification { - (void)applicationDidFinishLaunching:(NSNotification *)notification {
serverDaemon = [[MPServerDaemon alloc] init]; serverDaemon = [[MPServerDaemon alloc] init];
lockDaemon = [[MPLockDaemon alloc] init]; lockDaemon = [[MPLockDaemon alloc] init];
autotypeDaemon = [[MPAutotypeDaemon alloc] init];
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch];
BOOL showWelcomeScreen = !_restoredWindows && !_shouldOpenFile;
if(reopen && !_restoredWindows && !_shouldOpenFile) {
showWelcomeScreen = ![self _reopenLastDocument];
}
if(showWelcomeScreen) {
[self _showWelcomeWindow];
}
} }
- (NSString *)applicationName { - (NSString *)applicationName {
return [[NSBundle mainBundle] infoDictionary][@"CFBundleName"]; return [[NSBundle mainBundle] infoDictionary][@"CFBundleName"];
} }
#pragma mark Menu Actions #pragma mark -
#pragma mark NSMenuDelegate
- (void)menuNeedsUpdate:(NSMenu *)menu {
if([self.saveMenuItem menu] != menu) {
return; // wrong menu
}
MPDocument *document = [[NSDocumentController sharedDocumentController] currentDocument];
BOOL displayDots = (document.fileURL == nil || !document.compositeKey.hasPasswordOrKeyFile);
NSString *saveTitle = displayDots ? NSLocalizedString(@"SAVE_WITH_DOTS", "") : NSLocalizedString(@"SAVE", "");
[self.saveMenuItem setTitle:saveTitle];
}
#pragma mark -
#pragma mark Actions
- (void)showPreferences:(id)sender { - (void)showPreferences:(id)sender {
if(self.settingsController == nil) { if(self.settingsController == nil) {
self.settingsController = [[MPSettingsWindowController alloc] init]; self.settingsController = [[MPSettingsWindowController alloc] init];
@@ -82,23 +177,22 @@
if(!self.passwordCreatorController) { if(!self.passwordCreatorController) {
self.passwordCreatorController = [[MPPasswordCreatorViewController alloc] init]; self.passwordCreatorController = [[MPPasswordCreatorViewController alloc] init];
NSView *creatorView = [_passwordCreatorController view]; NSView *creatorView = [_passwordCreatorController view];
//NSView *contentView = [_passwordCreatorWindow contentView];
[self.passwordCreatorWindow setContentView:creatorView]; [self.passwordCreatorWindow setContentView:creatorView];
//[contentView addSubview:creatorView];
// [[_passwordCreatorWindow contentView] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[creatorView]|"
// options:0
// metrics:nil
// views:NSDictionaryOfVariableBindings(creatorView)]];
// [[_passwordCreatorWindow contentView] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[creatorView]|"
// options:0
// metrics:nil
// views:NSDictionaryOfVariableBindings(creatorView)]];
// [contentView layoutSubtreeIfNeeded];
} }
[self.passwordCreatorWindow makeKeyAndOrderFront:self.passwordCreatorWindow]; [self.passwordCreatorWindow makeKeyAndOrderFront:self.passwordCreatorWindow];
} }
- (void)createNewDatabase:(id)sender {
[self.welcomeWindow orderOut:sender];
[[NSDocumentController sharedDocumentController] newDocument:sender];
}
- (void)openDatabase:(id)sender {
[self.welcomeWindow orderOut:sender];
[[NSDocumentController sharedDocumentController] openDocument:sender];
}
- (void)lockAllDocuments { - (void)lockAllDocuments {
for(NSDocument *document in [[NSDocumentController sharedDocumentController] documents]) { for(NSDocument *document in [[NSDocumentController sharedDocumentController] documents]) {
NSArray *windowControllers = [document windowControllers]; NSArray *windowControllers = [document windowControllers];
@@ -108,26 +202,52 @@
} }
} }
- (void)clearRememberdKeyFiles:(id)sender {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyRememeberdKeysForDatabases];
}
#pragma mark -
#pragma mark Private Helper
- (void)_applicationDidFinishRestoringWindows:(NSNotification *)notification { - (void)_applicationDidFinishRestoringWindows:(NSNotification *)notification {
NSDocumentController *documentController = [NSDocumentController sharedDocumentController]; NSDocumentController *documentController = [NSDocumentController sharedDocumentController];
NSArray *documents = [documentController documents]; NSArray *documents = [documentController documents];
NSArray *recentDocuments = [documentController recentDocumentURLs]; _restoredWindows = [documents count] > 0;
if([documents count] > 0 ) { }
return; // There's already a document restored
- (void)_showWelcomeWindow {
[self _loadWelcomeWindow];
[self.welcomeWindow makeKeyAndOrderFront:nil];
}
- (void)_loadWelcomeWindow {
if(!_welcomeWindow) {
NSArray *topLevelObject;
[[NSBundle mainBundle] loadNibNamed:@"WelcomeWindow" owner:self topLevelObjects:&topLevelObject];
} }
NSURL *documentUrl; }
- (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) { if([recentDocuments count] > 0) {
documentUrl = recentDocuments[0]; documentUrl = recentDocuments[0];
} }
else { else {
NSString *lastPath = [[NSUserDefaults standardUserDefaults] stringForKey:kMPSettingsKeyLastDatabasePath]; NSString *lastPath = [[NSUserDefaults standardUserDefaults] stringForKey:kMPSettingsKeyLastDatabasePath];
documentUrl = [NSURL URLWithString:lastPath]; documentUrl =[NSURL URLWithString:lastPath];
} }
if([documentUrl isFileURL]) { BOOL isFileURL = [documentUrl isFileURL];
[documentController openDocumentWithContentsOfURL:documentUrl display:YES if(isFileURL) {
[documentController openDocumentWithContentsOfURL:documentUrl
display:YES
completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {}]; completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {}];
} }
return isFileURL;
} }
@end @end

View File

@@ -7,8 +7,8 @@
// //
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MPServerRequestHandler.h" #import "MPServerRequestHandling.h"
@interface MPAssociateRequestHandler : NSObject <MPServerRequestHandler> @interface MPAssociateRequestHandler : NSObject <MPServerRequestHandling>
@end @end

View File

@@ -0,0 +1,27 @@
//
// MPAttachmentTableDataSource.h
// MacPass
//
// Created by Michael Starke on 01.08.13.
// Copyright (c) 2013 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 MPAttachmentTableDataSource : NSObject <NSTableViewDataSource>
@end

View File

@@ -0,0 +1,91 @@
//
// MPAttachmentTableDataSource.m
// MacPass
//
// Created by Michael Starke on 01.08.13.
// Copyright (c) 2013 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 "MPAttachmentTableDataSource.h"
#import "MPDocument+Attachment.h"
@implementation MPAttachmentTableDataSource
- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id<NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation {
NSPasteboard *draggingPasteBoard = [info draggingPasteboard];
NSArray *classArray = [NSArray arrayWithObject:[NSURL class]];
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:classArray options:nil];
NSUInteger numberOfDirectories = 0;
for(NSURL *url in arrayOfURLs) {
if([url isFileURL] || [url isFileReferenceURL]) {
NSError *error = nil;
NSDictionary *resourceKeys = [url resourceValuesForKeys:@[NSURLIsDirectoryKey] error:&error];
if( [resourceKeys[ NSURLIsDirectoryKey ] boolValue] == YES ) {
numberOfDirectories++;
}
continue;
}
return NSDragOperationNone;
}
if(numberOfDirectories == [arrayOfURLs count]) {
return NSDragOperationNone;
}
return NSDragOperationCopy;
}
- (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
MPDocument *document = [[[tableView window] windowController] document];
id entry = document.selectedEntry;
NSPasteboard *draggingPasteBoard = [info draggingPasteboard];
NSArray *classArray = [NSArray arrayWithObject:[NSURL class]];
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:classArray options:nil];
for(NSURL *fileUrl in arrayOfURLs) {
[document addAttachment:fileUrl toEntry:entry];
}
return YES;
}
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
return NO;
/*
NSString *extension;
if([rowIndexes count] != 1) {
return NO; // We only work with one file at a time
}
MPDocument *document = [[[tableView window] windowController] document];
id entry = document.selectedEntry;
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;*/
}
@end

View File

@@ -5,13 +5,25 @@
// Created by Michael Starke on 17.07.13. // Created by Michael Starke on 17.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. // Copyright (c) 2013 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> #import <Foundation/Foundation.h>
@class MPInspectorViewController;
@interface MPAttachmentTableViewDelegate : NSObject <NSTableViewDelegate> @interface MPAttachmentTableViewDelegate : NSObject <NSTableViewDelegate>
@property (nonatomic, weak) MPInspectorViewController *viewController; @property (nonatomic, weak) id viewController;
@end @end

View File

@@ -5,14 +5,29 @@
// Created by Michael Starke on 17.07.13. // Created by Michael Starke on 17.07.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. // Copyright (c) 2013 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 "MPAttachmentTableViewDelegate.h" #import "MPAttachmentTableViewDelegate.h"
#import "MPInspectorViewController.h" #import "MPDocument.h"
#import "MPEntryInspectorViewController.h"
#import "MPSelectedAttachmentTableCellView.h" #import "MPSelectedAttachmentTableCellView.h"
#import "Kdb4Node.h" #import "KPKEntry.h"
#import "Kdb3Node.h" #import "KPKBinary.h"
#import "HNHTableRowView.h" #import "HNHTableRowView.h"
@@ -20,21 +35,15 @@
- (void)tableViewSelectionDidChange:(NSNotification *)notification { - (void)tableViewSelectionDidChange:(NSNotification *)notification {
NSTableView *tableView = [notification object]; NSTableView *tableView = [notification object];
MPDocument *document = [[[tableView window] windowController] document];
NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[tableView tableColumns] count])]; NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[tableView tableColumns] count])];
if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) { NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [document.selectedEntry.binaries count] )];
Kdb4Entry *entryv4 = (Kdb4Entry *)self.viewController.selectedEntry; [tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [entryv4.binaries count] )];
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
}
if([self.viewController.selectedEntry isKindOfClass:[Kdb3Entry class]]) {
Kdb3Entry *entryv3 = (Kdb3Entry *)self.viewController.selectedEntry;
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, (entryv3.binary ? 1 : 0 ))];
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
}
} }
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
/* Decide what view to use */ /* Decide what view to use */
MPDocument *document = [[[tableView window] windowController] document];
NSIndexSet *selectedIndexes = [tableView selectedRowIndexes]; NSIndexSet *selectedIndexes = [tableView selectedRowIndexes];
NSTableCellView *view; NSTableCellView *view;
if([selectedIndexes containsIndex:row]) { if([selectedIndexes containsIndex:row]) {
@@ -44,6 +53,7 @@
[cellView.saveButton setTarget:self.viewController]; [cellView.saveButton setTarget:self.viewController];
[cellView.removeButton setTag:row]; [cellView.removeButton setTag:row];
[cellView.removeButton setAction:@selector(removeAttachment:)]; [cellView.removeButton setAction:@selector(removeAttachment:)];
[cellView.removeButton setTarget:nil];
[cellView.removeButton setTarget:self.viewController]; [cellView.removeButton setTarget:self.viewController];
view = cellView; view = cellView;
} }
@@ -51,17 +61,11 @@
view = [tableView makeViewWithIdentifier:@"NormalCell" owner:tableView]; view = [tableView makeViewWithIdentifier:@"NormalCell" owner:tableView];
} }
/* Bind view */ /* Bind view */
if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) { KPKEntry *entry = document.selectedEntry;
Kdb4Entry *entry = (Kdb4Entry *)self.viewController.selectedEntry; NSAssert([entry.binaries count] > row, @"Indes needs to be valid for binaries");
BinaryRef *binaryRef = entry.binaries[row]; KPKBinary *binary = entry.binaries[row];
[[view textField] bind:NSValueBinding toObject:binaryRef withKeyPath:@"key" options:nil]; [[view textField] bind:NSValueBinding toObject:binary withKeyPath:@"name" options:nil];
[[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[binaryRef.key pathExtension]]]; [[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[binary.name pathExtension]]];
}
else {
Kdb3Entry *entry= (Kdb3Entry *)self.viewController.selectedEntry;
[[view textField] bind:NSValueBinding toObject:entry withKeyPath:@"binaryDesc" options:nil];
[[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[entry.binaryDesc pathExtension]]];
}
return view; return view;
} }

View File

@@ -0,0 +1,51 @@
//
// MPAutotypeCommand.h
// MacPass
//
// Created by Michael Starke on 10/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
@class MPAutotypeContext;
/**
* The Autotype command reperesent a capsualted Action that was determined by interpreting
* Autotype field for a given entry. This is a class cluster and schould be considered the sole
* enty point for creating AutotypeCommands.
*/
@interface MPAutotypeCommand : NSObject
@property (readonly, strong) 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;
/**
* Convenience message to be sent for executing a simple paste command
*/
- (void)sendPasteKeyCode;
/**
* Exectues the Autotype Command. This will be called by the autotype daemon.
*/
- (void)execute;
/**
* Validates the command and returns the result
*
* @return YES if the command is valid and can be executed. NO otherwise
*/
- (BOOL)isValid;
@end

159
MacPass/MPAutotypeCommand.m Normal file
View File

@@ -0,0 +1,159 @@
//
// MPAutotypeCommand.m
// MacPass
//
// Created by Michael Starke on 10/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypeCommand.h"
#import "MPAutotypePaste.h"
#import "MPAutotypeKeyPress.h"
#import "MPAutotypeContext.h"
#import "MPKeyMapper.h"
#import "KPKAutotypeCommands.h"
#import "NSString+Commands.h"
#import <Carbon/Carbon.h>
@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;
}
/**
* Mapping for modifier to CGEventFlags.
* @note KeypassControl is mapped to command!
*
* @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 : @(kCGEventFlagMaskCommand),
kKPKAutotypeShift : @(kCGEventFlagMaskShift)
};
});
return modifierCommands;
}
+ (NSArray *)commandsForContext:(MPAutotypeContext *)context {
if(![context isValid]) {
return nil;
}
NSUInteger reserverd = [context.normalizedCommand length] / 4;
NSMutableArray *commands = [[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:context.normalizedCommand options:0 range:NSMakeRange(0, [context.normalizedCommand length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
@autoreleasepool {
[commandRanges addObject:[NSValue valueWithRange:result.range]];
}
}];
NSUInteger lastLocation = 0;
MPAutotypeKeyPress *keyPress;
for(NSValue *rangeValue in commandRanges) {
NSRange commandRange = [rangeValue rangeValue];
/* All non-commands will get translated into paste commands */
if(commandRange.location > lastLocation) {
/* If were modifiers we need to use the next single stroke and make update the modifier command */
if(keyPress) {
}
NSString *pasteValue = [context.normalizedCommand substringWithRange:NSMakeRange(lastLocation, commandRange.location - lastLocation)];
// Determin if it's amodifier key, and collect them!
[self appendPasteCommandForContent:pasteValue toCommands:commands];
}
NSString *commandString = [context.normalizedCommand substringWithRange:commandRange];
[self appendCommandForString:commandString toCommands:commands];
lastLocation = commandRange.location;
}
return commands;
}
+ (void)appendPasteCommandForContent:(NSString *)pasteContent toCommands:(NSMutableArray *)commands {
if(pasteContent) {
MPAutotypePaste *pasteCommand = [[MPAutotypePaste alloc] initWithString:pasteContent];
[commands addObject:pasteCommand];
}
}
+ (void)appendCommandForString:(NSString *)commandString toCommands:(NSMutableArray *)commands {
MPAutotypeCommand *command;
if(!commandString) {
NSDictionary *modifier = [self modifierCommands];
}
}
- (void)sendPressKey:(CGKeyCode)keyCode modifierFlags:(CGEventFlags)flags {
CGEventRef pressKey = CGEventCreateKeyboardEvent (NULL, keyCode, YES);
CGEventRef releaseKey = CGEventCreateKeyboardEvent (NULL, keyCode, NO);
/* The modifer Masks might be set, reset them */
CGEventSetFlags(pressKey,0);
CGEventSetFlags(releaseKey, 0);
/* Set the modifiers to the ones we want */
CGEventSetFlags(pressKey,flags);
CGEventSetFlags(releaseKey, flags);
/* Send the event */
CGEventPost(kCGSessionEventTap, pressKey);
CGEventPost(kCGSessionEventTap, releaseKey);
CFRelease(pressKey);
CFRelease(releaseKey);
}
- (void)sendPasteKeyCode {
CGKeyCode keyCode = [MPKeyMapper keyCodeForCharacter:@"V"];
if(keyCode == kMPUnknownKeyCode) {
return; // We did not find a mapping for "V"
}
[self sendPressKey:keyCode modifierFlags:kCGEventFlagMaskCommand];
}
- (void)execute {
NSAssert(NO, @"Not Implemented");
}
- (BOOL)isValid {
return NO; // No valid command
}
@end

View File

@@ -0,0 +1,50 @@
//
// MPAutotypeSequence.h
// MacPass
//
// Created by Michael Starke on 29/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
@class KPKEntry;
@class KPKWindowAssociation;
/**
* Context for a autotype command run.
* It stores the Entry and corresponding sequence to use for autotyping
*/
@interface MPAutotypeContext : NSObject <NSCopying>
/**
* The entry associated with the command sequence.
*/
@property (nonatomic, strong) KPKEntry *entry;
/**
* The Autotype command as it's supplied by the entry
*/
@property (nonatomic, readonly, copy) NSString *command;
@property (nonatomic, readonly, copy) NSString *normalizedCommand;
/**
* Designated initializer
*
* @param entry Entry to use
* @param sequence Keystroke Sequence to use
*
* @return AutotypeSequnce with the entry and keystroke in places
*/
- (instancetype)initWithEntry:(KPKEntry *)entry andSequence:(NSString *)sequence;
- (instancetype)initWithDefaultSequenceForEntry:(KPKEntry *)entry;
- (instancetype)initWithWindowAssociation:(KPKWindowAssociation *)association;
/**
* Returns YES if the given sequence is valid (currentyl only bracke missmatch is regarded as invalid
*
* @return YES if valid, NO otherwise
*/
- (BOOL)isValid;
- (NSString *)evaluatedCommand;
@end

View File

@@ -0,0 +1,57 @@
//
// MPAutotypeSequence.m
// MacPass
//
// Created by Michael Starke on 29/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypeContext.h"
#import "KPKAutotype.h"
#import "KPKEntry.h"
#import "KPKWindowAssociation.h"
#import "NSString+Commands.h"
@implementation MPAutotypeContext
- (instancetype)initWithWindowAssociation:(KPKWindowAssociation *)association {
self = [self initWithEntry:association.autotype.entry andSequence:association.keystrokeSequence];
return self;
}
- (instancetype)initWithDefaultSequenceForEntry:(KPKEntry *)entry {
self = [self initWithEntry:entry andSequence:entry.autotype.defaultSequence];
return self;
}
- (instancetype)initWithEntry:(KPKEntry *)entry andSequence:(NSString *)sequence {
self = [super init];
if(self) {
_command = [sequence copy];
_entry = entry;
_normalizedCommand = [[sequence normalizedAutotypeSequence] copy];
}
return self;
}
- (id)copyWithZone:(NSZone *)zone {
MPAutotypeContext *copy = [[MPAutotypeContext alloc] initWithEntry:self.entry andSequence:self.command];
return copy;
}
- (BOOL)isValid {
return (self.normalizedCommand != nil);
}
- (NSString *)evaluatedCommand {
static NSString *evaluated;
if(!evaluated) {
NSString *placeholderFilled = [self.normalizedCommand evaluatePlaceholderWithEntry:self.entry];
evaluated = [placeholderFilled resolveReferencesWithTree:self.entry.tree];
}
return evaluated;
}
@end

View File

@@ -0,0 +1,30 @@
//
// MPAutotypeDaemon.h
// MacPass
//
// Created by Michael Starke on 26.10.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
@class KPKEntry;
/**
* The autotype daemon is repsonsible for registering the globa hotkey and to perform any autotype actions
*/
@interface MPAutotypeDaemon : NSObject
@property (strong) IBOutlet NSWindow *matchSelectionWindow;
@property (weak) IBOutlet NSPopUpButton *matchSelectionButton;
@property (weak) IBOutlet NSButton *performAutotypeButton;
- (void)exectureAutotypeForEntry:(KPKEntry *)entry withWindowTitle:(NSString *)title;
/**
* Called by the selection window to start the autotype sequence
*
* @param sender sender of the action.
*/
- (IBAction)executeAutotypeWithSelectedMatch:(id)sender;
@end

184
MacPass/MPAutotypeDaemon.m Normal file
View File

@@ -0,0 +1,184 @@
//
// MPAutotypeDaemon.m
// MacPass
//
// Created by Michael Starke on 26.10.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypeDaemon.h"
#import "MPDocument.h"
#import "MPDocument+Autotype.h"
#import "MPAutotypeCommand.h"
#import "MPAutotypeContext.h"
#import "MPPasteBoardController.h"
#import "MPSettingsHelper.h"
#import "KPKEntry.h"
#import "DDHotKeyCenter.h"
#import <Carbon/Carbon.h>
NSString *const kMPWindowTitleKey = @"windowTitle";
NSString *const kMPApplciationNameKey = @"applicationName";
@interface MPAutotypeDaemon ()
@property (nonatomic, assign) BOOL enabled;
@end
@implementation MPAutotypeDaemon
- (id)init {
self = [super init];
if (self) {
_enabled = NO;
[self bind:@"enabled"
toObject:[NSUserDefaultsController sharedUserDefaultsController]
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEnableGlobalAutotype]
options:nil];
}
return self;
}
- (void)dealloc {
[self unbind:@"enabled"];
}
#pragma mark Properties
- (void)setEnabled:(BOOL)enabled {
if(_enabled != enabled) {
_enabled = enabled;
//self.enabled ? [self _registerHotKey] : [self _unregisterHotKey];
}
}
- (void)exectureAutotypeForEntry:(KPKEntry *)entry withWindowTitle:(NSString *)title {
NSAssert(NO,@"Not Implemented");
}
- (void)executeAutotypeWithSelectedMatch:(id)sender {
NSMenuItem *item = [self.matchSelectionButton selectedItem];
MPAutotypeContext *context = [item representedObject];
[self.matchSelectionWindow orderOut:self];
}
- (void)_didPressHotKey {
NSArray *documents = [NSApp orderedDocuments];
MPDocument *currentDocument = nil;
for(MPDocument *openDocument in documents) {
if(NO == openDocument.encrypted) {
currentDocument = openDocument;
break;
}
}
if(currentDocument.encrypted) {
return; // No need to search in closed documents
}
/*
Determine the window title of the current front most application
Start searching the db for the best fit (based on title, then on window associations
*/
NSDictionary *frontApplicationInfoDict = [self _frontMostApplicationInfoDict];
NSString *windowTitle = frontApplicationInfoDict[kMPWindowTitleKey];
NSString *applicationName = frontApplicationInfoDict[kMPApplciationNameKey];
NSLog(@"Looking for entries matching window title:%@ of applciation: %@", windowTitle, applicationName);
/*
Query the document to generate a autotype command list for the window title
We do not care where this came form, just get the autotype commands
*/
NSArray *autotypeCandidates = [currentDocument autotypContextsForWindowTitle:windowTitle];
NSUInteger candiates = [autotypeCandidates count];
if(candiates == 0) {
return; // No Entries found.
}
if(candiates > 1) {
[self _presentSelectionWindow:autotypeCandidates];
return; // Nothing to do, we get called back by the window
}
/* Just in case it's not there anymore, order the app for the window we want to autotype back to the foreground! */
[self _orderApplicationToFront:applicationName];
/*
Implement!
*/
return;
KPKEntry *selectedEntry = currentDocument.selectedEntry;
if(nil == currentDocument || nil == selectedEntry) {
return; // no open documents, no selected entry
}
/* TODO:
Replace entry based palce holders
Replace global placeholders
Translate to paste/copy commands
Find correct key-codes for current keyboard layout to perform paste command
*/
}
- (void)_registerHotKey {
[[DDHotKeyCenter sharedHotKeyCenter] registerHotKeyWithKeyCode:kVK_ANSI_M
modifierFlags:(NSCommandKeyMask | NSAlternateKeyMask )
target:self
action:@selector(_didPressHotKey)
object:nil];
}
- (void)_unregisterHotKey {
[[DDHotKeyCenter sharedHotKeyCenter] unregisterHotKeysWithTarget:self action:@selector(_didPressHotKey)];
}
- (NSDictionary *)_frontMostApplicationInfoDict {
NSRunningApplication *frontApplication = [[NSWorkspace sharedWorkspace] frontmostApplication];
NSString *name = frontApplication.localizedName;
NSArray *currentWindows = CFBridgingRelease(CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID));
for(NSDictionary *windowDict in currentWindows) {
NSNumber *processId = windowDict[(NSString *)kCGWindowOwnerPID];
if(processId && [processId isEqualToNumber:@(frontApplication.processIdentifier)]) {
return @{
kMPWindowTitleKey:windowDict[(NSString *)kCGWindowName],
kMPApplciationNameKey : name
};
}
}
return nil;
}
- (void)_presentSelectionWindow:(NSArray *)candidates {
if(!self.matchSelectionWindow) {
[[NSBundle mainBundle] loadNibNamed:@"AutotypeCandidateSelectionWindow" owner:self topLevelObjects:nil];
[self.performAutotypeButton setTarget:self];
[self.performAutotypeButton setAction:@selector(executeAutotypeWithSelectedMatch:)];
[self.matchSelectionWindow setLevel:NSFloatingWindowLevel];
}
NSMenu *associationMenu = [[NSMenu alloc] init];
[associationMenu addItemWithTitle:NSLocalizedString(@"SELECT_AUTOTYPE_CANDIDATE", "") action:NULL keyEquivalent:@""];
[associationMenu addItem:[NSMenuItem separatorItem]];
[associationMenu setAutoenablesItems:NO];
for(MPAutotypeContext *context in candidates) {
NSString *title = [[NSString alloc] initWithFormat:@"%@: %@", context.entry.title, context.command];
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:title action:0 keyEquivalent:@""];
[item setRepresentedObject:context];
[associationMenu addItem:item];
}
[self.matchSelectionButton setMenu:associationMenu];
[self.matchSelectionWindow makeKeyAndOrderFront:self];
/* Setup Items in Popup */
}
- (void)_orderApplicationToFront:(NSString *)applicationName {
NSString *appleScript = [[NSString alloc] initWithFormat:@"activate application %@", applicationName];
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:appleScript];
NSDictionary *error;
[script executeAndReturnError:&error];
}
@end

View File

@@ -0,0 +1,19 @@
//
// MPAutotypeSpecialKey.h
// MacPass
//
// Created by Michael Starke on 24/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypeCommand.h"
/**
* Autotype command to press a single key. Can be used with modifer keys as well
*/
@interface MPAutotypeKeyPress : MPAutotypeCommand
@property (assign) CGEventFlags modifierMask;
@property (assign) CGKeyCode keyCode;
@end

View File

@@ -0,0 +1,31 @@
//
// MPAutotypeSpecialKey.m
// MacPass
//
// Created by Michael Starke on 24/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypeKeyPress.h"
#import "MPKeyMapper.h"
@implementation MPAutotypeKeyPress
- (void)execute {
if(![self isValid]) {
return; // no valid command. Stop.
}
CGKeyCode mappedKey = [self _transformKeyCode];
[self sendPressKey:mappedKey modifierFlags:self.modifierMask];
}
- (BOOL)isValid {
return ([self _transformKeyCode] != kMPUnknownKeyCode);
}
- (CGKeyCode)_transformKeyCode {
NSString *key = [MPKeyMapper stringForKey:self.keyCode];
return [MPKeyMapper keyCodeForCharacter:key];
}
@end

18
MacPass/MPAutotypePaste.h Normal file
View File

@@ -0,0 +1,18 @@
//
// MPAutotypePaste.h
// MacPass
//
// Created by Michael Starke on 24/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypeCommand.h"
/**
* Simple Paste action. Uses the Clipboard to copy and then paste contents in place
*/
@interface MPAutotypePaste : MPAutotypeCommand
- (instancetype)initWithString:(NSString *)aString;
@end

43
MacPass/MPAutotypePaste.m Normal file
View File

@@ -0,0 +1,43 @@
//
// MPAutotypePaste.m
// MacPass
//
// Created by Michael Starke on 24/11/13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPAutotypePaste.h"
#import "MPPasteBoardController.h"
#import "NSString+Commands.h"
@interface MPAutotypePaste ()
@property (strong) NSString *pasteData;
@end
@implementation MPAutotypePaste
- (instancetype)initWithString:(NSString *)aString {
self = [super init];
if(self) {
self.pasteData = aString;
}
return self;
}
- (void)execute {
if([self.pasteData length] > 0) {
MPPasteBoardController *controller = [MPPasteBoardController defaultController];
[controller copyObjects:@[self.pasteData]];
[self sendPasteKeyCode];
}
}
- (BOOL)isValid {
/* Pasting shoudl always be valid */
return YES;
}
@end

View File

@@ -8,6 +8,10 @@
#import "HTTPConnection.h" #import "HTTPConnection.h"
/**
* Default Connection to handle the KeepassHttp POST requests. The Connection doesn't do anything,
* besides using the MPRequestHandlerService to handle any request from KeePassHttp and send's back the replies
*/
@interface MPConnection : HTTPConnection @interface MPConnection : HTTPConnection
@end @end

View File

@@ -9,7 +9,7 @@
#import "MPConnection.h" #import "MPConnection.h"
#import "HTTPMessage.h" #import "HTTPMessage.h"
#import "MPRequestHandlerService.h" #import "MPRequestHandlerService.h"
#import "MPServerRequestHandler.h" #import "MPServerRequestHandling.h"
NSString *const MPRequestTypeKey = @"RequestType"; NSString *const MPRequestTypeKey = @"RequestType";
@@ -63,11 +63,12 @@ NSString *const MPRequestTypeKey = @"RequestType";
- (void)_parseRequest:(NSDictionary *)aRequest { - (void)_parseRequest:(NSDictionary *)aRequest {
/* TODO: generate a response */
NSString *requestType = aRequest[MPRequestTypeKey]; NSString *requestType = aRequest[MPRequestTypeKey];
if(!requestType) { if(!requestType) {
NSLog(@"Malformed Request. Missing request type"); NSLog(@"Malformed Request. Missing request type");
} }
id<MPServerRequestHandler> handler = [MPRequestHandlerService requestHandler:requestType]; id<MPServerRequestHandling> handler = [MPRequestHandlerService requestHandler:requestType];
[handler respondTo:aRequest]; [handler respondTo:aRequest];
} }
@end @end

View File

@@ -13,5 +13,8 @@
FOUNDATION_EXPORT NSString *const MPPasteBoardType; FOUNDATION_EXPORT NSString *const MPPasteBoardType;
FOUNDATION_EXPORT NSString *const MPErrorDomain; FOUNDATION_EXPORT NSString *const MPErrorDomain;
FOUNDATION_EXPORT NSString *const MPLegacyDocumentUTI;
FOUNDATION_EXPORT NSString *const MPXMLDocumentUTI;
#endif #endif

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