mirror of
https://github.com/MacPass/MacPass.git
synced 2026-01-30 22:48:26 +00:00
Compare commits
87 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
99ea0d7a14 | ||
|
|
d7f6bcc6c3 | ||
|
|
3731e92339 | ||
|
|
f609ba9795 | ||
|
|
64ad7d9c08 | ||
|
|
8b3cc34ab5 | ||
|
|
b028ef51f9 | ||
|
|
ae9278c4b5 | ||
|
|
86d4defc78 | ||
|
|
c85a9cdce1 | ||
|
|
9409887942 | ||
|
|
40c62954e4 | ||
|
|
c6f93ef59a | ||
|
|
5eef186ab2 | ||
|
|
6c60d72ef9 | ||
|
|
217b311783 | ||
|
|
8cd5273082 | ||
|
|
3e8a320598 | ||
|
|
0197bdc5bc | ||
|
|
a425acea4d | ||
|
|
c4222a3159 | ||
|
|
bd0fe6baf8 | ||
|
|
b2999ca8a8 | ||
|
|
77d96976ec | ||
|
|
a4b9b0be8b | ||
|
|
8e52da7069 | ||
|
|
228170c717 | ||
|
|
2216a14729 | ||
|
|
77f3f23cfe | ||
|
|
07ae4675d4 | ||
|
|
f2279863db | ||
|
|
df68d0140f | ||
|
|
1b6efbfd0c | ||
|
|
626bb35f80 | ||
|
|
e6bb9ad191 | ||
|
|
4cfe54b65c | ||
|
|
2b2e5ddbea | ||
|
|
334451471e | ||
|
|
4069052c86 | ||
|
|
7be5190ada | ||
|
|
7a1510b77b | ||
|
|
f16c767cbd | ||
|
|
3f76188bf5 | ||
|
|
1215b7317b | ||
|
|
e5ba73589b | ||
|
|
9ba902471c | ||
|
|
b1568c5eef | ||
|
|
8535579de2 | ||
|
|
6ec89e146c | ||
|
|
09a7a15141 | ||
|
|
9b77790ddc | ||
|
|
16cdd4dd4f | ||
|
|
0a7fcc415c | ||
|
|
ff72632b3b | ||
|
|
b6a7240534 | ||
|
|
f10735f96f | ||
|
|
ba538d05af | ||
|
|
3639913e6d | ||
|
|
b87e20ca7e | ||
|
|
c7bdce46ff | ||
|
|
11bea5fa32 | ||
|
|
e8a6af086c | ||
|
|
f1033c1006 | ||
|
|
264866dff0 | ||
|
|
631741d30b | ||
|
|
6897f9e51c | ||
|
|
21a5b5d6bb | ||
|
|
3817bf503f | ||
|
|
2beb033572 | ||
|
|
01b1372dda | ||
|
|
d048ea47a6 | ||
|
|
2a8766eccb | ||
|
|
a2078f721a | ||
|
|
68bdcb461f | ||
|
|
ec8ce8ec29 | ||
|
|
95275d9c8a | ||
|
|
09eb1dcf41 | ||
|
|
224ca6c65b | ||
|
|
10dd3e352d | ||
|
|
2103eb8875 | ||
|
|
3b7bf0d77b | ||
|
|
bc47fb592c | ||
|
|
81dce1928a | ||
|
|
05f820a4a3 | ||
|
|
d3a575fce3 | ||
|
|
0455628d72 | ||
|
|
9d0dc1630d |
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@@ -1 +1,2 @@
|
|||||||
|
github: mstarke
|
||||||
custom: https://flattr.com/thing/1550529/mstarkeMacPass-on-GitHub
|
custom: https://flattr.com/thing/1550529/mstarkeMacPass-on-GitHub
|
||||||
|
|||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,6 +1,3 @@
|
|||||||
[submodule "DDHotKey"]
|
[submodule "DDHotKey"]
|
||||||
path = DDHotKey
|
path = DDHotKey
|
||||||
url = https://github.com/mstarke/DDHotKey.git
|
url = https://github.com/mstarke/DDHotKey.git
|
||||||
[submodule "TransformerKit"]
|
|
||||||
path = TransformerKit
|
|
||||||
url = https://github.com/mattt/TransformerKit.git
|
|
||||||
|
|||||||
@@ -4,18 +4,21 @@ Thanks for taking the time to contribute to MacPass! This documents describes a
|
|||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
MacPass has translations for a few languages. If you can translate to another language, or you think a translation is wrong, follow the next steps to add or improve a translation:
|
MacPass has translations for a few languages. If you can translate to another language, or you think a translation is wrong, follow the next steps to add or improve a translation:
|
||||||
- You can use a XLIFF editor for translating the strings. For example [XLIFFTool](https://itunes.apple.com/us/app/xlifftool/id1074282695)
|
|
||||||
- For a new localization only:
|
- Get a XLIFF editor for translating localization files. For example [XLIFFTool](https://itunes.apple.com/us/app/xlifftool/id1074282695)
|
||||||
|
- Get the current XLIFF export for your language. You can either download the `Localizations.zip` on the [Continous release](https://github.com/MacPass/MacPass/releases) or you can export them in Xcode:
|
||||||
|
- For a new localization only:
|
||||||
- Select MacPass in the project navigator
|
- Select MacPass in the project navigator
|
||||||
- Select the MacPass project in the project and targets list
|
- Select the MacPass project in the project and targets list
|
||||||
- Open the info tab and click the `+` button un the localizations section.
|
- Open the info tab and click the `+` button un the localizations section.
|
||||||
- Choose the language you want to translate
|
- Choose the language you want to translate
|
||||||
- Select all resources and click finish, now the new language is available for export in the next step
|
- Select all resources and click finish, now the new language is available for export in the next step
|
||||||
- Export the XLIFF file
|
- For present localizations directly Export the XLIFF file
|
||||||
- Select the MacPass project in XCode
|
- Select the MacPass project in Xcode
|
||||||
- Go to `Editor -> Export for Localization`
|
- Go to `Editor -> Export for Localization`
|
||||||
- Select the language you want to translate
|
- Select the language you want to translate
|
||||||
- Now use your XLIFF editor and save the file if you are done with your translations
|
- Now use your XLIFF editor and save the file after you are done with your translations
|
||||||
- Go back to XCode and use `Editor -> Import Localization` to import the changes
|
- Go back to XCode and use `Editor -> Import Localization` to import the changes
|
||||||
|
- Open a Pull Request with your changes.
|
||||||
|
|
||||||
Alternatively, you can open an issue to ask a dev to create the XLIFF file for you and send it back after you've finished localising.
|
Alternatively, you can open an issue to ask a dev to create the XLIFF file for you and send it back after you've finished localising.
|
||||||
|
|||||||
1
Cartfile
1
Cartfile
@@ -1,3 +1,4 @@
|
|||||||
github "sparkle-project/Sparkle" ~> 1.22
|
github "sparkle-project/Sparkle" ~> 1.22
|
||||||
|
github "MacPass/TransformerKit" "b28de3a7de9249dd886979cae4985092523b6dd1"
|
||||||
github "MacPass/KeePassKit" ~> 2.4
|
github "MacPass/KeePassKit" ~> 2.4
|
||||||
github "mstarke/HNHUi" ~> 3.0
|
github "mstarke/HNHUi" ~> 3.0
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
github "MacPass/KeePassKit" "2.4.7"
|
github "MacPass/KeePassKit" "2.4.7"
|
||||||
|
github "MacPass/TransformerKit" "b28de3a7de9249dd886979cae4985092523b6dd1"
|
||||||
github "mstarke/HNHUi" "3.0"
|
github "mstarke/HNHUi" "3.0"
|
||||||
github "robbiehanson/KissXML" "5.2.3"
|
github "robbiehanson/KissXML" "5.3.1"
|
||||||
github "sparkle-project/Sparkle" "1.22.0"
|
github "sparkle-project/Sparkle" "1.22.0"
|
||||||
|
|||||||
@@ -40,6 +40,9 @@
|
|||||||
4C1ECAE322CCD30F00F46069 /* MPAutotypeDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1ECAE222CCD30F00F46069 /* MPAutotypeDoctor.m */; };
|
4C1ECAE322CCD30F00F46069 /* MPAutotypeDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1ECAE222CCD30F00F46069 /* MPAutotypeDoctor.m */; };
|
||||||
4C1F7FA21E3A12E600D6A40E /* MPModifiedKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */; };
|
4C1F7FA21E3A12E600D6A40E /* MPModifiedKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */; };
|
||||||
4C1FA07B18231900003A3F8C /* MPDocument+Autotype.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */; };
|
4C1FA07B18231900003A3F8C /* MPDocument+Autotype.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */; };
|
||||||
|
4C2057EE23CDF6F900C731EC /* MPPathCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2057ED23CDF6F900C731EC /* MPPathCell.m */; };
|
||||||
|
4C2057F423CF3BA600C731EC /* MPAutotypeEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2057F323CF3BA600C731EC /* MPAutotypeEnvironment.m */; };
|
||||||
|
4C2057F723CF3E9A00C731EC /* NSRunningApplication+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2057F623CF3E9A00C731EC /* NSRunningApplication+MPAdditions.m */; };
|
||||||
4C224B4217DFCB2400FF6AEE /* MPNumericalInputFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C224B4117DFCB2400FF6AEE /* MPNumericalInputFormatter.m */; };
|
4C224B4217DFCB2400FF6AEE /* MPNumericalInputFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C224B4117DFCB2400FF6AEE /* MPNumericalInputFormatter.m */; };
|
||||||
4C25703F1BF11C2300D39416 /* MPPluginPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C25703D1BF11C2300D39416 /* MPPluginPreferencesController.m */; };
|
4C25703F1BF11C2300D39416 /* MPPluginPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C25703D1BF11C2300D39416 /* MPPluginPreferencesController.m */; };
|
||||||
4C25D58716CF0FAA00F6806C /* EntryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58616CF0FAA00F6806C /* EntryView.xib */; };
|
4C25D58716CF0FAA00F6806C /* EntryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58616CF0FAA00F6806C /* EntryView.xib */; };
|
||||||
@@ -112,6 +115,7 @@
|
|||||||
4C45FB30178E0CE20010007D /* MPTestDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C45FB2F178E0CE20010007D /* MPTestDocument.m */; };
|
4C45FB30178E0CE20010007D /* MPTestDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C45FB2F178E0CE20010007D /* MPTestDocument.m */; };
|
||||||
4C46B88517063A070046109A /* NSString+MPPasswordCreation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C46B88417063A070046109A /* NSString+MPPasswordCreation.m */; };
|
4C46B88517063A070046109A /* NSString+MPPasswordCreation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C46B88417063A070046109A /* NSString+MPPasswordCreation.m */; };
|
||||||
4C473A8718AFD85B0073FD2E /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C473A8518AFD7250073FD2E /* XCTest.framework */; };
|
4C473A8718AFD85B0073FD2E /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C473A8518AFD7250073FD2E /* XCTest.framework */; };
|
||||||
|
4C49CFD624252389004092E7 /* KPKEntry+MPTags.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C49CFD524252389004092E7 /* KPKEntry+MPTags.m */; };
|
||||||
4C4A100F176286FD00BBF2CA /* MPTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4A100E176286FD00BBF2CA /* MPTableView.m */; };
|
4C4A100F176286FD00BBF2CA /* MPTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4A100E176286FD00BBF2CA /* MPTableView.m */; };
|
||||||
4C4B728518E4B9B400A1A5D5 /* MPDockTileHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B728418E4B9B400A1A5D5 /* MPDockTileHelper.m */; };
|
4C4B728518E4B9B400A1A5D5 /* MPDockTileHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B728418E4B9B400A1A5D5 /* MPDockTileHelper.m */; };
|
||||||
4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EE717A45EC5000234C7 /* MPDatePickingViewController.m */; };
|
4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EE717A45EC5000234C7 /* MPDatePickingViewController.m */; };
|
||||||
@@ -178,17 +182,10 @@
|
|||||||
4C7ABA4B17BAEC6700FF5799 /* 19_EmailTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C7ABA4617BAEC6700FF5799 /* 19_EmailTemplate.pdf */; };
|
4C7ABA4B17BAEC6700FF5799 /* 19_EmailTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C7ABA4617BAEC6700FF5799 /* 19_EmailTemplate.pdf */; };
|
||||||
4C7ABA4C17BAEC6700FF5799 /* 20_MiscTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C7ABA4717BAEC6700FF5799 /* 20_MiscTemplate.pdf */; };
|
4C7ABA4C17BAEC6700FF5799 /* 20_MiscTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C7ABA4717BAEC6700FF5799 /* 20_MiscTemplate.pdf */; };
|
||||||
4C7ABA4E17BAEC7000FF5799 /* addEntryTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C7ABA4D17BAEC7000FF5799 /* addEntryTemplate.pdf */; };
|
4C7ABA4E17BAEC7000FF5799 /* addEntryTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C7ABA4D17BAEC7000FF5799 /* addEntryTemplate.pdf */; };
|
||||||
4C7B63711C0CB51F00D7038C /* NSValueTransformer+TransformerKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B63631C0CB51F00D7038C /* NSValueTransformer+TransformerKit.m */; };
|
|
||||||
4C7B63721C0CB51F00D7038C /* TTTCryptographyTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B63661C0CB51F00D7038C /* TTTCryptographyTransformers.m */; };
|
|
||||||
4C7B63731C0CB51F00D7038C /* TTTDataTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B63681C0CB51F00D7038C /* TTTDataTransformer.m */; };
|
|
||||||
4C7B63741C0CB51F00D7038C /* TTTDateTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B636A1C0CB51F00D7038C /* TTTDateTransformers.m */; };
|
|
||||||
4C7B63751C0CB51F00D7038C /* TTTImageTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B636C1C0CB51F00D7038C /* TTTImageTransformers.m */; };
|
|
||||||
4C7B63761C0CB51F00D7038C /* TTTJSONTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B636E1C0CB51F00D7038C /* TTTJSONTransformer.m */; };
|
|
||||||
4C7B63771C0CB51F00D7038C /* TTTStringTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B63701C0CB51F00D7038C /* TTTStringTransformers.m */; };
|
|
||||||
4C7B637C1C0CB55600D7038C /* KeePassKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; };
|
4C7B637C1C0CB55600D7038C /* KeePassKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; };
|
||||||
4C7B637D1C0CB55600D7038C /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7B637A1C0CB55600D7038C /* Sparkle.framework */; };
|
4C7B637D1C0CB55600D7038C /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7B637A1C0CB55600D7038C /* Sparkle.framework */; };
|
||||||
4C7B637F1C0CB57300D7038C /* KeePassKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
4C7B637F1C0CB57300D7038C /* KeePassKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
4C7B63801C0CB57300D7038C /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B637A1C0CB55600D7038C /* Sparkle.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
4C7B63801C0CB57300D7038C /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B637A1C0CB55600D7038C /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C7BD07519FE94C900C7AA5C /* Assets.xcassets */; };
|
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C7BD07519FE94C900C7AA5C /* Assets.xcassets */; };
|
||||||
4C7F8B681A10B68400CCB83D /* WelcomeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C7F8B6A1A10B68400CCB83D /* WelcomeView.xib */; };
|
4C7F8B681A10B68400CCB83D /* WelcomeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C7F8B6A1A10B68400CCB83D /* WelcomeView.xib */; };
|
||||||
4C80304A1E2FBAA300133E4C /* MPTestKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8030491E2FBAA300133E4C /* MPTestKeyMapper.m */; };
|
4C80304A1E2FBAA300133E4C /* MPTestKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8030491E2FBAA300133E4C /* MPTestKeyMapper.m */; };
|
||||||
@@ -233,6 +230,8 @@
|
|||||||
4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB33F851EAF54A000C9341E /* KPKNode+MPIsHistory.m */; };
|
4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB33F851EAF54A000C9341E /* KPKNode+MPIsHistory.m */; };
|
||||||
4CB9339916D3A0DD00A13B5D /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 4CB9339716D3A0DD00A13B5D /* Credits.rtf */; };
|
4CB9339916D3A0DD00A13B5D /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 4CB9339716D3A0DD00A13B5D /* Credits.rtf */; };
|
||||||
4CBA2ABA17074C07006D8139 /* MPSettingsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBA2AB917074C07006D8139 /* MPSettingsHelper.m */; };
|
4CBA2ABA17074C07006D8139 /* MPSettingsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBA2AB917074C07006D8139 /* MPSettingsHelper.m */; };
|
||||||
|
4CBC5DDD23C61C8900D14B92 /* TransformerKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CBC5DDB23C61C8300D14B92 /* TransformerKit.framework */; };
|
||||||
|
4CBC5DDE23C61C8900D14B92 /* TransformerKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4CBC5DDB23C61C8300D14B92 /* TransformerKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
4CC0D2CE17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0D2CD17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m */; };
|
4CC0D2CE17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0D2CD17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m */; };
|
||||||
4CC0D2D117974A5A000B4BDA /* MPAttachmentTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0D2D017974A5A000B4BDA /* MPAttachmentTableViewDelegate.m */; };
|
4CC0D2D117974A5A000B4BDA /* MPAttachmentTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0D2D017974A5A000B4BDA /* MPAttachmentTableViewDelegate.m */; };
|
||||||
4CC281891C0F675B00B9174D /* HNHUi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CC281881C0F675B00B9174D /* HNHUi.framework */; };
|
4CC281891C0F675B00B9174D /* HNHUi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CC281881C0F675B00B9174D /* HNHUi.framework */; };
|
||||||
@@ -250,7 +249,7 @@
|
|||||||
4CD2B9061849424B0051B395 /* MPAutotypeContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD2B9051849424B0051B395 /* MPAutotypeContext.m */; };
|
4CD2B9061849424B0051B395 /* MPAutotypeContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD2B9051849424B0051B395 /* MPAutotypeContext.m */; };
|
||||||
4CD4EE131FC7284000EA6EB3 /* MPPickcharsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD4EE111FC7284000EA6EB3 /* MPPickcharsViewController.m */; };
|
4CD4EE131FC7284000EA6EB3 /* MPPickcharsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD4EE111FC7284000EA6EB3 /* MPPickcharsViewController.m */; };
|
||||||
4CD5D705177A5F3300100649 /* MPDatabaseSettingsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD5D704177A5F3300100649 /* MPDatabaseSettingsWindowController.m */; };
|
4CD5D705177A5F3300100649 /* MPDatabaseSettingsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD5D704177A5F3300100649 /* MPDatabaseSettingsWindowController.m */; };
|
||||||
4CD60C131C104AD4005BE5F8 /* HNHUi.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4CC281881C0F675B00B9174D /* HNHUi.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
4CD60C131C104AD4005BE5F8 /* HNHUi.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4CC281881C0F675B00B9174D /* HNHUi.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
4CD7223B17A7CB0700F5A1E1 /* MPWorkflowPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7223A17A7CB0700F5A1E1 /* MPWorkflowPreferencesController.m */; };
|
4CD7223B17A7CB0700F5A1E1 /* MPWorkflowPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7223A17A7CB0700F5A1E1 /* MPWorkflowPreferencesController.m */; };
|
||||||
4CD78ABC16D155FF00768A1D /* 07_NotepadTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78AB716D155FF00768A1D /* 07_NotepadTemplate.pdf */; };
|
4CD78ABC16D155FF00768A1D /* 07_NotepadTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78AB716D155FF00768A1D /* 07_NotepadTemplate.pdf */; };
|
||||||
4CD78ABD16D155FF00768A1D /* 08_SocketTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78AB816D155FF00768A1D /* 08_SocketTemplate.pdf */; };
|
4CD78ABD16D155FF00768A1D /* 08_SocketTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78AB816D155FF00768A1D /* 08_SocketTemplate.pdf */; };
|
||||||
@@ -279,7 +278,7 @@
|
|||||||
4CF29BF417879D0000851B60 /* 26_FileSaveTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */; };
|
4CF29BF417879D0000851B60 /* 26_FileSaveTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */; };
|
||||||
4CF5BE6D1BF33E3000048505 /* NSApplication+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */; };
|
4CF5BE6D1BF33E3000048505 /* NSApplication+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */; };
|
||||||
4CF6653820E67A140008A25C /* PluginDataView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CF6653A20E67A140008A25C /* PluginDataView.xib */; };
|
4CF6653820E67A140008A25C /* PluginDataView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CF6653A20E67A140008A25C /* PluginDataView.xib */; };
|
||||||
4CF6C3021FBF39BF0055AD03 /* MPPluginTabelCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF6C3011FBF39BF0055AD03 /* MPPluginTabelCellView.m */; };
|
4CF6C3021FBF39BF0055AD03 /* MPExtendedTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF6C3011FBF39BF0055AD03 /* MPExtendedTableCellView.m */; };
|
||||||
4CF6C711176F4533007A811D /* MPStringLengthValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */; };
|
4CF6C711176F4533007A811D /* MPStringLengthValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */; };
|
||||||
4CF78064176E75AD0032EE71 /* MPIntegrationPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF78063176E75AD0032EE71 /* MPIntegrationPreferencesController.m */; };
|
4CF78064176E75AD0032EE71 /* MPIntegrationPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF78063176E75AD0032EE71 /* MPIntegrationPreferencesController.m */; };
|
||||||
4CFB18E418A17FA20097A34B /* MPUpdatePreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFB18E318A17FA20097A34B /* MPUpdatePreferencesController.m */; };
|
4CFB18E418A17FA20097A34B /* MPUpdatePreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFB18E318A17FA20097A34B /* MPUpdatePreferencesController.m */; };
|
||||||
@@ -310,6 +309,7 @@
|
|||||||
4CD60C131C104AD4005BE5F8 /* HNHUi.framework in CopyFiles */,
|
4CD60C131C104AD4005BE5F8 /* HNHUi.framework in CopyFiles */,
|
||||||
4C7B637F1C0CB57300D7038C /* KeePassKit.framework in CopyFiles */,
|
4C7B637F1C0CB57300D7038C /* KeePassKit.framework in CopyFiles */,
|
||||||
4C7B63801C0CB57300D7038C /* Sparkle.framework in CopyFiles */,
|
4C7B63801C0CB57300D7038C /* Sparkle.framework in CopyFiles */,
|
||||||
|
4CBC5DDE23C61C8900D14B92 /* TransformerKit.framework in CopyFiles */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -320,6 +320,7 @@
|
|||||||
3C0CDECE21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSTextView+MPTouchBarExtension.m"; sourceTree = "<group>"; };
|
3C0CDECE21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSTextView+MPTouchBarExtension.m"; sourceTree = "<group>"; };
|
||||||
3C0CDED721D28BF700B2A10B /* MPTouchBarButtonCreator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTouchBarButtonCreator.m; sourceTree = "<group>"; };
|
3C0CDED721D28BF700B2A10B /* MPTouchBarButtonCreator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTouchBarButtonCreator.m; sourceTree = "<group>"; };
|
||||||
3C0CDED921D28C0E00B2A10B /* MPTouchBarButtonCreator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTouchBarButtonCreator.h; sourceTree = "<group>"; };
|
3C0CDED921D28C0E00B2A10B /* MPTouchBarButtonCreator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTouchBarButtonCreator.h; sourceTree = "<group>"; };
|
||||||
|
43B7080F240978E500F68426 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/AutotypeDoctorReportViewController.strings; sourceTree = "<group>"; };
|
||||||
4825CC811C414D57003E37E9 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/DatabaseSettingsWindow.strings; sourceTree = "<group>"; };
|
4825CC811C414D57003E37E9 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/DatabaseSettingsWindow.strings; sourceTree = "<group>"; };
|
||||||
4825CC821C414D57003E37E9 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/PasswordEditWindow.strings; sourceTree = "<group>"; };
|
4825CC821C414D57003E37E9 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/PasswordEditWindow.strings; sourceTree = "<group>"; };
|
||||||
4825CC831C414D57003E37E9 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/WelcomeView.strings; sourceTree = "<group>"; };
|
4825CC831C414D57003E37E9 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/WelcomeView.strings; sourceTree = "<group>"; };
|
||||||
@@ -405,6 +406,13 @@
|
|||||||
4C1F7FA01E3A12E600D6A40E /* MPModifiedKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPModifiedKey.h; sourceTree = "<group>"; };
|
4C1F7FA01E3A12E600D6A40E /* MPModifiedKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPModifiedKey.h; sourceTree = "<group>"; };
|
||||||
4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPModifiedKey.m; sourceTree = "<group>"; };
|
4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPModifiedKey.m; sourceTree = "<group>"; };
|
||||||
4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Autotype.m"; sourceTree = "<group>"; };
|
4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Autotype.m"; sourceTree = "<group>"; };
|
||||||
|
4C2057EC23CDF6F900C731EC /* MPPathCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPathCell.h; sourceTree = "<group>"; };
|
||||||
|
4C2057ED23CDF6F900C731EC /* MPPathCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPathCell.m; sourceTree = "<group>"; };
|
||||||
|
4C2057EF23CDFC2000C731EC /* MPPathControl+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MPPathControl+Private.h"; sourceTree = "<group>"; };
|
||||||
|
4C2057F223CF3BA600C731EC /* MPAutotypeEnvironment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAutotypeEnvironment.h; sourceTree = "<group>"; };
|
||||||
|
4C2057F323CF3BA600C731EC /* MPAutotypeEnvironment.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeEnvironment.m; sourceTree = "<group>"; };
|
||||||
|
4C2057F523CF3E9A00C731EC /* NSRunningApplication+MPAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSRunningApplication+MPAdditions.h"; sourceTree = "<group>"; };
|
||||||
|
4C2057F623CF3E9A00C731EC /* NSRunningApplication+MPAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSRunningApplication+MPAdditions.m"; sourceTree = "<group>"; };
|
||||||
4C21F29F195B3A48002D610D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
4C21F29F195B3A48002D610D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
||||||
4C224B4017DFCB2300FF6AEE /* MPNumericalInputFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNumericalInputFormatter.h; sourceTree = "<group>"; };
|
4C224B4017DFCB2300FF6AEE /* MPNumericalInputFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNumericalInputFormatter.h; sourceTree = "<group>"; };
|
||||||
4C224B4117DFCB2400FF6AEE /* MPNumericalInputFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNumericalInputFormatter.m; sourceTree = "<group>"; };
|
4C224B4117DFCB2400FF6AEE /* MPNumericalInputFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNumericalInputFormatter.m; sourceTree = "<group>"; };
|
||||||
@@ -521,6 +529,8 @@
|
|||||||
4C46B88317063A070046109A /* NSString+MPPasswordCreation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MPPasswordCreation.h"; sourceTree = "<group>"; };
|
4C46B88317063A070046109A /* NSString+MPPasswordCreation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MPPasswordCreation.h"; sourceTree = "<group>"; };
|
||||||
4C46B88417063A070046109A /* NSString+MPPasswordCreation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MPPasswordCreation.m"; sourceTree = "<group>"; };
|
4C46B88417063A070046109A /* NSString+MPPasswordCreation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MPPasswordCreation.m"; sourceTree = "<group>"; };
|
||||||
4C473A8518AFD7250073FD2E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
|
4C473A8518AFD7250073FD2E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
|
4C49CFD424252389004092E7 /* KPKEntry+MPTags.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KPKEntry+MPTags.h"; sourceTree = "<group>"; };
|
||||||
|
4C49CFD524252389004092E7 /* KPKEntry+MPTags.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "KPKEntry+MPTags.m"; sourceTree = "<group>"; };
|
||||||
4C4A100D176286FD00BBF2CA /* MPTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTableView.h; sourceTree = "<group>"; };
|
4C4A100D176286FD00BBF2CA /* MPTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTableView.h; sourceTree = "<group>"; };
|
||||||
4C4A100E176286FD00BBF2CA /* MPTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTableView.m; sourceTree = "<group>"; };
|
4C4A100E176286FD00BBF2CA /* MPTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTableView.m; sourceTree = "<group>"; };
|
||||||
4C4B2ED122D8CA6100EB6BFD /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/PluginRepositoryBrowserView.strings; sourceTree = "<group>"; };
|
4C4B2ED122D8CA6100EB6BFD /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/PluginRepositoryBrowserView.strings; sourceTree = "<group>"; };
|
||||||
@@ -653,21 +663,6 @@
|
|||||||
4C7ABA4617BAEC6700FF5799 /* 19_EmailTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 19_EmailTemplate.pdf; sourceTree = "<group>"; };
|
4C7ABA4617BAEC6700FF5799 /* 19_EmailTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 19_EmailTemplate.pdf; sourceTree = "<group>"; };
|
||||||
4C7ABA4717BAEC6700FF5799 /* 20_MiscTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 20_MiscTemplate.pdf; sourceTree = "<group>"; };
|
4C7ABA4717BAEC6700FF5799 /* 20_MiscTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 20_MiscTemplate.pdf; sourceTree = "<group>"; };
|
||||||
4C7ABA4D17BAEC7000FF5799 /* addEntryTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = addEntryTemplate.pdf; sourceTree = "<group>"; };
|
4C7ABA4D17BAEC7000FF5799 /* addEntryTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = addEntryTemplate.pdf; sourceTree = "<group>"; };
|
||||||
4C7B63621C0CB51F00D7038C /* NSValueTransformer+TransformerKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValueTransformer+TransformerKit.h"; sourceTree = "<group>"; };
|
|
||||||
4C7B63631C0CB51F00D7038C /* NSValueTransformer+TransformerKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSValueTransformer+TransformerKit.m"; sourceTree = "<group>"; };
|
|
||||||
4C7B63641C0CB51F00D7038C /* TransformerKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformerKit.h; sourceTree = "<group>"; };
|
|
||||||
4C7B63651C0CB51F00D7038C /* TTTCryptographyTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTCryptographyTransformers.h; sourceTree = "<group>"; };
|
|
||||||
4C7B63661C0CB51F00D7038C /* TTTCryptographyTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTCryptographyTransformers.m; sourceTree = "<group>"; };
|
|
||||||
4C7B63671C0CB51F00D7038C /* TTTDataTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTDataTransformer.h; sourceTree = "<group>"; };
|
|
||||||
4C7B63681C0CB51F00D7038C /* TTTDataTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTDataTransformer.m; sourceTree = "<group>"; };
|
|
||||||
4C7B63691C0CB51F00D7038C /* TTTDateTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTDateTransformers.h; sourceTree = "<group>"; };
|
|
||||||
4C7B636A1C0CB51F00D7038C /* TTTDateTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTDateTransformers.m; sourceTree = "<group>"; };
|
|
||||||
4C7B636B1C0CB51F00D7038C /* TTTImageTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTImageTransformers.h; sourceTree = "<group>"; };
|
|
||||||
4C7B636C1C0CB51F00D7038C /* TTTImageTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTImageTransformers.m; sourceTree = "<group>"; };
|
|
||||||
4C7B636D1C0CB51F00D7038C /* TTTJSONTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTJSONTransformer.h; sourceTree = "<group>"; };
|
|
||||||
4C7B636E1C0CB51F00D7038C /* TTTJSONTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTJSONTransformer.m; sourceTree = "<group>"; };
|
|
||||||
4C7B636F1C0CB51F00D7038C /* TTTStringTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTStringTransformers.h; sourceTree = "<group>"; };
|
|
||||||
4C7B63701C0CB51F00D7038C /* TTTStringTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTStringTransformers.m; sourceTree = "<group>"; };
|
|
||||||
4C7B63791C0CB55600D7038C /* KeePassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = KeePassKit.framework; path = Carthage/Build/Mac/KeePassKit.framework; sourceTree = "<group>"; };
|
4C7B63791C0CB55600D7038C /* KeePassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = KeePassKit.framework; path = Carthage/Build/Mac/KeePassKit.framework; sourceTree = "<group>"; };
|
||||||
4C7B637A1C0CB55600D7038C /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Carthage/Build/Mac/Sparkle.framework; sourceTree = "<group>"; };
|
4C7B637A1C0CB55600D7038C /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Carthage/Build/Mac/Sparkle.framework; sourceTree = "<group>"; };
|
||||||
4C7BD07519FE94C900C7AA5C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
4C7BD07519FE94C900C7AA5C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
@@ -734,6 +729,7 @@
|
|||||||
4C97CCEF1FA727DC00E58F8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
4C97CCEF1FA727DC00E58F8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
4C9BFFF91FD19B5400264B16 /* MPPrettyPasswordTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPrettyPasswordTransformer.h; sourceTree = "<group>"; };
|
4C9BFFF91FD19B5400264B16 /* MPPrettyPasswordTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPrettyPasswordTransformer.h; sourceTree = "<group>"; };
|
||||||
4C9BFFFA1FD19B5400264B16 /* MPPrettyPasswordTransformer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPrettyPasswordTransformer.m; sourceTree = "<group>"; };
|
4C9BFFFA1FD19B5400264B16 /* MPPrettyPasswordTransformer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPrettyPasswordTransformer.m; sourceTree = "<group>"; };
|
||||||
|
4C9FE47423703DA50096A5EA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
4CA08D9E17A831B200A6544B /* MPAddEntryContextMenuDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAddEntryContextMenuDelegate.h; sourceTree = "<group>"; };
|
4CA08D9E17A831B200A6544B /* MPAddEntryContextMenuDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAddEntryContextMenuDelegate.h; sourceTree = "<group>"; };
|
||||||
4CA08D9F17A831B200A6544B /* MPAddEntryContextMenuDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAddEntryContextMenuDelegate.m; sourceTree = "<group>"; };
|
4CA08D9F17A831B200A6544B /* MPAddEntryContextMenuDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAddEntryContextMenuDelegate.m; sourceTree = "<group>"; };
|
||||||
4CA0B2EC15BCADAC00654E32 /* PreferencesWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PreferencesWindow.xib; sourceTree = "<group>"; };
|
4CA0B2EC15BCADAC00654E32 /* PreferencesWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PreferencesWindow.xib; sourceTree = "<group>"; };
|
||||||
@@ -779,6 +775,7 @@
|
|||||||
4CB63A6018986530002DEC4C /* MPFlagsHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPFlagsHelper.h; sourceTree = "<group>"; };
|
4CB63A6018986530002DEC4C /* MPFlagsHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPFlagsHelper.h; sourceTree = "<group>"; };
|
||||||
4CBA2AB617074B59006D8139 /* MPSettingsHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSettingsHelper.h; sourceTree = "<group>"; };
|
4CBA2AB617074B59006D8139 /* MPSettingsHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSettingsHelper.h; sourceTree = "<group>"; };
|
||||||
4CBA2AB917074C07006D8139 /* MPSettingsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSettingsHelper.m; sourceTree = "<group>"; };
|
4CBA2AB917074C07006D8139 /* MPSettingsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSettingsHelper.m; sourceTree = "<group>"; };
|
||||||
|
4CBC5DDB23C61C8300D14B92 /* TransformerKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TransformerKit.framework; path = Carthage/Build/Mac/TransformerKit.framework; sourceTree = "<group>"; };
|
||||||
4CC0D2CC17974A47000B4BDA /* MPCustomFieldTableViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCustomFieldTableViewDelegate.h; sourceTree = "<group>"; };
|
4CC0D2CC17974A47000B4BDA /* MPCustomFieldTableViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCustomFieldTableViewDelegate.h; sourceTree = "<group>"; };
|
||||||
4CC0D2CD17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCustomFieldTableViewDelegate.m; sourceTree = "<group>"; };
|
4CC0D2CD17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCustomFieldTableViewDelegate.m; sourceTree = "<group>"; };
|
||||||
4CC0D2CF17974A5A000B4BDA /* MPAttachmentTableViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAttachmentTableViewDelegate.h; sourceTree = "<group>"; };
|
4CC0D2CF17974A5A000B4BDA /* MPAttachmentTableViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAttachmentTableViewDelegate.h; sourceTree = "<group>"; };
|
||||||
@@ -860,8 +857,8 @@
|
|||||||
4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSApplication+MPAdditions.m"; sourceTree = "<group>"; };
|
4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSApplication+MPAdditions.m"; sourceTree = "<group>"; };
|
||||||
4CF6653920E67A140008A25C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PluginDataView.xib; sourceTree = "<group>"; };
|
4CF6653920E67A140008A25C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PluginDataView.xib; sourceTree = "<group>"; };
|
||||||
4CF6653E20E67A1A0008A25C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/PluginDataView.strings; sourceTree = "<group>"; };
|
4CF6653E20E67A1A0008A25C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/PluginDataView.strings; sourceTree = "<group>"; };
|
||||||
4CF6C3001FBF39BF0055AD03 /* MPPluginTabelCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPluginTabelCellView.h; sourceTree = "<group>"; };
|
4CF6C3001FBF39BF0055AD03 /* MPExtendedTableCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPExtendedTableCellView.h; sourceTree = "<group>"; };
|
||||||
4CF6C3011FBF39BF0055AD03 /* MPPluginTabelCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPluginTabelCellView.m; sourceTree = "<group>"; };
|
4CF6C3011FBF39BF0055AD03 /* MPExtendedTableCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPExtendedTableCellView.m; sourceTree = "<group>"; };
|
||||||
4CF6C70F176F4533007A811D /* MPStringLengthValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStringLengthValueTransformer.h; sourceTree = "<group>"; };
|
4CF6C70F176F4533007A811D /* MPStringLengthValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStringLengthValueTransformer.h; sourceTree = "<group>"; };
|
||||||
4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringLengthValueTransformer.m; sourceTree = "<group>"; };
|
4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringLengthValueTransformer.m; sourceTree = "<group>"; };
|
||||||
4CF78062176E75AD0032EE71 /* MPIntegrationPreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIntegrationPreferencesController.h; sourceTree = "<group>"; };
|
4CF78062176E75AD0032EE71 /* MPIntegrationPreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIntegrationPreferencesController.h; sourceTree = "<group>"; };
|
||||||
@@ -956,9 +953,9 @@
|
|||||||
7837112B22553B1D009BD28D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AutotypeBuilderView.strings; sourceTree = "<group>"; };
|
7837112B22553B1D009BD28D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AutotypeBuilderView.strings; sourceTree = "<group>"; };
|
||||||
7837112D225540D1009BD28D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PluginRepositoryBrowserView.xib; sourceTree = "<group>"; };
|
7837112D225540D1009BD28D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PluginRepositoryBrowserView.xib; sourceTree = "<group>"; };
|
||||||
78371130225540D8009BD28D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PluginRepositoryBrowserView.strings; sourceTree = "<group>"; };
|
78371130225540D8009BD28D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PluginRepositoryBrowserView.strings; sourceTree = "<group>"; };
|
||||||
|
78C093DB236A18560008577C /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AutotypeDoctorReportViewController.strings; sourceTree = "<group>"; };
|
||||||
78E1F8AF22E3A3DF00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/IntegrationPreferences.strings; sourceTree = "<group>"; };
|
78E1F8AF22E3A3DF00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/IntegrationPreferences.strings; sourceTree = "<group>"; };
|
||||||
78E1F8B122E3A5D600E738AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AutotypeDoctorReportViewController.xib; sourceTree = "<group>"; };
|
78E1F8B122E3A5D600E738AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AutotypeDoctorReportViewController.xib; sourceTree = "<group>"; };
|
||||||
78E1F8B422E3A5DB00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AutotypeDoctorReportViewController.strings; sourceTree = "<group>"; };
|
|
||||||
78E1F8B822E3B06700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickcharsView.strings; sourceTree = "<group>"; };
|
78E1F8B822E3B06700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickcharsView.strings; sourceTree = "<group>"; };
|
||||||
78E1F8BA22E3B0B700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickfieldView.strings; sourceTree = "<group>"; };
|
78E1F8BA22E3B0B700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickfieldView.strings; sourceTree = "<group>"; };
|
||||||
78E1F8BC22E3B12300E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/OpenPanelAccessoryView.strings; sourceTree = "<group>"; };
|
78E1F8BC22E3B12300E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/OpenPanelAccessoryView.strings; sourceTree = "<group>"; };
|
||||||
@@ -1004,6 +1001,11 @@
|
|||||||
BD6C366319484CF40089EB37 /* nl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; lineEnding = 0; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
|
BD6C366319484CF40089EB37 /* nl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; lineEnding = 0; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
|
||||||
BD6C366519484CF40089EB37 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
BD6C366519484CF40089EB37 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
BD6C366719484CF40089EB37 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
BD6C366719484CF40089EB37 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
D364AB1423FC104300AB1D8E /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/PickcharsView.strings; sourceTree = "<group>"; };
|
||||||
|
D364AB1523FC104300AB1D8E /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/OpenPanelAccessoryView.strings; sourceTree = "<group>"; };
|
||||||
|
D364AB1623FC104300AB1D8E /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/SavePanelAccessoryView.strings; sourceTree = "<group>"; };
|
||||||
|
D364AB1723FC104300AB1D8E /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/AutotypeDoctorReportViewController.strings; sourceTree = "<group>"; };
|
||||||
|
D364AB1823FC104300AB1D8E /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/PluginRepositoryBrowserView.strings; sourceTree = "<group>"; };
|
||||||
FA13910B1F9CD9EB0033D256 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
FA13910B1F9CD9EB0033D256 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
FA13910E1F9CDB2D0033D256 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = pl; path = pl.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
FA13910E1F9CDB2D0033D256 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = pl; path = pl.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
FA638D0E1C39BFCB00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/DatabaseSettingsWindow.strings; sourceTree = "<group>"; };
|
FA638D0E1C39BFCB00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/DatabaseSettingsWindow.strings; sourceTree = "<group>"; };
|
||||||
@@ -1052,6 +1054,7 @@
|
|||||||
4CAD748E15B88AC100104512 /* libz.dylib in Frameworks */,
|
4CAD748E15B88AC100104512 /* libz.dylib in Frameworks */,
|
||||||
4C7B637C1C0CB55600D7038C /* KeePassKit.framework in Frameworks */,
|
4C7B637C1C0CB55600D7038C /* KeePassKit.framework in Frameworks */,
|
||||||
4CAD748C15B889B700104512 /* Security.framework in Frameworks */,
|
4CAD748C15B889B700104512 /* Security.framework in Frameworks */,
|
||||||
|
4CBC5DDD23C61C8900D14B92 /* TransformerKit.framework in Frameworks */,
|
||||||
4C77E36715B84A240093A587 /* Cocoa.framework in Frameworks */,
|
4C77E36715B84A240093A587 /* Cocoa.framework in Frameworks */,
|
||||||
4C7B637D1C0CB55600D7038C /* Sparkle.framework in Frameworks */,
|
4C7B637D1C0CB55600D7038C /* Sparkle.framework in Frameworks */,
|
||||||
4CC281891C0F675B00B9174D /* HNHUi.framework in Frameworks */,
|
4CC281891C0F675B00B9174D /* HNHUi.framework in Frameworks */,
|
||||||
@@ -1095,8 +1098,8 @@
|
|||||||
4CCEDE29179F203B008402BE /* MPOutlineView.m */,
|
4CCEDE29179F203B008402BE /* MPOutlineView.m */,
|
||||||
4CE082C11F6FCD2A0034FF56 /* MPCollectionView.h */,
|
4CE082C11F6FCD2A0034FF56 /* MPCollectionView.h */,
|
||||||
4CE082C21F6FCD2A0034FF56 /* MPCollectionView.m */,
|
4CE082C21F6FCD2A0034FF56 /* MPCollectionView.m */,
|
||||||
4CF6C3001FBF39BF0055AD03 /* MPPluginTabelCellView.h */,
|
4CF6C3001FBF39BF0055AD03 /* MPExtendedTableCellView.h */,
|
||||||
4CF6C3011FBF39BF0055AD03 /* MPPluginTabelCellView.m */,
|
4CF6C3011FBF39BF0055AD03 /* MPExtendedTableCellView.m */,
|
||||||
4C0F043E2147A6FA000B8568 /* MPCustomFieldTableView.h */,
|
4C0F043E2147A6FA000B8568 /* MPCustomFieldTableView.h */,
|
||||||
4C0F043F2147A6FA000B8568 /* MPCustomFieldTableView.m */,
|
4C0F043F2147A6FA000B8568 /* MPCustomFieldTableView.m */,
|
||||||
4C370EFC215B76CB00703AAE /* MPOutlineTableCellView.h */,
|
4C370EFC215B76CB00703AAE /* MPOutlineTableCellView.h */,
|
||||||
@@ -1140,6 +1143,10 @@
|
|||||||
4C58A4A22192EC1600B13370 /* NSIndexPath+MPAdditions.m */,
|
4C58A4A22192EC1600B13370 /* NSIndexPath+MPAdditions.m */,
|
||||||
3C0CDECD21CFED9000B2A10B /* NSTextView+MPTouchBarExtension.h */,
|
3C0CDECD21CFED9000B2A10B /* NSTextView+MPTouchBarExtension.h */,
|
||||||
3C0CDECE21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m */,
|
3C0CDECE21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m */,
|
||||||
|
4C2057F523CF3E9A00C731EC /* NSRunningApplication+MPAdditions.h */,
|
||||||
|
4C2057F623CF3E9A00C731EC /* NSRunningApplication+MPAdditions.m */,
|
||||||
|
4C49CFD424252389004092E7 /* KPKEntry+MPTags.h */,
|
||||||
|
4C49CFD524252389004092E7 /* KPKEntry+MPTags.m */,
|
||||||
);
|
);
|
||||||
name = Categories;
|
name = Categories;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1437,10 +1444,10 @@
|
|||||||
4C77E35715B84A240093A587 = {
|
4C77E35715B84A240093A587 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
4CBC5DDB23C61C8300D14B92 /* TransformerKit.framework */,
|
||||||
4CC281881C0F675B00B9174D /* HNHUi.framework */,
|
4CC281881C0F675B00B9174D /* HNHUi.framework */,
|
||||||
4C7B63791C0CB55600D7038C /* KeePassKit.framework */,
|
4C7B63791C0CB55600D7038C /* KeePassKit.framework */,
|
||||||
4C7B637A1C0CB55600D7038C /* Sparkle.framework */,
|
4C7B637A1C0CB55600D7038C /* Sparkle.framework */,
|
||||||
4C7B63611C0CB51F00D7038C /* TransformerKit */,
|
|
||||||
4C00E33917D8FA3B00F37192 /* DDHotKey */,
|
4C00E33917D8FA3B00F37192 /* DDHotKey */,
|
||||||
4C77E36C15B84A240093A587 /* MacPass */,
|
4C77E36C15B84A240093A587 /* MacPass */,
|
||||||
4C45FB1E178E09ED0010007D /* MacPassTests */,
|
4C45FB1E178E09ED0010007D /* MacPassTests */,
|
||||||
@@ -1526,29 +1533,6 @@
|
|||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
4C7B63611C0CB51F00D7038C /* TransformerKit */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
4C7B63621C0CB51F00D7038C /* NSValueTransformer+TransformerKit.h */,
|
|
||||||
4C7B63631C0CB51F00D7038C /* NSValueTransformer+TransformerKit.m */,
|
|
||||||
4C7B63641C0CB51F00D7038C /* TransformerKit.h */,
|
|
||||||
4C7B63651C0CB51F00D7038C /* TTTCryptographyTransformers.h */,
|
|
||||||
4C7B63661C0CB51F00D7038C /* TTTCryptographyTransformers.m */,
|
|
||||||
4C7B63671C0CB51F00D7038C /* TTTDataTransformer.h */,
|
|
||||||
4C7B63681C0CB51F00D7038C /* TTTDataTransformer.m */,
|
|
||||||
4C7B63691C0CB51F00D7038C /* TTTDateTransformers.h */,
|
|
||||||
4C7B636A1C0CB51F00D7038C /* TTTDateTransformers.m */,
|
|
||||||
4C7B636B1C0CB51F00D7038C /* TTTImageTransformers.h */,
|
|
||||||
4C7B636C1C0CB51F00D7038C /* TTTImageTransformers.m */,
|
|
||||||
4C7B636D1C0CB51F00D7038C /* TTTJSONTransformer.h */,
|
|
||||||
4C7B636E1C0CB51F00D7038C /* TTTJSONTransformer.m */,
|
|
||||||
4C7B636F1C0CB51F00D7038C /* TTTStringTransformers.h */,
|
|
||||||
4C7B63701C0CB51F00D7038C /* TTTStringTransformers.m */,
|
|
||||||
);
|
|
||||||
name = TransformerKit;
|
|
||||||
path = TransformerKit/TransformerKit;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
4C89F525182FB4C50069C73C /* Autotype */ = {
|
4C89F525182FB4C50069C73C /* Autotype */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -1556,6 +1540,8 @@
|
|||||||
4C90757B18A42E7A00E598DA /* Commands */,
|
4C90757B18A42E7A00E598DA /* Commands */,
|
||||||
4CEE46DB181C301D006BF1E5 /* MPAutotypeDaemon.h */,
|
4CEE46DB181C301D006BF1E5 /* MPAutotypeDaemon.h */,
|
||||||
4CEE46DC181C301D006BF1E5 /* MPAutotypeDaemon.m */,
|
4CEE46DC181C301D006BF1E5 /* MPAutotypeDaemon.m */,
|
||||||
|
4C2057F223CF3BA600C731EC /* MPAutotypeEnvironment.h */,
|
||||||
|
4C2057F323CF3BA600C731EC /* MPAutotypeEnvironment.m */,
|
||||||
4CD2B9041849424B0051B395 /* MPAutotypeContext.h */,
|
4CD2B9041849424B0051B395 /* MPAutotypeContext.h */,
|
||||||
4CD2B9051849424B0051B395 /* MPAutotypeContext.m */,
|
4CD2B9051849424B0051B395 /* MPAutotypeContext.m */,
|
||||||
4CA3530918A53CB800839B0F /* MPKeyMapper.h */,
|
4CA3530918A53CB800839B0F /* MPKeyMapper.h */,
|
||||||
@@ -1680,7 +1666,10 @@
|
|||||||
4C57AE1217BA422B00CA4F34 /* MPSegmentedContextCell.h */,
|
4C57AE1217BA422B00CA4F34 /* MPSegmentedContextCell.h */,
|
||||||
4C57AE1317BA422B00CA4F34 /* MPSegmentedContextCell.m */,
|
4C57AE1317BA422B00CA4F34 /* MPSegmentedContextCell.m */,
|
||||||
4CC59C2521AF0893005E8D6B /* MPPathControl.h */,
|
4CC59C2521AF0893005E8D6B /* MPPathControl.h */,
|
||||||
|
4C2057EF23CDFC2000C731EC /* MPPathControl+Private.h */,
|
||||||
4CC59C2621AF0893005E8D6B /* MPPathControl.m */,
|
4CC59C2621AF0893005E8D6B /* MPPathControl.m */,
|
||||||
|
4C2057EC23CDF6F900C731EC /* MPPathCell.h */,
|
||||||
|
4C2057ED23CDF6F900C731EC /* MPPathCell.m */,
|
||||||
);
|
);
|
||||||
name = Controls;
|
name = Controls;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1813,7 +1802,7 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
CLASSPREFIX = MP;
|
CLASSPREFIX = MP;
|
||||||
LastUpgradeCheck = 1020;
|
LastUpgradeCheck = 1130;
|
||||||
ORGANIZATIONNAME = "HicknHack Software GmbH";
|
ORGANIZATIONNAME = "HicknHack Software GmbH";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
4C77E36115B84A240093A587 = {
|
4C77E36115B84A240093A587 = {
|
||||||
@@ -1994,13 +1983,15 @@
|
|||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
|
"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}",
|
||||||
|
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
|
||||||
);
|
);
|
||||||
name = Versioning;
|
name = Versioning;
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "git=`sh /etc/profile; which git`\n#branch_name=`$git symbolic-ref HEAD | sed -e 's,refs/heads/\\\\(.*\\\\),\\\\1,'`\nbranch_name=`$git rev-parse --abbrev-ref HEAD`\n#simple_branch_name=`$git rev-parse --abbrev-ref HEAD`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\n\nbuild_number=\"${git_count}0\"\nif [ $CONFIGURATION != \"Release\" ] || [ $branch_name != \"master\" ]; then\nbuild_number+=\"-$branch_name\"\nfi\nif [ \"$CI\" = \"true\" ]; then\nbuild_date=`date +\"%Y%m%d%H%m%S\"`\nbuild_number=\"$build_date-continuous\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n";
|
shellScript = "git=`sh /etc/profile; which git`\nbranch_name=`$git rev-parse --abbrev-ref HEAD`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\n\nbuild_number=\"${git_count}0\"\nif [ $CONFIGURATION != \"Release\" ]; then\n if [ $branch_name != \"master\" ] && [ $branch_name != release* ]; then\n build_number+=\"-$branch_name\"\n fi\nfi\nif [ \"$CI\" = \"true\" ]; then\nbuild_date=`date +\"%Y%m%d%H%m%S\"`\nbuild_number=\"$build_date-continuous\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
@@ -2050,17 +2041,16 @@
|
|||||||
4C769CA9213D59BF00A3F60A /* KPKEntry+MPCustomAttributeProperties.m in Sources */,
|
4C769CA9213D59BF00A3F60A /* KPKEntry+MPCustomAttributeProperties.m in Sources */,
|
||||||
4CDF01A316D1B76700D0AC08 /* MPEntryViewController.m in Sources */,
|
4CDF01A316D1B76700D0AC08 /* MPEntryViewController.m in Sources */,
|
||||||
4C3BD51516D276F800389F1F /* MPToolbarDelegate.m in Sources */,
|
4C3BD51516D276F800389F1F /* MPToolbarDelegate.m in Sources */,
|
||||||
4C7B63731C0CB51F00D7038C /* TTTDataTransformer.m in Sources */,
|
|
||||||
4C8F0C711FCEF91400BE157F /* MPPickcharsParser.m in Sources */,
|
4C8F0C711FCEF91400BE157F /* MPPickcharsParser.m in Sources */,
|
||||||
4C735FC02035FCBF00708D53 /* MPPluginEntryActionContext.m in Sources */,
|
4C735FC02035FCBF00708D53 /* MPPluginEntryActionContext.m in Sources */,
|
||||||
4C61EA0316D2FD0800AC519E /* MPOutlineViewController.m in Sources */,
|
4C61EA0316D2FD0800AC519E /* MPOutlineViewController.m in Sources */,
|
||||||
4C65C79C16DD283900E32CFF /* MPToolbarButton.m in Sources */,
|
4C65C79C16DD283900E32CFF /* MPToolbarButton.m in Sources */,
|
||||||
|
4C49CFD624252389004092E7 /* KPKEntry+MPTags.m in Sources */,
|
||||||
4C431BCD16E2A82800700A81 /* MPPasteBoardController.m in Sources */,
|
4C431BCD16E2A82800700A81 /* MPPasteBoardController.m in Sources */,
|
||||||
4C6AEEF91A043E2B00CA2420 /* MPDocumentController.m in Sources */,
|
4C6AEEF91A043E2B00CA2420 /* MPDocumentController.m in Sources */,
|
||||||
4C370EFE215B76CB00703AAE /* MPOutlineTableCellView.m in Sources */,
|
4C370EFE215B76CB00703AAE /* MPOutlineTableCellView.m in Sources */,
|
||||||
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */,
|
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */,
|
||||||
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */,
|
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */,
|
||||||
4C7B63761C0CB51F00D7038C /* TTTJSONTransformer.m in Sources */,
|
|
||||||
4C77547516E55FE800970E02 /* MPInspectorViewController.m in Sources */,
|
4C77547516E55FE800970E02 /* MPInspectorViewController.m in Sources */,
|
||||||
4C89F524182FB4740069C73C /* MPAutotypeCommand.m in Sources */,
|
4C89F524182FB4740069C73C /* MPAutotypeCommand.m in Sources */,
|
||||||
4C6DCC611FA24C2100C8AD3F /* MPAutotypeCandidateSelectionViewController.m in Sources */,
|
4C6DCC611FA24C2100C8AD3F /* MPAutotypeCandidateSelectionViewController.m in Sources */,
|
||||||
@@ -2076,6 +2066,7 @@
|
|||||||
4CE39AC416ECE4F7000FE29D /* MPIconImageView.m in Sources */,
|
4CE39AC416ECE4F7000FE29D /* MPIconImageView.m in Sources */,
|
||||||
4C46B88517063A070046109A /* NSString+MPPasswordCreation.m in Sources */,
|
4C46B88517063A070046109A /* NSString+MPPasswordCreation.m in Sources */,
|
||||||
4C5A11FE1708DE8700223D8A /* MPPasswordCreatorViewController.m in Sources */,
|
4C5A11FE1708DE8700223D8A /* MPPasswordCreatorViewController.m in Sources */,
|
||||||
|
4C2057F423CF3BA600C731EC /* MPAutotypeEnvironment.m in Sources */,
|
||||||
4CE5B54B173AFBA700207B39 /* MPDocument.m in Sources */,
|
4CE5B54B173AFBA700207B39 /* MPDocument.m in Sources */,
|
||||||
4CE082C31F6FCD2A0034FF56 /* MPCollectionView.m in Sources */,
|
4CE082C31F6FCD2A0034FF56 /* MPCollectionView.m in Sources */,
|
||||||
4C4A100F176286FD00BBF2CA /* MPTableView.m in Sources */,
|
4C4A100F176286FD00BBF2CA /* MPTableView.m in Sources */,
|
||||||
@@ -2084,13 +2075,11 @@
|
|||||||
4CE296191842A166005F01CE /* MPAutotypePaste.m in Sources */,
|
4CE296191842A166005F01CE /* MPAutotypePaste.m in Sources */,
|
||||||
4C569D9E17652B0600595B62 /* MPConstants.m in Sources */,
|
4C569D9E17652B0600595B62 /* MPConstants.m in Sources */,
|
||||||
4C569DA117652BFE00595B62 /* MPEntryTableDataSource.m in Sources */,
|
4C569DA117652BFE00595B62 /* MPEntryTableDataSource.m in Sources */,
|
||||||
4C7B63711C0CB51F00D7038C /* NSValueTransformer+TransformerKit.m in Sources */,
|
|
||||||
4CD034AA1BFE113B003C002C /* MPPlugin.m in Sources */,
|
4CD034AA1BFE113B003C002C /* MPPlugin.m in Sources */,
|
||||||
4CA2335A176DBFE100F0B6AC /* MPLockDaemon.m in Sources */,
|
4CA2335A176DBFE100F0B6AC /* MPLockDaemon.m in Sources */,
|
||||||
4C77C84118E240E000D1C42B /* DDHotKey+MacPassAdditions.m in Sources */,
|
4C77C84118E240E000D1C42B /* DDHotKey+MacPassAdditions.m in Sources */,
|
||||||
4C89B71019B4B4A300DC0A6A /* MPTreeDelegate.m in Sources */,
|
4C89B71019B4B4A300DC0A6A /* MPTreeDelegate.m in Sources */,
|
||||||
4C88C66918D9F8D600F43852 /* MPTemporaryFileStorageCenter.m in Sources */,
|
4C88C66918D9F8D600F43852 /* MPTemporaryFileStorageCenter.m in Sources */,
|
||||||
4C7B63741C0CB51F00D7038C /* TTTDateTransformers.m in Sources */,
|
|
||||||
4CF5BE6D1BF33E3000048505 /* NSApplication+MPAdditions.m in Sources */,
|
4CF5BE6D1BF33E3000048505 /* NSApplication+MPAdditions.m in Sources */,
|
||||||
4CE30ACC1A312B7F0063FCC6 /* MPReferenceBuilderViewController.m in Sources */,
|
4CE30ACC1A312B7F0063FCC6 /* MPReferenceBuilderViewController.m in Sources */,
|
||||||
4C6F228C19A4AA700012310C /* MPAutotypeDelay.m in Sources */,
|
4C6F228C19A4AA700012310C /* MPAutotypeDelay.m in Sources */,
|
||||||
@@ -2114,7 +2103,7 @@
|
|||||||
4C5FE9AE17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m in Sources */,
|
4C5FE9AE17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m in Sources */,
|
||||||
4CC59C2721AF0893005E8D6B /* MPPathControl.m in Sources */,
|
4CC59C2721AF0893005E8D6B /* MPPathControl.m in Sources */,
|
||||||
4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */,
|
4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */,
|
||||||
4CF6C3021FBF39BF0055AD03 /* MPPluginTabelCellView.m in Sources */,
|
4CF6C3021FBF39BF0055AD03 /* MPExtendedTableCellView.m in Sources */,
|
||||||
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */,
|
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */,
|
||||||
4C58A4A32192EC1600B13370 /* NSIndexPath+MPAdditions.m in Sources */,
|
4C58A4A32192EC1600B13370 /* NSIndexPath+MPAdditions.m in Sources */,
|
||||||
4C2F17A21FD69BCA0097418D /* MPUserNotificationCenterDelegate.m in Sources */,
|
4C2F17A21FD69BCA0097418D /* MPUserNotificationCenterDelegate.m in Sources */,
|
||||||
@@ -2126,6 +2115,7 @@
|
|||||||
4CAD8AA622CF397B0090B2DD /* MPAutotypeDoctorReportViewController.m in Sources */,
|
4CAD8AA622CF397B0090B2DD /* MPAutotypeDoctorReportViewController.m in Sources */,
|
||||||
4C8990F71EE978EB0043B48D /* MPDuplicateEntryOptionsWindowController.m in Sources */,
|
4C8990F71EE978EB0043B48D /* MPDuplicateEntryOptionsWindowController.m in Sources */,
|
||||||
4CA3530B18A53CB800839B0F /* MPKeyMapper.m in Sources */,
|
4CA3530B18A53CB800839B0F /* MPKeyMapper.m in Sources */,
|
||||||
|
4C2057F723CF3E9A00C731EC /* NSRunningApplication+MPAdditions.m in Sources */,
|
||||||
4CE298EB1795FC2A00DF7BDB /* MPEntryContextMenuDelegate.m in Sources */,
|
4CE298EB1795FC2A00DF7BDB /* MPEntryContextMenuDelegate.m in Sources */,
|
||||||
4CCCE8011D75CA48006AA951 /* MPArrayController.m in Sources */,
|
4CCCE8011D75CA48006AA951 /* MPArrayController.m in Sources */,
|
||||||
4CC0D2CE17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m in Sources */,
|
4CC0D2CE17974A47000B4BDA /* MPCustomFieldTableViewDelegate.m in Sources */,
|
||||||
@@ -2134,7 +2124,6 @@
|
|||||||
4C663D411D6D91A900CB6237 /* MPNumberFormatter.m in Sources */,
|
4C663D411D6D91A900CB6237 /* MPNumberFormatter.m in Sources */,
|
||||||
4CD2B9061849424B0051B395 /* MPAutotypeContext.m in Sources */,
|
4CD2B9061849424B0051B395 /* MPAutotypeContext.m in Sources */,
|
||||||
4CFB18E418A17FA20097A34B /* MPUpdatePreferencesController.m in Sources */,
|
4CFB18E418A17FA20097A34B /* MPUpdatePreferencesController.m in Sources */,
|
||||||
4C7B63771C0CB51F00D7038C /* TTTStringTransformers.m in Sources */,
|
|
||||||
4CD4EE131FC7284000EA6EB3 /* MPPickcharsViewController.m in Sources */,
|
4CD4EE131FC7284000EA6EB3 /* MPPickcharsViewController.m in Sources */,
|
||||||
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */,
|
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */,
|
||||||
4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */,
|
4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */,
|
||||||
@@ -2146,7 +2135,6 @@
|
|||||||
4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */,
|
4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */,
|
||||||
4C4B7EEE17A467E1000234C7 /* MPGroupInspectorViewController.m in Sources */,
|
4C4B7EEE17A467E1000234C7 /* MPGroupInspectorViewController.m in Sources */,
|
||||||
4C71BCB72167B79C00B4CBDA /* MPPluginVersionComparator.m in Sources */,
|
4C71BCB72167B79C00B4CBDA /* MPPluginVersionComparator.m in Sources */,
|
||||||
4C7B63721C0CB51F00D7038C /* TTTCryptographyTransformers.m in Sources */,
|
|
||||||
4C4B7EF317A467FC000234C7 /* MPEntryInspectorViewController.m in Sources */,
|
4C4B7EF317A467FC000234C7 /* MPEntryInspectorViewController.m in Sources */,
|
||||||
4C1BDF2B1E4392640012A3F0 /* MPPluginDataViewController.m in Sources */,
|
4C1BDF2B1E4392640012A3F0 /* MPPluginDataViewController.m in Sources */,
|
||||||
4C4B7EF817A4B335000234C7 /* MPUniqueCharactersFormatter.m in Sources */,
|
4C4B7EF817A4B335000234C7 /* MPUniqueCharactersFormatter.m in Sources */,
|
||||||
@@ -2158,6 +2146,7 @@
|
|||||||
4C0728BD17B5B7F7005A7DD9 /* MPPasswordEditWindowController.m in Sources */,
|
4C0728BD17B5B7F7005A7DD9 /* MPPasswordEditWindowController.m in Sources */,
|
||||||
4C0F647B17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m in Sources */,
|
4C0F647B17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m in Sources */,
|
||||||
4C0949591FD6B89B004F2971 /* NSUserNotification+MPAdditions.m in Sources */,
|
4C0949591FD6B89B004F2971 /* NSUserNotification+MPAdditions.m in Sources */,
|
||||||
|
4C2057EE23CDF6F900C731EC /* MPPathCell.m in Sources */,
|
||||||
4C3B42871F935316007B04FD /* MPDayCountFormatter.m in Sources */,
|
4C3B42871F935316007B04FD /* MPDayCountFormatter.m in Sources */,
|
||||||
3C0CDECF21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m in Sources */,
|
3C0CDECF21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m in Sources */,
|
||||||
4C57AE1417BA422B00CA4F34 /* MPSegmentedContextCell.m in Sources */,
|
4C57AE1417BA422B00CA4F34 /* MPSegmentedContextCell.m in Sources */,
|
||||||
@@ -2168,7 +2157,6 @@
|
|||||||
4CE501341BBC47F500FB819D /* MPTagsTokenFieldDelegate.m in Sources */,
|
4CE501341BBC47F500FB819D /* MPTagsTokenFieldDelegate.m in Sources */,
|
||||||
4CC6DB7A17D23719002C6091 /* KPKNode+IconImage.m in Sources */,
|
4CC6DB7A17D23719002C6091 /* KPKNode+IconImage.m in Sources */,
|
||||||
4C15B74618BCA3B1003F8008 /* MPDocument+Search.m in Sources */,
|
4C15B74618BCA3B1003F8008 /* MPDocument+Search.m in Sources */,
|
||||||
4C7B63751C0CB51F00D7038C /* TTTImageTransformers.m in Sources */,
|
|
||||||
4CEED1C617D7BD0E007180F1 /* NSError+Messages.m in Sources */,
|
4CEED1C617D7BD0E007180F1 /* NSError+Messages.m in Sources */,
|
||||||
4C00E33817D8FA3500F37192 /* DDHotKeyCenter.m in Sources */,
|
4C00E33817D8FA3500F37192 /* DDHotKeyCenter.m in Sources */,
|
||||||
4C5EF816218CA03F0003C00E /* MPAutotypeParser.m in Sources */,
|
4C5EF816218CA03F0003C00E /* MPAutotypeParser.m in Sources */,
|
||||||
@@ -2190,6 +2178,7 @@
|
|||||||
A083E27922DF467B0020E0D5 /* es */,
|
A083E27922DF467B0020E0D5 /* es */,
|
||||||
78E1F8B822E3B06700E738AE /* ru */,
|
78E1F8B822E3B06700E738AE /* ru */,
|
||||||
71FF7A23230FEF11002F488F /* it */,
|
71FF7A23230FEF11002F488F /* it */,
|
||||||
|
D364AB1423FC104300AB1D8E /* pl */,
|
||||||
);
|
);
|
||||||
name = PickcharsView.xib;
|
name = PickcharsView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2237,6 +2226,7 @@
|
|||||||
A083E27C22DF467B0020E0D5 /* es */,
|
A083E27C22DF467B0020E0D5 /* es */,
|
||||||
78E1F8BC22E3B12300E738AE /* ru */,
|
78E1F8BC22E3B12300E738AE /* ru */,
|
||||||
71FF7A29230FF0E4002F488F /* it */,
|
71FF7A29230FF0E4002F488F /* it */,
|
||||||
|
D364AB1523FC104300AB1D8E /* pl */,
|
||||||
);
|
);
|
||||||
name = OpenPanelAccessoryView.xib;
|
name = OpenPanelAccessoryView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2252,6 +2242,7 @@
|
|||||||
A083E27D22DF467B0020E0D5 /* es */,
|
A083E27D22DF467B0020E0D5 /* es */,
|
||||||
71FF7A19230FEA24002F488F /* it */,
|
71FF7A19230FEA24002F488F /* it */,
|
||||||
ABAA99A4231519150095D78E /* zh-Hans */,
|
ABAA99A4231519150095D78E /* zh-Hans */,
|
||||||
|
D364AB1623FC104300AB1D8E /* pl */,
|
||||||
);
|
);
|
||||||
name = SavePanelAccessoryView.xib;
|
name = SavePanelAccessoryView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2369,6 +2360,7 @@
|
|||||||
4C4161151F50333C003BC0AF /* es */,
|
4C4161151F50333C003BC0AF /* es */,
|
||||||
FAA9109A1F9A95A500F7CB90 /* pl */,
|
FAA9109A1F9A95A500F7CB90 /* pl */,
|
||||||
6A74B07C2076F4B60049BC29 /* sv-SE */,
|
6A74B07C2076F4B60049BC29 /* sv-SE */,
|
||||||
|
4C9FE47423703DA50096A5EA /* en */,
|
||||||
);
|
);
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2645,6 +2637,7 @@
|
|||||||
A083E28022DF467B0020E0D5 /* es */,
|
A083E28022DF467B0020E0D5 /* es */,
|
||||||
71FF7A1B230FED35002F488F /* it */,
|
71FF7A1B230FED35002F488F /* it */,
|
||||||
ABAA99A623151BE70095D78E /* zh-Hans */,
|
ABAA99A623151BE70095D78E /* zh-Hans */,
|
||||||
|
D364AB1823FC104300AB1D8E /* pl */,
|
||||||
);
|
);
|
||||||
name = PluginRepositoryBrowserView.xib;
|
name = PluginRepositoryBrowserView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2653,10 +2646,12 @@
|
|||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
78E1F8B122E3A5D600E738AE /* Base */,
|
78E1F8B122E3A5D600E738AE /* Base */,
|
||||||
78E1F8B422E3A5DB00E738AE /* ru */,
|
|
||||||
4C1888CF230FBC080054A38F /* de */,
|
4C1888CF230FBC080054A38F /* de */,
|
||||||
71FF7A27230FEF6B002F488F /* it */,
|
71FF7A27230FEF6B002F488F /* it */,
|
||||||
ABE8662F2316617500201125 /* zh-Hans */,
|
ABE8662F2316617500201125 /* zh-Hans */,
|
||||||
|
78C093DB236A18560008577C /* ru */,
|
||||||
|
43B7080F240978E500F68426 /* fr */,
|
||||||
|
D364AB1723FC104300AB1D8E /* pl */,
|
||||||
);
|
);
|
||||||
name = AutotypeDoctorReportViewController.xib;
|
name = AutotypeDoctorReportViewController.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2789,7 +2784,7 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 0.7.10;
|
CURRENT_PROJECT_VERSION = 0.7.12;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
@@ -2844,7 +2839,7 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
CURRENT_PROJECT_VERSION = 0.7.10;
|
CURRENT_PROJECT_VERSION = 0.7.12;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
@@ -2872,7 +2867,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = MacPassAppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = MacPassAppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@@ -2902,7 +2897,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = MacPassAppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = MacPassAppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1030"
|
LastUpgradeVersion = "1130"
|
||||||
version = "2.0">
|
version = "2.0">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,20 +26,8 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
codeCoverageEnabled = "YES"
|
shouldUseLaunchSchemeArgsEnv = "NO"
|
||||||
shouldUseLaunchSchemeArgsEnv = "NO">
|
codeCoverageEnabled = "YES">
|
||||||
<Testables>
|
|
||||||
<TestableReference
|
|
||||||
skipped = "NO">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "4C45FB19178E09ED0010007D"
|
|
||||||
BuildableName = "MacPassTests.xctest"
|
|
||||||
BlueprintName = "MacPassTests"
|
|
||||||
ReferencedContainer = "container:MacPass.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</TestableReference>
|
|
||||||
</Testables>
|
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
@@ -61,8 +49,18 @@
|
|||||||
isEnabled = "YES">
|
isEnabled = "YES">
|
||||||
</EnvironmentVariable>
|
</EnvironmentVariable>
|
||||||
</EnvironmentVariables>
|
</EnvironmentVariables>
|
||||||
<AdditionalOptions>
|
<Testables>
|
||||||
</AdditionalOptions>
|
<TestableReference
|
||||||
|
skipped = "NO">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "4C45FB19178E09ED0010007D"
|
||||||
|
BuildableName = "MacPassTests.xctest"
|
||||||
|
BlueprintName = "MacPassTests"
|
||||||
|
ReferencedContainer = "container:MacPass.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
</Testables>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
@@ -107,8 +105,6 @@
|
|||||||
isEnabled = "NO">
|
isEnabled = "NO">
|
||||||
</EnvironmentVariable>
|
</EnvironmentVariable>
|
||||||
</EnvironmentVariables>
|
</EnvironmentVariables>
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -20,13 +20,13 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="241"/>
|
<rect key="frame" x="0.0" y="0.0" width="480" height="241"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<scrollView wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="38" horizontalPageScroll="10" verticalLineScroll="38" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7cB-re-3ys">
|
<scrollView wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="38" horizontalPageScroll="10" verticalLineScroll="38" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7cB-re-3ys">
|
||||||
<rect key="frame" x="20" y="61" width="440" height="118"/>
|
<rect key="frame" x="20" y="61" width="440" height="120"/>
|
||||||
<clipView key="contentView" id="WSc-o2-GsZ">
|
<clipView key="contentView" id="WSc-o2-GsZ">
|
||||||
<rect key="frame" x="1" y="1" width="438" height="116"/>
|
<rect key="frame" x="1" y="1" width="438" height="118"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="36" viewBased="YES" id="Ih2-lo-t2W">
|
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="36" viewBased="YES" id="Ih2-lo-t2W">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="438" height="116"/>
|
<rect key="frame" x="0.0" y="0.0" width="438" height="118"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -45,12 +45,12 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="vkI-FK-7wg">
|
<tableCellView misplaced="YES" id="vkI-FK-7wg" customClass="MPExtendedTableCellView">
|
||||||
<rect key="frame" x="1" y="1" width="435" height="17"/>
|
<rect key="frame" x="1" y="1" width="435" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Utl-Gl-ETE">
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Utl-Gl-ETE">
|
||||||
<rect key="frame" x="2" y="1" width="14" height="14"/>
|
<rect key="frame" x="2" y="20" width="14" height="14"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="32" id="N48-cx-w8q"/>
|
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="32" id="N48-cx-w8q"/>
|
||||||
<constraint firstAttribute="height" relation="lessThanOrEqual" constant="32" id="mde-14-jf7"/>
|
<constraint firstAttribute="height" relation="lessThanOrEqual" constant="32" id="mde-14-jf7"/>
|
||||||
@@ -58,8 +58,16 @@
|
|||||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="gT4-lt-7Ir"/>
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="gT4-lt-7Ir"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dxk-A7-QSy">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dxk-A7-QSy">
|
||||||
<rect key="frame" x="22" y="0.0" width="413" height="17"/>
|
<rect key="frame" x="22" y="20" width="413" height="16"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" title="Content" id="TN3-3a-LaA">
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" title="Title" id="TN3-3a-LaA">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rHv-KR-Ja6">
|
||||||
|
<rect key="frame" x="22" y="2" width="413" height="16"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" title="Sequence" id="bvJ-2i-eMc">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -67,14 +75,18 @@
|
|||||||
</textField>
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="bottom" secondItem="Dxk-A7-QSy" secondAttribute="bottom" id="0Ds-yc-1wj"/>
|
|
||||||
<constraint firstItem="Dxk-A7-QSy" firstAttribute="top" secondItem="vkI-FK-7wg" secondAttribute="top" id="3KK-oo-Ogk"/>
|
<constraint firstItem="Dxk-A7-QSy" firstAttribute="top" secondItem="vkI-FK-7wg" secondAttribute="top" id="3KK-oo-Ogk"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="rHv-KR-Ja6" secondAttribute="bottom" constant="2" id="Fct-2X-0MX"/>
|
||||||
<constraint firstItem="Dxk-A7-QSy" firstAttribute="leading" secondItem="Utl-Gl-ETE" secondAttribute="trailing" constant="8" symbolic="YES" id="L0l-PB-4Dt"/>
|
<constraint firstItem="Dxk-A7-QSy" firstAttribute="leading" secondItem="Utl-Gl-ETE" secondAttribute="trailing" constant="8" symbolic="YES" id="L0l-PB-4Dt"/>
|
||||||
|
<constraint firstItem="rHv-KR-Ja6" firstAttribute="leading" secondItem="Dxk-A7-QSy" secondAttribute="leading" id="cHl-VR-d3w"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="rHv-KR-Ja6" secondAttribute="trailing" constant="2" id="jqL-Dd-V0M"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="Dxk-A7-QSy" secondAttribute="trailing" constant="2" id="kOy-Jo-rYe"/>
|
<constraint firstAttribute="trailing" secondItem="Dxk-A7-QSy" secondAttribute="trailing" constant="2" id="kOy-Jo-rYe"/>
|
||||||
<constraint firstItem="Utl-Gl-ETE" firstAttribute="leading" secondItem="vkI-FK-7wg" secondAttribute="leading" constant="2" id="rRi-nE-1Z3"/>
|
<constraint firstItem="Utl-Gl-ETE" firstAttribute="leading" secondItem="vkI-FK-7wg" secondAttribute="leading" constant="2" id="rRi-nE-1Z3"/>
|
||||||
<constraint firstItem="Utl-Gl-ETE" firstAttribute="top" secondItem="vkI-FK-7wg" secondAttribute="top" constant="2" id="sJf-FS-87E"/>
|
<constraint firstItem="Utl-Gl-ETE" firstAttribute="top" secondItem="vkI-FK-7wg" secondAttribute="top" constant="2" id="sJf-FS-87E"/>
|
||||||
|
<constraint firstItem="rHv-KR-Ja6" firstAttribute="top" secondItem="Dxk-A7-QSy" secondAttribute="bottom" constant="2" id="uTd-5E-IzI"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="addionalTextField" destination="rHv-KR-Ja6" id="VTf-Dz-qYp"/>
|
||||||
<outlet property="imageView" destination="Utl-Gl-ETE" id="5dQ-R4-kfV"/>
|
<outlet property="imageView" destination="Utl-Gl-ETE" id="5dQ-R4-kfV"/>
|
||||||
<outlet property="textField" destination="Dxk-A7-QSy" id="8uP-9M-aOd"/>
|
<outlet property="textField" destination="Dxk-A7-QSy" id="8uP-9M-aOd"/>
|
||||||
</connections>
|
</connections>
|
||||||
@@ -100,7 +112,7 @@
|
|||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" preferredMaxLayoutWidth="330" translatesAutoresizingMaskIntoConstraints="NO" id="kDw-2l-7gQ">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" preferredMaxLayoutWidth="330" translatesAutoresizingMaskIntoConstraints="NO" id="kDw-2l-7gQ">
|
||||||
<rect key="frame" x="18" y="187" width="444" height="34"/>
|
<rect key="frame" x="18" y="189" width="444" height="32"/>
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="There are multiple matches for the current window. Please select which match should be used." id="gcf-gb-ZsF">
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="There are multiple matches for the current window. Please select which match should be used." id="gcf-gb-ZsF">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -148,7 +160,7 @@ DQ
|
|||||||
<constraint firstItem="7cB-re-3ys" firstAttribute="top" secondItem="kDw-2l-7gQ" secondAttribute="bottom" constant="8" symbolic="YES" id="ss6-Ku-XPY"/>
|
<constraint firstItem="7cB-re-3ys" firstAttribute="top" secondItem="kDw-2l-7gQ" secondAttribute="bottom" constant="8" symbolic="YES" id="ss6-Ku-XPY"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="kDw-2l-7gQ" secondAttribute="trailing" constant="20" symbolic="YES" id="zSz-fH-fVn"/>
|
<constraint firstAttribute="trailing" secondItem="kDw-2l-7gQ" secondAttribute="trailing" constant="20" symbolic="YES" id="zSz-fH-fVn"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="176" y="-39"/>
|
<point key="canvasLocation" x="176" y="-39.5"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="DWu-HI-z3k"/>
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="DWu-HI-z3k"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Pqa-Ff-7cc">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Pqa-Ff-7cc">
|
||||||
<rect key="frame" x="42" y="432" width="80" height="17"/>
|
<rect key="frame" x="42" y="433" width="80" height="16"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Accessibility" id="aIL-8W-63g">
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Accessibility" id="aIL-8W-63g">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" verticalCompressionResistancePriority="751" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hY9-T0-hke">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" verticalCompressionResistancePriority="751" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hY9-T0-hke">
|
||||||
<rect key="frame" x="42" y="368" width="340" height="56"/>
|
<rect key="frame" x="42" y="369" width="340" height="56"/>
|
||||||
<textFieldCell key="cell" controlSize="small" selectable="YES" id="6GI-KJ-Xue">
|
<textFieldCell key="cell" controlSize="small" selectable="YES" id="6GI-KJ-Xue">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<string key="title">MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application.</string>
|
<string key="title">MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application.</string>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="x9d-0h-hyJ">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="x9d-0h-hyJ">
|
||||||
<rect key="frame" x="38" y="320" width="236" height="32"/>
|
<rect key="frame" x="38" y="321" width="236" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Open Accessibilty Preferences…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8m1-vs-pd5">
|
<buttonCell key="cell" type="push" title="Open Accessibilty Preferences…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8m1-vs-pd5">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -54,11 +54,11 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vvZ-Lj-v22">
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vvZ-Lj-v22">
|
||||||
<rect key="frame" x="20" y="282" width="16" height="16"/>
|
<rect key="frame" x="20" y="283" width="16" height="16"/>
|
||||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="kCX-CB-5vQ"/>
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="kCX-CB-5vQ"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" verticalCompressionResistancePriority="751" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6vq-iM-inn">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" verticalCompressionResistancePriority="751" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6vq-iM-inn">
|
||||||
<rect key="frame" x="42" y="175" width="340" height="98"/>
|
<rect key="frame" x="42" y="177" width="340" height="98"/>
|
||||||
<textFieldCell key="cell" controlSize="small" selectable="YES" id="7of-1z-Nfk">
|
<textFieldCell key="cell" controlSize="small" selectable="YES" id="7of-1z-Nfk">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<string key="title">MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will check if it can read every window title of currently visible windows. This test will not read the actual title. The titles aren't stored or processed in any way.</string>
|
<string key="title">MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will check if it can read every window title of currently visible windows. This test will not read the actual title. The titles aren't stored or processed in any way.</string>
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IP0-CP-tlA">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IP0-CP-tlA">
|
||||||
<rect key="frame" x="42" y="281" width="112" height="17"/>
|
<rect key="frame" x="42" y="283" width="112" height="16"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Screen Recording" id="9gr-mz-2I4">
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Screen Recording" id="9gr-mz-2I4">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -75,10 +75,10 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="BHb-cd-Q0r">
|
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="BHb-cd-Q0r">
|
||||||
<rect key="frame" x="20" y="304" width="360" height="5"/>
|
<rect key="frame" x="20" y="305" width="360" height="5"/>
|
||||||
</box>
|
</box>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="d5Z-hD-bpr">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="d5Z-hD-bpr">
|
||||||
<rect key="frame" x="38" y="127" width="177" height="32"/>
|
<rect key="frame" x="38" y="129" width="177" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Request Permissions…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1Nx-Cg-TCn">
|
<buttonCell key="cell" type="push" title="Request Permissions…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1Nx-Cg-TCn">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="336" translatesAutoresizingMaskIntoConstraints="NO" id="cu4-Jq-eaS">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="336" translatesAutoresizingMaskIntoConstraints="NO" id="cu4-Jq-eaS">
|
||||||
<rect key="frame" x="42" y="84" width="340" height="42"/>
|
<rect key="frame" x="42" y="86" width="340" height="42"/>
|
||||||
<textFieldCell key="cell" selectable="YES" id="Mhg-rd-1hK">
|
<textFieldCell key="cell" selectable="YES" id="Mhg-rd-1hK">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<string key="title">To request Screen Recording permissions, MacPass will try to capture a 1 by 1 Pixel sized screenshot of the top left part of your screen. The data is not stored nor processed in any way.</string>
|
<string key="title">To request Screen Recording permissions, MacPass will try to capture a 1 by 1 Pixel sized screenshot of the top left part of your screen. The data is not stored nor processed in any way.</string>
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dek-ho-dPm">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dek-ho-dPm">
|
||||||
<rect key="frame" x="38" y="48" width="271" height="32"/>
|
<rect key="frame" x="38" y="50" width="271" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Open Screen Recording Preferences…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="lgB-Ys-L9R">
|
<buttonCell key="cell" type="push" title="Open Screen Recording Preferences…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="lgB-Ys-L9R">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf200
|
{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf600
|
||||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;\f2\fnil\fcharset0 SFProText-Regular;
|
{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;\f2\fnil\fcharset0 SFProText-Regular;
|
||||||
}
|
}
|
||||||
{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red9\green79\blue209;\red69\green60\blue204;
|
{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red9\green79\blue209;\red69\green60\blue204;
|
||||||
@@ -22,7 +22,7 @@ License:\
|
|||||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
|
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
|
||||||
|
|
||||||
\f1\b0 \cf2 MacPass KeePass compatible client for OS X\
|
\f1\b0 \cf2 MacPass KeePass compatible client for OS X\
|
||||||
Copyright (c) 2012-2019 Michael Starke, HicknHack Software GmbH\
|
Copyright (c) 2012-2020 Michael Starke, HicknHack Software GmbH\
|
||||||
\
|
\
|
||||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by\
|
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.\
|
the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="13F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6254"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPDatePickingViewController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPDatePickingViewController">
|
||||||
@@ -15,24 +16,23 @@
|
|||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView id="1">
|
<customView id="1">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="316" height="259"/>
|
<rect key="frame" x="0.0" y="0.0" width="180" height="134"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<datePicker horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3">
|
<datePicker horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3">
|
||||||
<rect key="frame" x="20" y="91" width="277" height="148"/>
|
<rect key="frame" x="20" y="91" width="143" height="27"/>
|
||||||
<datePickerCell key="cell" borderStyle="bezel" alignment="left" datePickerStyle="clockAndCalendar" id="4">
|
<datePickerCell key="cell" borderStyle="bezel" alignment="left" id="4">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<calendarDate key="date" timeIntervalSinceReferenceDate="-595929600" calendarFormat="%Y-%m-%d %H:%M:%S %z">
|
<date key="date" timeIntervalSinceReferenceDate="-595929600">
|
||||||
<!--1982-02-12 16:00:00 +0000-->
|
<!--1982-02-12 16:00:00 +0000-->
|
||||||
<timeZone key="timeZone" name="US/Pacific"/>
|
</date>
|
||||||
</calendarDate>
|
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="textColor" name="controlTextColor" 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"/>
|
<datePickerElements key="datePickerElements" year="YES" month="YES" day="YES" hour="YES" minute="YES"/>
|
||||||
</datePickerCell>
|
</datePickerCell>
|
||||||
</datePicker>
|
</datePicker>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
||||||
<rect key="frame" x="18" y="47" width="281" height="26"/>
|
<rect key="frame" x="18" y="47" width="145" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="16">
|
<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"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="25">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="25">
|
||||||
<rect key="frame" x="226" y="18" width="70" height="25"/>
|
<rect key="frame" x="90" y="19" width="70" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" title="Use Date" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26">
|
<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"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="29">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="29">
|
||||||
<rect key="frame" x="162" y="18" width="56" height="25"/>
|
<rect key="frame" x="26" y="19" width="56" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="30">
|
<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"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -77,6 +77,7 @@
|
|||||||
<constraint firstItem="15" firstAttribute="top" secondItem="3" secondAttribute="bottom" constant="20" symbolic="YES" id="qKB-vi-OAw"/>
|
<constraint firstItem="15" firstAttribute="top" secondItem="3" secondAttribute="bottom" constant="20" symbolic="YES" id="qKB-vi-OAw"/>
|
||||||
<constraint firstItem="25" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" symbolic="YES" id="sxX-fk-xaJ"/>
|
<constraint firstItem="25" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" symbolic="YES" id="sxX-fk-xaJ"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
<point key="canvasLocation" x="-89" y="77"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
<outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/>
|
<outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/>
|
||||||
<outlet property="idleTimeOutPopup" destination="584" id="809"/>
|
<outlet property="idleTimeOutPopup" destination="584" id="809"/>
|
||||||
<outlet property="lockOnLogoutCheckButton" destination="5SP-Vi-1sn" id="yaI-LH-R5A"/>
|
<outlet property="lockOnLogoutCheckButton" destination="5SP-Vi-1sn" id="yaI-LH-R5A"/>
|
||||||
|
<outlet property="lockOnScreenSleepCheckButton" destination="nRe-7S-HwK" id="0IB-5B-pfw"/>
|
||||||
<outlet property="lockOnSleepCheckButton" destination="630" id="810"/>
|
<outlet property="lockOnSleepCheckButton" destination="630" id="810"/>
|
||||||
<outlet property="preventUniversalClipboardSupportCheckButton" destination="nqZ-rB-mFS" id="sbx-rl-reT"/>
|
<outlet property="preventUniversalClipboardSupportCheckButton" destination="nqZ-rB-mFS" id="sbx-rl-reT"/>
|
||||||
<outlet property="rememberKeyFileCheckButton" destination="bSt-Wf-FNZ" id="aQm-EA-yAN"/>
|
<outlet property="rememberKeyFileCheckButton" destination="bSt-Wf-FNZ" id="aQm-EA-yAN"/>
|
||||||
@@ -24,16 +25,16 @@
|
|||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="411" height="524"/>
|
<rect key="frame" x="0.0" y="0.0" width="411" height="547"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Security" translatesAutoresizingMaskIntoConstraints="NO" id="465">
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Security" translatesAutoresizingMaskIntoConstraints="NO" id="465">
|
||||||
<rect key="frame" x="17" y="16" width="377" height="357"/>
|
<rect key="frame" x="17" y="16" width="377" height="381"/>
|
||||||
<view key="contentView" id="mNh-3L-Z6E">
|
<view key="contentView" id="mNh-3L-Z6E">
|
||||||
<rect key="frame" x="3" y="3" width="371" height="339"/>
|
<rect key="frame" x="3" y="3" width="371" height="363"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="431">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="431">
|
||||||
<rect key="frame" x="14" y="311" width="120" height="17"/>
|
<rect key="frame" x="14" y="335" width="120" height="17"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="17" id="803"/>
|
<constraint firstAttribute="height" constant="17" id="803"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -44,10 +45,10 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="419">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="419">
|
||||||
<rect key="frame" x="138" y="308" width="143" height="21"/>
|
<rect key="frame" x="138" y="332" width="143" height="21"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="Never" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="429" id="420">
|
<popUpButtonCell key="cell" type="push" title="Never" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="429" id="420">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" title="ClipboardClearInterval" id="421">
|
<menu key="menu" title="ClipboardClearInterval" id="421">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Never" state="on" id="429">
|
<menuItem title="Never" state="on" id="429">
|
||||||
@@ -62,7 +63,7 @@
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="447">
|
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="447">
|
||||||
<rect key="frame" x="29" y="287" width="164" height="18"/>
|
<rect key="frame" x="29" y="311" width="164" height="18"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="14" id="773"/>
|
<constraint firstAttribute="height" constant="14" id="773"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -72,10 +73,10 @@
|
|||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="584">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="584">
|
||||||
<rect key="frame" x="111" y="168" width="125" height="25"/>
|
<rect key="frame" x="111" y="192" width="125" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="585">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="585">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" title="LockTimes" id="586">
|
<menu key="menu" title="LockTimes" id="586">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Never" id="804"/>
|
<menuItem title="Never" id="804"/>
|
||||||
@@ -89,14 +90,14 @@
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="630">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="630">
|
||||||
<rect key="frame" x="29" y="149" width="119" height="18"/>
|
<rect key="frame" x="29" y="173" width="119" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Lock after sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="631">
|
<buttonCell key="cell" type="check" title="Lock after sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="631">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="805">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="805">
|
||||||
<rect key="frame" x="14" y="173" width="93" height="17"/>
|
<rect key="frame" x="14" y="197" width="93" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="806">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="806">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -130,21 +131,21 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="5SP-Vi-1sn">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="5SP-Vi-1sn">
|
||||||
<rect key="frame" x="29" y="129" width="129" height="18"/>
|
<rect key="frame" x="29" y="151" width="129" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Lock after log out" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Dzn-9R-JjE">
|
<buttonCell key="cell" type="check" title="Lock after log out" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Dzn-9R-JjE">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nqZ-rB-mFS">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nqZ-rB-mFS">
|
||||||
<rect key="frame" x="14" y="262" width="242" height="18"/>
|
<rect key="frame" x="14" y="286" width="242" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Prevent Universal Clipboard support" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fNy-mS-phi">
|
<buttonCell key="cell" type="check" title="Prevent Universal Clipboard support" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fNy-mS-phi">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hy4-RL-dAa">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hy4-RL-dAa">
|
||||||
<rect key="frame" x="18" y="200" width="335" height="56"/>
|
<rect key="frame" x="18" y="224" width="335" height="56"/>
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="JGX-Tp-KJk">
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="JGX-Tp-KJk">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<string key="title">Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually.</string>
|
<string key="title">Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually.</string>
|
||||||
@@ -152,20 +153,30 @@
|
|||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nRe-7S-HwK">
|
||||||
|
<rect key="frame" x="29" y="129" width="164" height="18"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Lock after screen sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="l3t-og-mJd">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="5cV-xX-SUU" firstAttribute="leading" secondItem="mNh-3L-Z6E" secondAttribute="leading" constant="20" symbolic="YES" id="1jw-nb-bAB"/>
|
<constraint firstItem="5cV-xX-SUU" firstAttribute="leading" secondItem="mNh-3L-Z6E" secondAttribute="leading" constant="20" symbolic="YES" id="1jw-nb-bAB"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="630" secondAttribute="trailing" constant="20" symbolic="YES" id="7cd-1e-eRD"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="630" secondAttribute="trailing" constant="20" symbolic="YES" id="7cd-1e-eRD"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="nqZ-rB-mFS" secondAttribute="trailing" constant="20" symbolic="YES" id="CL9-fA-GTJ"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="nqZ-rB-mFS" secondAttribute="trailing" constant="20" symbolic="YES" id="CL9-fA-GTJ"/>
|
||||||
|
<constraint firstItem="bSt-Wf-FNZ" firstAttribute="top" secondItem="nRe-7S-HwK" secondAttribute="bottom" constant="11" id="MkJ-O0-qYd"/>
|
||||||
|
<constraint firstItem="nRe-7S-HwK" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Mrg-k2-soG"/>
|
||||||
<constraint firstItem="584" firstAttribute="top" secondItem="hy4-RL-dAa" secondAttribute="bottom" constant="8" symbolic="YES" id="SV7-PD-nId"/>
|
<constraint firstItem="584" firstAttribute="top" secondItem="hy4-RL-dAa" secondAttribute="bottom" constant="8" symbolic="YES" id="SV7-PD-nId"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bSt-Wf-FNZ" secondAttribute="trailing" constant="20" symbolic="YES" id="VQY-eq-fCM"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bSt-Wf-FNZ" secondAttribute="trailing" constant="20" symbolic="YES" id="VQY-eq-fCM"/>
|
||||||
<constraint firstItem="bSt-Wf-FNZ" firstAttribute="top" secondItem="5SP-Vi-1sn" secondAttribute="bottom" constant="11" id="WUG-Uf-FCO"/>
|
<constraint firstItem="nRe-7S-HwK" firstAttribute="top" secondItem="5SP-Vi-1sn" secondAttribute="bottom" constant="8" id="YZv-Dp-CrZ"/>
|
||||||
<constraint firstItem="5SP-Vi-1sn" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Ylr-aA-jaD"/>
|
<constraint firstItem="5SP-Vi-1sn" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Ylr-aA-jaD"/>
|
||||||
<constraint firstItem="hy4-RL-dAa" firstAttribute="top" secondItem="nqZ-rB-mFS" secondAttribute="bottom" constant="8" symbolic="YES" id="a3i-tc-gUU"/>
|
<constraint firstItem="hy4-RL-dAa" firstAttribute="top" secondItem="nqZ-rB-mFS" secondAttribute="bottom" constant="8" symbolic="YES" id="a3i-tc-gUU"/>
|
||||||
<constraint firstItem="5SP-Vi-1sn" firstAttribute="top" secondItem="630" secondAttribute="bottom" constant="6" symbolic="YES" id="acg-vp-LeB"/>
|
<constraint firstItem="5SP-Vi-1sn" firstAttribute="top" secondItem="630" secondAttribute="bottom" constant="8" id="acg-vp-LeB"/>
|
||||||
<constraint firstItem="584" firstAttribute="leading" secondItem="805" secondAttribute="trailing" constant="8" symbolic="YES" id="aoz-sS-O0n"/>
|
<constraint firstItem="584" firstAttribute="leading" secondItem="805" secondAttribute="trailing" constant="8" symbolic="YES" id="aoz-sS-O0n"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="447" secondAttribute="trailing" constant="20" symbolic="YES" id="i8H-ad-IKb"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="447" secondAttribute="trailing" constant="20" symbolic="YES" id="i8H-ad-IKb"/>
|
||||||
<constraint firstItem="419" firstAttribute="leading" secondItem="431" secondAttribute="trailing" constant="8" symbolic="YES" id="pN3-pB-Z5I"/>
|
<constraint firstItem="419" firstAttribute="leading" secondItem="431" secondAttribute="trailing" constant="8" symbolic="YES" id="pN3-pB-Z5I"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="nRe-7S-HwK" secondAttribute="trailing" constant="20" symbolic="YES" id="pgB-km-W16"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5SP-Vi-1sn" secondAttribute="trailing" constant="20" symbolic="YES" id="q0v-Wo-mHx"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5SP-Vi-1sn" secondAttribute="trailing" constant="20" symbolic="YES" id="q0v-Wo-mHx"/>
|
||||||
<constraint firstItem="nqZ-rB-mFS" firstAttribute="top" secondItem="447" secondAttribute="bottom" constant="11" id="qLm-ih-A04"/>
|
<constraint firstItem="nqZ-rB-mFS" firstAttribute="top" secondItem="447" secondAttribute="bottom" constant="11" id="qLm-ih-A04"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="5cV-xX-SUU" secondAttribute="trailing" constant="20" symbolic="YES" id="qY0-io-RZ0"/>
|
<constraint firstAttribute="trailing" secondItem="5cV-xX-SUU" secondAttribute="trailing" constant="20" symbolic="YES" id="qY0-io-RZ0"/>
|
||||||
@@ -197,27 +208,27 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</box>
|
</box>
|
||||||
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888">
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888">
|
||||||
<rect key="frame" x="17" y="375" width="377" height="129"/>
|
<rect key="frame" x="17" y="399" width="377" height="128"/>
|
||||||
<view key="contentView" id="cpg-tt-SHE">
|
<view key="contentView" id="cpg-tt-SHE">
|
||||||
<rect key="frame" x="3" y="3" width="371" height="111"/>
|
<rect key="frame" x="3" y="3" width="371" height="110"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="252" translatesAutoresizingMaskIntoConstraints="NO" id="530">
|
<button verticalHuggingPriority="252" translatesAutoresizingMaskIntoConstraints="NO" id="530">
|
||||||
<rect key="frame" x="14" y="85" width="234" height="18"/>
|
<rect key="frame" x="14" y="84" width="234" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Reopen last Database after Launch" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="531">
|
<buttonCell key="cell" type="check" title="Reopen last Database after Launch" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="531">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lz3-4U-UMI">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lz3-4U-UMI">
|
||||||
<rect key="frame" x="14" y="65" width="123" height="18"/>
|
<rect key="frame" x="14" y="64" width="123" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Enable Autosave" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="wG7-bi-2fi">
|
<buttonCell key="cell" type="check" title="Enable Autosave" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="wG7-bi-2fi">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3Bo-Ml-1KB">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3Bo-Ml-1KB">
|
||||||
<rect key="frame" x="18" y="45" width="335" height="14"/>
|
<rect key="frame" x="18" y="44" width="335" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" title="Close and open all documents for changes to take effect" id="ya5-ps-c4W">
|
<textFieldCell key="cell" controlSize="small" title="Close and open all documents for changes to take effect" id="ya5-ps-c4W">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -225,7 +236,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h3w-Ms-ohK">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h3w-Ms-ohK">
|
||||||
<rect key="frame" x="14" y="20" width="93" height="17"/>
|
<rect key="frame" x="14" y="20" width="93" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="If file changes:" id="QrK-hM-Xt1">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="If file changes:" id="QrK-hM-Xt1">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -233,10 +244,10 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2">
|
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2">
|
||||||
<rect key="frame" x="111" y="14" width="38" height="25"/>
|
<rect key="frame" x="111" y="13" width="38" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1R2-5t-LWk">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1R2-5t-LWk">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" id="DQY-17-yKP"/>
|
<menu key="menu" id="DQY-17-yKP"/>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
@@ -273,7 +284,7 @@
|
|||||||
<constraint firstAttribute="bottom" secondItem="465" secondAttribute="bottom" constant="20" symbolic="YES" id="uwq-az-XwJ"/>
|
<constraint firstAttribute="bottom" secondItem="465" secondAttribute="bottom" constant="20" symbolic="YES" id="uwq-az-XwJ"/>
|
||||||
<constraint firstItem="465" firstAttribute="top" secondItem="cpg-tt-SHE" secondAttribute="bottom" constant="5" id="wyH-HB-i2U"/>
|
<constraint firstItem="465" firstAttribute="top" secondItem="cpg-tt-SHE" secondAttribute="bottom" constant="5" id="wyH-HB-i2U"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-136.5" y="-93"/>
|
<point key="canvasLocation" x="-458" y="-295"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -151,9 +151,9 @@
|
|||||||
<action selector="mergeWithOther:" target="-1" id="OyM-CZ-TDD"/>
|
<action selector="mergeWithOther:" target="-1" id="OyM-CZ-TDD"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Import" id="aTb-sW-nUd">
|
<menuItem title="Import From" id="aTb-sW-nUd">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="Import" id="4q9-u1-pcm">
|
<menu key="submenu" title="Import From" id="4q9-u1-pcm">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="XML…" id="rW0-r1-QYL">
|
<menuItem title="XML…" id="rW0-r1-QYL">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
@@ -167,16 +167,20 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</menu>
|
</menu>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Export" id="tz9-yK-pOf">
|
<menuItem title="Export To" id="tz9-yK-pOf">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="Export" id="p8h-Fg-h1O">
|
<menu key="submenu" title="Export To" id="p8h-Fg-h1O">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="XML…" keyEquivalent="E" id="1259">
|
<menuItem title="XML…" id="1259">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="exportAsXML:" target="-1" id="NCG-gr-YI5"/>
|
<action selector="exportAsXML:" target="-1" id="NCG-gr-YI5"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
</items>
|
</items>
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="494" id="ALY-P3-PzW"/>
|
||||||
|
</connections>
|
||||||
</menu>
|
</menu>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="74">
|
<menuItem isSeparatorItem="YES" id="74">
|
||||||
@@ -357,6 +361,7 @@ CA
|
|||||||
</menu>
|
</menu>
|
||||||
<customObject id="494" customClass="MPAppDelegate">
|
<customObject id="494" customClass="MPAppDelegate">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="exportMenu" destination="p8h-Fg-h1O" id="elV-BC-ZZt"/>
|
||||||
<outlet property="fileNewMenuItem" destination="82" id="BUX-dy-HS2"/>
|
<outlet property="fileNewMenuItem" destination="82" id="BUX-dy-HS2"/>
|
||||||
<outlet property="fixAutotypeMenuItem" destination="nx7-Vf-LiD" id="5n1-bG-JxJ"/>
|
<outlet property="fixAutotypeMenuItem" destination="nx7-Vf-LiD" id="5n1-bG-JxJ"/>
|
||||||
<outlet property="importMenu" destination="4q9-u1-pcm" id="0XM-fS-Vyy"/>
|
<outlet property="importMenu" destination="4q9-u1-pcm" id="0XM-fS-Vyy"/>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -24,19 +24,19 @@
|
|||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="196" y="240" width="403" height="219"/>
|
<rect key="contentRect" x="196" y="240" width="403" height="219"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||||
<view key="contentView" id="2">
|
<view key="contentView" id="2">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="403" height="219"/>
|
<rect key="frame" x="0.0" y="0.0" width="403" height="210"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="MPPathControl">
|
<pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="MPPathControl">
|
||||||
<rect key="frame" x="105" y="87" width="242" height="26"/>
|
<rect key="frame" x="105" y="87" width="242" height="25"/>
|
||||||
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="23">
|
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="23" customClass="MPPathCell">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</pathCell>
|
</pathCell>
|
||||||
</pathControl>
|
</pathControl>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5">
|
||||||
<rect key="frame" x="53" y="91" width="49" height="17"/>
|
<rect key="frame" x="53" y="91" width="49" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile:" id="22">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile:" id="22">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
|
||||||
<rect key="frame" x="108" y="59" width="236" height="25"/>
|
<rect key="frame" x="108" y="60" width="236" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" title="Generate Keyfile" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="21">
|
<buttonCell key="cell" type="roundTextured" title="Generate Keyfile" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="21">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7">
|
||||||
<rect key="frame" x="352" y="153" width="31" height="25"/>
|
<rect key="frame" x="352" y="145" width="31" height="23"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="31" id="59"/>
|
<constraint firstAttribute="width" constant="31" id="59"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
|
||||||
<rect key="frame" x="352" y="88" width="31" height="25"/>
|
<rect key="frame" x="352" y="89" width="31" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="19">
|
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="19">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="HNHUISecureTextField">
|
<secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="HNHUISecureTextField">
|
||||||
<rect key="frame" x="108" y="153" width="236" height="24"/>
|
<rect key="frame" x="108" y="148" width="236" height="20"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="Gin-yR-DMk"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="Gin-yR-DMk"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
</secureTextFieldCell>
|
</secureTextFieldCell>
|
||||||
</secureTextField>
|
</secureTextField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="10">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="10">
|
||||||
<rect key="frame" x="51" y="123" width="51" height="17"/>
|
<rect key="frame" x="51" y="121" width="51" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Repeat:" id="16">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Repeat:" id="16">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="11" customClass="HNHUISecureTextField">
|
<secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="11" customClass="HNHUISecureTextField">
|
||||||
<rect key="frame" x="108" y="119" width="236" height="24"/>
|
<rect key="frame" x="108" y="118" width="236" height="20"/>
|
||||||
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Repeat Password" drawsBackground="YES" usesSingleLineMode="YES" id="15">
|
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Repeat Password" drawsBackground="YES" usesSingleLineMode="YES" id="15">
|
||||||
<font key="font" size="13" name="Menlo-Regular"/>
|
<font key="font" size="13" name="Menlo-Regular"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
</secureTextFieldCell>
|
</secureTextFieldCell>
|
||||||
</secureTextField>
|
</secureTextField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="12">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="12">
|
||||||
<rect key="frame" x="161" y="185" width="131" height="14"/>
|
<rect key="frame" x="161" y="176" width="131" height="14"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Mismatching Passwords" id="14">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Mismatching Passwords" id="14">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
@@ -138,7 +138,7 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button horizontalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="yKc-I9-uzv">
|
<button horizontalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="yKc-I9-uzv">
|
||||||
<rect key="frame" x="18" y="156" width="84" height="18"/>
|
<rect key="frame" x="18" y="150" width="84" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Password:" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="OQz-DA-SoY">
|
<buttonCell key="cell" type="check" title="Password:" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="OQz-DA-SoY">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
<connections>
|
<connections>
|
||||||
<outlet property="cancelButton" destination="2pb-ZG-spA" id="YrR-Yi-dnQ"/>
|
<outlet property="cancelButton" destination="2pb-ZG-spA" id="YrR-Yi-dnQ"/>
|
||||||
<outlet property="enablePasswordCheckBox" destination="d8O-Ha-rrS" id="2AI-e9-sph"/>
|
<outlet property="enablePasswordCheckBox" destination="d8O-Ha-rrS" id="2AI-e9-sph"/>
|
||||||
|
<outlet property="keyFileWarningTextField" destination="txI-yI-5nE" id="WhF-O8-fsZ"/>
|
||||||
<outlet property="keyPathControl" destination="241" id="261"/>
|
<outlet property="keyPathControl" destination="241" id="261"/>
|
||||||
<outlet property="messageImageView" destination="262" id="726-wK-c2h"/>
|
<outlet property="messageImageView" destination="262" id="726-wK-c2h"/>
|
||||||
<outlet property="messageInfoTextField" destination="268" id="ahE-sq-QzR"/>
|
<outlet property="messageInfoTextField" destination="268" id="ahE-sq-QzR"/>
|
||||||
@@ -22,10 +23,10 @@
|
|||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
<customView horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="508" height="392"/>
|
<rect key="frame" x="0.0" y="0.0" width="508" height="526"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2">
|
||||||
<rect key="frame" x="310" y="105" width="83" height="32"/>
|
<rect key="frame" x="310" y="168" width="83" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Unlock" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3">
|
<buttonCell key="cell" type="push" title="Unlock" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -38,7 +39,7 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="17">
|
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="17">
|
||||||
<rect key="frame" x="108" y="157" width="45" height="17"/>
|
<rect key="frame" x="108" y="226" width="45" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile" id="18">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Keyfile" id="18">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -46,13 +47,13 @@ DQ
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="241" customClass="MPPathControl">
|
<pathControl verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="241" customClass="MPPathControl">
|
||||||
<rect key="frame" x="156" y="153" width="197" height="25"/>
|
<rect key="frame" x="156" y="222" width="197" height="25"/>
|
||||||
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="242">
|
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" pathStyle="popUp" id="242" customClass="MPPathCell">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</pathCell>
|
</pathCell>
|
||||||
</pathControl>
|
</pathControl>
|
||||||
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="262">
|
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="262">
|
||||||
<rect key="frame" x="230" y="241" width="48" height="48"/>
|
<rect key="frame" x="230" y="305" width="48" height="48"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="48" id="273"/>
|
<constraint firstAttribute="height" constant="48" id="273"/>
|
||||||
<constraint firstAttribute="width" constant="48" id="456"/>
|
<constraint firstAttribute="width" constant="48" id="456"/>
|
||||||
@@ -60,7 +61,7 @@ DQ
|
|||||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="02_MessageBoxWarningTemplate" id="263"/>
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="02_MessageBoxWarningTemplate" id="263"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="268">
|
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="268">
|
||||||
<rect key="frame" x="199" y="216" width="110" height="17"/>
|
<rect key="frame" x="199" y="281" width="110" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Wrong password!" id="269">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Wrong password!" id="269">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -68,7 +69,7 @@ DQ
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<secureTextField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="338" customClass="HNHUISecureTextField">
|
<secureTextField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="338" customClass="HNHUISecureTextField">
|
||||||
<rect key="frame" x="159" y="184" width="191" height="24"/>
|
<rect key="frame" x="159" y="253" width="191" height="20"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="191" id="389"/>
|
<constraint firstAttribute="width" constant="191" id="389"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -85,14 +86,14 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</secureTextField>
|
</secureTextField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="408">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="408">
|
||||||
<rect key="frame" x="358" y="185" width="29" height="23"/>
|
<rect key="frame" x="358" y="250" width="29" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="409">
|
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="409">
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="486">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="486">
|
||||||
<rect key="frame" x="358" y="152" width="29" height="23"/>
|
<rect key="frame" x="358" y="220" width="29" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="487">
|
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="487">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -102,14 +103,14 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="d8O-Ha-rrS">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="d8O-Ha-rrS">
|
||||||
<rect key="frame" x="72" y="187" width="81" height="18"/>
|
<rect key="frame" x="72" y="254" width="81" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Password" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="IU9-5u-jn9">
|
<buttonCell key="cell" type="check" title="Password" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="IU9-5u-jn9">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2pb-ZG-spA">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2pb-ZG-spA">
|
||||||
<rect key="frame" x="228" y="105" width="82" height="32"/>
|
<rect key="frame" x="228" y="168" width="82" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="erj-mR-UyO">
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="erj-mR-UyO">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -121,6 +122,14 @@ Gw
|
|||||||
<action selector="_submit:" target="-2" id="aVF-1d-1Hq"/>
|
<action selector="_submit:" target="-2" id="aVF-1d-1Hq"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
|
<textField hidden="YES" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="txI-yI-5nE">
|
||||||
|
<rect key="frame" x="157" y="204" width="195" height="14"/>
|
||||||
|
<textFieldCell key="cell" selectable="YES" title="key_file_warnig" id="f6J-5f-ZvP">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="2" secondAttribute="bottom" constant="20" symbolic="YES" id="122"/>
|
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="2" secondAttribute="bottom" constant="20" symbolic="YES" id="122"/>
|
||||||
@@ -144,15 +153,18 @@ Gw
|
|||||||
<constraint firstItem="2" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="496"/>
|
<constraint firstItem="2" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="496"/>
|
||||||
<constraint firstItem="408" firstAttribute="leading" secondItem="338" secondAttribute="trailing" constant="8" symbolic="YES" id="7qE-8F-QgB"/>
|
<constraint firstItem="408" firstAttribute="leading" secondItem="338" secondAttribute="trailing" constant="8" symbolic="YES" id="7qE-8F-QgB"/>
|
||||||
<constraint firstItem="2pb-ZG-spA" firstAttribute="baseline" secondItem="2" secondAttribute="baseline" id="9nK-MH-Ozs"/>
|
<constraint firstItem="2pb-ZG-spA" firstAttribute="baseline" secondItem="2" secondAttribute="baseline" id="9nK-MH-Ozs"/>
|
||||||
|
<constraint firstItem="txI-yI-5nE" firstAttribute="trailing" secondItem="241" secondAttribute="trailing" id="AVL-HO-SMq"/>
|
||||||
<constraint firstItem="17" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="EOa-K4-v7J"/>
|
<constraint firstItem="17" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="EOa-K4-v7J"/>
|
||||||
<constraint firstItem="338" firstAttribute="leading" secondItem="d8O-Ha-rrS" secondAttribute="trailing" constant="8" symbolic="YES" id="KYs-Ia-SVl"/>
|
<constraint firstItem="338" firstAttribute="leading" secondItem="d8O-Ha-rrS" secondAttribute="trailing" constant="8" symbolic="YES" id="KYs-Ia-SVl"/>
|
||||||
<constraint firstItem="2pb-ZG-spA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="SUS-76-os4"/>
|
<constraint firstItem="2pb-ZG-spA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="SUS-76-os4"/>
|
||||||
|
<constraint firstItem="2" firstAttribute="top" secondItem="txI-yI-5nE" secondAttribute="bottom" constant="8" symbolic="YES" id="jJs-hc-O2O"/>
|
||||||
<constraint firstItem="d8O-Ha-rrS" firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="kgB-jV-OGy"/>
|
<constraint firstItem="d8O-Ha-rrS" firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="kgB-jV-OGy"/>
|
||||||
<constraint firstItem="2" firstAttribute="top" secondItem="486" secondAttribute="bottom" constant="20" symbolic="YES" id="v1K-wm-EeB"/>
|
<constraint firstItem="txI-yI-5nE" firstAttribute="top" secondItem="241" secondAttribute="bottom" constant="8" symbolic="YES" id="lfg-eB-T2O"/>
|
||||||
|
<constraint firstItem="txI-yI-5nE" firstAttribute="leading" secondItem="241" secondAttribute="leading" id="nGY-6Q-Vwy"/>
|
||||||
<constraint firstItem="d8O-Ha-rrS" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="vxq-YP-UhR"/>
|
<constraint firstItem="d8O-Ha-rrS" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="vxq-YP-UhR"/>
|
||||||
<constraint firstItem="2" firstAttribute="leading" secondItem="2pb-ZG-spA" secondAttribute="trailing" constant="12" id="ytJ-5Z-5rT"/>
|
<constraint firstItem="2" firstAttribute="leading" secondItem="2pb-ZG-spA" secondAttribute="trailing" constant="12" id="ytJ-5Z-5rT"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="147" y="-80"/>
|
<point key="canvasLocation" x="-127" y="-46"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<rect key="frame" x="20" y="20" width="369" height="260"/>
|
<rect key="frame" x="20" y="20" width="369" height="260"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qPL-FR-ky7">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qPL-FR-ky7">
|
||||||
<rect key="frame" x="18" y="223" width="333" height="17"/>
|
<rect key="frame" x="18" y="224" width="333" height="16"/>
|
||||||
<textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" title="Plugin Settings Info" id="OOr-SW-jZb">
|
<textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" title="Plugin Settings Info" id="OOr-SW-jZb">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
<rect key="frame" x="1" y="1" width="148" height="298"/>
|
<rect key="frame" x="1" y="1" width="148" height="298"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="35" rowSizeStyle="automatic" viewBased="YES" id="Ocu-C0-03d">
|
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="35" usesAutomaticRowHeights="YES" viewBased="YES" id="Ocu-C0-03d">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="148" height="298"/>
|
<rect key="frame" x="0.0" y="0.0" width="148" height="298"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
@@ -100,12 +100,12 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="vVt-P3-yLp" customClass="MPPluginTabelCellView">
|
<tableCellView misplaced="YES" id="vVt-P3-yLp" customClass="MPExtendedTableCellView">
|
||||||
<rect key="frame" x="1" y="1" width="145" height="35"/>
|
<rect key="frame" x="1" y="1" width="145" height="35"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="q1P-PD-0LW">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="q1P-PD-0LW">
|
||||||
<rect key="frame" x="0.0" y="18" width="145" height="17"/>
|
<rect key="frame" x="0.0" y="18" width="145" height="16"/>
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Table View Cell" id="fug-79-n9g">
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Table View Cell" id="fug-79-n9g">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B9Q-hq-K4N">
|
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B9Q-hq-K4N">
|
||||||
<rect key="frame" x="20" y="19" width="71" height="23"/>
|
<rect key="frame" x="19.5" y="19" width="71" height="23"/>
|
||||||
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="momentary" id="cj3-R6-g1E">
|
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="momentary" id="cj3-R6-g1E">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<segments>
|
<segments>
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</segmentedControl>
|
</segmentedControl>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SNe-cc-CZs">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SNe-cc-CZs">
|
||||||
<rect key="frame" x="413" y="19" width="174" height="23"/>
|
<rect key="frame" x="413.5" y="19" width="174" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" title="Browse Available Plugins…" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="sqO-8H-n1y">
|
<buttonCell key="cell" type="roundTextured" title="Browse Available Plugins…" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="sqO-8H-n1y">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="K0z-aD-K2P">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="K0z-aD-K2P">
|
||||||
<rect key="frame" x="18" y="466" width="243" height="18"/>
|
<rect key="frame" x="18" y="466" width="243" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Download current plugin information" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="uHR-uL-Ddm">
|
<buttonCell key="cell" type="check" title="Download current Plugin information" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="uHR-uL-Ddm">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -18,11 +18,11 @@
|
|||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView id="c22-O7-iKe">
|
<customView id="c22-O7-iKe">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="205" height="215"/>
|
<rect key="frame" x="0.0" y="0.0" width="207" height="213"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IZP-Gd-jdU">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IZP-Gd-jdU">
|
||||||
<rect key="frame" x="13" y="152" width="82" height="25"/>
|
<rect key="frame" x="13" y="151" width="83" height="23"/>
|
||||||
<popUpButtonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KPf-xE-gde">
|
<popUpButtonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KPf-xE-gde">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IFf-vC-3vk" customClass="HNHUITextField">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IFf-vC-3vk" customClass="HNHUITextField">
|
||||||
<rect key="frame" x="13" y="102" width="172" height="22"/>
|
<rect key="frame" x="13" y="101" width="174" height="21"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="Seu-01-P53"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="Seu-01-P53"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -48,14 +48,14 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T2o-aJ-JmD">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T2o-aJ-JmD">
|
||||||
<rect key="frame" x="147" y="18" width="38" height="25"/>
|
<rect key="frame" x="149" y="19" width="38" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" title="Use" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Kqx-qm-nMG">
|
<buttonCell key="cell" type="roundTextured" title="Use" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Kqx-qm-nMG">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VR5-Rx-ueN">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VR5-Rx-ueN">
|
||||||
<rect key="frame" x="101" y="184" width="24" height="14"/>
|
<rect key="frame" x="102" y="182" width="24" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Key" id="K1t-OZ-ACe">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Key" id="K1t-OZ-ACe">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sZo-ie-Asw">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sZo-ie-Asw">
|
||||||
<rect key="frame" x="11" y="184" width="58" height="14"/>
|
<rect key="frame" x="11" y="182" width="58" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Reference" id="r1V-VE-ngy">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Reference" id="r1V-VE-ngy">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -71,10 +71,10 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b4e-k2-WPS">
|
<popUpButton horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b4e-k2-WPS">
|
||||||
<rect key="frame" x="103" y="152" width="82" height="25"/>
|
<rect key="frame" x="104" y="151" width="83" height="23"/>
|
||||||
<popUpButtonCell key="cell" type="roundTextured" title="Matching" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" selectedItem="yT1-XL-k6a" id="Aob-tW-bUP">
|
<popUpButtonCell key="cell" type="roundTextured" title="Matching" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" selectedItem="yT1-XL-k6a" id="Aob-tW-bUP">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" id="j2A-qj-k7L">
|
<menu key="menu" id="j2A-qj-k7L">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Matching" state="on" id="yT1-XL-k6a">
|
<menuItem title="Matching" state="on" id="yT1-XL-k6a">
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WTJ-he-uTu">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WTJ-he-uTu">
|
||||||
<rect key="frame" x="11" y="132" width="37" height="14"/>
|
<rect key="frame" x="11" y="130" width="37" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Match" id="9ce-da-syF">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Match" id="9ce-da-syF">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mcC-bG-cCz">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mcC-bG-cCz">
|
||||||
<rect key="frame" x="11" y="80" width="92" height="14"/>
|
<rect key="frame" x="11" y="79" width="92" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Reference String" id="gik-Ha-hRd">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Reference String" id="gik-Ha-hRd">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b36-T7-1tO" customClass="HNHUITextField">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b36-T7-1tO" customClass="HNHUITextField">
|
||||||
<rect key="frame" x="13" y="50" width="172" height="22"/>
|
<rect key="frame" x="13" y="50" width="174" height="21"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Reference" drawsBackground="YES" id="dr9-x8-kKk">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Reference" drawsBackground="YES" id="dr9-x8-kKk">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<rect key="frame" x="144" y="17" width="114" height="25"/>
|
<rect key="frame" x="144" y="17" width="114" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Hl5-gO-B1c">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Hl5-gO-B1c">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" title="OtherViews" id="RKd-H8-eCF">
|
<menu key="menu" title="OtherViews" id="RKd-H8-eCF">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="every Hour" tag="3600" id="DjF-1I-6Nq"/>
|
<menuItem title="every Hour" tag="3600" id="DjF-1I-6Nq"/>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ckg-9t-MDS">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ckg-9t-MDS">
|
||||||
<rect key="frame" x="22" y="22" width="118" height="17"/>
|
<rect key="frame" x="22" y="23" width="118" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Check for Updates" id="9tL-CA-Vdg">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Check for Updates" id="9tL-CA-Vdg">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -19,16 +19,16 @@
|
|||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="315"/>
|
<rect key="frame" x="0.0" y="0.0" width="400" height="314"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Entry Table" translatesAutoresizingMaskIntoConstraints="NO" id="2">
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Entry Table" translatesAutoresizingMaskIntoConstraints="NO" id="2">
|
||||||
<rect key="frame" x="17" y="166" width="366" height="100"/>
|
<rect key="frame" x="17" y="166" width="366" height="99"/>
|
||||||
<view key="contentView" id="cfa-nq-Kzt">
|
<view key="contentView" id="cfa-nq-Kzt">
|
||||||
<rect key="frame" x="3" y="3" width="360" height="82"/>
|
<rect key="frame" x="3" y="3" width="360" height="81"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
|
||||||
<rect key="frame" x="18" y="53" width="134" height="17"/>
|
<rect key="frame" x="18" y="53" width="134" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Double-click on URL:" id="10">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Double-click on URL:" id="10">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -36,10 +36,10 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
||||||
<rect key="frame" x="156" y="48" width="109" height="25"/>
|
<rect key="frame" x="156" y="47" width="109" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="14">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="14">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" title="OtherViews" id="15">
|
<menu key="menu" title="OtherViews" id="15">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Copies URL" id="16"/>
|
<menuItem title="Copies URL" id="16"/>
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="36">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="36">
|
||||||
<rect key="frame" x="18" y="22" width="134" height="17"/>
|
<rect key="frame" x="18" y="22" width="134" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Double-click on Title:" id="37">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Double-click on Title:" id="37">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -57,10 +57,10 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="40">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="40">
|
||||||
<rect key="frame" x="156" y="17" width="139" height="25"/>
|
<rect key="frame" x="156" y="17" width="139" height="24"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="Opens Inspector" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="44" id="41">
|
<popUpButtonCell key="cell" type="push" title="Opens Inspector" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="44" id="41">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" title="OtherViews" id="42">
|
<menu key="menu" title="OtherViews" id="42">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Opens Inspector" state="on" id="44"/>
|
<menuItem title="Opens Inspector" state="on" id="44"/>
|
||||||
@@ -90,10 +90,10 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</box>
|
</box>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ehI-gq-lsb">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ehI-gq-lsb">
|
||||||
<rect key="frame" x="113" y="271" width="135" height="25"/>
|
<rect key="frame" x="113" y="270" width="135" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="Default Browser" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="7YX-EA-9KA" id="7Ip-sU-sAK">
|
<popUpButtonCell key="cell" type="push" title="Default Browser" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="7YX-EA-9KA" id="7Ip-sU-sAK">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="system"/>
|
||||||
<menu key="menu" title="OtherViews" id="XgO-Tj-QjO">
|
<menu key="menu" title="OtherViews" id="XgO-Tj-QjO">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Default Browser" state="on" id="7YX-EA-9KA"/>
|
<menuItem title="Default Browser" state="on" id="7YX-EA-9KA"/>
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lOo-NI-b07">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lOo-NI-b07">
|
||||||
<rect key="frame" x="18" y="274" width="91" height="19"/>
|
<rect key="frame" x="18" y="273" width="91" height="19"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Open URLs in:" id="soD-wI-YOH">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Open URLs in:" id="soD-wI-YOH">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
|||||||
22
MacPass/KPKEntry+MPTags.h
Normal file
22
MacPass/KPKEntry+MPTags.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
//
|
||||||
|
// KPKEntry+MPTags.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 20.03.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
|
||||||
|
#import <KeePassKit/KeePassKit.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface KPKEntry (MPTags)
|
||||||
|
|
||||||
|
@property (readonly, copy) NSString *tagsString;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
24
MacPass/KPKEntry+MPTags.m
Normal file
24
MacPass/KPKEntry+MPTags.m
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
//
|
||||||
|
// KPKEntry+MPTags.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 20.03.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "KPKEntry+MPTags.h"
|
||||||
|
|
||||||
|
#import <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
|
||||||
|
@implementation KPKEntry (MPTags)
|
||||||
|
|
||||||
|
+ (NSSet<NSString *> *)keyPathsForValuesAffectingTagsString {
|
||||||
|
return [NSSet setWithObject:NSStringFromSelector(@selector(tags))];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)tagsString {
|
||||||
|
return [self.tags componentsJoinedByString:@" "];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -33,6 +33,7 @@ APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
|
|||||||
@property (strong) IBOutlet NSMenuItem *fileNewMenuItem;
|
@property (strong) IBOutlet NSMenuItem *fileNewMenuItem;
|
||||||
@property (strong) IBOutlet NSMenu *itemMenu;
|
@property (strong) IBOutlet NSMenu *itemMenu;
|
||||||
@property (strong) IBOutlet NSMenu *importMenu;
|
@property (strong) IBOutlet NSMenu *importMenu;
|
||||||
|
@property (strong) IBOutlet NSMenu *exportMenu;
|
||||||
|
|
||||||
@property (strong, readonly) MPEntryContextMenuDelegate *itemActionMenuDelegate;
|
@property (strong, readonly) MPEntryContextMenuDelegate *itemActionMenuDelegate;
|
||||||
|
|
||||||
|
|||||||
@@ -240,19 +240,36 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
|
|||||||
NSString *saveTitle = displayDots ? NSLocalizedString(@"SAVE_WITH_DOTS", "Save file menu item title when save will prompt for a location to save or ask for a password/key") : NSLocalizedString(@"SAVE", "Save file menu item title when save will just save the file");
|
NSString *saveTitle = displayDots ? NSLocalizedString(@"SAVE_WITH_DOTS", "Save file menu item title when save will prompt for a location to save or ask for a password/key") : NSLocalizedString(@"SAVE", "Save file menu item title when save will just save the file");
|
||||||
self.saveMenuItem.title = saveTitle;
|
self.saveMenuItem.title = saveTitle;
|
||||||
}
|
}
|
||||||
if(menu == self.fixAutotypeMenuItem.menu) {
|
else if(menu == self.fixAutotypeMenuItem.menu) {
|
||||||
self.fixAutotypeMenuItem.hidden = !(NSEvent.modifierFlags & NSAlternateKeyMask);
|
self.fixAutotypeMenuItem.hidden = !(NSEvent.modifierFlags & NSAlternateKeyMask);
|
||||||
}
|
}
|
||||||
if(menu == self.importMenu) {
|
else if(menu == self.importMenu) {
|
||||||
NSMenuItem *exportXML = menu.itemArray.firstObject;
|
NSMenuItem *exportXML = menu.itemArray.firstObject;
|
||||||
[menu removeAllItems];
|
[menu removeAllItems];
|
||||||
|
[menu addItem:exportXML];
|
||||||
for(MPPlugin<MPImportPlugin> * plugin in MPPluginHost.sharedHost.importPlugins) {
|
for(MPPlugin<MPImportPlugin> * plugin in MPPluginHost.sharedHost.importPlugins) {
|
||||||
NSMenuItem *importItem = [[NSMenuItem alloc] init];
|
NSMenuItem *importItem = [[NSMenuItem alloc] init];
|
||||||
[plugin prepareImportMenuItem:importItem];
|
[plugin prepareImportMenuItem:importItem];
|
||||||
|
importItem.submenu = nil; // kill any potential submenu!
|
||||||
|
importItem.representedObject = plugin.identifier;
|
||||||
importItem.target = nil;
|
importItem.target = nil;
|
||||||
importItem.action = @selector(importFromPlugin:);
|
importItem.action = @selector(importWithPlugin:);
|
||||||
|
[menu addItem:importItem];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(menu == self.exportMenu) {
|
||||||
|
NSMenuItem *importXML = menu.itemArray.firstObject;
|
||||||
|
[menu removeAllItems];
|
||||||
|
[menu addItem:importXML];
|
||||||
|
for(MPPlugin<MPExportPlugin> * plugin in MPPluginHost.sharedHost.exportPlugins) {
|
||||||
|
NSMenuItem *exportItem = [[NSMenuItem alloc] init];
|
||||||
|
[plugin prepareExportMenuItem:exportItem];
|
||||||
|
exportItem.submenu = nil; // kill any potential submenu!
|
||||||
|
exportItem.representedObject = plugin.identifier;
|
||||||
|
exportItem.target = nil;
|
||||||
|
exportItem.action = @selector(exportWithPlugin:);
|
||||||
|
[menu addItem:exportItem];
|
||||||
}
|
}
|
||||||
[menu insertItem:exportXML atIndex:0];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,13 +22,19 @@
|
|||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class MPAutotypeEnvironment;
|
||||||
|
@class MPAutotypeContext;
|
||||||
|
|
||||||
@interface MPAutotypeCandidateSelectionViewController : NSViewController
|
@interface MPAutotypeCandidateSelectionViewController : NSViewController
|
||||||
|
|
||||||
@property (copy) NSArray *candidates;
|
@property (strong) MPAutotypeEnvironment *environment;
|
||||||
@property (copy) NSString *windowTitle;
|
@property (copy) NSArray<MPAutotypeContext *> *candidates;
|
||||||
|
|
||||||
- (IBAction)selectAutotypeContext:(id)sender;
|
- (IBAction)selectAutotypeContext:(id)sender;
|
||||||
- (IBAction)cancelSelection:(id)sender;
|
- (IBAction)cancelSelection:(id)sender;
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
#import "MPAutotypeCandidateSelectionViewController.h"
|
#import "MPAutotypeCandidateSelectionViewController.h"
|
||||||
#import "MPAutotypeContext.h"
|
#import "MPAutotypeContext.h"
|
||||||
#import "MPAutotypeDaemon.h"
|
#import "MPAutotypeDaemon.h"
|
||||||
|
#import "MPAutotypeEnvironment.h"
|
||||||
|
#import "MPExtendedTableCellView.h"
|
||||||
|
|
||||||
#import "KPKNode+IconImage.h"
|
#import "KPKNode+IconImage.h"
|
||||||
|
|
||||||
@@ -43,7 +45,7 @@
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
NSString *template = NSLocalizedString(@"AUTOTYPE_CANDIDATE_SELECTION_WINDOW_MESSAGE_%@", "Message text in the autotype selection window. Placeholder is %1 - windowTitle");
|
NSString *template = NSLocalizedString(@"AUTOTYPE_CANDIDATE_SELECTION_WINDOW_MESSAGE_%@", "Message text in the autotype selection window. Placeholder is %1 - windowTitle");
|
||||||
self.messageTextField.stringValue = [NSString stringWithFormat:template, self.windowTitle];
|
self.messageTextField.stringValue = [NSString stringWithFormat:template, self.environment.windowTitle];
|
||||||
self.selectAutotypeContextButton.enabled = NO;
|
self.selectAutotypeContextButton.enabled = NO;
|
||||||
NSNotification *notification = [NSNotification notificationWithName:NSTableViewSelectionDidChangeNotification object:self.contextTableView];
|
NSNotification *notification = [NSNotification notificationWithName:NSTableViewSelectionDidChangeNotification object:self.contextTableView];
|
||||||
[self tableViewSelectionDidChange:notification];
|
[self tableViewSelectionDidChange:notification];
|
||||||
@@ -58,12 +60,10 @@
|
|||||||
#pragma mark NSTableViewDelegate
|
#pragma mark NSTableViewDelegate
|
||||||
|
|
||||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||||
NSTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
|
MPExtendedTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
|
||||||
MPAutotypeContext *context = self.candidates[row];
|
MPAutotypeContext *context = self.candidates[row];
|
||||||
NSString *maskedEvaluatedCommand = context.maskedEvaluatedCommand;
|
view.addionalTextField.stringValue = context.maskedEvaluatedCommand;
|
||||||
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@", context.entry.title, maskedEvaluatedCommand]];
|
view.textField.stringValue = context.entry.title;
|
||||||
[string setAttributes:@{NSForegroundColorAttributeName: NSColor.disabledControlTextColor} range:NSMakeRange((string.length - maskedEvaluatedCommand.length), maskedEvaluatedCommand.length)];
|
|
||||||
view.textField.attributedStringValue = string;
|
|
||||||
view.imageView.image = context.entry.iconImage;
|
view.imageView.image = context.entry.iconImage;
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
- (void)selectAutotypeContext:(id)sender {
|
- (void)selectAutotypeContext:(id)sender {
|
||||||
NSInteger selectedRow = self.contextTableView.selectedRow;
|
NSInteger selectedRow = self.contextTableView.selectedRow;
|
||||||
if(selectedRow >= 0 && selectedRow < self.candidates.count) {
|
if(selectedRow >= 0 && selectedRow < self.candidates.count) {
|
||||||
[MPAutotypeDaemon.defaultDaemon selectAutotypeCandiate:self.candidates[selectedRow]];
|
[MPAutotypeDaemon.defaultDaemon selectAutotypeContext:self.candidates[selectedRow] forEnvironment:self.environment];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[self cancelSelection:sender]; // cancel since the selection was invalid!
|
[self cancelSelection:sender]; // cancel since the selection was invalid!
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)cancelSelection:(id)sender {
|
- (void)cancelSelection:(id)sender {
|
||||||
[[MPAutotypeDaemon defaultDaemon] cancelAutotypeCandidateSelection];
|
[MPAutotypeDaemon.defaultDaemon cancelAutotypeContextSelectionForEnvironment:self.environment];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
@class DDHotKey;
|
@class DDHotKey;
|
||||||
@class KPKEntry;
|
@class KPKEntry;
|
||||||
@class MPAutotypeContext;
|
@class MPAutotypeContext;
|
||||||
@class MPAutotypeExecutionContext;
|
@class MPAutotypeEnvironment;
|
||||||
/**
|
/**
|
||||||
* The autotype daemon is responsible for registering the global hotkey and to perform any autotype actions
|
* The autotype daemon is responsible for registering the global hotkey and to perform any autotype actions
|
||||||
*/
|
*/
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
- (void)performAutotypeForEntry:(KPKEntry *)entry;
|
- (void)performAutotypeForEntry:(KPKEntry *)entry;
|
||||||
- (void)performAutotypeForEntry:(KPKEntry *)entry overrideSequence:(NSString *)sequence;
|
- (void)performAutotypeForEntry:(KPKEntry *)entry overrideSequence:(NSString *)sequence;
|
||||||
- (void)selectAutotypeCandiate:(MPAutotypeContext *)context;
|
- (void)selectAutotypeContext:(MPAutotypeContext *)context forEnvironment:(MPAutotypeEnvironment *)environment;
|
||||||
- (void)cancelAutotypeCandidateSelection;
|
- (void)cancelAutotypeContextSelectionForEnvironment:(MPAutotypeEnvironment *)environment;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#import "MPDocumentWindowController.h"
|
#import "MPDocumentWindowController.h"
|
||||||
#import "MPAutotypeCommand.h"
|
#import "MPAutotypeCommand.h"
|
||||||
#import "MPAutotypeContext.h"
|
#import "MPAutotypeContext.h"
|
||||||
|
#import "MPAutotypeEnvironment.h"
|
||||||
#import "MPAutotypePaste.h"
|
#import "MPAutotypePaste.h"
|
||||||
#import "MPAutotypeDelay.h"
|
#import "MPAutotypeDelay.h"
|
||||||
#import "MPPasteBoardController.h"
|
#import "MPPasteBoardController.h"
|
||||||
@@ -45,16 +46,12 @@
|
|||||||
#import "KeePassKit/KeePassKit.h"
|
#import "KeePassKit/KeePassKit.h"
|
||||||
#import <Carbon/Carbon.h>
|
#import <Carbon/Carbon.h>
|
||||||
|
|
||||||
NSString *const kMPWindowTitleKey = @"kMPWindowTitleKey";
|
|
||||||
NSString *const kMPProcessIdentifierKey = @"kMPProcessIdentifierKey";
|
|
||||||
|
|
||||||
@interface MPAutotypeDaemon ()
|
@interface MPAutotypeDaemon ()
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL enabled;
|
@property (nonatomic, assign) BOOL enabled;
|
||||||
@property (nonatomic, copy) NSData *hotKeyData;
|
@property (nonatomic, copy) NSData *hotKeyData;
|
||||||
@property (strong) DDHotKey *registredHotKey;
|
@property (strong) DDHotKey *registredHotKey;
|
||||||
@property (assign) pid_t targetPID; // The pid of the process we want to sent commands to
|
|
||||||
@property (copy) NSString *targetWindowTitle; // The title of the window that we are targeting
|
|
||||||
@property (strong) NSRunningApplication *previousApplication; // The application that was active before we got invoked
|
@property (strong) NSRunningApplication *previousApplication; // The application that was active before we got invoked
|
||||||
@property (assign) NSTimeInterval userActionRequested;
|
@property (assign) NSTimeInterval userActionRequested;
|
||||||
@property (strong) id applicationActivationObserver;
|
@property (strong) id applicationActivationObserver;
|
||||||
@@ -85,7 +82,6 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
_enabled = NO;
|
_enabled = NO;
|
||||||
_targetPID = -1;
|
|
||||||
_userActionRequested = NSDate.distantPast.timeIntervalSinceReferenceDate;
|
_userActionRequested = NSDate.distantPast.timeIntervalSinceReferenceDate;
|
||||||
[self bind:NSStringFromSelector(@selector(enabled))
|
[self bind:NSStringFromSelector(@selector(enabled))
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
||||||
@@ -144,41 +140,63 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
- (void)performAutotypeForEntry:(KPKEntry *)entry {
|
- (void)performAutotypeForEntry:(KPKEntry *)entry {
|
||||||
[self performAutotypeForEntry:entry overrideSequence:nil];
|
[self performAutotypeForEntry:entry overrideSequence:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)performAutotypeForEntry:(KPKEntry *)entry overrideSequence:(NSString *)sequence {
|
- (void)performAutotypeForEntry:(KPKEntry *)entry overrideSequence:(NSString *)sequence {
|
||||||
if(entry) {
|
if(entry) {
|
||||||
[self _updateTargeInformationForApplication:self.previousApplication];
|
MPAutotypeEnvironment *env = [MPAutotypeEnvironment environmentWithTargetApplication:self.previousApplication entry:entry];
|
||||||
[self _performAutotypeForEntry:entry];
|
[self _runAutotypeWithEnvironment:env];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_didPressHotKey {
|
- (void)_didPressHotKey {
|
||||||
[self _updateTargetInformationForFrontMostApplication];
|
MPAutotypeEnvironment *env = [MPAutotypeEnvironment environmentWithTargetApplication:NSWorkspace.sharedWorkspace.frontmostApplication entry:nil];
|
||||||
[self _performAutotypeForEntry:nil];
|
[self _runAutotypeWithEnvironment:env];
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark -
|
|
||||||
#pragma mark Actions
|
|
||||||
- (void)selectAutotypeCandiate:(MPAutotypeContext *)context {
|
|
||||||
[self.matchSelectionWindow orderOut:self];
|
|
||||||
self.matchSelectionWindow = nil;
|
|
||||||
[self _performAutotypeForContext:context];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)cancelAutotypeCandidateSelection {
|
|
||||||
[self.matchSelectionWindow orderOut:self];
|
|
||||||
self.matchSelectionWindow = nil;
|
|
||||||
if(self.targetPID) {
|
|
||||||
[self _orderApplicationToFront:self.targetPID forContext:nil];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Autotype Execution
|
#pragma mark Autotype Execution
|
||||||
|
- (void)selectAutotypeContext:(MPAutotypeContext *)context forEnvironment:(MPAutotypeEnvironment *)environment {
|
||||||
|
[self.matchSelectionWindow orderOut:self];
|
||||||
|
self.matchSelectionWindow = nil;
|
||||||
|
[self _runAutotypeWithEnvironment:environment forContext:context];
|
||||||
|
if(environment.hidden) {
|
||||||
|
[NSApplication.sharedApplication hide:nil];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cancelAutotypeContextSelectionForEnvironment:(MPAutotypeEnvironment *)environment {
|
||||||
|
[self.matchSelectionWindow orderOut:self];
|
||||||
|
self.matchSelectionWindow = nil;
|
||||||
|
if(environment.hidden) {
|
||||||
|
[NSApplication.sharedApplication hide:nil];
|
||||||
|
}
|
||||||
|
if(environment.pid) {
|
||||||
|
[self _orderApplicationToFront:environment.pid completionHandler:nil];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_runAutotypeAfterDatabaseUnlockWithEnvironment:(MPAutotypeEnvironment *)environment requestedAt:(NSTimeInterval)requestTime {
|
||||||
|
NSTimeInterval now = NSDate.date.timeIntervalSinceReferenceDate;
|
||||||
|
if(now - requestTime > 30) {
|
||||||
|
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
||||||
|
notification.title = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_TIMED_OUT_TITLE", "Title for the notification when the Autotype operation timed out");
|
||||||
|
notification.informativeText = NSLocalizedString(@"AUTOTYPE_TIMED_OUT", "Notficication: Autotype timed out");
|
||||||
|
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeFeedback };
|
||||||
|
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[self _runAutotypeWithEnvironment:environment];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_runAutotypeWithEnvironment:(MPAutotypeEnvironment *)env {
|
||||||
|
if(env.isSelfTargeting) {
|
||||||
|
return; // we do not want to target ourselves
|
||||||
|
}
|
||||||
|
|
||||||
- (void)_performAutotypeForEntry:(KPKEntry *)entryOrNil {
|
|
||||||
if(!self.hasNecessaryAutotypePermissions) {
|
if(!self.hasNecessaryAutotypePermissions) {
|
||||||
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
||||||
notification.title = NSApp.applicationName;
|
notification.title = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_PERMISSIONS_MISSING_TITLE", "Title for autotype feedback on missing permissions");
|
||||||
notification.informativeText = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS", "Notification: Autotype failed, MacPass has not enough permissions to perform autotype");
|
notification.informativeText = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS", "Notification: Autotype failed, MacPass has not enough permissions to perform autotype");
|
||||||
notification.actionButtonTitle = NSLocalizedString(@"SHOW_AUTOTYPE_DOCTOR", "Action button in Notification to show the Autotype Doctor");
|
notification.actionButtonTitle = NSLocalizedString(@"SHOW_AUTOTYPE_DOCTOR", "Action button in Notification to show the Autotype Doctor");
|
||||||
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeRunAutotypeDoctor };
|
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeRunAutotypeDoctor };
|
||||||
@@ -186,24 +204,28 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NSInteger pid = NSProcessInfo.processInfo.processIdentifier;
|
|
||||||
if(self.targetPID == pid) {
|
|
||||||
return; // We do not perform Autotype on ourselves
|
|
||||||
}
|
|
||||||
|
|
||||||
/* find autotype documents */
|
/* find autotype documents */
|
||||||
NSArray *documents = NSApp.orderedDocuments;
|
NSArray *documents = NSApp.orderedDocuments;
|
||||||
/* No open document, inform the user and return without any action */
|
/* No open document, inform the user and return without any action */
|
||||||
if(documents.count == 0) {
|
if(documents.count == 0) {
|
||||||
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
||||||
notification.title = NSApp.applicationName;
|
notification.title = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_TITLE", "Notification: Title for autotype feedback");
|
||||||
notification.informativeText = NSLocalizedString(@"AUTOTYPE_OVERLAY_NO_DOCUMENTS", "Notification: Autotype failed, no documents are open");
|
notification.informativeText = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_INFORMATIVE_TEXT", "Notification: Autotype failed, no documents are open");
|
||||||
notification.actionButtonTitle = NSLocalizedString(@"OPEN_DOCUMENT", "Action button in Notification to open a document");
|
notification.actionButtonTitle = NSLocalizedString(@"OPEN_DOCUMENT", "Action button in Notification to open a document");
|
||||||
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeOpenDocumentRequest };
|
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeOpenDocumentRequest };
|
||||||
notification.showsButtons = YES;
|
notification.showsButtons = YES;
|
||||||
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
||||||
self.userActionRequested = NSDate.date.timeIntervalSinceReferenceDate;
|
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didUnlockDatabase:) name:MPDocumentDidUnlockDatabaseNotification object:nil];
|
MPAutotypeDaemon * __weak welf = self;
|
||||||
|
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
|
||||||
|
id __block unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
|
||||||
|
object:nil
|
||||||
|
queue:NSOperationQueue.mainQueue
|
||||||
|
usingBlock:^(NSNotification *notification) {
|
||||||
|
[welf _runAutotypeAfterDatabaseUnlockWithEnvironment:env requestedAt:requestTime];
|
||||||
|
[nc removeObserver:unlockToken];
|
||||||
|
}];
|
||||||
return; // Unlock should trigger autotype
|
return; // Unlock should trigger autotype
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,6 +233,7 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
MPDocument *document = evaluatedObject;
|
MPDocument *document = evaluatedObject;
|
||||||
return !document.encrypted;
|
return !document.encrypted;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
NSArray *unlockedDocuments = [documents filteredArrayUsingPredicate:filterPredicate];
|
NSArray *unlockedDocuments = [documents filteredArrayUsingPredicate:filterPredicate];
|
||||||
/* We look for all unlocked documents, if all open documents are locked, we pop the front most and try to search again */
|
/* We look for all unlocked documents, if all open documents are locked, we pop the front most and try to search again */
|
||||||
if(unlockedDocuments.count == 0) {
|
if(unlockedDocuments.count == 0) {
|
||||||
@@ -221,60 +244,71 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
[document showWindows];
|
[document showWindows];
|
||||||
MPDocumentWindowController *wc = document.windowControllers.firstObject;
|
MPDocumentWindowController *wc = document.windowControllers.firstObject;
|
||||||
[wc showPasswordInputWithMessage:NSLocalizedString(@"AUTOTYPE_MESSAGE_UNLOCK_DATABASE", @"Message displayed to the user to unlock the database to perform global autotype")];
|
[wc showPasswordInputWithMessage:NSLocalizedString(@"AUTOTYPE_MESSAGE_UNLOCK_DATABASE", @"Message displayed to the user to unlock the database to perform global autotype")];
|
||||||
self.userActionRequested = NSDate.date.timeIntervalSinceReferenceDate;
|
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didUnlockDatabase:) name:MPDocumentDidUnlockDatabaseNotification object:nil];
|
MPAutotypeDaemon * __weak welf = self;
|
||||||
|
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
|
||||||
|
id __block unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
|
||||||
|
object:nil
|
||||||
|
queue:NSOperationQueue.mainQueue
|
||||||
|
usingBlock:^(NSNotification *notification) {
|
||||||
|
[welf _runAutotypeAfterDatabaseUnlockWithEnvironment:env requestedAt:requestTime];
|
||||||
|
|
||||||
|
[nc removeObserver:unlockToken];
|
||||||
|
}];
|
||||||
return; // wait for the unlock to happen
|
return; // wait for the unlock to happen
|
||||||
}
|
}
|
||||||
|
|
||||||
MPAutotypeContext *context = [self _autotypeContextForDocuments:documents forWindowTitle:self.targetWindowTitle preferredEntry:entryOrNil];
|
MPAutotypeContext *context = [self _autotypeContextForDocuments:documents withEnvironment:env];
|
||||||
/* TODO: that's popping up if the multi selection dialog goes up! */
|
|
||||||
if(self.matchSelectionWindow) {
|
if(self.matchSelectionWindow) {
|
||||||
return; // we present the match selection window, just return
|
return; // we present the match selection window, just return
|
||||||
}
|
}
|
||||||
if(!entryOrNil) {
|
if(!env.preferredEntry) {
|
||||||
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
||||||
notification.title = NSApp.applicationName;
|
notification.title = NSLocalizedString(@"AUTOTYPE_NOTIFICATION_MATCH_TITLE", "Notification: Title for autotype feedback");
|
||||||
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeFeedback };
|
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeFeedback };
|
||||||
if(context) {
|
if(context) {
|
||||||
notification.informativeText = [NSString stringWithFormat:NSLocalizedString(@"AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@", "Notification: Autotype found a single match for %@ (string placeholder)."), self.targetWindowTitle];
|
notification.informativeText = [NSString stringWithFormat:NSLocalizedString(@"AUTOTYPE_NOTIFICATION_SINGLE_MATCH_FOR_%@", "Notification: Autotype found a single match for %@ (string placeholder)."), env.windowTitle];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
notification.informativeText = [NSString stringWithFormat:NSLocalizedString(@"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@", "Noticiation: Autotype failed to find a match for %@ (string placeholder)"), self.targetWindowTitle];
|
notification.informativeText = [NSString stringWithFormat:NSLocalizedString(@"AUTOTYPE_NOTIFICATION_NO_MATCH_FOR_%@", "Noticiation: Autotype failed to find a match for %@ (string placeholder)"), env.windowTitle];
|
||||||
}
|
}
|
||||||
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
||||||
}
|
}
|
||||||
[self _performAutotypeForContext:context];
|
[self _runAutotypeWithEnvironment:env forContext:context];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (MPAutotypeContext *)_autotypeContextForDocuments:(NSArray<MPDocument *> *)documents forWindowTitle:(NSString *)windowTitle preferredEntry:(KPKEntry *)entry {
|
- (MPAutotypeContext *)_autotypeContextForDocuments:(NSArray<MPDocument *> *)documents withEnvironment:(MPAutotypeEnvironment *)environment {
|
||||||
/*
|
/*
|
||||||
Query the document to generate a autotype command list for the window title
|
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
|
We do not care where this came form, just get the autotype commands
|
||||||
*/
|
*/
|
||||||
NSMutableArray *autotypeCandidates = [[NSMutableArray alloc] init];
|
NSMutableArray *autotypeCandidates = [[NSMutableArray alloc] init];
|
||||||
for(MPDocument *document in documents) {
|
for(MPDocument *document in documents) {
|
||||||
NSArray *contexts = [document autotypContextsForWindowTitle:windowTitle preferredEntry:entry];
|
NSArray *contexts = [document autotypContextsForWindowTitle:environment.windowTitle preferredEntry:environment.preferredEntry];
|
||||||
if(contexts ) {
|
if(contexts ) {
|
||||||
[autotypeCandidates addObjectsFromArray:contexts];
|
[autotypeCandidates addObjectsFromArray:contexts];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NSUInteger candidates = autotypeCandidates.count;
|
|
||||||
if(candidates == 0) {
|
if(autotypeCandidates.count <= 1) {
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
if(candidates == 1 ) {
|
|
||||||
return autotypeCandidates.lastObject;
|
return autotypeCandidates.lastObject;
|
||||||
}
|
}
|
||||||
[self _presentCandiadates:autotypeCandidates forWindowTitle:windowTitle];
|
[self _presentCandiadates:autotypeCandidates forEnvironment:environment];
|
||||||
return nil; // Nothing to do, we get called back by the window
|
return nil; // Nothing to do, we get called back by the window
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_performAutotypeForContext:(MPAutotypeContext *)context {
|
- (void)_runAutotypeWithEnvironment:(MPAutotypeEnvironment *)environment forContext:(MPAutotypeContext *)context {
|
||||||
|
if(nil == environment) {
|
||||||
|
return; // no Environment to work in
|
||||||
|
}
|
||||||
if(nil == context) {
|
if(nil == context) {
|
||||||
return; // No context to work with
|
return; // No context to work with
|
||||||
}
|
}
|
||||||
|
__weak MPAutotypeDaemon *welf = self;
|
||||||
if(NO == [self _orderApplicationToFront:self.targetPID forContext:(MPAutotypeContext *)context]) {
|
BOOL appIsFrontmost = [self _orderApplicationToFront:environment.pid completionHandler:^{
|
||||||
|
[welf _runAutotypeWithEnvironment:environment forContext:context];
|
||||||
|
}];
|
||||||
|
if(!appIsFrontmost) {
|
||||||
return; // We will get called back when the application is in front - hopfully
|
return; // We will get called back when the application is in front - hopfully
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,6 +332,10 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
usleep(globalDelay*NSEC_PER_USEC);
|
usleep(globalDelay*NSEC_PER_USEC);
|
||||||
}
|
}
|
||||||
[command execute];
|
[command execute];
|
||||||
|
/* re-hide after every command since this might have put us back up front */
|
||||||
|
if(environment.hidden) {
|
||||||
|
[NSApplication.sharedApplication hide:nil];
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -322,38 +360,7 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSDictionary *)_infoDictionaryForApplication:(NSRunningApplication *)application {
|
- (void)_presentCandiadates:(NSArray *)candidates forEnvironment:(MPAutotypeEnvironment *)environment {
|
||||||
NSArray *currentWindows = CFBridgingRelease(CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements, kCGNullWindowID));
|
|
||||||
NSArray *windowNumbers = [NSWindow windowNumbersWithOptions:NSWindowNumberListAllApplications];
|
|
||||||
NSUInteger minZIndex = NSNotFound;
|
|
||||||
NSDictionary *infoDict = nil;
|
|
||||||
for(NSDictionary *windowDict in currentWindows) {
|
|
||||||
NSString *windowTitle = windowDict[(NSString *)kCGWindowName];
|
|
||||||
if(windowTitle.length <= 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
NSNumber *processId = windowDict[(NSString *)kCGWindowOwnerPID];
|
|
||||||
if(processId && [processId isEqualToNumber:@(application.processIdentifier)]) {
|
|
||||||
|
|
||||||
NSNumber *number = (NSNumber *)windowDict[(NSString *)kCGWindowNumber];
|
|
||||||
NSUInteger zIndex = [windowNumbers indexOfObject:number];
|
|
||||||
if(zIndex < minZIndex) {
|
|
||||||
minZIndex = zIndex;
|
|
||||||
infoDict = @{
|
|
||||||
kMPWindowTitleKey: windowTitle,
|
|
||||||
kMPProcessIdentifierKey : processId
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(currentWindows.count > 0 && infoDict.count == 0) {
|
|
||||||
// show some information about not being able to determine any windows
|
|
||||||
NSLog(@"Unable to retrieve any window names. If you encounter this issue you might be running 10.15 and MacPass has no permission for screen recording.");
|
|
||||||
}
|
|
||||||
return infoDict;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_presentCandiadates:(NSArray *)candidates forWindowTitle:(NSString *)windowTitle {
|
|
||||||
if(!self.matchSelectionWindow) {
|
if(!self.matchSelectionWindow) {
|
||||||
self.matchSelectionWindow = [[NSPanel alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
|
self.matchSelectionWindow = [[NSPanel alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
|
||||||
styleMask:NSWindowStyleMaskNonactivatingPanel|NSWindowStyleMaskTitled
|
styleMask:NSWindowStyleMaskNonactivatingPanel|NSWindowStyleMaskTitled
|
||||||
@@ -362,7 +369,7 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
self.matchSelectionWindow.level = kCGAssistiveTechHighWindowLevel;
|
self.matchSelectionWindow.level = kCGAssistiveTechHighWindowLevel;
|
||||||
MPAutotypeCandidateSelectionViewController *vc = [[MPAutotypeCandidateSelectionViewController alloc] init];
|
MPAutotypeCandidateSelectionViewController *vc = [[MPAutotypeCandidateSelectionViewController alloc] init];
|
||||||
vc.candidates = candidates;
|
vc.candidates = candidates;
|
||||||
vc.windowTitle = windowTitle;
|
vc.environment = environment;
|
||||||
self.matchSelectionWindow.collectionBehavior |= (NSWindowCollectionBehaviorFullScreenAuxiliary |
|
self.matchSelectionWindow.collectionBehavior |= (NSWindowCollectionBehaviorFullScreenAuxiliary |
|
||||||
NSWindowCollectionBehaviorMoveToActiveSpace |
|
NSWindowCollectionBehaviorMoveToActiveSpace |
|
||||||
NSWindowCollectionBehaviorTransient );
|
NSWindowCollectionBehaviorTransient );
|
||||||
@@ -373,24 +380,6 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
[self.matchSelectionWindow makeKeyAndOrderFront:self];
|
[self.matchSelectionWindow makeKeyAndOrderFront:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
|
||||||
#pragma mark MPDocument Notifications
|
|
||||||
- (void)_didUnlockDatabase:(NSNotification *)notification {
|
|
||||||
/* Remove ourselves and call again to search matches */
|
|
||||||
[NSNotificationCenter.defaultCenter removeObserver:self name:MPDocumentDidUnlockDatabaseNotification object:nil];
|
|
||||||
NSTimeInterval now = NSDate.date.timeIntervalSinceReferenceDate;
|
|
||||||
if(now - self.userActionRequested > 30) {
|
|
||||||
NSUserNotification *notification = [[NSUserNotification alloc] init];
|
|
||||||
notification.title = NSApp.applicationName;
|
|
||||||
notification.informativeText = NSLocalizedString(@"AUTOTYPE_TIMED_OUT", "Notficication: Autotype timed out");
|
|
||||||
notification.userInfo = @{ MPUserNotificationTypeKey: MPUserNotificationTypeAutotypeFeedback };
|
|
||||||
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:notification];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
[self _performAutotypeForEntry:nil];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark NSApplication Notifications
|
#pragma mark NSApplication Notifications
|
||||||
- (void)_didDeactivateApplication:(NSNotification *)notification {
|
- (void)_didDeactivateApplication:(NSNotification *)notification {
|
||||||
@@ -400,55 +389,25 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Application information
|
#pragma mark Application information
|
||||||
- (BOOL)_orderApplicationToFront:(pid_t)processIdentifier forContext:(MPAutotypeContext *)context {
|
//- (BOOL)_orderApplicationToFront:(pid_t)processIdentifier inEnvironment:(MPAutotypeEnvironment *) environment {
|
||||||
|
- (BOOL)_orderApplicationToFront:(pid_t)processIdentifier completionHandler:(void (^_Nullable)(void))completionHandler {
|
||||||
NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier];
|
NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier];
|
||||||
NSRunningApplication *frontApplication = NSWorkspace.sharedWorkspace.frontmostApplication;
|
NSRunningApplication *frontApplication = NSWorkspace.sharedWorkspace.frontmostApplication;
|
||||||
if(frontApplication.processIdentifier == processIdentifier) {
|
if(frontApplication.processIdentifier == processIdentifier) {
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cleanup before to make sure everything is top notch */
|
NSNotificationCenter * __weak nc = NSWorkspace.sharedWorkspace.notificationCenter;
|
||||||
if(self.applicationActivationObserver) {
|
id __block didActivateToken = [nc addObserverForName:NSWorkspaceDidActivateApplicationNotification
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self.applicationActivationObserver name:NSWorkspaceDidActivateApplicationNotification object:nil];
|
object:nil
|
||||||
self.applicationActivationObserver = nil;
|
queue:NSOperationQueue.mainQueue
|
||||||
|
usingBlock:^(NSNotification *notification) {
|
||||||
|
[nc removeObserver:didActivateToken];
|
||||||
|
if(completionHandler) {
|
||||||
|
completionHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.applicationActivationObserver = [NSWorkspace.sharedWorkspace.notificationCenter addObserverForName:NSWorkspaceDidActivateApplicationNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
|
|
||||||
if(self.applicationActivationObserver) {
|
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self.applicationActivationObserver name:NSWorkspaceDidActivateApplicationNotification object:nil];
|
|
||||||
}
|
|
||||||
[self _performAutotypeForContext:context];
|
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps];
|
[runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps];
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_updateTargetInformationForFrontMostApplication {
|
|
||||||
[self _updateTargeInformationForApplication:NSWorkspace.sharedWorkspace.frontmostApplication];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_updateTargeInformationForApplication:(NSRunningApplication *)application {
|
|
||||||
if(!application) {
|
|
||||||
self.targetPID = -1;
|
|
||||||
self.targetWindowTitle = @"";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
NSDictionary *frontApplicationInfoDict = [self _infoDictionaryForApplication:application];
|
|
||||||
|
|
||||||
self.targetPID = [frontApplicationInfoDict[kMPProcessIdentifierKey] intValue];
|
|
||||||
self.targetWindowTitle = frontApplicationInfoDict[kMPWindowTitleKey];
|
|
||||||
|
|
||||||
/* if we have any resolvers, let them provide the window title */
|
|
||||||
NSArray *resolvers = [MPPluginHost.sharedHost windowTitleResolverForRunningApplication:application];
|
|
||||||
for(MPPlugin<MPAutotypeWindowTitleResolverPlugin> *resolver in resolvers) {
|
|
||||||
NSString *windowTitle = [resolver windowTitleForRunningApplication:application];
|
|
||||||
if(windowTitle.length > 0) {
|
|
||||||
self.targetWindowTitle = windowTitle;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -63,22 +63,41 @@
|
|||||||
|
|
||||||
- (BOOL)hasScreenRecordingPermissions:(NSError *__autoreleasing*)error {
|
- (BOOL)hasScreenRecordingPermissions:(NSError *__autoreleasing*)error {
|
||||||
/* macos 10.14 and lower do not require screen recording permission to get window titles */
|
/* macos 10.14 and lower do not require screen recording permission to get window titles */
|
||||||
if (@available(macOS 10.15, *)) {
|
|
||||||
|
/*
|
||||||
|
Solution is heavily inspired by Craig Hockenberry's
|
||||||
|
https://stackoverflow.com/questions/56597221/detecting-screen-recording-settings-on-macos-catalina/58985069#58985069
|
||||||
|
*/
|
||||||
|
if(@available(macOS 10.15, *)) {
|
||||||
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
|
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
|
||||||
NSUInteger numberOfWindows = CFArrayGetCount(windowList);
|
NSUInteger numberOfWindows = CFArrayGetCount(windowList);
|
||||||
NSUInteger numberOfWindowsWithName = 0;
|
BOOL canRecordScreen = NO;
|
||||||
for(int idx = 0; idx < numberOfWindows; idx++) {
|
for(int idx = 0; idx < numberOfWindows; idx++) {
|
||||||
NSDictionary *windowInfo = (NSDictionary *)CFArrayGetValueAtIndex(windowList, idx);
|
NSDictionary *windowInfo = (NSDictionary *)CFArrayGetValueAtIndex(windowList, idx);
|
||||||
|
NSNumber *ownerPid = windowInfo[(id)kCGWindowOwnerPID];
|
||||||
|
/*
|
||||||
|
Skip over our own windows
|
||||||
|
*/
|
||||||
|
if(ownerPid.intValue == NSProcessInfo.processInfo.processIdentifier) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Skip applications we aren't allowed to access anyway
|
||||||
|
*/
|
||||||
|
NSRunningApplication *ownerApp = [NSRunningApplication runningApplicationWithProcessIdentifier:ownerPid.intValue];
|
||||||
|
if(!ownerApp) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
NSString *windowName = windowInfo[(id)kCGWindowName];
|
NSString *windowName = windowInfo[(id)kCGWindowName];
|
||||||
if(windowName) {
|
if(windowName) {
|
||||||
numberOfWindowsWithName++;
|
if([ownerApp.executableURL.lastPathComponent isEqualToString:@"Dock"]) {
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else {
|
canRecordScreen = YES;
|
||||||
break; //breaking early, numberOfWindowsWithName not increased
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CFRelease(windowList);
|
CFRelease(windowList);
|
||||||
BOOL canRecordScreen = (numberOfWindows == numberOfWindowsWithName);
|
|
||||||
if(!canRecordScreen && error) {
|
if(!canRecordScreen && error) {
|
||||||
*error = [NSError errorInDomain:MPAutotypeErrorDomain withCode:MPErrorAutotypeIsMissingScreenRecordingPermissions description:NSLocalizedString(@"ERROR_NO_PERMISSION_TO_RECORD_SCREEN", "Error description for missing screen recording permissions")];
|
*error = [NSError errorInDomain:MPAutotypeErrorDomain withCode:MPErrorAutotypeIsMissingScreenRecordingPermissions description:NSLocalizedString(@"ERROR_NO_PERMISSION_TO_RECORD_SCREEN", "Error description for missing screen recording permissions")];
|
||||||
}
|
}
|
||||||
@@ -93,7 +112,7 @@
|
|||||||
if(@available(macOS 10.14, *)) {
|
if(@available(macOS 10.14, *)) {
|
||||||
isTrusted = AXIsProcessTrusted();
|
isTrusted = AXIsProcessTrusted();
|
||||||
if(!isTrusted && error) {
|
if(!isTrusted && error) {
|
||||||
*error = [NSError errorInDomain:MPAutotypeErrorDomain withCode:MPErrorAutotypeIsMissingAccessibiltyPermissions description:NSLocalizedString(@"ERROR_NO_ACCESSIBILTY_PERMISSIONS", "Error description for missing accessibilty permissions")];
|
*error = [NSError errorInDomain:MPAutotypeErrorDomain withCode:MPErrorAutotypeIsMissingAccessibiltyPermissions description:NSLocalizedString(@"ERROR_NO_ACCESSIBILITY_PERMISSIONS", "Error description for missing accessibility permissions")];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return isTrusted;
|
return isTrusted;
|
||||||
|
|||||||
34
MacPass/MPAutotypeEnvironment.h
Normal file
34
MacPass/MPAutotypeEnvironment.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeEnvironment.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 15.01.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class KPKEntry;
|
||||||
|
@class MPAutotypeContext;
|
||||||
|
|
||||||
|
@interface MPAutotypeEnvironment : NSObject
|
||||||
|
|
||||||
|
/**
|
||||||
|
The selected entry, if Autotype is run only for a single entry.
|
||||||
|
If autotype should search for entries, set this to nil.
|
||||||
|
*/
|
||||||
|
@property (readonly, weak, nullable) KPKEntry *preferredEntry;
|
||||||
|
@property (readonly) pid_t pid; // the PID of the target application to which the key strokes should be sent
|
||||||
|
@property (readonly, copy) NSString *windowTitle; /// The window title of the target application.
|
||||||
|
@property (readonly) BOOL hidden; /// If set to YES, MacPass was hidden when autotype was initiated
|
||||||
|
@property (readonly) BOOL isSelfTargeting; /// If MacPass should autotype to itself, YES, otherwise NO
|
||||||
|
|
||||||
|
+ (instancetype)environmentWithTargetApplication:(NSRunningApplication *)targetApplication entry:(KPKEntry * _Nullable)entry;
|
||||||
|
- (instancetype)initWithTargetApplication:(NSRunningApplication *)targetApplication entry:(KPKEntry * _Nullable)entry NS_DESIGNATED_INITIALIZER;
|
||||||
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
84
MacPass/MPAutotypeEnvironment.m
Normal file
84
MacPass/MPAutotypeEnvironment.m
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeEnvironment.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 15.01.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypeEnvironment.h"
|
||||||
|
#import "NSRunningApplication+MPAdditions.h"
|
||||||
|
#import "MPPluginHost.h"
|
||||||
|
#import "MPPlugin.h"
|
||||||
|
|
||||||
|
@implementation MPAutotypeEnvironment
|
||||||
|
|
||||||
|
+ (instancetype)environmentWithTargetApplication:(NSRunningApplication *)targetApplication entry:(KPKEntry *)entry {
|
||||||
|
return [[MPAutotypeEnvironment alloc] initWithTargetApplication:targetApplication entry:entry];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithTargetApplication:(NSRunningApplication *)targetApplication entry:(KPKEntry *)entry {
|
||||||
|
self = [super init];
|
||||||
|
if(self) {
|
||||||
|
_preferredEntry = entry;
|
||||||
|
if(!targetApplication) {
|
||||||
|
_pid = -1;
|
||||||
|
_windowTitle = @"";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NSDictionary *frontApplicationInfoDict = targetApplication.mp_infoDictionary;
|
||||||
|
|
||||||
|
_pid = [frontApplicationInfoDict[MPProcessIdentifierKey] intValue];
|
||||||
|
_windowTitle = frontApplicationInfoDict[MPWindowTitleKey];
|
||||||
|
|
||||||
|
/* if we have any resolvers, let them provide the window title */
|
||||||
|
NSArray *resolvers = [MPPluginHost.sharedHost windowTitleResolverForRunningApplication:targetApplication];
|
||||||
|
for(MPPlugin<MPAutotypeWindowTitleResolverPlugin> *resolver in resolvers) {
|
||||||
|
NSString *windowTitle = [resolver windowTitleForRunningApplication:targetApplication];
|
||||||
|
if(windowTitle.length > 0) {
|
||||||
|
_windowTitle = windowTitle;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_hidden = NSRunningApplication.currentApplication.isHidden;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isSelfTargeting {
|
||||||
|
return NSRunningApplication.currentApplication.processIdentifier == _pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *)_infoDictionaryForApplication:(NSRunningApplication *)application {
|
||||||
|
NSArray *currentWindows = CFBridgingRelease(CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements, kCGNullWindowID));
|
||||||
|
NSArray *windowNumbers = [NSWindow windowNumbersWithOptions:NSWindowNumberListAllApplications];
|
||||||
|
NSUInteger minZIndex = NSNotFound;
|
||||||
|
NSDictionary *infoDict = nil;
|
||||||
|
for(NSDictionary *windowDict in currentWindows) {
|
||||||
|
NSString *windowTitle = windowDict[(NSString *)kCGWindowName];
|
||||||
|
if(windowTitle.length <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
NSNumber *processId = windowDict[(NSString *)kCGWindowOwnerPID];
|
||||||
|
if(processId && [processId isEqualToNumber:@(application.processIdentifier)]) {
|
||||||
|
|
||||||
|
NSNumber *number = (NSNumber *)windowDict[(NSString *)kCGWindowNumber];
|
||||||
|
NSUInteger zIndex = [windowNumbers indexOfObject:number];
|
||||||
|
if(zIndex < minZIndex) {
|
||||||
|
minZIndex = zIndex;
|
||||||
|
infoDict = @{
|
||||||
|
MPWindowTitleKey: windowTitle,
|
||||||
|
MPProcessIdentifierKey : processId
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(currentWindows.count > 0 && infoDict.count == 0) {
|
||||||
|
// show some information about not being able to determine any windows
|
||||||
|
NSLog(@"Unable to retrieve any window names. If you encounter this issue you might be running 10.15 and MacPass has no permission for screen recording.");
|
||||||
|
}
|
||||||
|
return infoDict;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -24,6 +24,12 @@
|
|||||||
|
|
||||||
@interface MPContextButton : NSSegmentedControl
|
@interface MPContextButton : NSSegmentedControl
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSUInteger, MPContextButtonSegment) {
|
||||||
|
MPContextButtonSegmentButton,
|
||||||
|
MPContextButtonSegmentContextButton,
|
||||||
|
MPContextButtonSegmentCount // do not use
|
||||||
|
};
|
||||||
|
|
||||||
@property (nonatomic, strong) NSMenu *contextMenu;
|
@property (nonatomic, strong) NSMenu *contextMenu;
|
||||||
|
|
||||||
- (void)setImage:(NSImage *)image;
|
- (void)setImage:(NSImage *)image;
|
||||||
|
|||||||
@@ -53,14 +53,14 @@
|
|||||||
|
|
||||||
self.focusRingType = NSFocusRingTypeNone;
|
self.focusRingType = NSFocusRingTypeNone;
|
||||||
self.segmentStyle = NSSegmentStyleTexturedSquare;
|
self.segmentStyle = NSSegmentStyleTexturedSquare;
|
||||||
self.segmentCount = 2;
|
self.segmentCount = MPContextButtonSegmentCount;
|
||||||
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
|
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
|
||||||
[cell setWidth:31 forSegment:0];
|
[cell setWidth:31 forSegment:MPContextButtonSegmentButton];
|
||||||
[cell setWidth:17 forSegment:1];
|
[cell setWidth:17 forSegment:MPContextButtonSegmentContextButton];
|
||||||
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
|
cell.trackingMode = NSSegmentSwitchTrackingMomentary;
|
||||||
|
|
||||||
NSImage *contextTriangle = [NSBundle.mainBundle imageForResource:@"contextTriangleTemplate"];
|
NSImage *contextTriangle = [NSBundle.mainBundle imageForResource:@"contextTriangleTemplate"];
|
||||||
[self setImage:contextTriangle forSegment:1];
|
[self setImage:contextTriangle forSegment:MPContextButtonSegmentContextButton];
|
||||||
|
|
||||||
cell.contextMenuAction = @selector(showContextMenu:);
|
cell.contextMenuAction = @selector(showContextMenu:);
|
||||||
cell.contextMenuTarget = self;
|
cell.contextMenuTarget = self;
|
||||||
@@ -76,42 +76,42 @@
|
|||||||
Block the segment setter to prevent accidental settings
|
Block the segment setter to prevent accidental settings
|
||||||
*/
|
*/
|
||||||
- (void)setImage:(NSImage *)image forSegment:(NSInteger)segment {
|
- (void)setImage:(NSImage *)image forSegment:(NSInteger)segment {
|
||||||
if(segment < 2) {
|
if(segment < MPContextButtonSegmentCount) {
|
||||||
[super setImage:image forSegment:segment];
|
[super setImage:image forSegment:segment];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setSegmentCount:(NSInteger)count {
|
- (void)setSegmentCount:(NSInteger)count {
|
||||||
if(count == 2) {
|
if(count == MPContextButtonSegmentCount) {
|
||||||
super.segmentCount = count;
|
super.segmentCount = count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setImage:(NSImage *)image {
|
- (void)setImage:(NSImage *)image {
|
||||||
[self setImage:image forSegment:0];
|
[self setImage:image forSegment:MPContextButtonSegmentButton];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)showContextMenu:(id)sender {
|
- (void)showContextMenu:(id)sender {
|
||||||
NSPoint point = self.frame.origin;
|
NSPoint point = self.frame.origin;
|
||||||
point.x = [self.cell widthForSegment:0];
|
point.x = [self.cell widthForSegment:MPContextButtonSegmentButton];
|
||||||
point.y = NSHeight(self.frame) + 3;
|
point.y = NSHeight(self.frame) + 3;
|
||||||
[_contextMenu popUpMenuPositioningItem:nil atLocation:point inView:self];
|
[_contextMenu popUpMenuPositioningItem:nil atLocation:point inView:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setControlSize:(NSControlSize)controlSize {
|
- (void)setControlSize:(NSControlSize)controlSize {
|
||||||
NSImageRep *rep = [[self imageForSegment:0] bestRepresentationForRect:NSMakeRect(0, 0, 100, 100) context:nil hints:nil];
|
NSImageRep *rep = [[self imageForSegment:MPContextButtonSegmentButton] bestRepresentationForRect:NSMakeRect(0, 0, 100, 100) context:nil hints:nil];
|
||||||
CGFloat scale = rep.size.width / rep.size.height;
|
CGFloat scale = rep.size.width / rep.size.height;
|
||||||
switch (controlSize) {
|
switch (controlSize) {
|
||||||
case NSRegularControlSize:
|
case NSRegularControlSize:
|
||||||
[self imageForSegment:0].size = NSMakeSize(16 * scale, 16);
|
[self imageForSegment:MPContextButtonSegmentButton].size = NSMakeSize(16 * scale, 16);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSSmallControlSize:
|
case NSSmallControlSize:
|
||||||
[self imageForSegment:0].size = NSMakeSize(14 * scale, 14);
|
[self imageForSegment:MPContextButtonSegmentButton].size = NSMakeSize(14 * scale, 14);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSMiniControlSize:
|
case NSMiniControlSize:
|
||||||
[self imageForSegment:0].size = NSMakeSize(8 * scale, 8);
|
[self imageForSegment:MPContextButtonSegmentButton].size = NSMakeSize(8 * scale, 8);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -123,4 +123,9 @@
|
|||||||
return super.controlSize;
|
return super.controlSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)_updateContextButtonState {
|
||||||
|
BOOL hasContextMenu = (self.contextMenu != nil);
|
||||||
|
[self setEnabled:hasContextMenu forSegment:MPContextButtonSegmentContextButton];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ typedef NS_ENUM(NSUInteger, MPDatePreset) {
|
|||||||
default:
|
default:
|
||||||
return; // Nothing to do;
|
return; // Nothing to do;
|
||||||
}
|
}
|
||||||
self.datePicker.dateValue = [gregorian dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];
|
self.datePicker.dateValue = [gregorian dateByAddingComponents:offsetComponents toDate:NSDate.date options:0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ NSString *const MPDocumentHideEntryHistoryNotification = @"MPDocumentHideEntryH
|
|||||||
- (void)revertEntry:(KPKEntry *)entry toEntry:(KPKEntry *)historyEntry {
|
- (void)revertEntry:(KPKEntry *)entry toEntry:(KPKEntry *)historyEntry {
|
||||||
[entry pushHistory];
|
[entry pushHistory];
|
||||||
[entry revertToEntry:historyEntry];
|
[entry revertToEntry:historyEntry];
|
||||||
[self.undoManager setActionName:NSLocalizedString(@"RESTORE_HISTORY_ENTRY", "Action to restore and Entry to a previous state of it's history")];
|
[self.undoManager setActionName:NSLocalizedString(@"RESTORE_HISTORY_ENTRY", "Action to restore an Entry to its previous state of it's history")];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
MPDocument __weak *weakSelf = self;
|
MPDocument __weak *weakSelf = self;
|
||||||
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
|
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
|
||||||
dispatch_async(backgroundQueue, ^{
|
dispatch_async(backgroundQueue, ^{
|
||||||
NSArray *results = [weakSelf _findEntriesMatchingCurrentSearch];
|
NSArray *results = [weakSelf _findEntriesMatchingSearch:weakSelf.searchContext];
|
||||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||||
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidChangeSearchResults object:weakSelf userInfo:@{ kMPDocumentSearchResultsKey: results }];
|
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidChangeSearchResults object:weakSelf userInfo:@{ kMPDocumentSearchResultsKey: results }];
|
||||||
});
|
});
|
||||||
@@ -128,9 +128,9 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Search
|
#pragma mark Search
|
||||||
- (NSArray *)_findEntriesMatchingCurrentSearch {
|
- (NSArray *)_findEntriesMatchingSearch:(MPEntrySearchContext *)context {
|
||||||
/* Filter double passwords */
|
/* Filter double passwords */
|
||||||
if(MPIsFlagSetInOptions(MPEntrySearchDoublePasswords, self.searchContext.searchFlags)) {
|
if(MPIsFlagSetInOptions(MPEntrySearchDoublePasswords, context.searchFlags)) {
|
||||||
NSMutableDictionary *passwordToEntryMap = [[NSMutableDictionary alloc] initWithCapacity:100];
|
NSMutableDictionary *passwordToEntryMap = [[NSMutableDictionary alloc] initWithCapacity:100];
|
||||||
/* Build up a usage map */
|
/* Build up a usage map */
|
||||||
for(KPKEntry *entry in self.root.searchableChildEntries) {
|
for(KPKEntry *entry in self.root.searchableChildEntries) {
|
||||||
@@ -155,7 +155,7 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
}
|
}
|
||||||
return doublePasswords;
|
return doublePasswords;
|
||||||
}
|
}
|
||||||
if(MPIsFlagSetInOptions(MPEntrySearchExpiredEntries, self.searchContext.searchFlags)) {
|
if(MPIsFlagSetInOptions(MPEntrySearchExpiredEntries, context.searchFlags)) {
|
||||||
NSPredicate *expiredPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
|
NSPredicate *expiredPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
|
||||||
KPKNode *node = evaluatedObject;
|
KPKNode *node = evaluatedObject;
|
||||||
return node.timeInfo.isExpired;
|
return node.timeInfo.isExpired;
|
||||||
@@ -163,7 +163,7 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
return [[self.root searchableChildEntries] filteredArrayUsingPredicate:expiredPredicate];
|
return [[self.root searchableChildEntries] filteredArrayUsingPredicate:expiredPredicate];
|
||||||
}
|
}
|
||||||
/* Filter using predicates */
|
/* Filter using predicates */
|
||||||
NSArray *predicates = [self _filterPredicatesWithString:self.searchContext.searchString];
|
NSArray *predicates = [self _filterPredicatesWithString:context.searchString];
|
||||||
if(predicates) {
|
if(predicates) {
|
||||||
NSPredicate *fullFilter = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];
|
NSPredicate *fullFilter = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];
|
||||||
return [[self.root searchableChildEntries] filteredArrayUsingPredicate:fullFilter];
|
return [[self.root searchableChildEntries] filteredArrayUsingPredicate:fullFilter];
|
||||||
@@ -194,7 +194,7 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.notes CONTAINS[cd] %@", string]];
|
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.notes CONTAINS[cd] %@", string]];
|
||||||
}
|
}
|
||||||
if(searchInAllAttributes) {
|
if(searchInAllAttributes) {
|
||||||
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.tags CONTAINS[cd] %@", string]];
|
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.tagsString CONTAINS[cd] %@", string]];
|
||||||
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.uuid.UUIDString CONTAINS[cd] %@", string]];
|
[prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.uuid.UUIDString CONTAINS[cd] %@", string]];
|
||||||
|
|
||||||
NSPredicate *allAttributesPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
NSPredicate *allAttributesPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
||||||
|
|||||||
@@ -178,8 +178,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
if(!self.fileURL) {
|
if(!self.fileURL) {
|
||||||
return proposedExtension;
|
return proposedExtension;
|
||||||
}
|
}
|
||||||
NSString *actualExtension = self.fileURL.pathExtension;
|
return self.fileURL.pathExtension;
|
||||||
return actualExtension;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSData *)dataOfType:(NSString *)typeName error:(NSError * _Nullable __autoreleasing *)outError {
|
- (NSData *)dataOfType:(NSString *)typeName error:(NSError * _Nullable __autoreleasing *)outError {
|
||||||
|
|||||||
@@ -58,7 +58,8 @@
|
|||||||
- (IBAction)exportAsXML:(id)sender;
|
- (IBAction)exportAsXML:(id)sender;
|
||||||
- (IBAction)mergeWithOther:(id)sender;
|
- (IBAction)mergeWithOther:(id)sender;
|
||||||
- (IBAction)importFromXML:(id)sender;
|
- (IBAction)importFromXML:(id)sender;
|
||||||
- (IBAction)importFromPlugin:(id)sender;
|
- (IBAction)importWithPlugin:(id)sender;
|
||||||
|
- (IBAction)exportWithPlugin:(id)sender;
|
||||||
|
|
||||||
- (IBAction)lock:(id)sender;
|
- (IBAction)lock:(id)sender;
|
||||||
- (IBAction)createGroup:(id)sender;
|
- (IBAction)createGroup:(id)sender;
|
||||||
|
|||||||
@@ -122,6 +122,11 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
self.toolbar = [[NSToolbar alloc] initWithIdentifier:@"MainWindowToolbar"];
|
self.toolbar = [[NSToolbar alloc] initWithIdentifier:@"MainWindowToolbar"];
|
||||||
self.toolbar.autosavesConfiguration = YES;
|
self.toolbar.autosavesConfiguration = YES;
|
||||||
self.toolbar.allowsUserCustomization = YES;
|
self.toolbar.allowsUserCustomization = YES;
|
||||||
|
if (@available(macOS 10.14, *)) {
|
||||||
|
self.toolbar.centeredItemIdentifier = MPToolbarItemIdentifierSearch;
|
||||||
|
} else {
|
||||||
|
// to not do any magic here
|
||||||
|
}
|
||||||
self.toolbar.delegate = self.toolbarDelegate;
|
self.toolbar.delegate = self.toolbarDelegate;
|
||||||
self.window.toolbar = self.toolbar;
|
self.window.toolbar = self.toolbar;
|
||||||
self.toolbarDelegate.toolbar = self.toolbar;
|
self.toolbarDelegate.toolbar = self.toolbar;
|
||||||
@@ -279,12 +284,12 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)importFromPlugin:(id)sender {
|
- (void)importWithPlugin:(id)sender {
|
||||||
if(![sender isKindOfClass:NSMenuItem.class]) {
|
if(![sender isKindOfClass:NSMenuItem.class]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NSMenuItem *menuItem = sender;
|
NSMenuItem *menuItem = sender;
|
||||||
if(![menuItem.representedObject isKindOfClass:NSDictionary.class]) {
|
if(![menuItem.representedObject isKindOfClass:NSString.class]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,12 +297,39 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
if(!sheetWindow) {
|
if(!sheetWindow) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MPPlugin<MPImportPlugin> *importPlugin;
|
NSString *bundleIdentifier = menuItem.representedObject;
|
||||||
|
MPPlugin<MPImportPlugin> *importPlugin = (MPPlugin<MPImportPlugin> *)[MPPluginHost.sharedHost pluginWithBundleIdentifier:bundleIdentifier];
|
||||||
NSOpenPanel *openPanel = NSOpenPanel.openPanel;
|
NSOpenPanel *openPanel = NSOpenPanel.openPanel;
|
||||||
[importPlugin prepareOpenPanel:openPanel];
|
[importPlugin prepareOpenPanel:openPanel];
|
||||||
[openPanel beginSheetModalForWindow:sheetWindow completionHandler:^(NSModalResponse result) {
|
[openPanel beginSheetModalForWindow:sheetWindow completionHandler:^(NSModalResponse result) {
|
||||||
KPKTree *importedTree = [importPlugin treeForRunningOpenPanel:openPanel withResponse:result];
|
if(result == NSModalResponseOK) {
|
||||||
|
KPKTree *importedTree = [importPlugin treeForRunningOpenPanel:openPanel];
|
||||||
[self.document importTree:importedTree];
|
[self.document importTree:importedTree];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)exportWithPlugin:(id)sender {
|
||||||
|
if(![sender isKindOfClass:NSMenuItem.class]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSMenuItem *menuItem = sender;
|
||||||
|
if(![menuItem.representedObject isKindOfClass:NSString.class]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSWindow *sheetWindow = ((MPDocument *)self.document).windowForSheet;
|
||||||
|
if(!sheetWindow) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSString *bundleIdentifier = menuItem.representedObject;
|
||||||
|
MPPlugin<MPExportPlugin> *exportPlugin = (MPPlugin<MPExportPlugin> *)[MPPluginHost.sharedHost pluginWithBundleIdentifier:bundleIdentifier];
|
||||||
|
NSSavePanel *savePanel = NSSavePanel.savePanel;
|
||||||
|
[exportPlugin prepareSavePanel:savePanel];
|
||||||
|
[savePanel beginSheetModalForWindow:sheetWindow completionHandler:^(NSModalResponse result) {
|
||||||
|
if(result == NSModalResponseOK) {
|
||||||
|
[exportPlugin exportTree:((MPDocument *)self.document).tree forRunningSavePanel:savePanel];
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -464,7 +496,7 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
id<MPTargetNodeResolving> entryResolver = [NSApp targetForAction:@selector(currentTargetEntries)];
|
id<MPTargetNodeResolving> entryResolver = [NSApp targetForAction:@selector(currentTargetEntries)];
|
||||||
NSArray *entries = entryResolver.currentTargetEntries;
|
NSArray *entries = entryResolver.currentTargetEntries;
|
||||||
if(entries.count == 1) {
|
if(entries.count == 1) {
|
||||||
[[MPAutotypeDaemon defaultDaemon] performAutotypeForEntry:entries.firstObject];
|
[MPAutotypeDaemon.defaultDaemon performAutotypeForEntry:entries.firstObject];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
|||||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||||
switch([MPActionHelper typeForAction:menuItem.action]) {
|
switch([MPActionHelper typeForAction:menuItem.action]) {
|
||||||
case MPActionToggleQuicklook: {
|
case MPActionToggleQuicklook: {
|
||||||
BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyEnableQuicklookPreview];
|
BOOL enabled = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyEnableQuicklookPreview];
|
||||||
return enabled ? [self acceptsPreviewPanelControl:nil] : NO;
|
return enabled ? [self acceptsPreviewPanelControl:nil] : NO;
|
||||||
case MPActionRemoveAttachment:
|
case MPActionRemoveAttachment:
|
||||||
return !self.representedEntry.isHistory;
|
return !self.representedEntry.isHistory;
|
||||||
@@ -323,16 +323,16 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
|||||||
|
|
||||||
- (void)endPreviewPanelControl:(QLPreviewPanel *)panel {
|
- (void)endPreviewPanelControl:(QLPreviewPanel *)panel {
|
||||||
MPTemporaryFileStorage *storage = (MPTemporaryFileStorage *)panel.dataSource;
|
MPTemporaryFileStorage *storage = (MPTemporaryFileStorage *)panel.dataSource;
|
||||||
[[MPTemporaryFileStorageCenter defaultCenter] unregisterStorage:storage];
|
[MPTemporaryFileStorageCenter.defaultCenter unregisterStorage:storage];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_updatePreviewItemForPanel:(QLPreviewPanel *)panel {
|
- (void)_updatePreviewItemForPanel:(QLPreviewPanel *)panel {
|
||||||
NSInteger row = [self.attachmentTableView selectedRow];
|
NSInteger row = self.attachmentTableView.selectedRow;
|
||||||
NSAssert(row > -1, @"Row needs to be selected");
|
NSAssert(row > -1, @"Row needs to be selected");
|
||||||
KPKBinary *binary = self.representedEntry.binaries[row];
|
KPKBinary *binary = self.representedEntry.binaries[row];
|
||||||
MPTemporaryFileStorage *oldStorage = (MPTemporaryFileStorage *)panel.dataSource;
|
MPTemporaryFileStorage *oldStorage = (MPTemporaryFileStorage *)panel.dataSource;
|
||||||
[[MPTemporaryFileStorageCenter defaultCenter] unregisterStorage:oldStorage];
|
[MPTemporaryFileStorageCenter.defaultCenter unregisterStorage:oldStorage];
|
||||||
panel.dataSource = [[MPTemporaryFileStorageCenter defaultCenter] storageForBinary:binary];
|
panel.dataSource = [MPTemporaryFileStorageCenter.defaultCenter storageForBinary:binary];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
@@ -557,6 +557,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
|||||||
NSMenu *customFieldMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"ADD_CUSTOM_FIELD_CONTEXT_MENU", @"Menu displayed for adding special custom keys")];
|
NSMenu *customFieldMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"ADD_CUSTOM_FIELD_CONTEXT_MENU", @"Menu displayed for adding special custom keys")];
|
||||||
customFieldMenu.delegate = _addCustomFieldContextMenuDelegate;
|
customFieldMenu.delegate = _addCustomFieldContextMenuDelegate;
|
||||||
self.addCustomFieldButton.contextMenu = customFieldMenu;
|
self.addCustomFieldButton.contextMenu = customFieldMenu;
|
||||||
|
[self.addCustomFieldButton setEnabled:NO forSegment:MPContextButtonSegmentContextButton];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
@interface MPPluginTabelCellView : NSTableCellView
|
@interface MPExtendedTableCellView : NSTableCellView
|
||||||
|
|
||||||
@property (strong) IBOutlet NSTextField *addionalTextField;
|
@property (strong) IBOutlet NSTextField *addionalTextField;
|
||||||
|
|
||||||
@@ -20,9 +20,9 @@
|
|||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "MPPluginTabelCellView.h"
|
#import "MPExtendedTableCellView.h"
|
||||||
|
|
||||||
@implementation MPPluginTabelCellView
|
@implementation MPExtendedTableCellView
|
||||||
|
|
||||||
- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
|
- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
|
||||||
super.backgroundStyle = backgroundStyle;
|
super.backgroundStyle = backgroundStyle;
|
||||||
@@ -32,6 +32,7 @@
|
|||||||
@property (strong) IBOutlet NSPopUpButton *idleTimeOutPopup;
|
@property (strong) IBOutlet NSPopUpButton *idleTimeOutPopup;
|
||||||
@property (strong) IBOutlet NSButton *lockOnSleepCheckButton;
|
@property (strong) IBOutlet NSButton *lockOnSleepCheckButton;
|
||||||
@property (strong) IBOutlet NSButton *lockOnLogoutCheckButton;
|
@property (strong) IBOutlet NSButton *lockOnLogoutCheckButton;
|
||||||
|
@property (strong) IBOutlet NSButton *lockOnScreenSleepCheckButton;
|
||||||
@property (strong) IBOutlet NSButton *reopenLastDatabase;
|
@property (strong) IBOutlet NSButton *reopenLastDatabase;
|
||||||
@property (strong) IBOutlet NSButton *enableAutosaveCheckButton;
|
@property (strong) IBOutlet NSButton *enableAutosaveCheckButton;
|
||||||
@property (strong) IBOutlet NSButton *rememberKeyFileCheckButton;
|
@property (strong) IBOutlet NSButton *rememberKeyFileCheckButton;
|
||||||
|
|||||||
@@ -50,6 +50,7 @@
|
|||||||
[self.preventUniversalClipboardSupportCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPreventUniversalClipboard] options:nil];
|
[self.preventUniversalClipboardSupportCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPreventUniversalClipboard] options:nil];
|
||||||
[self.lockOnSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil];
|
[self.lockOnSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil];
|
||||||
[self.lockOnLogoutCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil];
|
[self.lockOnLogoutCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil];
|
||||||
|
[self.lockOnScreenSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnScreenSleep] options:nil];
|
||||||
[self.idleTimeOutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil];
|
[self.idleTimeOutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil];
|
||||||
[self.reopenLastDatabase bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch] options:nil];
|
[self.reopenLastDatabase bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch] options:nil];
|
||||||
[self.enableAutosaveCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEnableAutosave] options:nil];
|
[self.enableAutosaveCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEnableAutosave] options:nil];
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
@property (nonatomic,assign) BOOL lockOnSleep;
|
@property (nonatomic,assign) BOOL lockOnSleep;
|
||||||
@property (nonatomic,assign) BOOL lockOnLogout;
|
@property (nonatomic,assign) BOOL lockOnLogout;
|
||||||
|
@property (nonatomic,assign) BOOL lockOnScreenSleep;
|
||||||
@property (nonatomic,assign) NSUInteger idleLockTime;
|
@property (nonatomic,assign) NSUInteger idleLockTime;
|
||||||
@property (nonatomic,strong) id localEventHandler;
|
@property (nonatomic,strong) id localEventHandler;
|
||||||
@property (nonatomic,strong) NSTimer *idleCheckTimer;
|
@property (nonatomic,strong) NSTimer *idleCheckTimer;
|
||||||
@@ -59,6 +60,7 @@ static MPLockDaemon *_sharedInstance;
|
|||||||
[self bind:NSStringFromSelector(@selector(lockOnSleep)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil];
|
[self bind:NSStringFromSelector(@selector(lockOnSleep)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil];
|
||||||
[self bind:NSStringFromSelector(@selector(idleLockTime)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil];
|
[self bind:NSStringFromSelector(@selector(idleLockTime)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil];
|
||||||
[self bind:NSStringFromSelector(@selector(lockOnLogout)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil];
|
[self bind:NSStringFromSelector(@selector(lockOnLogout)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil];
|
||||||
|
[self bind:NSStringFromSelector(@selector(lockOnScreenSleep)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnScreenSleep] options:nil];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -95,6 +97,18 @@ static MPLockDaemon *_sharedInstance;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setLockOnScreenSleep:(BOOL)lockOnScreenSleep {
|
||||||
|
if(_lockOnScreenSleep != lockOnScreenSleep) {
|
||||||
|
_lockOnScreenSleep = lockOnScreenSleep;
|
||||||
|
if(_lockOnScreenSleep) {
|
||||||
|
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willScreenSleepNotification:) name:NSWorkspaceScreensDidSleepNotification object:nil];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceScreensDidSleepNotification object:nil];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setIdleLockTime:(NSUInteger)idleLockTime {
|
- (void)setIdleLockTime:(NSUInteger)idleLockTime {
|
||||||
if(_idleLockTime != idleLockTime) {
|
if(_idleLockTime != idleLockTime) {
|
||||||
_idleLockTime = idleLockTime;
|
_idleLockTime = idleLockTime;
|
||||||
@@ -113,6 +127,9 @@ static MPLockDaemon *_sharedInstance;
|
|||||||
- (void)_willSleepNotification:(NSNotification *)notification {
|
- (void)_willSleepNotification:(NSNotification *)notification {
|
||||||
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
|
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
|
||||||
}
|
}
|
||||||
|
- (void)_willScreenSleepNotification:(NSNotification *)notification {
|
||||||
|
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)_checkIdleTime:(NSTimer *)timer {
|
- (void)_checkIdleTime:(NSTimer *)timer {
|
||||||
if(timer != self.idleCheckTimer) {
|
if(timer != self.idleCheckTimer) {
|
||||||
|
|||||||
@@ -60,10 +60,14 @@
|
|||||||
self.window.alphaValue = 0;
|
self.window.alphaValue = 0;
|
||||||
self.window.opaque = NO;
|
self.window.opaque = NO;
|
||||||
self.window.hasShadow = YES;
|
self.window.hasShadow = YES;
|
||||||
|
self.window.backgroundColor = NSColor.clearColor;
|
||||||
|
|
||||||
self.textField.cell.backgroundStyle = NSBackgroundStyleLowered;
|
self.textField.cell.backgroundStyle = NSBackgroundStyleLowered;
|
||||||
self.imageView.cell.backgroundStyle = NSBackgroundStyleDark;
|
self.imageView.cell.backgroundStyle = NSBackgroundStyleEmphasized;
|
||||||
((NSImageCell *)self.imageView.cell).imageAlignment = NSImageAlignCenter;
|
((NSImageCell *)self.imageView.cell).imageAlignment = NSImageAlignCenter;
|
||||||
|
if (@available(macOS 10.14, *)) {
|
||||||
|
self.imageView.contentTintColor = NSColor.textColor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)displayOverlayImage:(NSImage *)imageOrNil label:(NSString *)labelOrNil atView:(NSView *)view {
|
- (void)displayOverlayImage:(NSImage *)imageOrNil label:(NSString *)labelOrNil atView:(NSView *)view {
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
@property (weak) IBOutlet MPPathControl *keyPathControl;
|
@property (weak) IBOutlet MPPathControl *keyPathControl;
|
||||||
@property (weak) IBOutlet NSImageView *messageImageView;
|
@property (weak) IBOutlet NSImageView *messageImageView;
|
||||||
@property (weak) IBOutlet NSTextField *messageInfoTextField;
|
@property (weak) IBOutlet NSTextField *messageInfoTextField;
|
||||||
|
@property (strong) IBOutlet NSTextField *keyFileWarningTextField;
|
||||||
@property (weak) IBOutlet NSButton *togglePasswordButton;
|
@property (weak) IBOutlet NSButton *togglePasswordButton;
|
||||||
@property (weak) IBOutlet NSButton *enablePasswordCheckBox;
|
@property (weak) IBOutlet NSButton *enablePasswordCheckBox;
|
||||||
@property (weak) IBOutlet NSButton *unlockButton;
|
@property (weak) IBOutlet NSButton *unlockButton;
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
@property (assign) BOOL showPassword;
|
@property (assign) BOOL showPassword;
|
||||||
@property (nonatomic, assign) BOOL enablePassword;
|
@property (nonatomic, assign) BOOL enablePassword;
|
||||||
@property (copy) passwordInputCompletionBlock completionHandler;
|
@property (copy) passwordInputCompletionBlock completionHandler;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPPasswordInputController
|
@implementation MPPasswordInputController
|
||||||
@@ -72,6 +74,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didSetKeyURL:) name:MPPathControlDidSetURLNotification object:self.keyPathControl];
|
||||||
self.messageImageView.image = [NSImage imageNamed:NSImageNameCaution];
|
self.messageImageView.image = [NSImage imageNamed:NSImageNameCaution];
|
||||||
[self.passwordTextField bind:NSStringFromSelector(@selector(showPassword)) toObject:self withKeyPath:NSStringFromSelector(@selector(showPassword)) options:nil];
|
[self.passwordTextField bind:NSStringFromSelector(@selector(showPassword)) toObject:self withKeyPath:NSStringFromSelector(@selector(showPassword)) options:nil];
|
||||||
[self.togglePasswordButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(showPassword)) options:nil];
|
[self.togglePasswordButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(showPassword)) options:nil];
|
||||||
@@ -211,4 +214,29 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)_didSetKeyURL:(NSNotification *)notification {
|
||||||
|
if(notification.object != self.keyPathControl) {
|
||||||
|
return; // wrong sender
|
||||||
|
}
|
||||||
|
NSDocument *document = (NSDocument *)self.windowController.document;
|
||||||
|
NSData *keyFileData = [NSData dataWithContentsOfURL:self.keyPathControl.URL];
|
||||||
|
KPKFileVersion keyFileVersion = [KPKFormat.sharedFormat fileVersionForData:keyFileData];
|
||||||
|
BOOL isKdbDatabaseFile = (keyFileVersion.format != KPKDatabaseFormatUnknown);
|
||||||
|
if(isKdbDatabaseFile) {
|
||||||
|
if([document.fileURL isEqual:self.keyPathControl.URL]) {
|
||||||
|
self.keyFileWarningTextField.stringValue = NSLocalizedString(@"WARNING_CURRENT_DATABASE_FILE_SELECTED_AS_KEY_FILE", "Error message displayed when the current database file is also set as the key file");
|
||||||
|
self.keyFileWarningTextField.hidden = NO;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.keyFileWarningTextField.stringValue = NSLocalizedString(@"WARNING_DATABASE_FILE_SELECTED_AS_KEY_FILE", "Error message displayed when a keepass database file is set as the key file");
|
||||||
|
self.keyFileWarningTextField.hidden = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.keyFileWarningTextField.stringValue = @"";
|
||||||
|
self.keyFileWarningTextField.hidden = YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ NSString *const MPPasteBoardControllerDidClearClipboard = @"com.hicknhack.macpas
|
|||||||
|
|
||||||
- (void)stashObjects {
|
- (void)stashObjects {
|
||||||
self.stashedObjects = [NSMutableArray array];
|
self.stashedObjects = [NSMutableArray array];
|
||||||
for (NSPasteboardItem *item in NSPasteboard.generalPasteboard.pasteboardItems) {
|
for(NSPasteboardItem *item in NSPasteboard.generalPasteboard.pasteboardItems) {
|
||||||
NSPasteboardItem *newItem = [[NSPasteboardItem alloc] init];
|
NSPasteboardItem *newItem = [[NSPasteboardItem alloc] init];
|
||||||
for (NSString *type in item.types) {
|
for (NSString *type in item.types) {
|
||||||
/* mutable copy to ensure actual deep copy */
|
/* mutable copy to ensure actual deep copy */
|
||||||
@@ -85,7 +85,7 @@ NSString *const MPPasteBoardControllerDidClearClipboard = @"com.hicknhack.macpas
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)restoreObjects {
|
- (void)restoreObjects {
|
||||||
if (self.stashedObjects) {
|
if(self.stashedObjects) {
|
||||||
[NSPasteboard.generalPasteboard clearContents];
|
[NSPasteboard.generalPasteboard clearContents];
|
||||||
[NSPasteboard.generalPasteboard writeObjects:self.stashedObjects];
|
[NSPasteboard.generalPasteboard writeObjects:self.stashedObjects];
|
||||||
self.stashedObjects = nil;
|
self.stashedObjects = nil;
|
||||||
|
|||||||
17
MacPass/MPPathCell.h
Normal file
17
MacPass/MPPathCell.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// MPPathCell.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 14.01.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface MPPathCell : NSPathCell
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
23
MacPass/MPPathCell.m
Normal file
23
MacPass/MPPathCell.m
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// MPPathCell.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 14.01.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPPathCell.h"
|
||||||
|
#import "MPPathControl+Private.h"
|
||||||
|
|
||||||
|
@implementation MPPathCell
|
||||||
|
|
||||||
|
- (void)setURL:(NSURL *)URL {
|
||||||
|
super.URL = URL;
|
||||||
|
if([self.controlView isKindOfClass:MPPathControl.class]) {
|
||||||
|
MPPathControl *pc = (MPPathControl *)self.controlView;
|
||||||
|
[pc _postDidSetURLNotification];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
22
MacPass/MPPathControl+Private.h
Normal file
22
MacPass/MPPathControl+Private.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
//
|
||||||
|
// MPPathControl+Private.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 14.01.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
|
||||||
|
#import "MPPathControl.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface MPPathControl ()
|
||||||
|
|
||||||
|
- (void)_postDidSetURLNotification;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
@@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
APPKIT_EXTERN NSString *const MPPathControlDidSetURLNotification;
|
||||||
|
|
||||||
@interface MPPathControl : NSPathControl <NSPathControlDelegate>
|
@interface MPPathControl : NSPathControl <NSPathControlDelegate>
|
||||||
|
|
||||||
- (IBAction)showOpenPanel:(id _Nullable)sender;
|
- (IBAction)showOpenPanel:(id _Nullable)sender;
|
||||||
|
|||||||
@@ -7,9 +7,18 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPPathControl.h"
|
#import "MPPathControl.h"
|
||||||
|
#import "MPPathControl+Private.h"
|
||||||
|
|
||||||
|
#import "MPPathCell.h"
|
||||||
|
|
||||||
|
NSString *const MPPathControlDidSetURLNotification = @"MPPathControlDidSetURLNotification";
|
||||||
|
|
||||||
@implementation MPPathControl
|
@implementation MPPathControl
|
||||||
|
|
||||||
|
+ (Class)cellClass{
|
||||||
|
return MPPathCell.class;
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)canBecomeKeyView {
|
- (BOOL)canBecomeKeyView {
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
@@ -25,15 +34,27 @@
|
|||||||
- (instancetype)initWithFrame:(NSRect)frameRect {
|
- (instancetype)initWithFrame:(NSRect)frameRect {
|
||||||
self = [super initWithFrame:frameRect];
|
self = [super initWithFrame:frameRect];
|
||||||
self.delegate = self;
|
self.delegate = self;
|
||||||
|
[self _setupCell];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithCoder:(NSCoder *)coder {
|
- (instancetype)initWithCoder:(NSCoder *)coder {
|
||||||
|
/* FIXME: this doesn't work well anymore. Need more work, see: https://www.mikeash.com/pyblog/custom-nscells-done-right.html */
|
||||||
self = [super initWithCoder:coder];
|
self = [super initWithCoder:coder];
|
||||||
self.delegate = self;
|
self.delegate = self;
|
||||||
|
[self _setupCell];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)_setupCell {
|
||||||
|
if([self.cell isKindOfClass:MPPathCell.class]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:self.cell];
|
||||||
|
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:archive];
|
||||||
|
self.cell = [[MPPathCell alloc] initWithCoder:unarchiver];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)willOpenMenu:(NSMenu *)menu withEvent:(NSEvent *)event {
|
- (void)willOpenMenu:(NSMenu *)menu withEvent:(NSEvent *)event {
|
||||||
if(!self.URL) {
|
if(!self.URL) {
|
||||||
[menu cancelTracking];
|
[menu cancelTracking];
|
||||||
@@ -47,10 +68,11 @@
|
|||||||
if([self.delegate respondsToSelector:@selector(pathControl:willDisplayOpenPanel:)]) {
|
if([self.delegate respondsToSelector:@selector(pathControl:willDisplayOpenPanel:)]) {
|
||||||
[self.delegate pathControl:self willDisplayOpenPanel:panel];
|
[self.delegate pathControl:self willDisplayOpenPanel:panel];
|
||||||
}
|
}
|
||||||
NSModalResponse result = [panel runModal];
|
[panel beginWithCompletionHandler:^(NSModalResponse result) {
|
||||||
if(result == NSModalResponseOK) {
|
if(result == NSModalResponseOK) {
|
||||||
self.URL = panel.URLs.firstObject;
|
self.URL = panel.URLs.firstObject;
|
||||||
}
|
}
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)pathControl:(NSPathControl *)pathControl willPopUpMenu:(NSMenu *)menu {
|
- (void)pathControl:(NSPathControl *)pathControl willPopUpMenu:(NSMenu *)menu {
|
||||||
@@ -58,7 +80,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(@available(macOS 10.11, *)) {
|
if(@available(macOS 10.11, *)) {
|
||||||
NSLog(@"Skipping 10.10 pathControl:willPopUpMenu");
|
// skip
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(!self.URL) {
|
if(!self.URL) {
|
||||||
@@ -77,4 +99,8 @@
|
|||||||
openPanel.prompt = NSLocalizedString(@"CHOOSE_FILE_BUTTON_TITLE", @"Button title in the key file selection dialog for selecting a key");
|
openPanel.prompt = NSLocalizedString(@"CHOOSE_FILE_BUTTON_TITLE", @"Button title in the key file selection dialog for selecting a key");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)_postDidSetURLNotification {
|
||||||
|
[NSNotificationCenter.defaultCenter postNotificationName:MPPathControlDidSetURLNotification object:self];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -139,12 +139,45 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
|
|||||||
For example, if a CVS import might need user input on how to handle the parsed files this is the place to show it.
|
For example, if a CVS import might need user input on how to handle the parsed files this is the place to show it.
|
||||||
|
|
||||||
@param panel The open panel used for selecting what file(s) to import
|
@param panel The open panel used for selecting what file(s) to import
|
||||||
@param response The response for of the user for running the panel
|
|
||||||
@return The KPKTree constructed from the selected input file(s)
|
@return The KPKTree constructed from the selected input file(s)
|
||||||
*/
|
*/
|
||||||
- (KPKTree *)treeForRunningOpenPanel:(NSOpenPanel *)panel withResponse:(NSModalResponse)response;
|
- (nullable KPKTree *)treeForRunningOpenPanel:(NSOpenPanel *)panel;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@protocol MPExportPlugin <NSObject>
|
||||||
|
|
||||||
|
@required
|
||||||
|
/**
|
||||||
|
Called by the host to update a menu item for exporting.
|
||||||
|
You are supposed to update the title to something meaningfull.
|
||||||
|
Target and action will get set by host, so do not rely on them
|
||||||
|
|
||||||
|
@param item MenuItem that will be used to export via the plugin
|
||||||
|
*/
|
||||||
|
- (void)prepareExportMenuItem:(NSMenuItem *)item;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called by the host when an export is about to happen.
|
||||||
|
Update the panel to work for all the files and formats you can export
|
||||||
|
|
||||||
|
@param panel The panel used to select the export destination
|
||||||
|
*/
|
||||||
|
- (void)prepareSavePanel:(NSSavePanel *)panel;
|
||||||
|
/**
|
||||||
|
This will get called when the save panel is closed by the user.
|
||||||
|
You should retrieve any results from the panel and act accordingly.
|
||||||
|
|
||||||
|
If you need custom UI in the process, you can show them here.
|
||||||
|
For example, if a CSV export might need user input to configure its output this is the place to show it.
|
||||||
|
|
||||||
|
@param tree The current tree to be exported
|
||||||
|
@param panel The save panel that was used to specify the export destination
|
||||||
|
*/
|
||||||
|
- (void)exportTree:(KPKTree *)tree forRunningSavePanel:(NSSavePanel *)panel;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
#pragma mark Deprecated
|
#pragma mark Deprecated
|
||||||
|
|
||||||
@interface MPPlugin (Deprecated)
|
@interface MPPlugin (Deprecated)
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey;
|
|||||||
@class MPPlugin;
|
@class MPPlugin;
|
||||||
@class KPKEntry;
|
@class KPKEntry;
|
||||||
@protocol MPImportPlugin;
|
@protocol MPImportPlugin;
|
||||||
|
@protocol MPExportPlugin;
|
||||||
@protocol MPAutotypeWindowTitleResolverPlugin;
|
@protocol MPAutotypeWindowTitleResolverPlugin;
|
||||||
|
|
||||||
@interface MPPluginHost : NSObject
|
@interface MPPluginHost : NSObject
|
||||||
@@ -53,9 +54,10 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey;
|
|||||||
- (NSArray *)avilableMenuItemsForEntries:(NSArray <KPKEntry *>*)entries;
|
- (NSArray *)avilableMenuItemsForEntries:(NSArray <KPKEntry *>*)entries;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface MPPluginHost (MPImportPluginSupport)
|
@interface MPPluginHost (MPImportExportPluginSupport)
|
||||||
|
|
||||||
@property (readonly, copy) NSArray <MPPlugin<MPImportPlugin> __kindof*> *importPlugins;
|
@property (readonly, copy) NSArray <MPPlugin<MPImportPlugin> __kindof*> *importPlugins;
|
||||||
|
@property (readonly, copy) NSArray <MPPlugin<MPExportPlugin> __kindof*> *exportPlugins;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -459,11 +459,14 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
NSString *const MPPluginBundleIdentifierKey = @"MPPluginBundleIdentifierKey";
|
NSString *const MPPluginBundleIdentifierKey = @"MPPluginBundleIdentifierKey";
|
||||||
NSString *const MPImportPluginUTIKey = @"MPImportPluginUTIKey";
|
NSString *const MPImportPluginUTIKey = @"MPImportPluginUTIKey";
|
||||||
|
|
||||||
@implementation MPPluginHost (MPImportPluginSupport)
|
@implementation MPPluginHost (MPImportExportPluginSupport)
|
||||||
|
|
||||||
- (NSArray<MPPlugin *> *)importPlugins {
|
- (NSArray<MPPlugin *> *)importPlugins {
|
||||||
return [self _pluginsConformingToProtocoll:@protocol(MPImportPlugin)];
|
return [self _pluginsConformingToProtocoll:@protocol(MPImportPlugin)];
|
||||||
}
|
}
|
||||||
|
- (NSArray<MPPlugin<MPImportPlugin> *> *)exportPlugins {
|
||||||
|
return [self _pluginsConformingToProtocoll:@protocol(MPExportPlugin)];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPPluginPreferencesController.h"
|
#import "MPPluginPreferencesController.h"
|
||||||
#import "MPPluginTabelCellView.h"
|
#import "MPExtendedTableCellView.h"
|
||||||
#import "MPPluginHost.h"
|
#import "MPPluginHost.h"
|
||||||
#import "MPPlugin.h"
|
#import "MPPlugin.h"
|
||||||
#import "MPPlugin_Private.h"
|
#import "MPPlugin_Private.h"
|
||||||
@@ -98,7 +98,7 @@ typedef NS_ENUM(NSUInteger, MPPluginSegmentType) {
|
|||||||
|
|
||||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||||
MPPlugin *plugin = [self pluginForRow:row];
|
MPPlugin *plugin = [self pluginForRow:row];
|
||||||
MPPluginTabelCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil];
|
MPExtendedTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil];
|
||||||
if(plugin.enabled) {
|
if(plugin.enabled) {
|
||||||
view.textField.stringValue = plugin.name;
|
view.textField.stringValue = plugin.name;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#import "MPPluginRepositoryItem.h"
|
#import "MPPluginRepositoryItem.h"
|
||||||
#import "MPPluginVersionComparator.h"
|
#import "MPPluginVersionComparator.h"
|
||||||
#import "MPPluginStatusTableCellView.h"
|
#import "MPPluginStatusTableCellView.h"
|
||||||
|
#import "MPSettingsHelper.h"
|
||||||
|
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, MPPluginTableColumn) {
|
typedef NS_ENUM(NSUInteger, MPPluginTableColumn) {
|
||||||
@@ -39,7 +40,13 @@ typedef NS_ENUM(NSUInteger, MPPluginTableColumn) {
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
self.downloadedItems = [[NSMutableSet alloc] init];
|
self.downloadedItems = [[NSMutableSet alloc] init];
|
||||||
|
BOOL allowRemoteData = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyAllowRemoteFetchOfPluginRepository];
|
||||||
|
if(allowRemoteData) {
|
||||||
[self.updatedAtTextField bind:NSValueBinding toObject:MPPluginRepository.defaultRepository withKeyPath:NSStringFromSelector(@selector(updatedAt)) options:nil];
|
[self.updatedAtTextField bind:NSValueBinding toObject:MPPluginRepository.defaultRepository withKeyPath:NSStringFromSelector(@selector(updatedAt)) options:nil];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.updatedAtTextField.stringValue = NSLocalizedString(@"REPOSITORY_UPDATED_AT_LOCAL", @"Updated at text when the local plugin defintino is used");
|
||||||
|
}
|
||||||
[self _refreshRepository];
|
[self _refreshRepository];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
[menu addItemWithTitle:NSLocalizedString(@"URL","URL reference item") action:NULL keyEquivalent:@""];
|
[menu addItemWithTitle:NSLocalizedString(@"URL","URL reference item") action:NULL keyEquivalent:@""];
|
||||||
[menu addItemWithTitle:NSLocalizedString(@"NOTES","Notes reference item") action:NULL keyEquivalent:@""];
|
[menu addItemWithTitle:NSLocalizedString(@"NOTES","Notes reference item") action:NULL keyEquivalent:@""];
|
||||||
if(allowCustomAttributes) {
|
if(allowCustomAttributes) {
|
||||||
[menu addItemWithTitle:NSLocalizedString(@"CUSTOM_ATTRIBUTE","Curstom attribute reference item") action:NULL keyEquivalent:@""];
|
[menu addItemWithTitle:NSLocalizedString(@"CUSTOM_ATTRIBUTE","Custom attribute reference item") action:NULL keyEquivalent:@""];
|
||||||
}
|
}
|
||||||
NSArray *keys = @[ kKPKReferenceUUIDKey, kKPKReferenceTitleKey, kKPKReferenceUsernameKey, kKPKReferencePasswordKey, kKPKReferenceURLKey, kKPKReferenceNotesKey, @"S" ];
|
NSArray *keys = @[ kKPKReferenceUUIDKey, kKPKReferenceTitleKey, kKPKReferenceUsernameKey, kKPKReferencePasswordKey, kKPKReferenceURLKey, kKPKReferenceNotesKey, @"S" ];
|
||||||
[menu.itemArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
[menu.itemArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyBrowserBundleId;
|
|||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyLockOnSleep;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyLockOnSleep;
|
||||||
APPKIT_EXTERN NSString *const kMPSettingskeyLockOnLogout;
|
APPKIT_EXTERN NSString *const kMPSettingskeyLockOnLogout;
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyIdleLockTimeOut;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyIdleLockTimeOut;
|
||||||
|
APPKIT_EXTERN NSString *const kMPSettingskeyLockOnScreenSleep;
|
||||||
|
|
||||||
/* Autosaving states */
|
/* Autosaving states */
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyShowInspector;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyShowInspector;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ NSString *const kMPSettingsKeyFileChangeStrategy = @"FileCh
|
|||||||
NSString *const kMPSettingsKeyEnableAutosave = @"EnableAutosave";
|
NSString *const kMPSettingsKeyEnableAutosave = @"EnableAutosave";
|
||||||
NSString *const kMPSettingsKeyLockOnSleep = @"LockOnSleep";
|
NSString *const kMPSettingsKeyLockOnSleep = @"LockOnSleep";
|
||||||
NSString *const kMPSettingskeyLockOnLogout = @"LockOnLogout";
|
NSString *const kMPSettingskeyLockOnLogout = @"LockOnLogout";
|
||||||
|
NSString *const kMPSettingskeyLockOnScreenSleep = @"LockOnScreenSleep";
|
||||||
NSString *const kMPSettingsKeyIdleLockTimeOut = @"IdleLockTimeOut";
|
NSString *const kMPSettingsKeyIdleLockTimeOut = @"IdleLockTimeOut";
|
||||||
NSString *const kMPSettingsKeyShowInspector = @"ShowInspector";
|
NSString *const kMPSettingsKeyShowInspector = @"ShowInspector";
|
||||||
NSString *const kMPSettingsKeyEntryTableSortDescriptors = @"EntryTableSortDescriptors";
|
NSString *const kMPSettingsKeyEntryTableSortDescriptors = @"EntryTableSortDescriptors";
|
||||||
@@ -102,7 +103,7 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
|
|||||||
@implementation MPSettingsHelper
|
@implementation MPSettingsHelper
|
||||||
|
|
||||||
+ (void)setupDefaults {
|
+ (void)setupDefaults {
|
||||||
[[NSUserDefaults standardUserDefaults] registerDefaults:[self _standardDefaults]];
|
[NSUserDefaults.standardUserDefaults registerDefaults:[self _standardDefaults]];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)migrateDefaults {
|
+ (void)migrateDefaults {
|
||||||
@@ -125,23 +126,24 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
|
|||||||
standardDefaults = @{
|
standardDefaults = @{
|
||||||
kMPSettingsKeyShowInspector: @YES, // Show the Inspector by default
|
kMPSettingsKeyShowInspector: @YES, // Show the Inspector by default
|
||||||
kMPSettingsKeyPasteboardClearTimeout: @30, // 30 seconds
|
kMPSettingsKeyPasteboardClearTimeout: @30, // 30 seconds
|
||||||
kMPSettingsKeyClearPasteboardOnQuit: @YES,
|
kMPSettingsKeyClearPasteboardOnQuit: @YES, // Clear Clipboard on quit
|
||||||
kMPSettingsKeyPreventUniversalClipboard: @YES, // Disable Universal Clipboard by default
|
kMPSettingsKeyPreventUniversalClipboard: @YES, // Disable Universal Clipboard by default
|
||||||
kMPSettingsKeyOpenEmptyDatabaseOnLaunch: @NO,
|
kMPSettingsKeyOpenEmptyDatabaseOnLaunch: @NO,
|
||||||
kMPSettingsKeyReopenLastDatabaseOnLaunch: @YES,
|
kMPSettingsKeyReopenLastDatabaseOnLaunch: @YES,
|
||||||
kMPSettingsKeyFileChangeStrategy: @(MPFileChangeStrategyAsk), // Ask what to do on a file change!
|
kMPSettingsKeyFileChangeStrategy: @(MPFileChangeStrategyAsk), // Ask what to do on a file change!
|
||||||
kMPSettingsKeyLockOnSleep: @YES,
|
kMPSettingsKeyLockOnSleep: @YES,
|
||||||
kMPSettingskeyLockOnLogout: @NO,
|
kMPSettingskeyLockOnLogout: @NO,
|
||||||
kMPSettingsKeyIdleLockTimeOut: @0, // 5 minutes
|
kMPSettingskeyLockOnScreenSleep: @NO,
|
||||||
|
kMPSettingsKeyIdleLockTimeOut: @0, // Do not lock while idle by default
|
||||||
kMPSettingsKeyLegacyHideNotes: @NO,
|
kMPSettingsKeyLegacyHideNotes: @NO,
|
||||||
kMPSettingsKeyLegacyHidePassword: @YES,
|
kMPSettingsKeyLegacyHidePassword: @YES,
|
||||||
kMPSettingsKeyLegacyHideTitle: @NO,
|
kMPSettingsKeyLegacyHideTitle: @NO,
|
||||||
kMPSettingsKeyLegacyHideURL: @NO,
|
kMPSettingsKeyLegacyHideURL: @NO,
|
||||||
kMPSettingsKeyLegacyHideUsername: @NO,
|
kMPSettingsKeyLegacyHideUsername: @NO,
|
||||||
kMPSettingsKeyRememberKeyFilesForDatabases: @NO,
|
kMPSettingsKeyRememberKeyFilesForDatabases: @NO,
|
||||||
kMPSettingsKeySendCommandForControlKey: @YES,
|
kMPSettingsKeySendCommandForControlKey: @YES, // translate Ctrl to Cmd by default
|
||||||
kMPSettingsKeyEnableGlobalAutotype: @NO,
|
kMPSettingsKeyEnableGlobalAutotype: @NO, // Keep global autotype disabled by default
|
||||||
kMPSettingsKeyGlobalAutotypeKeyDataKey: DDHotKey.defaultHotKeyData,
|
kMPSettingsKeyGlobalAutotypeKeyDataKey: DDHotKey.defaultHotKeyData, // Cmd + Alt + M
|
||||||
kMPSettingsKeyDefaultGlobalAutotypeSequence: @"{USERNAME}{TAB}{PASSWORD}{ENTER}",
|
kMPSettingsKeyDefaultGlobalAutotypeSequence: @"{USERNAME}{TAB}{PASSWORD}{ENTER}",
|
||||||
kMPSettingsKeyAutotypeMatchTitle: @YES,
|
kMPSettingsKeyAutotypeMatchTitle: @YES,
|
||||||
kMPSettingsKeyAutotypeMatchURL: @NO,
|
kMPSettingsKeyAutotypeMatchURL: @NO,
|
||||||
@@ -193,7 +195,7 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
|
|||||||
+ (void)_removeDeprecatedValues {
|
+ (void)_removeDeprecatedValues {
|
||||||
/* Clear old style values */
|
/* Clear old style values */
|
||||||
for(NSString *key in [self _deprecatedSettingsKeys]) {
|
for(NSString *key in [self _deprecatedSettingsKeys]) {
|
||||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
|
[NSUserDefaults.standardUserDefaults removeObjectForKey:key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +208,7 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
|
|||||||
this was changed in 0.6. to parent.title
|
this was changed in 0.6. to parent.title
|
||||||
|
|
||||||
*/
|
*/
|
||||||
NSData *descriptorData = [[NSUserDefaults standardUserDefaults] dataForKey:kMPSettingsKeyEntryTableSortDescriptors];
|
NSData *descriptorData = [NSUserDefaults.standardUserDefaults dataForKey:kMPSettingsKeyEntryTableSortDescriptors];
|
||||||
if(!descriptorData) {
|
if(!descriptorData) {
|
||||||
return; // No user defaults
|
return; // No user defaults
|
||||||
}
|
}
|
||||||
@@ -217,27 +219,35 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
|
|||||||
if(descriptor.selector == @selector(compare:)
|
if(descriptor.selector == @selector(compare:)
|
||||||
|| [descriptor.key isEqualToString:@"timeInfo.modificationDate"]
|
|| [descriptor.key isEqualToString:@"timeInfo.modificationDate"]
|
||||||
|| [descriptor.key isEqualToString:@"parent.name"] ) {
|
|| [descriptor.key isEqualToString:@"parent.name"] ) {
|
||||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyEntryTableSortDescriptors];
|
[NSUserDefaults.standardUserDefaults removeObjectForKey:kMPSettingsKeyEntryTableSortDescriptors];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)_migrateURLDoubleClickPreferences {
|
+ (void)_migrateURLDoubleClickPreferences {
|
||||||
/* Default was NO so if the key was not set, we also get NO, which is what we want */
|
/*
|
||||||
BOOL openURL = [[NSUserDefaults standardUserDefaults] boolForKey:kMPDeprecatedSettingsKeyDoubleClickURLToLaunch];
|
Default was NO so if the key was not set the correct action now should be MPDoubleClickURLActionCopy
|
||||||
if(NO == openURL) {
|
But MPDoubleClickURLActionCopy is the default we cannot simply add this value.
|
||||||
[[NSUserDefaults standardUserDefaults] setInteger:MPDoubleClickURLActionOpen forKey:kMPSettingsKeyDoubleClickURLAction];
|
Hence we chose to only migrate a changed default and let the "old" default silenty be updated
|
||||||
|
This is a worth trade-off since the other solution will always re-set the default
|
||||||
|
*/
|
||||||
|
if(nil == [NSUserDefaults.standardUserDefaults objectForKey:kMPDeprecatedSettingsKeyDoubleClickURLToLaunch]) {
|
||||||
|
return; // the value was not set, do nothing since we cannot determine what to do
|
||||||
|
}
|
||||||
|
/* only update the settings if the defaults return an explicit set value */
|
||||||
|
if([NSUserDefaults.standardUserDefaults boolForKey:kMPDeprecatedSettingsKeyDoubleClickURLToLaunch]) {
|
||||||
|
[NSUserDefaults.standardUserDefaults setInteger:MPDoubleClickURLActionOpen forKey:kMPSettingsKeyDoubleClickURLAction];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)_migrateEntrySearchFlags {
|
+ (void)_migrateEntrySearchFlags {
|
||||||
/* Entry filters are now stored as archivd search context not just flags */
|
/* Entry filters are now stored as archived search context not just flags */
|
||||||
NSInteger flags = [[NSUserDefaults standardUserDefaults] integerForKey:kMPDeprecatedSettingsKeyEntrySearchFilterMode];
|
NSInteger flags = [NSUserDefaults.standardUserDefaults integerForKey:kMPDeprecatedSettingsKeyEntrySearchFilterMode];
|
||||||
if(flags != 0) {
|
if(flags != 0) {
|
||||||
MPEntrySearchContext *context = [[MPEntrySearchContext alloc] initWithString:nil flags:flags];
|
MPEntrySearchContext *context = [[MPEntrySearchContext alloc] initWithString:nil flags:flags];
|
||||||
NSData *contextData = [NSKeyedArchiver archivedDataWithRootObject:context];
|
NSData *contextData = [NSKeyedArchiver archivedDataWithRootObject:context];
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:contextData forKey:kMPSettingsKeyEntrySearchFilterContext];
|
[NSUserDefaults.standardUserDefaults setObject:contextData forKey:kMPSettingsKeyEntrySearchFilterContext];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +256,7 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
|
|||||||
Database file paths was stored as plain text in keyfile mapping.
|
Database file paths was stored as plain text in keyfile mapping.
|
||||||
We only need to store the key file url in plain text, thus hashing the path is sufficent
|
We only need to store the key file url in plain text, thus hashing the path is sufficent
|
||||||
*/
|
*/
|
||||||
NSDictionary<NSString *, NSString *> *currentMapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases];
|
NSDictionary<NSString *, NSString *> *currentMapping = [NSUserDefaults.standardUserDefaults dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases];
|
||||||
if(!currentMapping) {
|
if(!currentMapping) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -268,7 +278,7 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(didHash) {
|
if(didHash) {
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:hashedDict forKey:kMPSettingsKeyRememeberdKeysForDatabases];
|
[NSUserDefaults.standardUserDefaults setObject:hashedDict forKey:kMPSettingsKeyRememeberdKeysForDatabases];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,6 @@
|
|||||||
self = [super init];
|
self = [super init];
|
||||||
if(self) {
|
if(self) {
|
||||||
_binary = binary;
|
_binary = binary;
|
||||||
_loadScheduled = NO;
|
|
||||||
[MPTemporaryFileStorageCenter.defaultCenter registerStorage:self];
|
[MPTemporaryFileStorageCenter.defaultCenter registerStorage:self];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
@@ -64,17 +63,8 @@
|
|||||||
#pragma mark QLPreviewPanelDataSource
|
#pragma mark QLPreviewPanelDataSource
|
||||||
|
|
||||||
- (id<QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index {
|
- (id<QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index {
|
||||||
if(!self.temporaryFileURL && !self.loadScheduled) {
|
if(!self.temporaryFileURL) {
|
||||||
self.loadScheduled = YES;
|
[self _saveBinary:self.binary];
|
||||||
dispatch_queue_t defaultQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
|
|
||||||
dispatch_async(defaultQueue, ^{
|
|
||||||
BOOL success = [self _saveBinary:self.binary];
|
|
||||||
if(success){
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
|
||||||
[panel refreshCurrentPreviewItem];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -98,11 +88,22 @@
|
|||||||
#pragma mark Private
|
#pragma mark Private
|
||||||
|
|
||||||
- (BOOL)_saveBinary:(KPKBinary *)binary {
|
- (BOOL)_saveBinary:(KPKBinary *)binary {
|
||||||
if(!binary || !binary.data || !binary.name || [binary.name length] == 0) {
|
if(!binary || !binary.data || !binary.name || binary.name.length == 0) {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
NSString *fileName = [NSString stringWithFormat:@"%@_%@", NSProcessInfo.processInfo.globallyUniqueString, binary.name];
|
NSString *fileName = [NSString stringWithFormat:@"%@_%@", NSProcessInfo.processInfo.globallyUniqueString, binary.name];
|
||||||
self.temporaryFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:fileName]];
|
|
||||||
|
NSURL *userDesktop = [NSFileManager.defaultManager URLsForDirectory:NSDesktopDirectory inDomains:NSUserDomainMask].firstObject;
|
||||||
|
if(!userDesktop) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
NSError *error;
|
||||||
|
NSURL *tempURL = [NSFileManager.defaultManager URLForDirectory:NSItemReplacementDirectory inDomain:NSUserDomainMask appropriateForURL:userDesktop create:YES error:&error];
|
||||||
|
if(!tempURL) {
|
||||||
|
NSLog(@"Unable to create temporary directory for file preview: %@", error.description);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
self.temporaryFileURL = [tempURL URLByAppendingPathComponent:fileName isDirectory:NO];
|
||||||
|
|
||||||
BOOL success = [binary.data writeToURL:self.temporaryFileURL options:0 error:0];
|
BOOL success = [binary.data writeToURL:self.temporaryFileURL options:0 error:0];
|
||||||
if(!success) {
|
if(!success) {
|
||||||
@@ -133,6 +134,8 @@
|
|||||||
+ (void)_runCleanupForPath:(NSString *)path {
|
+ (void)_runCleanupForPath:(NSString *)path {
|
||||||
NSTask *task = [[NSTask alloc] init];
|
NSTask *task = [[NSTask alloc] init];
|
||||||
|
|
||||||
|
// FIXME: Remove when moving to 10.12 as deploy target
|
||||||
|
|
||||||
NSURL *srmURL = [NSURL fileURLWithPath:@"/usr/bin/srm"];
|
NSURL *srmURL = [NSURL fileURLWithPath:@"/usr/bin/srm"];
|
||||||
NSURL *rmURL = [NSURL fileURLWithPath:@"/bin/rm"];
|
NSURL *rmURL = [NSURL fileURLWithPath:@"/bin/rm"];
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,18 @@
|
|||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
#import <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierLock;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierAddGroup;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierAddEntry;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierDelete;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierAction;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierInspector;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierSearch;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierCopyUsername;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierCopyPassword;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierHistory;
|
||||||
|
APPKIT_EXTERN NSString *const MPToolbarItemIdentifierAutotype;
|
||||||
|
|
||||||
@class MPDocument;
|
@class MPDocument;
|
||||||
|
|
||||||
@interface MPToolbarDelegate : NSObject <NSToolbarDelegate, NSTextFieldDelegate>
|
@interface MPToolbarDelegate : NSObject <NSToolbarDelegate, NSTextFieldDelegate>
|
||||||
|
|||||||
@@ -38,17 +38,17 @@
|
|||||||
#import "NSApplication+MPAdditions.h"
|
#import "NSApplication+MPAdditions.h"
|
||||||
#import "MPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
|
|
||||||
NSString *const MPToolbarItemLock = @"TOOLBAR_LOCK";
|
NSString *const MPToolbarItemIdentifierLock = @"TOOLBAR_LOCK";
|
||||||
NSString *const MPToolbarItemAddGroup = @"TOOLBAR_ADD_GROUP";
|
NSString *const MPToolbarItemIdentifierAddGroup = @"TOOLBAR_ADD_GROUP";
|
||||||
NSString *const MPToolbarItemAddEntry = @"TOOLBAR_ADD_ENTRY";
|
NSString *const MPToolbarItemIdentifierAddEntry = @"TOOLBAR_ADD_ENTRY";
|
||||||
NSString *const MPToolbarItemDelete =@"TOOLBAR_DELETE";
|
NSString *const MPToolbarItemIdentifierDelete = @"TOOLBAR_DELETE";
|
||||||
NSString *const MPToolbarItemAction = @"TOOLBAR_ACTION";
|
NSString *const MPToolbarItemIdentifierAction = @"TOOLBAR_ACTION";
|
||||||
NSString *const MPToolbarItemInspector = @"TOOLBAR_INSPECTOR";
|
NSString *const MPToolbarItemIdentifierInspector = @"TOOLBAR_INSPECTOR";
|
||||||
NSString *const MPToolbarItemSearch = @"TOOLBAR_SEARCH";
|
NSString *const MPToolbarItemIdentifierSearch = @"TOOLBAR_SEARCH";
|
||||||
NSString *const MPToolbarItemCopyUsername = @"TOOLBAR_COPY_USERNAME";
|
NSString *const MPToolbarItemIdentifierCopyUsername = @"TOOLBAR_COPY_USERNAME";
|
||||||
NSString *const MPToolbarItemCopyPassword = @"TOOLBAR_COPY_PASSWORD";
|
NSString *const MPToolbarItemIdentifierCopyPassword = @"TOOLBAR_COPY_PASSWORD";
|
||||||
NSString *const MPToolbarItemHistory = @"TOOLBAR_HISTORY";
|
NSString *const MPToolbarItemIdentifierHistory = @"TOOLBAR_HISTORY";
|
||||||
NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
NSString *const MPToolbarItemIdentifierAutotype = @"TOOLBAR_AUTOTYPE";
|
||||||
|
|
||||||
@interface MPToolbarDelegate() {
|
@interface MPToolbarDelegate() {
|
||||||
MPAddEntryContextMenuDelegate *_addEntryMenuDelegate;
|
MPAddEntryContextMenuDelegate *_addEntryMenuDelegate;
|
||||||
@@ -72,27 +72,28 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
if (self) {
|
if (self) {
|
||||||
_didShowToolbarForSearch = NO;
|
_didShowToolbarForSearch = NO;
|
||||||
_didAddSearchfieldForSearch = NO;
|
_didAddSearchfieldForSearch = NO;
|
||||||
_toolbarIdentifiers = @[ MPToolbarItemAddEntry,
|
_toolbarIdentifiers = @[ MPToolbarItemIdentifierAddEntry,
|
||||||
MPToolbarItemDelete,
|
MPToolbarItemIdentifierDelete,
|
||||||
MPToolbarItemAddGroup,
|
MPToolbarItemIdentifierAddGroup,
|
||||||
MPToolbarItemAction,
|
MPToolbarItemIdentifierAction,
|
||||||
MPToolbarItemCopyPassword,
|
MPToolbarItemIdentifierCopyPassword,
|
||||||
MPToolbarItemCopyUsername,
|
MPToolbarItemIdentifierCopyUsername,
|
||||||
NSToolbarFlexibleSpaceItemIdentifier,
|
NSToolbarFlexibleSpaceItemIdentifier,
|
||||||
MPToolbarItemSearch,
|
MPToolbarItemIdentifierSearch,
|
||||||
MPToolbarItemLock,
|
MPToolbarItemIdentifierLock,
|
||||||
MPToolbarItemInspector,
|
MPToolbarItemIdentifierInspector,
|
||||||
MPToolbarItemHistory,
|
MPToolbarItemIdentifierHistory,
|
||||||
MPToolbarItemAutotype ];
|
MPToolbarItemIdentifierAutotype ];
|
||||||
_defaultToolbarIdentifiers = @[ MPToolbarItemAddEntry,
|
_defaultToolbarIdentifiers = @[ MPToolbarItemIdentifierAddEntry,
|
||||||
MPToolbarItemDelete,
|
MPToolbarItemIdentifierDelete,
|
||||||
MPToolbarItemAddGroup,
|
MPToolbarItemIdentifierAddGroup,
|
||||||
MPToolbarItemAutotype,
|
MPToolbarItemIdentifierAutotype,
|
||||||
MPToolbarItemAction,
|
MPToolbarItemIdentifierAction,
|
||||||
NSToolbarFlexibleSpaceItemIdentifier,
|
NSToolbarFlexibleSpaceItemIdentifier,
|
||||||
MPToolbarItemSearch,
|
MPToolbarItemIdentifierSearch,
|
||||||
MPToolbarItemLock,
|
NSToolbarFlexibleSpaceItemIdentifier,
|
||||||
MPToolbarItemInspector ];
|
MPToolbarItemIdentifierLock,
|
||||||
|
MPToolbarItemIdentifierInspector ];
|
||||||
_toolbarImages = [self createToolbarImages];
|
_toolbarImages = [self createToolbarImages];
|
||||||
_toolbarItems = [[NSMutableDictionary alloc] initWithCapacity:[self.toolbarIdentifiers count]];
|
_toolbarItems = [[NSMutableDictionary alloc] initWithCapacity:[self.toolbarIdentifiers count]];
|
||||||
_addEntryMenuDelegate = [[MPAddEntryContextMenuDelegate alloc] init];
|
_addEntryMenuDelegate = [[MPAddEntryContextMenuDelegate alloc] init];
|
||||||
@@ -113,7 +114,7 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
item.label = itemLabel;
|
item.label = itemLabel;
|
||||||
item.paletteLabel = itemLabel;
|
item.paletteLabel = itemLabel;
|
||||||
|
|
||||||
if([itemIdentifier isEqualToString:MPToolbarItemAction]) {
|
if([itemIdentifier isEqualToString:MPToolbarItemIdentifierAction]) {
|
||||||
NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, 50, 32) pullsDown:YES];
|
NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, 50, 32) pullsDown:YES];
|
||||||
popupButton.bezelStyle = NSTexturedRoundedBezelStyle;
|
popupButton.bezelStyle = NSTexturedRoundedBezelStyle;
|
||||||
popupButton.focusRingType = NSFocusRingTypeNone;
|
popupButton.focusRingType = NSFocusRingTypeNone;
|
||||||
@@ -126,7 +127,7 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
|
|
||||||
NSMenu *menu = [[NSMenu alloc] init];
|
NSMenu *menu = [[NSMenu alloc] init];
|
||||||
NSMenuItem *actionImageItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""];
|
NSMenuItem *actionImageItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""];
|
||||||
actionImageItem.image = self.toolbarImages[MPToolbarItemAction];
|
actionImageItem.image = self.toolbarImages[MPToolbarItemIdentifierAction];
|
||||||
[menu addItem:actionImageItem];
|
[menu addItem:actionImageItem];
|
||||||
NSArray *menuItems = [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuExtended|MPContextMenuShowGroupInOutline];
|
NSArray *menuItems = [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuExtended|MPContextMenuShowGroupInOutline];
|
||||||
for(NSMenuItem *item in menuItems) {
|
for(NSMenuItem *item in menuItems) {
|
||||||
@@ -143,7 +144,7 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
item.menuFormRepresentation = menuRepresentation;
|
item.menuFormRepresentation = menuRepresentation;
|
||||||
item.view = popupButton;
|
item.view = popupButton;
|
||||||
}
|
}
|
||||||
else if( [itemIdentifier isEqualToString:MPToolbarItemAddEntry]) {
|
else if( [itemIdentifier isEqualToString:MPToolbarItemIdentifierAddEntry]) {
|
||||||
MPContextButton *button = [[MPContextButton alloc] initWithFrame:NSMakeRect(0, 0, 32, 32)];
|
MPContextButton *button = [[MPContextButton alloc] initWithFrame:NSMakeRect(0, 0, 32, 32)];
|
||||||
button.action = [self _actionForToolbarItemIdentifier:itemIdentifier];
|
button.action = [self _actionForToolbarItemIdentifier:itemIdentifier];
|
||||||
NSImage *image = self.toolbarImages[itemIdentifier];
|
NSImage *image = self.toolbarImages[itemIdentifier];
|
||||||
@@ -168,7 +169,7 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
item.menuFormRepresentation = menuRepresentation;
|
item.menuFormRepresentation = menuRepresentation;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if( [itemIdentifier isEqualToString:MPToolbarItemSearch]){
|
else if( [itemIdentifier isEqualToString:MPToolbarItemIdentifierSearch]){
|
||||||
NSSearchField *searchField = [[NSSearchField alloc] init];
|
NSSearchField *searchField = [[NSSearchField alloc] init];
|
||||||
searchField.action = @selector(updateSearch:);
|
searchField.action = @selector(updateSearch:);
|
||||||
NSSearchFieldCell *cell = searchField.cell;
|
NSSearchFieldCell *cell = searchField.cell;
|
||||||
@@ -178,9 +179,10 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
item.view = searchField;
|
item.view = searchField;
|
||||||
/* Use default size base on documentation */
|
/* Use default size base on documentation */
|
||||||
item.minSize = NSMakeSize(140, 32);
|
item.minSize = NSMakeSize(140, 32);
|
||||||
item.maxSize = NSMakeSize(240, 32);
|
item.maxSize = NSMakeSize(400, 32);
|
||||||
NSMenu *templateMenu = [self _allocateSearchMenuTemplate];
|
NSMenu *templateMenu = [self _allocateSearchMenuTemplate];
|
||||||
searchField.searchMenuTemplate = templateMenu;
|
searchField.searchMenuTemplate = templateMenu;
|
||||||
|
searchField.placeholderString = NSLocalizedString(@"SEARCH_EVERYWHERE", @"Placeholder string displayed in the search field in the toolbar");
|
||||||
/* 10.10 does not support NSSearchFieldDelegate */
|
/* 10.10 does not support NSSearchFieldDelegate */
|
||||||
((NSTextField *)searchField).delegate = self;
|
((NSTextField *)searchField).delegate = self;
|
||||||
self.searchField = searchField;
|
self.searchField = searchField;
|
||||||
@@ -216,16 +218,16 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (NSDictionary *)createToolbarImages {
|
- (NSDictionary *)createToolbarImages {
|
||||||
NSDictionary *imageDict = @{ MPToolbarItemLock: [NSImage imageNamed:NSImageNameLockLockedTemplate],
|
NSDictionary *imageDict = @{ MPToolbarItemIdentifierLock: [NSImage imageNamed:NSImageNameLockLockedTemplate],
|
||||||
MPToolbarItemAddEntry: [MPIconHelper icon:MPIconAddEntry],
|
MPToolbarItemIdentifierAddEntry: [MPIconHelper icon:MPIconAddEntry],
|
||||||
MPToolbarItemAddGroup: [MPIconHelper icon:MPIconAddFolder],
|
MPToolbarItemIdentifierAddGroup: [MPIconHelper icon:MPIconAddFolder],
|
||||||
MPToolbarItemCopyUsername : [MPIconHelper icon:MPIconIdentity],
|
MPToolbarItemIdentifierCopyUsername : [MPIconHelper icon:MPIconIdentity],
|
||||||
MPToolbarItemCopyPassword : [MPIconHelper icon:MPIconPassword],
|
MPToolbarItemIdentifierCopyPassword : [MPIconHelper icon:MPIconPassword],
|
||||||
MPToolbarItemDelete: [MPIconHelper icon:MPIconTrash],
|
MPToolbarItemIdentifierDelete: [MPIconHelper icon:MPIconTrash],
|
||||||
MPToolbarItemAction: [NSImage imageNamed:NSImageNameActionTemplate],
|
MPToolbarItemIdentifierAction: [NSImage imageNamed:NSImageNameActionTemplate],
|
||||||
MPToolbarItemInspector: [MPIconHelper icon:MPIconInfo],
|
MPToolbarItemIdentifierInspector: [MPIconHelper icon:MPIconInfo],
|
||||||
MPToolbarItemHistory: [MPIconHelper icon:MPIconHistory],
|
MPToolbarItemIdentifierHistory: [MPIconHelper icon:MPIconHistory],
|
||||||
MPToolbarItemAutotype : [MPIconHelper icon:MPIconKeyboard]
|
MPToolbarItemIdentifierAutotype : [MPIconHelper icon:MPIconKeyboard]
|
||||||
};
|
};
|
||||||
return imageDict;
|
return imageDict;
|
||||||
}
|
}
|
||||||
@@ -238,12 +240,20 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
|
|
||||||
#pragma mark - NSSearchFieldDelegate
|
#pragma mark - NSSearchFieldDelegate
|
||||||
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
|
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
|
||||||
|
if(control != self.searchField) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
if(commandSelector == @selector(insertNewline:) || commandSelector == @selector(moveDown:)) {
|
if(commandSelector == @selector(insertNewline:) || commandSelector == @selector(moveDown:)) {
|
||||||
/* Dispatch the focus loss since doing it now will break recent search storage */
|
/* Dispatch the focus loss since doing it now will break recent search storage */
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
[[NSApp targetForAction:@selector(focusEntries:) to:nil from:self] focusEntries:self];
|
[[NSApp targetForAction:@selector(focusEntries:) to:nil from:self] focusEntries:self];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if(commandSelector == @selector(cancelOperation:) ) {
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
[[NSApp targetForAction:@selector(exitSearch:) to:nil from:self] exitSearch:nil];
|
||||||
|
});
|
||||||
|
}
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,17 +262,17 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
static NSDictionary *labelDict;
|
static NSDictionary *labelDict;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
labelDict = @{ MPToolbarItemLock: NSLocalizedString(@"LOCK", @"Toolbar item to Lock the database"),
|
labelDict = @{ MPToolbarItemIdentifierLock: NSLocalizedString(@"LOCK", @"Toolbar item to Lock the database"),
|
||||||
MPToolbarItemAction: NSLocalizedString(@"ACTION", @"Toolbar item with action menu"),
|
MPToolbarItemIdentifierAction: NSLocalizedString(@"ACTION", @"Toolbar item with action menu"),
|
||||||
MPToolbarItemAddEntry: NSLocalizedString(@"NEW_ENTRY", @"Toolbar item new entry"),
|
MPToolbarItemIdentifierAddEntry: NSLocalizedString(@"NEW_ENTRY", @"Toolbar item new entry"),
|
||||||
MPToolbarItemAddGroup: NSLocalizedString(@"NEW_GROUP", @"Toolbar item new group"),
|
MPToolbarItemIdentifierAddGroup: NSLocalizedString(@"NEW_GROUP", @"Toolbar item new group"),
|
||||||
MPToolbarItemCopyPassword: NSLocalizedString(@"COPY_PASSWORD", @"Toolbar item copy password"),
|
MPToolbarItemIdentifierCopyPassword: NSLocalizedString(@"COPY_PASSWORD", @"Toolbar item copy password"),
|
||||||
MPToolbarItemCopyUsername: NSLocalizedString(@"COPY_USERNAME", @"Toolbar item copy username"),
|
MPToolbarItemIdentifierCopyUsername: NSLocalizedString(@"COPY_USERNAME", @"Toolbar item copy username"),
|
||||||
MPToolbarItemDelete: NSLocalizedString(@"DELETE", @"Toolbar item delete item"),
|
MPToolbarItemIdentifierDelete: NSLocalizedString(@"DELETE", @"Toolbar item delete item"),
|
||||||
MPToolbarItemInspector: NSLocalizedString(@"INSPECTOR", @"Toolbar item toggle inspector"),
|
MPToolbarItemIdentifierInspector: NSLocalizedString(@"INSPECTOR", @"Toolbar item toggle inspector"),
|
||||||
MPToolbarItemSearch: NSLocalizedString(@"SEARCH", @"Search input in Toolbar "),
|
MPToolbarItemIdentifierSearch: NSLocalizedString(@"SEARCH", @"Search input in Toolbar "),
|
||||||
MPToolbarItemHistory: NSLocalizedString(@"SHOW_HISTORY", @"Toolbar item to toggle history display"),
|
MPToolbarItemIdentifierHistory: NSLocalizedString(@"SHOW_HISTORY", @"Toolbar item to toggle history display"),
|
||||||
MPToolbarItemAutotype: NSLocalizedString(@"TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY", @"Toolbar item to perform autotype")
|
MPToolbarItemIdentifierAutotype: NSLocalizedString(@"TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY", @"Toolbar item to perform autotype")
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
return labelDict[identifier];
|
return labelDict[identifier];
|
||||||
@@ -272,15 +282,15 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
static NSDictionary *actionDict;
|
static NSDictionary *actionDict;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
actionDict = @{ MPToolbarItemLock: @(MPActionLock),
|
actionDict = @{ MPToolbarItemIdentifierLock: @(MPActionLock),
|
||||||
MPToolbarItemAddEntry: @(MPActionAddEntry),
|
MPToolbarItemIdentifierAddEntry: @(MPActionAddEntry),
|
||||||
MPToolbarItemAddGroup: @(MPActionAddGroup),
|
MPToolbarItemIdentifierAddGroup: @(MPActionAddGroup),
|
||||||
MPToolbarItemDelete: @(MPActionDelete),
|
MPToolbarItemIdentifierDelete: @(MPActionDelete),
|
||||||
MPToolbarItemCopyPassword: @(MPActionCopyPassword),
|
MPToolbarItemIdentifierCopyPassword: @(MPActionCopyPassword),
|
||||||
MPToolbarItemCopyUsername: @(MPActionCopyUsername),
|
MPToolbarItemIdentifierCopyUsername: @(MPActionCopyUsername),
|
||||||
MPToolbarItemInspector: @(MPActionToggleInspector),
|
MPToolbarItemIdentifierInspector: @(MPActionToggleInspector),
|
||||||
MPToolbarItemHistory: @(MPActionShowEntryHistory),
|
MPToolbarItemIdentifierHistory: @(MPActionShowEntryHistory),
|
||||||
MPToolbarItemAutotype: @(MPActionPerformAutotypeForSelectedEntry)
|
MPToolbarItemIdentifierAutotype: @(MPActionPerformAutotypeForSelectedEntry)
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
MPActionType actionType = (MPActionType)[actionDict[identifier] integerValue];
|
MPActionType actionType = (MPActionType)[actionDict[identifier] integerValue];
|
||||||
@@ -313,9 +323,9 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
- (void)_didEnterSearch:(NSNotification *)notification {
|
- (void)_didEnterSearch:(NSNotification *)notification {
|
||||||
/* We enter search. If there is no Item to search in the toolbar, we need to add it */
|
/* We enter search. If there is no Item to search in the toolbar, we need to add it */
|
||||||
NSArray *currentItems = self.toolbar.items;
|
NSArray *currentItems = self.toolbar.items;
|
||||||
NSToolbarItem *searchItem = self.toolbarItems[MPToolbarItemSearch];
|
NSToolbarItem *searchItem = self.toolbarItems[MPToolbarItemIdentifierSearch];
|
||||||
if(!searchItem || ![currentItems containsObject:searchItem]) {
|
if(!searchItem || ![currentItems containsObject:searchItem]) {
|
||||||
[self.toolbar insertItemWithItemIdentifier:MPToolbarItemSearch atIndex:[currentItems count]];
|
[self.toolbar insertItemWithItemIdentifier:MPToolbarItemIdentifierSearch atIndex:[currentItems count]];
|
||||||
_didAddSearchfieldForSearch = YES;
|
_didAddSearchfieldForSearch = YES;
|
||||||
}
|
}
|
||||||
/* Then we should make sure the toolbar is visible. Just to make life easier */
|
/* Then we should make sure the toolbar is visible. Just to make life easier */
|
||||||
@@ -335,14 +345,14 @@ NSString *const MPToolbarItemAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)_didExitSearch:(NSNotification *)notification {
|
- (void)_didExitSearch:(NSNotification *)notification {
|
||||||
[self.searchField setStringValue:@""];
|
self.searchField.stringValue = @"";
|
||||||
NSWindow *window = [self.searchField window];
|
NSWindow *window = [self.searchField window];
|
||||||
/* Resign first responder form search field only if it was the first responder */
|
/* Resign first responder form search field only if it was the first responder */
|
||||||
if(window.firstResponder == [self.searchField currentEditor]) {
|
if(window.firstResponder == [self.searchField currentEditor]) {
|
||||||
[window makeFirstResponder:nil];
|
[window makeFirstResponder:nil];
|
||||||
}
|
}
|
||||||
if(_didAddSearchfieldForSearch) {
|
if(_didAddSearchfieldForSearch) {
|
||||||
NSToolbarItem *searchItem = self.toolbarItems[MPToolbarItemSearch];
|
NSToolbarItem *searchItem = self.toolbarItems[MPToolbarItemIdentifierSearch];
|
||||||
NSUInteger index = [self.toolbar.items indexOfObject:searchItem];
|
NSUInteger index = [self.toolbar.items indexOfObject:searchItem];
|
||||||
if(index != NSNotFound) {
|
if(index != NSNotFound) {
|
||||||
[self.toolbar removeItemAtIndex:index];
|
[self.toolbar removeItemAtIndex:index];
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPValueTransformerHelper.h"
|
#import "MPValueTransformerHelper.h"
|
||||||
#import "NSValueTransformer+TransformerKit.h"
|
#import <TransformerKit/NSValueTransformer+TransformerKit.h>
|
||||||
|
|
||||||
NSString *const MPStripLineBreaksTransformerName = @"com.hicknhack.macpass.MPStripLineBreaksTransformerName";
|
NSString *const MPStripLineBreaksTransformerName = @"com.hicknhack.macpass.MPStripLineBreaksTransformerName";
|
||||||
NSString *const MPExpiryDateValueTransformerName = @"com.hicknhack.macpass.MPExpiryDateValueTransformer";
|
NSString *const MPExpiryDateValueTransformerName = @"com.hicknhack.macpass.MPExpiryDateValueTransformer";
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPWelcomeViewController.h"
|
#import "MPWelcomeViewController.h"
|
||||||
|
#import "MPConstants.h"
|
||||||
|
|
||||||
@interface MPWelcomeViewController ()
|
@interface MPWelcomeViewController ()
|
||||||
|
|
||||||
@@ -26,17 +27,32 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
||||||
return NSDocumentController.sharedDocumentController.recentDocumentURLs.count;
|
return MAX(1, NSDocumentController.sharedDocumentController.recentDocumentURLs.count);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (nullable NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row {
|
- (nullable NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||||
NSTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
|
NSTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
|
||||||
NSURL *url = NSDocumentController.sharedDocumentController.recentDocumentURLs[row];
|
NSArray<NSURL *> *recentURLS = NSDocumentController.sharedDocumentController.recentDocumentURLs;
|
||||||
|
if(row > -1 && row < recentURLS.count) {
|
||||||
|
NSURL *url = recentURLS[row];
|
||||||
|
view.textField.enabled = YES;
|
||||||
|
view.imageView.enabled = YES;
|
||||||
view.textField.stringValue = url.lastPathComponent;
|
view.textField.stringValue = url.lastPathComponent;
|
||||||
view.imageView.image = [NSWorkspace.sharedWorkspace iconForFile:url.path];
|
view.imageView.image = [NSWorkspace.sharedWorkspace iconForFile:url.path];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
view.textField.enabled = NO;
|
||||||
|
view.imageView.enabled = NO;
|
||||||
|
view.textField.stringValue = NSLocalizedString(@"WELCOME_WINDOW_NO_RECENT_DOCUMENTS", "Text displayed when no recent documents can be displayed in");
|
||||||
|
view.imageView.image = [NSWorkspace.sharedWorkspace iconForFileType:MPKdbxDocumentUTI];
|
||||||
|
}
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row {
|
||||||
|
return (NSDocumentController.sharedDocumentController.recentDocumentURLs.count > 0);
|
||||||
|
}
|
||||||
|
|
||||||
- (IBAction)openRecentURL:(id)sender {
|
- (IBAction)openRecentURL:(id)sender {
|
||||||
NSInteger clicked = self.tableView.clickedRow;
|
NSInteger clicked = self.tableView.clickedRow;
|
||||||
NSArray <NSURL *> *recentURLS = NSDocumentController.sharedDocumentController.recentDocumentURLs;
|
NSArray <NSURL *> *recentURLS = NSDocumentController.sharedDocumentController.recentDocumentURLs;
|
||||||
|
|||||||
@@ -71,8 +71,18 @@
|
|||||||
<string>https://macpassapp.org/data/plugins.json</string>
|
<string>https://macpassapp.org/data/plugins.json</string>
|
||||||
<key>NSAppleEventsUsageDescription</key>
|
<key>NSAppleEventsUsageDescription</key>
|
||||||
<string>MacPass might use AppleEvents to perform Autotype functionality</string>
|
<string>MacPass might use AppleEvents to perform Autotype functionality</string>
|
||||||
|
<key>NSDesktopFolderUsageDescription</key>
|
||||||
|
<string>MacPass accesses the Desktop to load and save your databases and/or key files there</string>
|
||||||
|
<key>NSDocumentsFolderUsageDescription</key>
|
||||||
|
<string>MacPass accesses the Documents folder to load and save your databases and/or key files there</string>
|
||||||
|
<key>NSDownloadsFolderUsageDescription</key>
|
||||||
|
<string>MacPass accesses the Downloads folder to load and save your databases and/or key files there</string>
|
||||||
|
<key>NSNetworkVolumesUsageDescription</key>
|
||||||
|
<string>MacPass need access to Network Volumes to load and save your databases and/or key files there</string>
|
||||||
|
<key>NSRemovableVolumesUsageDescription</key>
|
||||||
|
<string>MacPass need access to Removable Volumes to load and save your databases and/or key files there</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2012-2019 HicknHack Software GmbH. All rights reserved.</string>
|
<string>Copyright © 2012-2020 HicknHack Software GmbH. All rights reserved.</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
|
|||||||
25
MacPass/NSRunningApplication+MPAdditions.h
Normal file
25
MacPass/NSRunningApplication+MPAdditions.h
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// NSRunningApplication+MPAdditions.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 15.01.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
APPKIT_EXTERN NSString *const MPWindowTitleKey;
|
||||||
|
APPKIT_EXTERN NSString *const MPProcessIdentifierKey;
|
||||||
|
|
||||||
|
@interface NSRunningApplication (MPAdditions)
|
||||||
|
|
||||||
|
@property (readonly, copy) NSDictionary *mp_infoDictionary;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
66
MacPass/NSRunningApplication+MPAdditions.m
Normal file
66
MacPass/NSRunningApplication+MPAdditions.m
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
//
|
||||||
|
// NSRunningApplication+MPAdditions.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 15.01.20.
|
||||||
|
// Copyright © 2020 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NSRunningApplication+MPAdditions.h"
|
||||||
|
|
||||||
|
#import <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
|
||||||
|
NSString *const MPWindowTitleKey = @"MPWindowTitleKey";
|
||||||
|
NSString *const MPProcessIdentifierKey = @"MPProcessIdentifierKey";
|
||||||
|
|
||||||
|
|
||||||
|
BOOL skipWindowTitle(NSString *windowTitle) {
|
||||||
|
if(windowTitle.length <= 0) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSSet *titlesToSkip;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
titlesToSkip = [NSSet setWithArray:@[@"Item-0", @"Focus Proxy"]];
|
||||||
|
});
|
||||||
|
|
||||||
|
return [titlesToSkip containsObject:windowTitle];
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation NSRunningApplication (MPAdditions)
|
||||||
|
|
||||||
|
- (NSDictionary *)mp_infoDictionary {
|
||||||
|
NSArray *currentWindows = CFBridgingRelease(CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements, kCGNullWindowID));
|
||||||
|
NSArray *windowNumbers = [NSWindow windowNumbersWithOptions:NSWindowNumberListAllApplications];
|
||||||
|
NSUInteger minZIndex = NSNotFound;
|
||||||
|
NSDictionary *infoDict = nil;
|
||||||
|
for(NSDictionary *windowDict in currentWindows) {
|
||||||
|
NSString *windowTitle = windowDict[(NSString *)kCGWindowName];
|
||||||
|
/* skip a list of well know useless window-titles */
|
||||||
|
if(skipWindowTitle(windowTitle)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
NSNumber *processId = windowDict[(NSString *)kCGWindowOwnerPID];
|
||||||
|
if(processId && [processId isEqualToNumber:@(self.processIdentifier)]) {
|
||||||
|
|
||||||
|
NSNumber *number = (NSNumber *)windowDict[(NSString *)kCGWindowNumber];
|
||||||
|
NSUInteger zIndex = [windowNumbers indexOfObject:number];
|
||||||
|
if(zIndex < minZIndex) {
|
||||||
|
minZIndex = zIndex;
|
||||||
|
infoDict = @{
|
||||||
|
MPWindowTitleKey: windowTitle,
|
||||||
|
MPProcessIdentifierKey : processId
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(currentWindows.count > 0 && infoDict.count == 0) {
|
||||||
|
// show some information about not being able to determine any windows
|
||||||
|
NSLog(@"Unable to retrieve any window names. If you encounter this issue you might be running 10.15 and MacPass has no permission for screen recording.");
|
||||||
|
}
|
||||||
|
return infoDict;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
{
|
{
|
||||||
"name": "MacPassHTTP",
|
"name": "MacPassHTTP",
|
||||||
"description": "KeePassHTTP support for MacPass",
|
"description": "KeePassHTTP support for MacPass",
|
||||||
"download": "https://github.com/MacPass/MacPassHTTP/releases/download/0.3.1/MacPassHTTP.mpplugin-0.3.2.zip",
|
"download": "https://github.com/MacPass/MacPassHTTP/releases/download/0.3.2/MacPassHTTP.mpplugin-0.3.2.zip",
|
||||||
"source": "https://github.com/MacPass/MacPassHTTP",
|
"source": "https://github.com/MacPass/MacPassHTTP",
|
||||||
"currentVersion": "0.3.2",
|
"currentVersion": "0.3.2",
|
||||||
"bundleIdentifier": "com.hicknhacksoftware.MacPassHTTP",
|
"bundleIdentifier": "com.hicknhacksoftware.MacPassHTTP",
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
/* Class = "NSButtonCell"; title = "Request Permissions…"; ObjectID = "1Nx-Cg-TCn"; */
|
||||||
|
"1Nx-Cg-TCn.title" = "Berechtigung anfordern …";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; ObjectID = "6GI-KJ-Xue"; */
|
/* Class = "NSTextFieldCell"; title = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; ObjectID = "6GI-KJ-Xue"; */
|
||||||
"6GI-KJ-Xue.title" = "MacPass sendet Tastendrücke an das System, wenn Autotype oder Global Autotype ausgeführt wird. Seit macOS 10.14 Mojave ist dies nur noch möglich, wenn der Anwendung Berechtigung zur Bedienungshilfe erteilt wurden.";
|
"6GI-KJ-Xue.title" = "MacPass sendet Tastendrücke an das System, wenn Autotype oder Global Autotype ausgeführt wird. Seit macOS 10.14 Mojave ist dies nur noch möglich, wenn der Anwendung Berechtigung zur Bedienungshilfe erteilt wurden.";
|
||||||
|
|
||||||
@@ -16,3 +19,6 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Open Screen Recording Preferences…"; ObjectID = "lgB-Ys-L9R"; */
|
/* Class = "NSButtonCell"; title = "Open Screen Recording Preferences…"; ObjectID = "lgB-Ys-L9R"; */
|
||||||
"lgB-Ys-L9R.title" = "Bildschirmaufzeichnungseinstellungen öffnen …";
|
"lgB-Ys-L9R.title" = "Bildschirmaufzeichnungseinstellungen öffnen …";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "To request Screen Recording permissions, MacPass will try to capture a 1 by 1 Pixel sized screenshot of the top left part of your screen. The data is not stored nor processed in any way."; ObjectID = "Mhg-rd-1hK"; */
|
||||||
|
"Mhg-rd-1hK.title" = "Um die Berechtigung zum Aufzeichnen des Bildschirminhaltes anzufordern wird MacPass versuchen ein 1 mal 1 Pixel großes Bildschirmfoto vom linken oberen Rand des Bildschirms zu erstellen. Das Bild wird nicht gespeichert, gesendet oder anderweitig verarbeitet.";
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,9 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually."; ObjectID = "JGX-Tp-KJk"; */
|
/* Class = "NSTextFieldCell"; title = "Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually."; ObjectID = "JGX-Tp-KJk"; */
|
||||||
"JGX-Tp-KJk.title" = "Das Ausschalten dieser Option beeinträchtigt die Sicherheit. Wird diese Option deaktiviert, werden alle Daten, die von MacPass in die Zwischenablage kopiert werden mit verbundenen iOS Geräten synchronisiert. Die Zwischenablage sollte dann manuell auf diesen Geräten geleert werden.";
|
"JGX-Tp-KJk.title" = "Das Ausschalten dieser Option beeinträchtigt die Sicherheit. Wird diese Option deaktiviert, werden alle Daten, die von MacPass in die Zwischenablage kopiert werden mit verbundenen iOS Geräten synchronisiert. Die Zwischenablage sollte dann manuell auf diesen Geräten geleert werden.";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Lock after screen sleep"; ObjectID = "l3t-og-mJd"; */
|
||||||
|
"l3t-og-mJd.title" = "Datenbank beim Schlafen des Bildschirms sperren.";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "If file changes:"; ObjectID = "QrK-hM-Xt1"; */
|
/* Class = "NSTextFieldCell"; title = "If file changes:"; ObjectID = "QrK-hM-Xt1"; */
|
||||||
"QrK-hM-Xt1.title" = "Bei Dateiänderungen:";
|
"QrK-hM-Xt1.title" = "Bei Dateiänderungen:";
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,26 @@
|
|||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"MacPass Plugin" = "MacPass Plugin";
|
"MacPass Plugin" = "MacPass Plugin";
|
||||||
|
|
||||||
|
/* Privacy - AppleEvents Sending Usage Description */
|
||||||
|
"NSAppleEventsUsageDescription" = "MacPass erlaubt Plugins AppleEvents zu nutzen.";
|
||||||
|
|
||||||
|
/* Privacy - Desktop Folder Usage Description */
|
||||||
|
"NSDesktopFolderUsageDescription" = "MacPass greift auf den Schreibtisch zu, um Datenbanken und Schlüsseldateien zu laden oder speichern.";
|
||||||
|
|
||||||
|
/* Privacy - Documents Folder Usage Description */
|
||||||
|
"NSDocumentsFolderUsageDescription" = "MacPass greift auf den Dokumenteordner zu, um Datenbanken und Schlüsseldateien zu laden oder speichern.";
|
||||||
|
|
||||||
|
/* Privacy - Downloads Folder Usage Description */
|
||||||
|
"NSDownloadsFolderUsageDescription" = "MacPass greift auf den Downloadordner zu, um Datenbanken und Schlüsseldateien zu laden oder speichern.";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"NSHumanReadableCopyright" = "Copyright ©2012-2019 HicknHack Software GmbH. Alle Rechte vorbehalten.";
|
"NSHumanReadableCopyright" = "Copyright ©2012-2020 HicknHack Software GmbH. Alle Rechte vorbehalten.";
|
||||||
|
|
||||||
|
/* Privacy - Network Volumes Usage Description */
|
||||||
|
"NSNetworkVolumesUsageDescription" = "MacPass greift auf Netzwerklaufwerke zu, um Datenbanken und Schlüsseldateien zu laden oder speichern.";
|
||||||
|
|
||||||
|
/* Privacy - Removable Volumes Usage Description */
|
||||||
|
"NSRemovableVolumesUsageDescription" = "MacPass greift auf Wechseldatenträge zu, um Datenbanken und Schlüsseldateien zu laden oder speichern.";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"XML" = "XML";
|
"XML" = "XML";
|
||||||
|
|||||||
@@ -119,16 +119,28 @@
|
|||||||
/* Notification: Autotype failed, MacPass has not enough permissions to perform autotype */
|
/* Notification: Autotype failed, MacPass has not enough permissions to perform autotype */
|
||||||
"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "MacPass hat nicht alle notwendigen Berechtigungen um Autotype ausführen zu können";
|
"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "MacPass hat nicht alle notwendigen Berechtigungen um Autotype ausführen zu können";
|
||||||
|
|
||||||
|
/* Notification: Title for autotype feedback */
|
||||||
|
"AUTOTYPE_NOTIFICATION_MATCH_TITLE" = "Autotype";
|
||||||
|
|
||||||
/* Notification: Autotype failed, no documents are open */
|
/* Notification: Autotype failed, no documents are open */
|
||||||
"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Bitte öffnen Sie eine Datei, um Global-Autotype zu nutzen!";
|
"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_INFORMATIVE_TEXT" = "Bitte öffnen Sie eine Datei, um Global-Autotype zu nutzen!";
|
||||||
|
|
||||||
|
/* Notification: Title for autotype feedback */
|
||||||
|
"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_TITLE" = "Keine Datenbank offen.";
|
||||||
|
|
||||||
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
||||||
"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "Kein Treffer für %@!";
|
"AUTOTYPE_NOTIFICATION_NO_MATCH_FOR_%@" = "Kein Treffer für %@!";
|
||||||
|
|
||||||
|
/* Title for autotype feedback on missing permissions */
|
||||||
|
"AUTOTYPE_NOTIFICATION_PERMISSIONS_MISSING_TITLE" = "Berechtigungen fehlen.";
|
||||||
|
|
||||||
/* Notification: Autotype found a single match for %@ (string placeholder). */
|
/* Notification: Autotype found a single match for %@ (string placeholder). */
|
||||||
"AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@" = "Treffer für %@!";
|
"AUTOTYPE_NOTIFICATION_SINGLE_MATCH_FOR_%@" = "Treffer für %@!";
|
||||||
|
|
||||||
/* Status lable when no issue were found in accessibilty */
|
/* Title for the notification when the Autotype operation timed out */
|
||||||
|
"AUTOTYPE_NOTIFICATION_TIMED_OUT_TITLE" = "Autotype abgebrochen.";
|
||||||
|
|
||||||
|
/* Status label when no issue were found in accessibilty */
|
||||||
"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass hat die Berechtigung den Computer zu steuern (Eingabehilfe)";
|
"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass hat die Berechtigung den Computer zu steuern (Eingabehilfe)";
|
||||||
|
|
||||||
/* Status MacPass has no accessibilty permissions */
|
/* Status MacPass has no accessibilty permissions */
|
||||||
@@ -137,7 +149,7 @@
|
|||||||
/* Status MacPass has no screen recording permissions */
|
/* Status MacPass has no screen recording permissions */
|
||||||
"AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass hat keine Berechtigung den Bildschirminhalt aufzuzeichnen";
|
"AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass hat keine Berechtigung den Bildschirminhalt aufzuzeichnen";
|
||||||
|
|
||||||
/* Status lable when no issue were found in screen recording permissions */
|
/* Status label when no issue were found in screen recording permissions */
|
||||||
"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK" = "MacPass hat die Berechtigung den Bildschirminhalt aufzuzeichnen";
|
"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK" = "MacPass hat die Berechtigung den Bildschirminhalt aufzuzeichnen";
|
||||||
|
|
||||||
/* Notficication: Autotype timed out */
|
/* Notficication: Autotype timed out */
|
||||||
@@ -249,7 +261,7 @@
|
|||||||
/* Context menu that copies reference to username */
|
/* Context menu that copies reference to username */
|
||||||
"COPY_USERNAME_REFERENCE" = "Nutzername";
|
"COPY_USERNAME_REFERENCE" = "Nutzername";
|
||||||
|
|
||||||
/* Curstom attribute reference item */
|
/* Custom attribute reference item */
|
||||||
"CUSTOM_ATTRIBUTE" = "Spezielle Eigenschaften";
|
"CUSTOM_ATTRIBUTE" = "Spezielle Eigenschaften";
|
||||||
|
|
||||||
/* Title for menu for custom search filters */
|
/* Title for menu for custom search filters */
|
||||||
@@ -303,6 +315,9 @@
|
|||||||
Actiontitle for copying groups via drag and drop to antother database */
|
Actiontitle for copying groups via drag and drop to antother database */
|
||||||
"DRAG_GROUP" = "Gruppe verschieben";
|
"DRAG_GROUP" = "Gruppe verschieben";
|
||||||
|
|
||||||
|
/* Action name for duplicating entries */
|
||||||
|
"DUPLICATE_ENTRIES_ACTION_NAME" = "Einträge duplizieren";
|
||||||
|
|
||||||
/* Menu item to directly diplicate an entry */
|
/* Menu item to directly diplicate an entry */
|
||||||
"DUPLICATE_ENTRY" = "Eintrag duplizieren";
|
"DUPLICATE_ENTRY" = "Eintrag duplizieren";
|
||||||
|
|
||||||
@@ -312,6 +327,9 @@
|
|||||||
/* Menu item to directly diplicate a group */
|
/* Menu item to directly diplicate a group */
|
||||||
"DUPLICATE_GROUP" = "Gruppe duplizieren";
|
"DUPLICATE_GROUP" = "Gruppe duplizieren";
|
||||||
|
|
||||||
|
/* Action name for duplicating groups */
|
||||||
|
"DUPLICATE_GROUPS_ACTION_NAME" = "Gruppe duplizieren";
|
||||||
|
|
||||||
/* Menu item in the database outline context menu to change the template group
|
/* Menu item in the database outline context menu to change the template group
|
||||||
Menu item on the add entry context menu to edit template groups */
|
Menu item on the add entry context menu to edit template groups */
|
||||||
"EDIT_TEMPLATE_GROUP" = "Vorlagengruppe bearbeiten";
|
"EDIT_TEMPLATE_GROUP" = "Vorlagengruppe bearbeiten";
|
||||||
@@ -343,8 +361,8 @@
|
|||||||
/* Error description given when adding an invalid plugin */
|
/* Error description given when adding an invalid plugin */
|
||||||
"ERROR_INVALID_PLUGIN" = "Kein MacPass-Plugin";
|
"ERROR_INVALID_PLUGIN" = "Kein MacPass-Plugin";
|
||||||
|
|
||||||
/* Error description for missing accessibilty permissions */
|
/* Error description for missing accessibility permissions */
|
||||||
"ERROR_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass hat keine Berechtigung den Bildschirminhalt aufzuzeichnen.";
|
"ERROR_NO_ACCESSIBILITY_PERMISSIONS" = "MacPass hat keine Berechtigung den Bildschirminhalt aufzuzeichnen.";
|
||||||
|
|
||||||
/* Error description for missing screen recording permissions */
|
/* Error description for missing screen recording permissions */
|
||||||
"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass hat keine Berechtigungen den Bildschirminhalt aufzuzeichnen";
|
"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass hat keine Berechtigungen den Bildschirminhalt aufzuzeichnen";
|
||||||
@@ -355,6 +373,9 @@
|
|||||||
/* Passwords do not match, keyfile is invalid */
|
/* Passwords do not match, keyfile is invalid */
|
||||||
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Passwörter stimmen nicht überein oder die Schlüsseldatei ist ungültig!";
|
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Passwörter stimmen nicht überein oder die Schlüsseldatei ist ungültig!";
|
||||||
|
|
||||||
|
/* Recommend/Enforce key change intervall format */
|
||||||
|
"EVERY_%ld_DAYS" = "Alle %ld Tage";
|
||||||
|
|
||||||
/* Format to returen the date an item expires. Includes %@ placehoder for date */
|
/* Format to returen the date an item expires. Includes %@ placehoder for date */
|
||||||
"EXPIRES_AT_DATE_%@" = "verfällt: %@";
|
"EXPIRES_AT_DATE_%@" = "verfällt: %@";
|
||||||
|
|
||||||
@@ -545,9 +566,15 @@
|
|||||||
/* Menu item to perform autotype with the selected entry */
|
/* Menu item to perform autotype with the selected entry */
|
||||||
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Auto-Type ausführen";
|
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Auto-Type ausführen";
|
||||||
|
|
||||||
|
/* Info about how many character has to pick in pickchar dialog */
|
||||||
|
"PICKCHAR_INFO_MESSAGE_PICK_CHARACTERS_%ld" = "Bitte %ld Zeichen wählen";
|
||||||
|
|
||||||
/* Window displayed to the user to pick an amout of characters */
|
/* Window displayed to the user to pick an amout of characters */
|
||||||
"PICKCHAR_WINDOW_TITLE" = "Zeichen auswählen";
|
"PICKCHAR_WINDOW_TITLE" = "Zeichen auswählen";
|
||||||
|
|
||||||
|
/* Count of picked characters in pickchars dialog if no limit is set */
|
||||||
|
"PICKED_%ld_CHARACTERS" = "%ld Zeichen gewählt";
|
||||||
|
|
||||||
/* Window displayed to the user to pick an amout of characters */
|
/* Window displayed to the user to pick an amout of characters */
|
||||||
"PICKFIELD_WINDOW_TITLE" = "Wert auswählen";
|
"PICKFIELD_WINDOW_TITLE" = "Wert auswählen";
|
||||||
|
|
||||||
@@ -617,10 +644,13 @@
|
|||||||
/* Message text for the recommend password change alert */
|
/* Message text for the recommend password change alert */
|
||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Bitte ändern sie das Passwort der Datenbank!";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Bitte ändern sie das Passwort der Datenbank!";
|
||||||
|
|
||||||
|
/* Updated at text when the local plugin defintino is used */
|
||||||
|
"REPOSITORY_UPDATED_AT_LOCAL" = "Niemals (mitgelieferte Version nutzen)";
|
||||||
|
|
||||||
/* Restart */
|
/* Restart */
|
||||||
"RESTART" = "Neustarten";
|
"RESTART" = "Neustarten";
|
||||||
|
|
||||||
/* Action to restore and Entry to a previous state of it's history */
|
/* Action to restore an Entry to its previous state of it's history */
|
||||||
"RESTORE_HISTORY_ENTRY" = "Eintrag wiederherstellen";
|
"RESTORE_HISTORY_ENTRY" = "Eintrag wiederherstellen";
|
||||||
|
|
||||||
/* Menu item to save the selected attached file.
|
/* Menu item to save the selected attached file.
|
||||||
@@ -639,6 +669,9 @@
|
|||||||
/* Search option: Find duplicate passwords */
|
/* Search option: Find duplicate passwords */
|
||||||
"SEARCH_DUPLICATE_PASSWORDS" = "Doppelte Passwörter";
|
"SEARCH_DUPLICATE_PASSWORDS" = "Doppelte Passwörter";
|
||||||
|
|
||||||
|
/* Placeholder string displayed in the search field in the toolbar */
|
||||||
|
"SEARCH_EVERYWHERE" = "Überall suchen";
|
||||||
|
|
||||||
/* Search option: Find expired entries */
|
/* Search option: Find expired entries */
|
||||||
"SEARCH_EXPIRED_ENTRIES" = "Abgelaufen";
|
"SEARCH_EXPIRED_ENTRIES" = "Abgelaufen";
|
||||||
|
|
||||||
@@ -769,6 +802,12 @@
|
|||||||
UUID reference item */
|
UUID reference item */
|
||||||
"UUID" = "UUID";
|
"UUID" = "UUID";
|
||||||
|
|
||||||
|
/* Error message displayed when the current database file is also set as the key file */
|
||||||
|
"WARNING_CURRENT_DATABASE_FILE_SELECTED_AS_KEY_FILE" = "Die Datenbank kann nicht gleichzeitig als Schlüsseldatei verwendet werden.";
|
||||||
|
|
||||||
|
/* Error message displayed when a keepass database file is set as the key file */
|
||||||
|
"WARNING_DATABASE_FILE_SELECTED_AS_KEY_FILE" = "Eine andere KeePass Datenbank sollte nicht als Schlüsseldatei verwendet werden. Die Datei kann sich ändern und damit kann die aktuelle Datenbank nicht mehr geöffnet werden.";
|
||||||
|
|
||||||
/* No Key or Password */
|
/* No Key or Password */
|
||||||
"WARNING_NO_PASSWORD_OR_KEYFILE" = "Kein Passwort und/oder Schlüsseldatei festgelegt!";
|
"WARNING_NO_PASSWORD_OR_KEYFILE" = "Kein Passwort und/oder Schlüsseldatei festgelegt!";
|
||||||
|
|
||||||
@@ -790,6 +829,9 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Bitte vergeben Sie ein Passwort und/oder einen Schlüssel. Sofern Sie abbrechen, werden Ihre Änderungen rückgängig gemacht und die Datei gesperrt.";
|
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Bitte vergeben Sie ein Passwort und/oder einen Schlüssel. Sofern Sie abbrechen, werden Ihre Änderungen rückgängig gemacht und die Datei gesperrt.";
|
||||||
|
|
||||||
|
/* Text displayed when no recent documents can be displayed in */
|
||||||
|
"WELCOME_WINDOW_NO_RECENT_DOCUMENTS" = "Keine bisherigen Dokumente";
|
||||||
|
|
||||||
/* Label for the workflow settings tab */
|
/* Label for the workflow settings tab */
|
||||||
"WORKFLOW_SETTINGS" = "Arbeitsfluss";
|
"WORKFLOW_SETTINGS" = "Arbeitsfluss";
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Item"; ObjectID = "3st-rv-EeQ"; */
|
/* Class = "NSMenuItem"; title = "Item"; ObjectID = "3st-rv-EeQ"; */
|
||||||
"3st-rv-EeQ.title" = "Element";
|
"3st-rv-EeQ.title" = "Element";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Import"; ObjectID = "4q9-u1-pcm"; */
|
/* Class = "NSMenu"; title = "Import From"; ObjectID = "4q9-u1-pcm"; */
|
||||||
"4q9-u1-pcm.title" = "Importieren";
|
"4q9-u1-pcm.title" = "Importieren";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
|
/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
|
||||||
@@ -157,7 +157,7 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Lock"; ObjectID = "1261"; */
|
/* Class = "NSMenuItem"; title = "Lock"; ObjectID = "1261"; */
|
||||||
"1261.title" = "Verschließen";
|
"1261.title" = "Verschließen";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Import"; ObjectID = "aTb-sW-nUd"; */
|
/* Class = "NSMenuItem"; title = "Import From"; ObjectID = "aTb-sW-nUd"; */
|
||||||
"aTb-sW-nUd.title" = "Importieren";
|
"aTb-sW-nUd.title" = "Importieren";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "aVO-9F-Lwc"; */
|
/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "aVO-9F-Lwc"; */
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Fix Autotype…"; ObjectID = "nx7-Vf-LiD"; */
|
/* Class = "NSMenuItem"; title = "Fix Autotype…"; ObjectID = "nx7-Vf-LiD"; */
|
||||||
"nx7-Vf-LiD.title" = "Autotype korrigieren …";
|
"nx7-Vf-LiD.title" = "Autotype korrigieren …";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Export"; ObjectID = "p8h-Fg-h1O"; */
|
/* Class = "NSMenu"; title = "Export To"; ObjectID = "p8h-Fg-h1O"; */
|
||||||
"p8h-Fg-h1O.title" = "Exportieren";
|
"p8h-Fg-h1O.title" = "Exportieren";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "rW0-r1-QYL"; */
|
/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "rW0-r1-QYL"; */
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
/* Class = "NSMenu"; title = "Item"; ObjectID = "Ttt-tR-emo"; */
|
/* Class = "NSMenu"; title = "Item"; ObjectID = "Ttt-tR-emo"; */
|
||||||
"Ttt-tR-emo.title" = "Element";
|
"Ttt-tR-emo.title" = "Element";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Export"; ObjectID = "tz9-yK-pOf"; */
|
/* Class = "NSMenuItem"; title = "Export To"; ObjectID = "tz9-yK-pOf"; */
|
||||||
"tz9-yK-pOf.title" = "Exportieren";
|
"tz9-yK-pOf.title" = "Exportieren";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */
|
/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Class = "NSWindow"; title = "Change Password"; ObjectID = "1"; */
|
/* Class = "NSWindow"; title = "Change Password"; ObjectID = "1"; */
|
||||||
"1.title" = "Fenster";
|
"1.title" = "Fenster";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Missmatching Passwords"; ObjectID = "14"; */
|
/* Class = "NSTextFieldCell"; title = "Mismatching Passwords"; ObjectID = "14"; */
|
||||||
"14.title" = "Passwörter stimmen nicht überein";
|
"14.title" = "Passwörter stimmen nicht überein";
|
||||||
|
|
||||||
/* Class = "NSSecureTextFieldCell"; placeholderString = "Repeat Password"; ObjectID = "15"; */
|
/* Class = "NSSecureTextFieldCell"; placeholderString = "Repeat Password"; ObjectID = "15"; */
|
||||||
|
|||||||
@@ -13,6 +13,9 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "erj-mR-UyO"; */
|
/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "erj-mR-UyO"; */
|
||||||
"erj-mR-UyO.title" = "Abbrechen";
|
"erj-mR-UyO.title" = "Abbrechen";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "key_file_warnig"; ObjectID = "f6J-5f-ZvP"; */
|
||||||
|
"f6J-5f-ZvP.title" = "!warnung!";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Password"; ObjectID = "IU9-5u-jn9"; */
|
/* Class = "NSButtonCell"; title = "Password"; ObjectID = "IU9-5u-jn9"; */
|
||||||
"IU9-5u-jn9.title" = "Passwort";
|
"IU9-5u-jn9.title" = "Passwort";
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
||||||
"STt-PQ-Szr.title" = "Text Cell";
|
"STt-PQ-Szr.title" = "Text Cell";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Download current plugin information"; ObjectID = "uHR-uL-Ddm"; */
|
/* Class = "NSButtonCell"; title = "Download current Plugin information"; ObjectID = "uHR-uL-Ddm"; */
|
||||||
"uHR-uL-Ddm.title" = "Aktuelle Plugin-Informationen herunterladen";
|
"uHR-uL-Ddm.title" = "Aktuelle Plugin-Informationen herunterladen";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Hide application after copying to clipboard "; ObjectID = "1Vr-nY-Ogv"; */
|
/* Class = "NSButtonCell"; title = "Hide application after copying to clipboard"; ObjectID = "1Vr-nY-Ogv"; */
|
||||||
"1Vr-nY-Ogv.title" = "MacPass nach dem jedem Kopieren in die Zwischenablage ausblenden";
|
"1Vr-nY-Ogv.title" = "MacPass nach dem jedem Kopieren in die Zwischenablage ausblenden";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Entry Table"; ObjectID = "2"; */
|
/* Class = "NSBox"; title = "Entry Table"; ObjectID = "2"; */
|
||||||
|
|||||||
18
MacPass/en.lproj/InfoPlist.strings
Normal file
18
MacPass/en.lproj/InfoPlist.strings
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/* Bundle name */
|
||||||
|
"CFBundleName" = "MacPass";
|
||||||
|
|
||||||
|
/* (No Comment) */
|
||||||
|
"KDB Database" = "KDB Database";
|
||||||
|
|
||||||
|
/* (No Comment) */
|
||||||
|
"KDBX Database" = "KDBX Database";
|
||||||
|
|
||||||
|
/* (No Comment) */
|
||||||
|
"MacPass Plugin" = "MacPass Plugin";
|
||||||
|
|
||||||
|
/* (No Comment) */
|
||||||
|
"NSHumanReadableCopyright" = "Copyright ©2012-2020 HicknHack Software GmbH. All rights reserved.";
|
||||||
|
|
||||||
|
/* (No Comment) */
|
||||||
|
"XML" = "XML";
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
/* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */
|
/* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */
|
||||||
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "The plugin defintions are hosted online at https://macpassapp.org. MacPass would like to download those files to ensure the data is up to date.";
|
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "The plugin defintions are hosted online at https://macpassapp.org. MacPass would like to download those files to ensure the data is up to date.";
|
||||||
|
|
||||||
/* Message displayed on the alert that askf for permission to download the plugin repository JSON file */
|
/* Message displayed on the alert that asks for permission to download the plugin repository JSON file */
|
||||||
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass would like to check for updates of plugin definitions online";
|
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass would like to check for updates of plugin definitions online";
|
||||||
|
|
||||||
/* Disallow the download of the plugin repository file */
|
/* Disallow the download of the plugin repository file */
|
||||||
@@ -119,14 +119,26 @@
|
|||||||
/* Notification: Autotype failed, MacPass has not enough permissions to perform autotype */
|
/* Notification: Autotype failed, MacPass has not enough permissions to perform autotype */
|
||||||
"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "MacPass does not have all necessary permissions to perform Autotype.";
|
"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "MacPass does not have all necessary permissions to perform Autotype.";
|
||||||
|
|
||||||
|
/* Notification: Title for autotype feedback */
|
||||||
|
"AUTOTYPE_NOTIFICATION_MATCH_TITLE" = "Autotype";
|
||||||
|
|
||||||
/* Notification: Autotype failed, no documents are open */
|
/* Notification: Autotype failed, no documents are open */
|
||||||
"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Please open a database file to use Global Autotype!";
|
"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_INFORMATIVE_TEXT" = "Please open a database file to use Global Autotype!";
|
||||||
|
|
||||||
|
/* Notification: Title for autotype feedback */
|
||||||
|
"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_TITLE" = "No database is open!";
|
||||||
|
|
||||||
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
||||||
"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "No Match for %@!";
|
"AUTOTYPE_NOTIFICATION_NO_MATCH_FOR_%@" = "No Match for %@!";
|
||||||
|
|
||||||
|
/* Title for autotype feedback on missing permissions */
|
||||||
|
"AUTOTYPE_NOTIFICATION_PERMISSIONS_MISSING_TITLE" = "Missing permissions";
|
||||||
|
|
||||||
/* Notification: Autotype found a single match for %@ (string placeholder). */
|
/* Notification: Autotype found a single match for %@ (string placeholder). */
|
||||||
"AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@" = "Found Match for %@!";
|
"AUTOTYPE_NOTIFICATION_SINGLE_MATCH_FOR_%@" = "Found Match for %@!";
|
||||||
|
|
||||||
|
/* Title for the notification when the Autotype operation timed out */
|
||||||
|
"AUTOTYPE_NOTIFICATION_TIMED_OUT_TITLE" = "Autotype timed out!";
|
||||||
|
|
||||||
/* Status label when no issue were found in accessibilty */
|
/* Status label when no issue were found in accessibilty */
|
||||||
"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass has permission to control your computer (Accessibility)";
|
"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass has permission to control your computer (Accessibility)";
|
||||||
@@ -137,11 +149,11 @@
|
|||||||
/* Status MacPass has no screen recording permissions */
|
/* Status MacPass has no screen recording permissions */
|
||||||
"AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass has no permission to record your screen";
|
"AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass has no permission to record your screen";
|
||||||
|
|
||||||
/* Status lable when no issue were found in screen recording permissions */
|
/* Status label when no issue were found in screen recording permissions */
|
||||||
"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK" = "MacPass has permission to record your screen";
|
"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK" = "MacPass has permission to record your screen";
|
||||||
|
|
||||||
/* Notficication: Autotype timed out */
|
/* Notficication: Autotype timed out */
|
||||||
"AUTOTYPE_TIMED_OUT" = "Autotype timed out.";
|
"AUTOTYPE_TIMED_OUT" = "You did start Autotype too long ago. MacPass did not perform it anymore to prevent any wrong input!";
|
||||||
|
|
||||||
/* Enable autotype menu item */
|
/* Enable autotype menu item */
|
||||||
"AUTOTYPE_YES" = "Enable Autotype";
|
"AUTOTYPE_YES" = "Enable Autotype";
|
||||||
@@ -350,7 +362,7 @@
|
|||||||
"ERROR_INVALID_PLUGIN" = "Invalid plugin";
|
"ERROR_INVALID_PLUGIN" = "Invalid plugin";
|
||||||
|
|
||||||
/* Error description for missing accessibility permissions */
|
/* Error description for missing accessibility permissions */
|
||||||
"ERROR_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass has no permission to control your computer (Accessibility)";
|
"ERROR_NO_ACCESSIBILITY_PERMISSIONS" = "MacPass has no permission to control your computer (Accessibility)";
|
||||||
|
|
||||||
/* Error description for missing screen recording permissions */
|
/* Error description for missing screen recording permissions */
|
||||||
"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass has no permission to record your screen";
|
"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass has no permission to record your screen";
|
||||||
@@ -522,7 +534,7 @@
|
|||||||
/* Select Browser */
|
/* Select Browser */
|
||||||
"OTHER_BROWSER" = "Select Browser…";
|
"OTHER_BROWSER" = "Select Browser…";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Value field for reference lookup */
|
||||||
"OUTPUT_VALUE" = "Output Value";
|
"OUTPUT_VALUE" = "Output Value";
|
||||||
|
|
||||||
/* Menu item to toggle display of password column in entry table
|
/* Menu item to toggle display of password column in entry table
|
||||||
@@ -632,6 +644,9 @@
|
|||||||
/* Message text for the recommend password change alert */
|
/* Message text for the recommend password change alert */
|
||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Please change the database password!";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Please change the database password!";
|
||||||
|
|
||||||
|
/* Updated at text when the local plugin defintino is used */
|
||||||
|
"REPOSITORY_UPDATED_AT_LOCAL" = "Never (using bundled version)";
|
||||||
|
|
||||||
/* Restart */
|
/* Restart */
|
||||||
"RESTART" = "Restart";
|
"RESTART" = "Restart";
|
||||||
|
|
||||||
@@ -654,6 +669,9 @@
|
|||||||
/* Search option: Find duplicate passwords */
|
/* Search option: Find duplicate passwords */
|
||||||
"SEARCH_DUPLICATE_PASSWORDS" = "Duplicate Passwords";
|
"SEARCH_DUPLICATE_PASSWORDS" = "Duplicate Passwords";
|
||||||
|
|
||||||
|
/* Placeholder string displayed in the search field in the toolbar */
|
||||||
|
"SEARCH_EVERYWHERE" = "Search Everywhere";
|
||||||
|
|
||||||
/* Search option: Find expired entries */
|
/* Search option: Find expired entries */
|
||||||
"SEARCH_EXPIRED_ENTRIES" = "Expired";
|
"SEARCH_EXPIRED_ENTRIES" = "Expired";
|
||||||
|
|
||||||
@@ -663,7 +681,7 @@
|
|||||||
/* Disable search menu item */
|
/* Disable search menu item */
|
||||||
"SEARCH_NO" = "Exclude from Search";
|
"SEARCH_NO" = "Exclude from Search";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Search field for references lookup */
|
||||||
"SEARCH_VALUE" = "Search Value";
|
"SEARCH_VALUE" = "Search Value";
|
||||||
|
|
||||||
/* Enable search menu item */
|
/* Enable search menu item */
|
||||||
@@ -784,6 +802,12 @@
|
|||||||
UUID reference item */
|
UUID reference item */
|
||||||
"UUID" = "UUID";
|
"UUID" = "UUID";
|
||||||
|
|
||||||
|
/* Error message displayed when the current database file is also set as the key file */
|
||||||
|
"WARNING_CURRENT_DATABASE_FILE_SELECTED_AS_KEY_FILE" = "You cannot select the current database file as the key file.";
|
||||||
|
|
||||||
|
/* Error message displayed when a keepass database file is set as the key file */
|
||||||
|
"WARNING_DATABASE_FILE_SELECTED_AS_KEY_FILE" = "You should not use another database file as a key file since it might change and prevent you from reopening the current file.";
|
||||||
|
|
||||||
/* No Key or Password */
|
/* No Key or Password */
|
||||||
"WARNING_NO_PASSWORD_OR_KEYFILE" = "No password or keyfile supplied!";
|
"WARNING_NO_PASSWORD_OR_KEYFILE" = "No password or keyfile supplied!";
|
||||||
|
|
||||||
@@ -805,6 +829,9 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Please set a password and/or keyfile for this database. Aborting this will undo all changes and lock the document";
|
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Please set a password and/or keyfile for this database. Aborting this will undo all changes and lock the document";
|
||||||
|
|
||||||
|
/* Text displayed when no recent documents can be displayed in */
|
||||||
|
"WELCOME_WINDOW_NO_RECENT_DOCUMENTS" = "No recent Documents";
|
||||||
|
|
||||||
/* Label for the workflow settings tab */
|
/* Label for the workflow settings tab */
|
||||||
"WORKFLOW_SETTINGS" = "Workflow";
|
"WORKFLOW_SETTINGS" = "Workflow";
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"MacPass Plugin" = "Plugin MacPass";
|
"MacPass Plugin" = "Plugin MacPass";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"NSHumanReadableCopyright" = "Copyright ©2012-2019 HicknHack Software GmbH. All rights reserved. ";
|
"NSHumanReadableCopyright" = "Copyright ©2012-2020 HicknHack Software GmbH. All rights reserved. ";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"XML" = "XML";
|
"XML" = "XML";
|
||||||
|
|||||||
@@ -132,13 +132,13 @@
|
|||||||
"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "Autotecleo no tiene los permisos necesarios";
|
"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "Autotecleo no tiene los permisos necesarios";
|
||||||
|
|
||||||
/* Notification: Autotype failed, no documents are open */
|
/* Notification: Autotype failed, no documents are open */
|
||||||
"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Debes abrir un archivo para usar Autotecleo Global";
|
"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_INFORMATIVE_TEXT" = "Debes abrir un archivo para usar Autotecleo Global";
|
||||||
|
|
||||||
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
||||||
"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "¡No hay entradas para %@!";
|
"AUTOTYPE_NOTIFICATION_NO_MATCH_FOR_%@" = "¡No hay entradas para %@!";
|
||||||
|
|
||||||
/* Notification: Autotype found a single match for %@ (string placeholder). */
|
/* Notification: Autotype found a single match for %@ (string placeholder). */
|
||||||
"AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@" = "¡%@ Encontrado!";
|
"AUTOTYPE_NOTIFICATION_SINGLE_MATCH_FOR_%@" = "¡%@ Encontrado!";
|
||||||
|
|
||||||
/* Status lable when no issue were found in accessibilty */
|
/* Status lable when no issue were found in accessibilty */
|
||||||
"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass tiene permiso para controlar su ordenador (Accesibilidad)";
|
"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass tiene permiso para controlar su ordenador (Accesibilidad)";
|
||||||
@@ -356,7 +356,7 @@
|
|||||||
"ERROR_INVALID_PLUGIN" = "Plugin inválido";
|
"ERROR_INVALID_PLUGIN" = "Plugin inválido";
|
||||||
|
|
||||||
/* Error description for missing accessibilty permissions */
|
/* Error description for missing accessibilty permissions */
|
||||||
"ERROR_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass no tiene permiso para controlar su ordenador (Accesibilidad)";
|
"ERROR_NO_ACCESSIBILITY_PERMISSIONS" = "MacPass no tiene permiso para controlar su ordenador (Accesibilidad)";
|
||||||
|
|
||||||
/* Error description for missing screen recording permissions */
|
/* Error description for missing screen recording permissions */
|
||||||
"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass no tiene permiso para grabar su pantalla";
|
"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass no tiene permiso para grabar su pantalla";
|
||||||
@@ -528,7 +528,7 @@
|
|||||||
/* Select Browser */
|
/* Select Browser */
|
||||||
"OTHER_BROWSER" = "Seleccionar Navegador…";
|
"OTHER_BROWSER" = "Seleccionar Navegador…";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Value field for reference lookup */
|
||||||
"OUTPUT_VALUE" = "Valor de salida";
|
"OUTPUT_VALUE" = "Valor de salida";
|
||||||
|
|
||||||
/* Menu item to toggle display of password column in entry table
|
/* Menu item to toggle display of password column in entry table
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
||||||
"STt-PQ-Szr.title" = "Campo de Texto";
|
"STt-PQ-Szr.title" = "Campo de Texto";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Download current plugin information"; ObjectID = "uHR-uL-Ddm"; */
|
/* Class = "NSButtonCell"; title = "Download current Plugin information"; ObjectID = "uHR-uL-Ddm"; */
|
||||||
"uHR-uL-Ddm.title" = "Descargar la información del plugin actual";
|
"uHR-uL-Ddm.title" = "Descargar la información del plugin actual";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "8ny-Qk-Jvo"; */
|
||||||
|
"8ny-Qk-Jvo.title" = "Séquence de saisie automatique";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Set Autotype Sequence"; ObjectID = "aOD-Ih-Sft"; */
|
||||||
|
"aOD-Ih-Sft.title" = "Définir une séquence de saisie automatique";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Available Commands and Placeholders"; ObjectID = "lug-97-H9D"; */
|
/* Class = "NSTextFieldCell"; title = "Available Commands and Placeholders"; ObjectID = "lug-97-H9D"; */
|
||||||
"lug-97-H9D.title" = "Commandes et emplacements disponibles";
|
"lug-97-H9D.title" = "Commandes et emplacements disponibles";
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"60p-7v-Nje.title" = "Annuler";
|
"60p-7v-Nje.title" = "Annuler";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "There are multiple matches for the current window. Please select which match should be used."; ObjectID = "gcf-gb-ZsF"; */
|
/* Class = "NSTextFieldCell"; title = "There are multiple matches for the current window. Please select which match should be used."; ObjectID = "gcf-gb-ZsF"; */
|
||||||
"gcf-gb-ZsF.title" = "Il existe plusieurs possibilités pour la fenêtre courante. Sélectionner celui qui doit être utilisé";
|
"gcf-gb-ZsF.title" = "Il existe plusieurs possibilités pour la fenêtre courante. Veuillez sélectionner le résultat qui doit être utilisé.";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "PKW-gr-yqN"; */
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "PKW-gr-yqN"; */
|
||||||
"PKW-gr-yqN.title" = "Libellé de la cellule";
|
"PKW-gr-yqN.title" = "Libellé de la cellule";
|
||||||
|
|||||||
24
MacPass/fr.lproj/AutotypeDoctorReportViewController.strings
Normal file
24
MacPass/fr.lproj/AutotypeDoctorReportViewController.strings
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/* Class = "NSButtonCell"; title = "Request Permissions…"; ObjectID = "1Nx-Cg-TCn"; */
|
||||||
|
"1Nx-Cg-TCn.title" = "Demande de permissions...";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; ObjectID = "6GI-KJ-Xue"; */
|
||||||
|
"6GI-KJ-Xue.title" = "MacPass va envoyer des évènement de touches pressées au système lorsque la saisie automatique est déclenchée. Depuis macOS 10.14 (Mojave), cela est possible uniquement si les permissions d'Accessibilité sont accordées à l'application.";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will check if it can read every window title of currently visible windows. This test will not read the actual title. The titles aren't stored or processed in any way."; ObjectID = "7of-1z-Nfk"; */
|
||||||
|
"7of-1z-Nfk.title" = "MacPass va lire tout les titres de fenêtres lorsque la saisie automatique globale est déclenchée pour trouver un résultat correspondant. Depuis macOS 10.15 (Catalina), il est impossible de lire les titres de fenêtres si l'utilisateur n'a pas accordé la permission de capture d'écran. Si vous utilisé(e) macOS 10.15 ou supérieur, MacPass va essayer de lire tout les titres de fenêtres actuellement visibles. Ce test ne va pas lire le contenu actuel des titres. Les titres ne sont ni stockés ni utilisés à d'autre fin.";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Open Accessibilty Preferences…"; ObjectID = "8m1-vs-pd5"; */
|
||||||
|
"8m1-vs-pd5.title" = "Ouvrir les préférences d'accessibilité";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Screen Recording"; ObjectID = "9gr-mz-2I4"; */
|
||||||
|
"9gr-mz-2I4.title" = "Enregistrement d'écran";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Accessibility"; ObjectID = "aIL-8W-63g"; */
|
||||||
|
"aIL-8W-63g.title" = "Accessibilité";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Open Screen Recording Preferences…"; ObjectID = "lgB-Ys-L9R"; */
|
||||||
|
"lgB-Ys-L9R.title" = "Ouvrir les préférences concernant l'enregistrement d'écran...";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "To request Screen Recording permissions, MacPass will try to capture a 1 by 1 Pixel sized screenshot of the top left part of your screen. The data is not stored nor processed in any way."; ObjectID = "Mhg-rd-1hK"; */
|
||||||
|
"Mhg-rd-1hK.title" = "Pour demander la permission d'enregistrement d'écran, MacPass va essayer de capturer une image de 1 par 1 pixel de la partie en haut à gauche de votre écran. Cette image n'est ni stockée ni utilisée à d'autre fin.";
|
||||||
|
|
||||||
@@ -14,10 +14,10 @@
|
|||||||
"92o-gN-Psj.title" = "URL";
|
"92o-gN-Psj.title" = "URL";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "CFk-71-NYQ"; */
|
/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "CFk-71-NYQ"; */
|
||||||
"CFk-71-NYQ.title" = "Item 3";
|
"CFk-71-NYQ.title" = "2ème élément";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "cpr-p6-YAY"; */
|
/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "cpr-p6-YAY"; */
|
||||||
"cpr-p6-YAY.title" = "Item 2";
|
"cpr-p6-YAY.title" = "3ème élément";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */
|
/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */
|
||||||
"ER3-Ic-v0N.title" = "Historique";
|
"ER3-Ic-v0N.title" = "Historique";
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"jfQ-Jh-2gl.title" = "Nom d'utilisateur";
|
"jfQ-Jh-2gl.title" = "Nom d'utilisateur";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */
|
/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */
|
||||||
"LRm-iZ-XrA.title" = "Item 1";
|
"LRm-iZ-XrA.title" = "1er élément";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Trash"; ObjectID = "na6-h9-r9q"; */
|
/* Class = "NSTabViewItem"; label = "Trash"; ObjectID = "na6-h9-r9q"; */
|
||||||
"na6-h9-r9q.label" = "Corbeille";
|
"na6-h9-r9q.label" = "Corbeille";
|
||||||
@@ -49,6 +49,9 @@
|
|||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "wC4-fF-dLW"; */
|
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "wC4-fF-dLW"; */
|
||||||
"wC4-fF-dLW.title" = "Autres vues";
|
"wC4-fF-dLW.title" = "Autres vues";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Everywhere"; ObjectID = "WMK-bb-ESj"; */
|
||||||
|
"WMK-bb-ESj.title" = "Partout";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "History"; ObjectID = "z4I-cp-nhf"; */
|
/* Class = "NSTabViewItem"; label = "History"; ObjectID = "z4I-cp-nhf"; */
|
||||||
"z4I-cp-nhf.label" = "Historique";
|
"z4I-cp-nhf.label" = "Historique";
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Enforce key change"; ObjectID = "5QH-N1-FHK"; */
|
/* Class = "NSTextFieldCell"; title = "Enforce key change"; ObjectID = "5QH-N1-FHK"; */
|
||||||
"5QH-N1-FHK.title" = "Forcer le changement de clé";
|
"5QH-N1-FHK.title" = "Forcer le changement de clé";
|
||||||
|
|
||||||
|
/* Class = "NSTabViewItem"; label = "Argon2"; ObjectID = "6qB-sH-9FI"; */
|
||||||
|
"6qB-sH-9FI.label" = "Argon2";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Database name:"; ObjectID = "190"; */
|
/* Class = "NSTextFieldCell"; title = "Database name:"; ObjectID = "190"; */
|
||||||
"190.title" = "Nom de la base de données :";
|
"190.title" = "Nom de la base de données :";
|
||||||
|
|
||||||
@@ -35,7 +38,7 @@
|
|||||||
"536.title" = "Activer la corbeille";
|
"536.title" = "Activer la corbeille";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Maximum items in history:"; ObjectID = "558"; */
|
/* Class = "NSTextFieldCell"; title = "Maximum items in history:"; ObjectID = "558"; */
|
||||||
"558.title" = "Nombre maximum d'éléments :";
|
"558.title" = "Nombre maximum d'éléments dans l'historique :";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "680"; */
|
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "680"; */
|
||||||
"680.title" = "Autres vues";
|
"680.title" = "Autres vues";
|
||||||
@@ -44,7 +47,7 @@
|
|||||||
"957.title" = "Annuler";
|
"957.title" = "Annuler";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Maximum history size:"; ObjectID = "1269"; */
|
/* Class = "NSTextFieldCell"; title = "Maximum history size:"; ObjectID = "1269"; */
|
||||||
"1269.title" = "Taille maximum :";
|
"1269.title" = "Taille maximum de l'historique :";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1396"; */
|
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1396"; */
|
||||||
"1396.title" = "Autres vues";
|
"1396.title" = "Autres vues";
|
||||||
@@ -76,6 +79,9 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Recommend key change"; ObjectID = "CtU-Eq-dgy"; */
|
/* Class = "NSButtonCell"; title = "Recommend key change"; ObjectID = "CtU-Eq-dgy"; */
|
||||||
"CtU-Eq-dgy.title" = "Recommander le changement de la clé tous les :";
|
"CtU-Eq-dgy.title" = "Recommander le changement de la clé tous les :";
|
||||||
|
|
||||||
|
/* Class = "NSTabViewItem"; label = "Aes"; ObjectID = "ft1-pl-lpO"; */
|
||||||
|
"ft1-pl-lpO.label" = "Aes";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Algorithm"; ObjectID = "GVd-KH-pHc"; */
|
/* Class = "NSTextFieldCell"; title = "Algorithm"; ObjectID = "GVd-KH-pHc"; */
|
||||||
"GVd-KH-pHc.title" = "Algorithme";
|
"GVd-KH-pHc.title" = "Algorithme";
|
||||||
|
|
||||||
@@ -86,7 +92,7 @@
|
|||||||
"iRY-If-Kwn.title" = "Mémoire";
|
"iRY-If-Kwn.title" = "Mémoire";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Recyclebin Group:"; ObjectID = "kI5-Kp-byE"; */
|
/* Class = "NSTextFieldCell"; title = "Recyclebin Group:"; ObjectID = "kI5-Kp-byE"; */
|
||||||
"kI5-Kp-byE.title" = "Groupe corbeille";
|
"kI5-Kp-byE.title" = "Groupe corbeille :";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Force key change once after unlocking"; ObjectID = "pA1-aL-KjT"; */
|
/* Class = "NSButtonCell"; title = "Force key change once after unlocking"; ObjectID = "pA1-aL-KjT"; */
|
||||||
"pA1-aL-KjT.title" = "Forcer le changement de clé une fois déverrouillé";
|
"pA1-aL-KjT.title" = "Forcer le changement de clé une fois déverrouillé";
|
||||||
@@ -100,6 +106,9 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "VersionInfo"; ObjectID = "Ush-4r-A1A"; */
|
/* Class = "NSTextFieldCell"; title = "VersionInfo"; ObjectID = "Ush-4r-A1A"; */
|
||||||
"Ush-4r-A1A.title" = "Information de version";
|
"Ush-4r-A1A.title" = "Information de version";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Rounds"; ObjectID = "uUQ-9s-M5E"; */
|
||||||
|
"uUQ-9s-M5E.title" = "Rounds";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */
|
/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */
|
||||||
"Xib-Fn-sqx.title" = "Recommander le changement de clé";
|
"Xib-Fn-sqx.title" = "Recommander le changement de clé";
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,9 @@
|
|||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "sNS-o1-pD7"; */
|
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "sNS-o1-pD7"; */
|
||||||
"sNS-o1-pD7.title" = "Autres vues";
|
"sNS-o1-pD7.title" = "Autres vues";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "UUID"; ObjectID = "vTq-N1-5oa"; */
|
||||||
|
"vTq-N1-5oa.title" = "UUID";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show Plugin Data"; ObjectID = "X9y-K7-lix"; */
|
/* Class = "NSButtonCell"; title = "Show Plugin Data"; ObjectID = "X9y-K7-lix"; */
|
||||||
"X9y-K7-lix.title" = "Afficher les données du plugin";
|
"X9y-K7-lix.title" = "Afficher les données du plugin";
|
||||||
|
|
||||||
|
|||||||
@@ -32,16 +32,16 @@
|
|||||||
"531.title" = "Ouvrir la dernière base de données au lancement";
|
"531.title" = "Ouvrir la dernière base de données au lancement";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "LockTimes"; ObjectID = "586"; */
|
/* Class = "NSMenu"; title = "LockTimes"; ObjectID = "586"; */
|
||||||
"586.title" = "Verrouillage";
|
"586.title" = "Temps de verrouillage";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "for 1 Minute"; ObjectID = "588"; */
|
/* Class = "NSMenuItem"; title = "for 1 Minute"; ObjectID = "588"; */
|
||||||
"588.title" = "pour 1 minute";
|
"588.title" = "pendant 1 minute";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "for 5 Minutes"; ObjectID = "589"; */
|
/* Class = "NSMenuItem"; title = "for 5 Minutes"; ObjectID = "589"; */
|
||||||
"589.title" = "pour 5 minutes";
|
"589.title" = "pendant 5 minutes";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "for 15 Minutes"; ObjectID = "603"; */
|
/* Class = "NSMenuItem"; title = "for 15 Minutes"; ObjectID = "603"; */
|
||||||
"603.title" = "pour 15 minutes";
|
"603.title" = "pendant 15 minutes";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Lock after sleep"; ObjectID = "631"; */
|
/* Class = "NSButtonCell"; title = "Lock after sleep"; ObjectID = "631"; */
|
||||||
"631.title" = "Verrouillage après sommeil";
|
"631.title" = "Verrouillage après sommeil";
|
||||||
@@ -56,16 +56,25 @@
|
|||||||
"888.title" = "Gestion des fichiers";
|
"888.title" = "Gestion des fichiers";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved."; ObjectID = "ACh-7H-42N"; */
|
/* Class = "NSTextFieldCell"; title = "Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved."; ObjectID = "ACh-7H-42N"; */
|
||||||
"ACh-7H-42N.title" = "Cocher cette case compromet la sécurité. Si activé, les associations base de données / fichiers clé seront enregistrées. La localisation des clés pour les bases de données sans mot de passe n'est pas sauvegardée.";
|
"ACh-7H-42N.title" = "Cocher cette case compromet la sécurité. Si activé, vos préférences contiendront les associations base de données / fichier clé. L'emplacement des clés pour les bases de données sans mot de passe ne seront pas sauvegardés.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Lock after log out"; ObjectID = "Dzn-9R-JjE"; */
|
/* Class = "NSButtonCell"; title = "Lock after log out"; ObjectID = "Dzn-9R-JjE"; */
|
||||||
"Dzn-9R-JjE.title" = "Verrouiller après déconnexion";
|
"Dzn-9R-JjE.title" = "Verrouiller après déconnexion";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Prevent Universal Clipboard support"; ObjectID = "fNy-mS-phi"; */
|
||||||
|
"fNy-mS-phi.title" = "Désactiver le support de presse-papier universel";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually."; ObjectID = "JGX-Tp-KJk"; */
|
||||||
|
"JGX-Tp-KJk.title" = "Désactiver ceci compromet la sécurité. Si activé, tout ce qui est copié dans le presse-papiers depuis MacPass sera accessible depuis tout les appareils iOS connectés. Vous devrez effacer le presse-papiers sur ces appareils manuellement.";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Lock after screen sleep"; ObjectID = "l3t-og-mJd"; */
|
||||||
|
"l3t-og-mJd.title" = "Verrouiller après l'activation de l'économiseur d'écran";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "If file changes:"; ObjectID = "QrK-hM-Xt1"; */
|
/* Class = "NSTextFieldCell"; title = "If file changes:"; ObjectID = "QrK-hM-Xt1"; */
|
||||||
"QrK-hM-Xt1.title" = "Si modifications du fichier :";
|
"QrK-hM-Xt1.title" = "Si modifications du fichier :";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Remember Keyfile for Databases"; ObjectID = "r6q-He-nYU"; */
|
/* Class = "NSButtonCell"; title = "Remember Keyfile for Databases"; ObjectID = "r6q-He-nYU"; */
|
||||||
"r6q-He-nYU.title" = "Enregistrer la localisation des fichiers clé";
|
"r6q-He-nYU.title" = "Se souvenir des fichiers clé pour les bases de données";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable Autosave"; ObjectID = "wG7-bi-2fi"; */
|
/* Class = "NSButtonCell"; title = "Enable Autosave"; ObjectID = "wG7-bi-2fi"; */
|
||||||
"wG7-bi-2fi.title" = "Activer l'enregistrement automatique";
|
"wG7-bi-2fi.title" = "Activer l'enregistrement automatique";
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
/* Bundle name */
|
||||||
|
"CFBundleName" = "MacPass";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"KDB Database" = "Base de données KDB";
|
"KDB Database" = "Base de données KDB";
|
||||||
|
|
||||||
@@ -7,3 +10,27 @@
|
|||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"MacPass Plugin" = "Plugin MacPass";
|
"MacPass Plugin" = "Plugin MacPass";
|
||||||
|
|
||||||
|
/* Privacy - AppleEvents Sending Usage Description */
|
||||||
|
"NSAppleEventsUsageDescription" = "MacPass pourrait utiliser AppleEvents pour permettre la fonctionnalité de saisie automatique";
|
||||||
|
|
||||||
|
/* Privacy - Desktop Folder Usage Description */
|
||||||
|
"NSDesktopFolderUsageDescription" = "MacPass accède au Bureau pour charger et sauvegarder vos bases de données et/ou les fichiers clé à cet emplacement";
|
||||||
|
|
||||||
|
/* Privacy - Documents Folder Usage Description */
|
||||||
|
"NSDocumentsFolderUsageDescription" = "MacPass accède au dossier Documents pour charger et sauvegarder vos bases de données et/ou les fichiers clé à cet emplacement";
|
||||||
|
|
||||||
|
/* Privacy - Downloads Folder Usage Description */
|
||||||
|
"NSDownloadsFolderUsageDescription" = "MacPass accède au dossier Téléchargements pour charger et sauvegarder vos bases de données et/ou les fichiers clé à cet emplacement";
|
||||||
|
|
||||||
|
/* (No Comment) */
|
||||||
|
"NSHumanReadableCopyright" = "Copyright ©2012-2020 HicknHack Software GmbH. Tous droits réservés.";
|
||||||
|
|
||||||
|
/* Privacy - Network Volumes Usage Description */
|
||||||
|
"NSNetworkVolumesUsageDescription" = "MacPass nécessite l'accès aux volumes réseau pour charger et sauvegarder vos bases de données et/ou fichiers clé à cet endroit";
|
||||||
|
|
||||||
|
/* Privacy - Removable Volumes Usage Description */
|
||||||
|
"NSRemovableVolumesUsageDescription" = "MacPass nécessite l'accès aux volumes amovibles pour charger et sauvegarder vos bases de données et/ou fichiers clé à cet endroit";
|
||||||
|
|
||||||
|
/* (No Comment) */
|
||||||
|
"XML" = "XML";
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Enable global Autotype"; ObjectID = "1qb-Rd-jYu"; */
|
/* Class = "NSButtonCell"; title = "Enable global Autotype"; ObjectID = "1qb-Rd-jYu"; */
|
||||||
"1qb-Rd-jYu.title" = "Activer la saisie automatique";
|
"1qb-Rd-jYu.title" = "Activer la saisie automatique globale";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Shortcut"; ObjectID = "6oN-CH-T0O"; */
|
/* Class = "NSTextFieldCell"; title = "Shortcut"; ObjectID = "6oN-CH-T0O"; */
|
||||||
"6oN-CH-T0O.title" = "Raccourci";
|
"6oN-CH-T0O.title" = "Raccourci";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Include Entry URL Host for matches"; ObjectID = "B1D-j9-L8x"; */
|
/* Class = "NSButtonCell"; title = "Include Entry URL Host for matches"; ObjectID = "B1D-j9-L8x"; */
|
||||||
"B1D-j9-L8x.title" = "Inclure l'hôte pour la correspondance";
|
"B1D-j9-L8x.title" = "Inclure l'URL hôte de l'entrée pour la correspondance";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable Quicklook Preview"; ObjectID = "ERs-ct-Eyx"; */
|
/* Class = "NSButtonCell"; title = "Enable Quicklook Preview"; ObjectID = "ERs-ct-Eyx"; */
|
||||||
"ERs-ct-Eyx.title" = "Autoriser la prévisualisation coup d'œil";
|
"ERs-ct-Eyx.title" = "Autoriser la prévisualisation coup d'œil";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Autotype is not available, because MacPass is not allowed to control your computer. To enable Autotype, go to the Security and Privacy Preferences and add MacPass to the Accessibilty group. Changes require a restart of MacPass."; ObjectID = "H37-ku-aTc"; */
|
/* Class = "NSTextFieldCell"; title = "Autotype might not work properly. Some issues where found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues."; ObjectID = "H37-ku-aTc"; */
|
||||||
"H37-ku-aTc.title" = "La saisie automatique n'est pas disponible, car MacPass n'est autorisé à contrôler votre ordinateur. Pour activer la saisie automatique, allez dans les Préférences Système, Sécurité et Confidentialité, et ajoutez MacPass dans les applications autorisées à contrôler votre ordinateur. Ces modifications requièrent un redémarrage de MacPass.";
|
"H37-ku-aTc.title" = "La saisie automatique n'est pas disponible, car MacPass n'est autorisé à contrôler votre ordinateur. Pour activer la saisie automatique, allez dans les Préférences Système, Sécurité et Confidentialité, et ajoutez MacPass dans les applications autorisées à contrôler votre ordinateur. Ces modifications requièrent un redémarrage de MacPass.";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Shortcut is missing Key"; ObjectID = "Lxp-wI-yQy"; */
|
/* Class = "NSTextFieldCell"; title = "Shortcut is missing Key"; ObjectID = "Lxp-wI-yQy"; */
|
||||||
"Lxp-wI-yQy.title" = "Aucune touche n'est affectée au raccourci";
|
"Lxp-wI-yQy.title" = "Aucune touche n'est affectée au raccourci";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Open Preferences…"; ObjectID = "NP0-R3-m6n"; */
|
/* Class = "NSButtonCell"; title = "Run Autotype Doctor…"; ObjectID = "NP0-R3-m6n"; */
|
||||||
"NP0-R3-m6n.title" = "Ouvrir les Préférences…";
|
"NP0-R3-m6n.title" = "Ouvrir les Préférences…";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Autotype"; ObjectID = "P9N-HM-wER"; */
|
/* Class = "NSBox"; title = "Autotype"; ObjectID = "P9N-HM-wER"; */
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
"QRy-CY-ENC.title" = "Si activé, chaque commande {CONTROL} sera envoyée comme ⌘. Ne décochez que si vous êtes sûr d'en avoir besoin.";
|
"QRy-CY-ENC.title" = "Si activé, chaque commande {CONTROL} sera envoyée comme ⌘. Ne décochez que si vous êtes sûr d'en avoir besoin.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Include Entry Tags for matches"; ObjectID = "rbu-G7-MT8"; */
|
/* Class = "NSButtonCell"; title = "Include Entry Tags for matches"; ObjectID = "rbu-G7-MT8"; */
|
||||||
"rbu-G7-MT8.title" = "Inclure les Tags pour la correspondance";
|
"rbu-G7-MT8.title" = "Inclure les tags pour la correspondance";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Include Entry Title for matches"; ObjectID = "tmL-dT-D0G"; */
|
/* Class = "NSButtonCell"; title = "Include Entry Title for matches"; ObjectID = "tmL-dT-D0G"; */
|
||||||
"tmL-dT-D0G.title" = "Inclure le titre pour la correspondance";
|
"tmL-dT-D0G.title" = "Inclure le titre pour la correspondance";
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
/* Count of characters remaining in pickchars dialog */
|
||||||
|
"%ld_CHARACTERS_TO_PICK_REMAINING" = "%ld caractères restants à choisir";
|
||||||
|
|
||||||
|
/* Display format for days. Should contain a long decimal placeholder! */
|
||||||
|
"%ld_DAYS" = "%ld jours";
|
||||||
|
|
||||||
/* % days ago */
|
/* % days ago */
|
||||||
"%ld_DAYS_AGO" = "Depuis %ld jours";
|
"%ld_DAYS_AGO" = "Depuis %ld jours";
|
||||||
|
|
||||||
@@ -14,35 +20,140 @@
|
|||||||
"90_DAYS" = "dans 90 jours";
|
"90_DAYS" = "dans 90 jours";
|
||||||
|
|
||||||
/* Button label to abort a merge on a file with changed master key! */
|
/* Button label to abort a merge on a file with changed master key! */
|
||||||
"ABORT_MERGE_KEEP_MINE" = "Annuler la fusion";
|
"ABORT_MERGE_KEEP_MINE" = "Annuler la fusion.";
|
||||||
|
|
||||||
/* Toolbar item with action menu */
|
/* Toolbar item with action menu */
|
||||||
"ACTION" = "Action";
|
"ACTION" = "Action";
|
||||||
|
|
||||||
|
/* Menu item title for adding an hmacotp config attribute */
|
||||||
|
"ADD_CUSTOM_ATTRIBUTE_HMACOTP_CONFIG" = "Ajouter une configuration HMACOTP";
|
||||||
|
|
||||||
|
/* Menu item title for adding an hmacotp seed attribute */
|
||||||
|
"ADD_CUSTOM_ATTRIBUTE_HMACOTP_SEED" = "Ajouter une graine HMACOTP";
|
||||||
|
|
||||||
|
/* Menu displayed for adding special custom keys */
|
||||||
|
"ADD_CUSTOM_FIELD_CONTEXT_MENU" = "Ajouter un menu de champ personnalisé";
|
||||||
|
|
||||||
/* Action to add an entry via template */
|
/* Action to add an entry via template */
|
||||||
"ADD_TREMPLATE_ENTRY" = "Créer un modèle";
|
"ADD_TREMPLATE_ENTRY" = "Créer un modèle";
|
||||||
|
|
||||||
|
/* Allow the download of the plugin repository file */
|
||||||
|
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Mettre à jour les définitions en ligne";
|
||||||
|
|
||||||
|
/* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */
|
||||||
|
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "Les définitions de plugins sont hébergés en ligne sur https://macpassapp.org. MacPass aimerait télécharger ces fichiers pour s'assurer que les données sont à jour.";
|
||||||
|
|
||||||
|
/* Message displayed on the alert that asks for permission to download the plugin repository JSON file */
|
||||||
|
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass aimerait vérifier les mises à jour des définitions de plugin en ligne";
|
||||||
|
|
||||||
|
/* Disallow the download of the plugin repository file */
|
||||||
|
"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Ne pas mettre à jour les définitions de plugins";
|
||||||
|
|
||||||
|
/* Button in dialog to leave plugin ds disabled and continiue! */
|
||||||
|
"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OK" = "OK";
|
||||||
|
|
||||||
|
/* Button in dialog to open plugin preferences pane! */
|
||||||
|
"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OPEN_PREFERENCES" = "Voir les préférences de plugins...";
|
||||||
|
|
||||||
|
/* Informative text of the alert displayed when plugins where disabled due to incompatibilty */
|
||||||
|
"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_INFORMATIVE_TEXT" = "Certains plugins ont été désactivé par ce qu'il ne sont pas compatibles avec cette version de MacPass. Ouvrez le menu des plugins pour plus de détails.";
|
||||||
|
|
||||||
|
/* Message text of the alert displayed when plugins where disabled due to incompatibilty */
|
||||||
|
"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_MESSAGE" = "Plugins incompatibles détectés.";
|
||||||
|
|
||||||
|
/* Alert informative text when plugins or their settings change and require a restart */
|
||||||
|
"ALERT_INFORMATIVE_TEXT_PLUGINS_CHANGED_SUGGEST_RESTART" = "Les changements concernant les plugins ainsi que leur configuration globale ne prendront effet qu'après avoir relance MacPass. Relancer MacPass maintenant?";
|
||||||
|
|
||||||
|
/* Alert informative text to ask the user if he really want to uninstall the plugin */
|
||||||
|
"ALERT_INFORMATIVE_TEXT_REALLY_UNINSTALL_PLUGIN" = "Le plugin sera déplacé vers la corbeille.";
|
||||||
|
|
||||||
|
/* Button in dialog to cancel merge of KDB file changes! */
|
||||||
|
"ALERT_MERGE_CANCEL" = "Annuler";
|
||||||
|
|
||||||
|
/* Button in dialog to merge KDB changes into file! */
|
||||||
|
"ALERT_MERGE_CONTINUE" = "Fusionner les fichiers !";
|
||||||
|
|
||||||
|
/* Informative text displayed when merging KDB files */
|
||||||
|
"ALERT_MERGE_KDB_FILE_INFO_TEXT" = "Les bases de données KDB ne contiennent pas assez d'informations pour être fusionnées efficacement. Les entrées seront fusionnées et aucune donnée ne sera perdu. Les groupes ne pouvant correspondre que pas leurs noms, cela risque de provoquer des changements non désirés. Les entrées déplacées peuvent se retrouver dans leur groupe précédant, ou les groupes renommés risquent de ne pas être fusionnés. Les entrées supprimées risquent de réapparaître car les informations concernant les objets supprimés ne sont pas stockées. Êtes-vous sûr de vouloir continuer?";
|
||||||
|
|
||||||
|
/* Alert message warning user about KDB file merge */
|
||||||
|
"ALERT_MERGE_KDB_FILE_MESSAGE" = "Vous allez fusionner une base de données KDB";
|
||||||
|
|
||||||
|
/* Alert message text when plugins or their settings change and require a restart */
|
||||||
|
"ALERT_MESSAGE_PLUGINS_CHANGED_SUGGEST_RESTART" = "Certaines configurations de plugins ont changé. Veuillez relancer l'application.";
|
||||||
|
|
||||||
|
/* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */
|
||||||
|
"ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Voulez-vous vraiment supprimer le plugin %@ ?";
|
||||||
|
|
||||||
|
/* Informative text of the disabled updates alert! */
|
||||||
|
"ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!" = "Les mises à jour concernant la version de %@ sont désactivées !";
|
||||||
|
|
||||||
|
/* Message text for disabled updates alert! */
|
||||||
|
"ALERT_UPDATES_DISABLED_MESSAGE_TEXT" = "Les mises à jour sont désactivé !";
|
||||||
|
|
||||||
/* Attachments column title (shows counts)
|
/* Attachments column title (shows counts)
|
||||||
Menu item to toggle display of attachment count column in entry table */
|
Menu item to toggle display of attachment count column in entry table */
|
||||||
"ATTACHMENTS" = "Fichiers joints";
|
"ATTACHMENTS" = "Fichiers joints";
|
||||||
|
|
||||||
|
/* Sucessfully merged external changes */
|
||||||
|
"AUTO_MERGE_NOTIFICATION_TEXT" = "La fusion automatique est un succès !";
|
||||||
|
|
||||||
/* Menu item for automatic trash creation */
|
/* Menu item for automatic trash creation */
|
||||||
"AUTOCREATE_TRASH_FOLDER" = "Créer automatiquement";
|
"AUTOCREATE_TRASH_FOLDER" = "Créer automatiquement";
|
||||||
|
|
||||||
|
/* Message text in the autotype selection window. Placeholder is %1 - windowTitle */
|
||||||
|
"AUTOTYPE_CANDIDATE_SELECTION_WINDOW_MESSAGE_%@" = "Il y a plusieurs éléments correspondants dans la fenêtre courante : %@. Veuillez sélectionner l'élément que vous désirez utiliser.";
|
||||||
|
|
||||||
|
/* Window title for the stand-alone password creator window */
|
||||||
|
"AUTOTYPE_DOCTOR_RESULTS_WINDOW_TITLE" = "Docteur de saisie automatique";
|
||||||
|
|
||||||
/* Inherit autotype settings menu item */
|
/* Inherit autotype settings menu item */
|
||||||
"AUTOTYPE_INHERIT" = "Réglages par défaut";
|
"AUTOTYPE_INHERIT" = "Réglages par défaut";
|
||||||
|
|
||||||
|
/* Message displayed to the user to unlock the database to perform global autotype */
|
||||||
|
"AUTOTYPE_MESSAGE_UNLOCK_DATABASE" = "Veuillez déverrouiller la base de données pour utiliser la saisie automatique globale";
|
||||||
|
|
||||||
/* Disable autotype menu item */
|
/* Disable autotype menu item */
|
||||||
"AUTOTYPE_NO" = "Désactiver la saisie automatique";
|
"AUTOTYPE_NO" = "Désactiver la saisie automatique";
|
||||||
|
|
||||||
/* Notification: Autotype failed, MacPass has no permission to send key strokes */
|
/* Notification: Autotype failed, MacPass has not enough permissions to perform autotype */
|
||||||
"AUTOTYPE_NOTIFICATION_MACPASS_HAS_NO_ACCESSIBILTY_PERMISSIONS" = "Autorisation accessibilité manquant, saisie automatique désactivé.";
|
"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "MacPass n'a pas toutes les permissions pour effectuer des saisies automatiques.";
|
||||||
|
|
||||||
|
/* Notification: Title for autotype feedback */
|
||||||
|
"AUTOTYPE_NOTIFICATION_MATCH_TITLE" = "Saisie automatique";
|
||||||
|
|
||||||
/* Notification: Autotype failed, no documents are open */
|
/* Notification: Autotype failed, no documents are open */
|
||||||
"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Aucun document n'est ouvert";
|
"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_INFORMATIVE_TEXT" = "Aucun document n'est ouvert";
|
||||||
|
|
||||||
|
/* Notification: Title for autotype feedback */
|
||||||
|
"AUTOTYPE_NOTIFICATION_NO_DOCUMENTS_TITLE" = "Aucune base de données ouverte !";
|
||||||
|
|
||||||
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */
|
||||||
"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "Pas de correspondance %@ !";
|
"AUTOTYPE_NOTIFICATION_NO_MATCH_FOR_%@" = "Pas de correspondance %@ !";
|
||||||
|
|
||||||
|
/* Title for autotype feedback on missing permissions */
|
||||||
|
"AUTOTYPE_NOTIFICATION_PERMISSIONS_MISSING_TITLE" = "Permissions manquantes";
|
||||||
|
|
||||||
|
/* Notification: Autotype found a single match for %@ (string placeholder). */
|
||||||
|
"AUTOTYPE_NOTIFICATION_SINGLE_MATCH_FOR_%@" = "Correspondance trouvé pour %@!";
|
||||||
|
|
||||||
|
/* Title for the notification when the Autotype operation timed out */
|
||||||
|
"AUTOTYPE_NOTIFICATION_TIMED_OUT_TITLE" = "La saisie automatique a expirée !";
|
||||||
|
|
||||||
|
/* Status label when no issue were found in accessibilty */
|
||||||
|
"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass a la permission de contrôler votre ordinateur (Accessibilité)";
|
||||||
|
|
||||||
|
/* Status MacPass has no accessibilty permissions */
|
||||||
|
"AUTOTYPE_STATUS_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass n'a pas la permission de contrôler votre ordinateur (Accessibilité)";
|
||||||
|
|
||||||
|
/* Status MacPass has no screen recording permissions */
|
||||||
|
"AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass n'a pas la permission d'enregistrer votre écran";
|
||||||
|
|
||||||
|
/* Status label when no issue were found in screen recording permissions */
|
||||||
|
"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK" = "MacPass a la permission d'enregistrer votre écran";
|
||||||
|
|
||||||
|
/* Notficication: Autotype timed out */
|
||||||
|
"AUTOTYPE_TIMED_OUT" = "Vous avez commencé(e) la saisie automatique il y a trop longtemps. MacPass ne l'a plus effectuée pour éviter des erreurs.";
|
||||||
|
|
||||||
/* Enable autotype menu item */
|
/* Enable autotype menu item */
|
||||||
"AUTOTYPE_YES" = "Activer la saisie automatique";
|
"AUTOTYPE_YES" = "Activer la saisie automatique";
|
||||||
@@ -53,6 +164,9 @@
|
|||||||
/* Menu item in the database outline context menu to change the database name */
|
/* Menu item in the database outline context menu to change the database name */
|
||||||
"CHANGE_DATABASE_NAME" = "Modifier le nom de la base de données";
|
"CHANGE_DATABASE_NAME" = "Modifier le nom de la base de données";
|
||||||
|
|
||||||
|
/* Button to postpone the password change */
|
||||||
|
"CHANGE_LATER" = "Changer plus tard";
|
||||||
|
|
||||||
/* Button to show the password change dialog
|
/* Button to show the password change dialog
|
||||||
Single button to show the password change dialog */
|
Single button to show the password change dialog */
|
||||||
"CHANGE_PASSWORD_WITH_DOTS" = "Modifier le mot de passe…";
|
"CHANGE_PASSWORD_WITH_DOTS" = "Modifier le mot de passe…";
|
||||||
@@ -63,6 +177,9 @@
|
|||||||
/* Button title in the key file selection dialog for selecting a key */
|
/* Button title in the key file selection dialog for selecting a key */
|
||||||
"CHOOSE_FILE_BUTTON_TITLE" = "Sélectionner";
|
"CHOOSE_FILE_BUTTON_TITLE" = "Sélectionner";
|
||||||
|
|
||||||
|
/* Clear Autotype Button */
|
||||||
|
"CLEAR_AUTOTYPE" = "Vider la saisie automatique";
|
||||||
|
|
||||||
/* Menu to clear recent searches */
|
/* Menu to clear recent searches */
|
||||||
"CLEAR_RECENT_SEARCHES" = "Effacer les recherches récentes";
|
"CLEAR_RECENT_SEARCHES" = "Effacer les recherches récentes";
|
||||||
|
|
||||||
@@ -144,7 +261,7 @@
|
|||||||
/* Context menu that copies reference to username */
|
/* Context menu that copies reference to username */
|
||||||
"COPY_USERNAME_REFERENCE" = "Copier la référence du nom d'utilisateur";
|
"COPY_USERNAME_REFERENCE" = "Copier la référence du nom d'utilisateur";
|
||||||
|
|
||||||
/* Curstom attribute reference item */
|
/* Custom attribute reference item */
|
||||||
"CUSTOM_ATTRIBUTE" = "Attribut personnalisé";
|
"CUSTOM_ATTRIBUTE" = "Attribut personnalisé";
|
||||||
|
|
||||||
/* Title for menu for custom search filters */
|
/* Title for menu for custom search filters */
|
||||||
@@ -199,7 +316,7 @@
|
|||||||
"DRAG_GROUP" = "Glisser-déposer le groupe";
|
"DRAG_GROUP" = "Glisser-déposer le groupe";
|
||||||
|
|
||||||
/* Action name for duplicating entries */
|
/* Action name for duplicating entries */
|
||||||
"DUPLICATE_ENTRIES_%ld" = "Entrées dupliquées %ld";
|
"DUPLICATE_ENTRIES_ACTION_NAME" = "Dupliquer les entrées";
|
||||||
|
|
||||||
/* Menu item to directly diplicate an entry */
|
/* Menu item to directly diplicate an entry */
|
||||||
"DUPLICATE_ENTRY" = "Dupliquer l'entrée";
|
"DUPLICATE_ENTRY" = "Dupliquer l'entrée";
|
||||||
@@ -207,6 +324,12 @@
|
|||||||
/* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */
|
/* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */
|
||||||
"DUPLICATE_ENTRY_WITH_OPTIONS" = "Dupliquer l'entrée…";
|
"DUPLICATE_ENTRY_WITH_OPTIONS" = "Dupliquer l'entrée…";
|
||||||
|
|
||||||
|
/* Menu item to directly diplicate a group */
|
||||||
|
"DUPLICATE_GROUP" = "Dupliquer le groupe";
|
||||||
|
|
||||||
|
/* Action name for duplicating groups */
|
||||||
|
"DUPLICATE_GROUPS_ACTION_NAME" = "Dupliquer le groupe";
|
||||||
|
|
||||||
/* Menu item in the database outline context menu to change the template group
|
/* Menu item in the database outline context menu to change the template group
|
||||||
Menu item on the add entry context menu to edit template groups */
|
Menu item on the add entry context menu to edit template groups */
|
||||||
"EDIT_TEMPLATE_GROUP" = "Modifier le groupe par défaut";
|
"EDIT_TEMPLATE_GROUP" = "Modifier le groupe par défaut";
|
||||||
@@ -238,11 +361,17 @@
|
|||||||
/* Error description given when adding an invalid plugin */
|
/* Error description given when adding an invalid plugin */
|
||||||
"ERROR_INVALID_PLUGIN" = "Plugin invalide";
|
"ERROR_INVALID_PLUGIN" = "Plugin invalide";
|
||||||
|
|
||||||
|
/* Error description for missing accessibility permissions */
|
||||||
|
"ERROR_NO_ACCESSIBILITY_PERMISSIONS" = "MacPass n'a pas la permission de contrôler votre ordinateur (Accessibilité)";
|
||||||
|
|
||||||
|
/* Error description for missing screen recording permissions */
|
||||||
|
"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass n'a pas la permission d'enregistrer votre écran";
|
||||||
|
|
||||||
/* Passwords do not match */
|
/* Passwords do not match */
|
||||||
"ERROR_PASSWORD_MISSMATCH" = "Mot de passe incorrect !";
|
"ERROR_PASSWORD_MISSMATCH" = "Mot de passe incorrect !";
|
||||||
|
|
||||||
/* Passwords do not match, keyfile is invalid */
|
/* Passwords do not match, keyfile is invalid */
|
||||||
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Mot de passe ou clé incorrect(e) !";
|
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Mot de passe et clé incorrects !";
|
||||||
|
|
||||||
/* Recommend/Enforce key change intervall format */
|
/* Recommend/Enforce key change intervall format */
|
||||||
"EVERY_%ld_DAYS" = "Tous les %ld jours";
|
"EVERY_%ld_DAYS" = "Tous les %ld jours";
|
||||||
@@ -253,6 +382,19 @@
|
|||||||
/* The master key was changed by an external program! */
|
/* The master key was changed by an external program! */
|
||||||
"EXTERN_CHANGE_OF_MASTERKEY" = "La clé principale a été changée par un programme externe";
|
"EXTERN_CHANGE_OF_MASTERKEY" = "La clé principale a été changée par un programme externe";
|
||||||
|
|
||||||
|
/* External file change strategy option: ask what to do */
|
||||||
|
"FILE_CHANGE_STRATEGY_ASK" = "Demander";
|
||||||
|
|
||||||
|
/* External file change strategy option: Keep local file an ignore external changes */
|
||||||
|
"FILE_CHANGE_STRATEGY_KEEP_MINE" = "Garder ma version et ignorer les autres changements";
|
||||||
|
|
||||||
|
/* Button in dialog to merge changes into file!
|
||||||
|
External file change strategy option: Merge external changes into local file. */
|
||||||
|
"FILE_CHANGE_STRATEGY_MERGE" = "Fusionner les changements";
|
||||||
|
|
||||||
|
/* External file change strategy option: Use the changed file and discard local changes */
|
||||||
|
"FILE_CHANGE_STRATEGY_USE_OTHER" = "Charger la nouvelle version et ignorer la mienne";
|
||||||
|
|
||||||
/* Informative text displayed when the file was change from another application */
|
/* Informative text displayed when the file was change from another application */
|
||||||
"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "Le fichier chargé n'est pas le même que celui sur le disque. Comment voulez-vous continuer ?";
|
"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "Le fichier chargé n'est pas le même que celui sur le disque. Comment voulez-vous continuer ?";
|
||||||
|
|
||||||
@@ -321,6 +463,9 @@
|
|||||||
/* Action name when an entry was moved */
|
/* Action name when an entry was moved */
|
||||||
"MOVE_ENTRY" = "Déplacer entrée";
|
"MOVE_ENTRY" = "Déplacer entrée";
|
||||||
|
|
||||||
|
/* Menu displayed as popup selection for search options when multiple items are selected */
|
||||||
|
"MULTIPLE_FILTERS_ACTIVE_WITH_DOTS" = "Plusieurs...";
|
||||||
|
|
||||||
/* Name for a newly created Database */
|
/* Name for a newly created Database */
|
||||||
"NEW_DATABASE" = "Base de données";
|
"NEW_DATABASE" = "Base de données";
|
||||||
|
|
||||||
@@ -356,6 +501,9 @@
|
|||||||
Notes reference item */
|
Notes reference item */
|
||||||
"NOTES" = "Notes";
|
"NOTES" = "Notes";
|
||||||
|
|
||||||
|
/* Ok Button to dismiss disabled updates alert */
|
||||||
|
"OK" = "OK";
|
||||||
|
|
||||||
/* preset to expire after one montch from now */
|
/* preset to expire after one montch from now */
|
||||||
"ONE_MONTH" = "dans un mois";
|
"ONE_MONTH" = "dans un mois";
|
||||||
|
|
||||||
@@ -375,19 +523,19 @@
|
|||||||
"OPEN_BUTTON_ADD_PLUGIN_OPEN_PANEL" = "Ajouter le plugin sélectionné";
|
"OPEN_BUTTON_ADD_PLUGIN_OPEN_PANEL" = "Ajouter le plugin sélectionné";
|
||||||
|
|
||||||
/* Open button in the open panel to import an XML file */
|
/* Open button in the open panel to import an XML file */
|
||||||
"OPEN_BUTTON_IMPORT_XML_OPEN_PANEL" = "Ajouter le fichier sélectionné";
|
"OPEN_BUTTON_IMPORT_XML_OPEN_PANEL" = "Importer le fichier sélectionné";
|
||||||
|
|
||||||
/* Action button in Notification to open a document */
|
/* Action button in Notification to open a document */
|
||||||
"OPEN_DOCUMENT" = "Ouvrir";
|
"OPEN_DOCUMENT" = "Ouvrir";
|
||||||
|
|
||||||
/* Action button in Notification to show the Accessibilty preferences */
|
|
||||||
"OPEN_PREFERENCES" = "Ouvrir les préférences";
|
|
||||||
|
|
||||||
/* Menu item to open the URL with the default application */
|
/* Menu item to open the URL with the default application */
|
||||||
"OPEN_URL" = "Ouvrir l'URL";
|
"OPEN_URL" = "Ouvrir l'URL";
|
||||||
|
|
||||||
/* Select Browser */
|
/* Select Browser */
|
||||||
"OTHER_BROWSER" = "Sélectionner le navigateur";
|
"OTHER_BROWSER" = "Sélectionner le navigateur...";
|
||||||
|
|
||||||
|
/* Value field for reference lookup */
|
||||||
|
"OUTPUT_VALUE" = "Valeur de sortie";
|
||||||
|
|
||||||
/* Menu item to toggle display of password column in entry table
|
/* Menu item to toggle display of password column in entry table
|
||||||
Password column title
|
Password column title
|
||||||
@@ -418,8 +566,11 @@
|
|||||||
/* Menu item to perform autotype with the selected entry */
|
/* Menu item to perform autotype with the selected entry */
|
||||||
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Saisie automatique";
|
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Saisie automatique";
|
||||||
|
|
||||||
|
/* Info about how many character has to pick in pickchar dialog */
|
||||||
|
"PICKCHAR_INFO_MESSAGE_PICK_CHARACTERS_%ld" = "Veuillez choisir %ld caractères";
|
||||||
|
|
||||||
/* Window displayed to the user to pick an amout of characters */
|
/* Window displayed to the user to pick an amout of characters */
|
||||||
"PICKCHAR_WINDOW_TITLE" = "Choix du nombre de caractères";
|
"PICKCHAR_WINDOW_TITLE" = "Sélectionneur de caractères";
|
||||||
|
|
||||||
/* Count of picked characters in pickchars dialog if no limit is set */
|
/* Count of picked characters in pickchars dialog if no limit is set */
|
||||||
"PICKED_%ld_CHARACTERS" = "%ld caractères sélectionnés";
|
"PICKED_%ld_CHARACTERS" = "%ld caractères sélectionnés";
|
||||||
@@ -475,6 +626,9 @@
|
|||||||
/* Label for plugin settings tab */
|
/* Label for plugin settings tab */
|
||||||
"PLUGIN_SETTINGS" = "Plugins";
|
"PLUGIN_SETTINGS" = "Plugins";
|
||||||
|
|
||||||
|
/* Generic message displayed if no details are know why a plugin was not loaded. */
|
||||||
|
"PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE" = "Le plugin n'a pas pu être chargé.";
|
||||||
|
|
||||||
/* Plugin version. Include a %@ placeholder for version string */
|
/* Plugin version. Include a %@ placeholder for version string */
|
||||||
"PLUGIN_VERSION_%@" = "Version du plugin : %@";
|
"PLUGIN_VERSION_%@" = "Version du plugin : %@";
|
||||||
|
|
||||||
@@ -488,12 +642,15 @@
|
|||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Il est recommandé de changer le mot de passe et/ou le fichier clé.";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Il est recommandé de changer le mot de passe et/ou le fichier clé.";
|
||||||
|
|
||||||
/* Message text for the recommend password change alert */
|
/* Message text for the recommend password change alert */
|
||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Changez le mot de passe de la base de données !";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Veuillez changer le mot de passe de la base de données !";
|
||||||
|
|
||||||
|
/* Updated at text when the local plugin defintino is used */
|
||||||
|
"REPOSITORY_UPDATED_AT_LOCAL" = "Jamais (utiliser la version locale)";
|
||||||
|
|
||||||
/* Restart */
|
/* Restart */
|
||||||
"RESTART" = "Redémarrage";
|
"RESTART" = "Redémarrage";
|
||||||
|
|
||||||
/* Action to restore and Entry to a previous state of it's history */
|
/* Action to restore an Entry to its previous state of it's history */
|
||||||
"RESTORE_HISTORY_ENTRY" = "Rétablir l'historique de l'entrée";
|
"RESTORE_HISTORY_ENTRY" = "Rétablir l'historique de l'entrée";
|
||||||
|
|
||||||
/* Menu item to save the selected attached file.
|
/* Menu item to save the selected attached file.
|
||||||
@@ -512,6 +669,9 @@
|
|||||||
/* Search option: Find duplicate passwords */
|
/* Search option: Find duplicate passwords */
|
||||||
"SEARCH_DUPLICATE_PASSWORDS" = "Mots de passe dupliqués";
|
"SEARCH_DUPLICATE_PASSWORDS" = "Mots de passe dupliqués";
|
||||||
|
|
||||||
|
/* Placeholder string displayed in the search field in the toolbar */
|
||||||
|
"SEARCH_EVERYWHERE" = "Rechercher partout";
|
||||||
|
|
||||||
/* Search option: Find expired entries */
|
/* Search option: Find expired entries */
|
||||||
"SEARCH_EXPIRED_ENTRIES" = "Expirées";
|
"SEARCH_EXPIRED_ENTRIES" = "Expirées";
|
||||||
|
|
||||||
@@ -521,14 +681,17 @@
|
|||||||
/* Disable search menu item */
|
/* Disable search menu item */
|
||||||
"SEARCH_NO" = "Exclure de la recherche";
|
"SEARCH_NO" = "Exclure de la recherche";
|
||||||
|
|
||||||
|
/* Search field for references lookup */
|
||||||
|
"SEARCH_VALUE" = "Rechercher une valeur";
|
||||||
|
|
||||||
/* Enable search menu item */
|
/* Enable search menu item */
|
||||||
"SEARCH_YES" = "Inclure dans la recherche";
|
"SEARCH_YES" = "Inclure dans la recherche";
|
||||||
|
|
||||||
/* Menu item title for the expiry preset selection menu in the date picker */
|
/* Menu item title for the expiry preset selection menu in the date picker */
|
||||||
"SELECT_DATE_PRESET" = "Date relative…";
|
"SELECT_DATE_PRESET" = "Utiliser un préréglage…";
|
||||||
|
|
||||||
/* Message on the open panel for selecting which browser to use for opening URLs */
|
/* Message on the open panel for selecting which browser to use for opening URLs */
|
||||||
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_MESSAGE" = "Navigateur par défaut";
|
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_MESSAGE" = "Sélectionner le navigateur par défaut.";
|
||||||
|
|
||||||
/* Label for the select browser button on the open panel for selecting which browser to use for opening URLs */
|
/* Label for the select browser button on the open panel for selecting which browser to use for opening URLs */
|
||||||
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_SELECT_BUTTON" = "Choix du navigateur";
|
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_SELECT_BUTTON" = "Choix du navigateur";
|
||||||
@@ -539,6 +702,15 @@
|
|||||||
/* Menu displayed as popup selection for search options if no filter is selected */
|
/* Menu displayed as popup selection for search options if no filter is selected */
|
||||||
"SELECT_FILTER_WITH_DOTS" = "Sélectionner…";
|
"SELECT_FILTER_WITH_DOTS" = "Sélectionner…";
|
||||||
|
|
||||||
|
/* Checkbox in dialog to set the selection as default file change strategy! */
|
||||||
|
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Utiliser cette méthode par défaut. Vous pouvez changer ce paramètre dans les préférences.";
|
||||||
|
|
||||||
|
/* Action button in Notification to show the Autotype Doctor */
|
||||||
|
"SHOW_AUTOTYPE_DOCTOR" = "Afficher le docteur de saisie automatique";
|
||||||
|
|
||||||
|
/* Menu item to show the entries group in the outline view */
|
||||||
|
"SHOW_GROUP_IN_OUTLINE" = "Afficher le groupe dans la vue générale";
|
||||||
|
|
||||||
/* Menu item to show the history of the selected entry
|
/* Menu item to show the history of the selected entry
|
||||||
Toolbar item to toggle history display */
|
Toolbar item to toggle history display */
|
||||||
"SHOW_HISTORY" = "Afficher l'historique";
|
"SHOW_HISTORY" = "Afficher l'historique";
|
||||||
@@ -555,6 +727,42 @@
|
|||||||
/* Toolbar item to perform autotype */
|
/* Toolbar item to perform autotype */
|
||||||
"TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY" = "Saisie automatique";
|
"TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY" = "Saisie automatique";
|
||||||
|
|
||||||
|
/* Touchbar button label for choosing the keyfile */
|
||||||
|
"TOUCHBAR_CHOOSE_KEYFILE" = "Choisir le fichier clé";
|
||||||
|
|
||||||
|
/* Touchbar button label for copying the password */
|
||||||
|
"TOUCHBAR_COPY_PASSWORD" = "Copier le mot de passe";
|
||||||
|
|
||||||
|
/* Touchbar button label for copying the username */
|
||||||
|
"TOUCHBAR_COPY_USERNAME" = "Copier le nom d'utilisateur";
|
||||||
|
|
||||||
|
/* Touchbar button label for deleting elements */
|
||||||
|
"TOUCHBAR_DELETE" = "Supprimer";
|
||||||
|
|
||||||
|
/* Touchbar button label for opening the popover to edit */
|
||||||
|
"TOUCHBAR_EDIT" = "Modifier";
|
||||||
|
|
||||||
|
/* Touchbar button label for locking the database */
|
||||||
|
"TOUCHBAR_LOCK_DATABASE" = "Verrouiller la base de données";
|
||||||
|
|
||||||
|
/* Touchbar button label for creating a new item */
|
||||||
|
"TOUCHBAR_NEW_ENTRY" = "Nouvelle entrée";
|
||||||
|
|
||||||
|
/* Touchbar button label for creating a new group */
|
||||||
|
"TOUCHBAR_NEW_GROUP" = "Nouveau groupe";
|
||||||
|
|
||||||
|
/* Touchbar button label for performing autotype */
|
||||||
|
"TOUCHBAR_PERFORM_AUTOTYPE" = "Effectuer une saisie automatique";
|
||||||
|
|
||||||
|
/* Touchbar button label for searching the database */
|
||||||
|
"TOUCHBAR_SEARCH" = "Rechercher une base de données";
|
||||||
|
|
||||||
|
/* Touchbar button label for showing the password */
|
||||||
|
"TOUCHBAR_SHOW_PASSWORD" = "Afficher le mot de passe";
|
||||||
|
|
||||||
|
/* Touchbar button label for unlocking the database */
|
||||||
|
"TOUCHBAR_UNLOCK_DATABASE" = "Déverrouiller la base de données";
|
||||||
|
|
||||||
/* Move Entry to Trash */
|
/* Move Entry to Trash */
|
||||||
"TRASH_ENTRY" = "Effacer entrée";
|
"TRASH_ENTRY" = "Effacer entrée";
|
||||||
|
|
||||||
@@ -570,6 +778,12 @@
|
|||||||
/* Unknown database format. */
|
/* Unknown database format. */
|
||||||
"UNKNOWN_FORMAT" = "Format inconnu";
|
"UNKNOWN_FORMAT" = "Format inconnu";
|
||||||
|
|
||||||
|
/* Database format is unknown since the file is not saved yet */
|
||||||
|
"UNKNOWN_FORMAT_FILE_NOT_SAVED_YET" = "Format inconnu, la base de données n'est pas encore sauvegardée.";
|
||||||
|
|
||||||
|
/* No comment provided by engineer. */
|
||||||
|
"UNKNOWN_TOOLBAR_ITEM" = "Élément de barre d'outils inconnu";
|
||||||
|
|
||||||
/* Update Settings Label */
|
/* Update Settings Label */
|
||||||
"UPDATE_PREFERENCES" = "Mises à jour";
|
"UPDATE_PREFERENCES" = "Mises à jour";
|
||||||
|
|
||||||
@@ -584,9 +798,25 @@
|
|||||||
Username reference item */
|
Username reference item */
|
||||||
"USERNAME" = "Utilisateur";
|
"USERNAME" = "Utilisateur";
|
||||||
|
|
||||||
|
/* Displayed name when uuid field was copied
|
||||||
|
UUID reference item */
|
||||||
|
"UUID" = "UUID";
|
||||||
|
|
||||||
|
/* Error message displayed when the current database file is also set as the key file */
|
||||||
|
"WARNING_CURRENT_DATABASE_FILE_SELECTED_AS_KEY_FILE" = "Vous ne pouvez pas sélectionner le fichier de base de données courant comme fichier clé.";
|
||||||
|
|
||||||
|
/* Error message displayed when a keepass database file is set as the key file */
|
||||||
|
"WARNING_DATABASE_FILE_SELECTED_AS_KEY_FILE" = "Vous ne devez pas utiliser un fichier de base de données come clé car la base pourrait changer et vous empêcher de réouvrir le fichier actuel.";
|
||||||
|
|
||||||
/* No Key or Password */
|
/* No Key or Password */
|
||||||
"WARNING_NO_PASSWORD_OR_KEYFILE" = "Aucun mot de passe ou clé !";
|
"WARNING_NO_PASSWORD_OR_KEYFILE" = "Aucun mot de passe ou clé !";
|
||||||
|
|
||||||
|
/* Informative Text displayed when clearing the Trash */
|
||||||
|
"WARNING_ON_DELETE_TRASHED_NODE_DESCRIPTION" = "Le/les fichier(s) dans la corbeille vont être supprimés !";
|
||||||
|
|
||||||
|
/* Message text for the alert displayed when deleting a node */
|
||||||
|
"WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "Suppression des éléments dans la corbeille";
|
||||||
|
|
||||||
/* Informative Text displayed when clearing the Trash */
|
/* Informative Text displayed when clearing the Trash */
|
||||||
"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Vider la corbeille est définitif.";
|
"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Vider la corbeille est définitif.";
|
||||||
|
|
||||||
@@ -599,6 +829,9 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Veuillez définir un mot de passe ou une clé pour cette base de données. Quitter cette opération va annuler tous les changements et verrouiller le document";
|
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Veuillez définir un mot de passe ou une clé pour cette base de données. Quitter cette opération va annuler tous les changements et verrouiller le document";
|
||||||
|
|
||||||
|
/* Text displayed when no recent documents can be displayed in */
|
||||||
|
"WELCOME_WINDOW_NO_RECENT_DOCUMENTS" = "Pas de documents récents";
|
||||||
|
|
||||||
/* Label for the workflow settings tab */
|
/* Label for the workflow settings tab */
|
||||||
"WORKFLOW_SETTINGS" = "Workflow";
|
"WORKFLOW_SETTINGS" = "Workflow";
|
||||||
|
|
||||||
|
|||||||
@@ -31,13 +31,29 @@
|
|||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>Dupliquer l'entrée</string>
|
<string>Dupliquer l'entrée</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>Dupliquer les entrées</string>
|
<string>Dupliquer les entrées</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>Dupliquer les entrées</string>
|
<string>Dupliquer les entrées</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>DUPLICATE_GROUPS_ACTION_NAME</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@groupes@</string>
|
||||||
|
<key>groups</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>Groupe dupliqué</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>Groupes dupliqués</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<key>EVERY_%ld_DAYS</key>
|
<key>EVERY_%ld_DAYS</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Item"; ObjectID = "3st-rv-EeQ"; */
|
/* Class = "NSMenuItem"; title = "Item"; ObjectID = "3st-rv-EeQ"; */
|
||||||
"3st-rv-EeQ.title" = "Elément";
|
"3st-rv-EeQ.title" = "Elément";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Import"; ObjectID = "4q9-u1-pcm"; */
|
/* Class = "NSMenu"; title = "Import From"; ObjectID = "4q9-u1-pcm"; */
|
||||||
"4q9-u1-pcm.title" = "Importer";
|
"4q9-u1-pcm.title" = "Importer";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
|
/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
"57.title" = "MacPass";
|
"57.title" = "MacPass";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "About MacPass"; ObjectID = "58"; */
|
/* Class = "NSMenuItem"; title = "About MacPass"; ObjectID = "58"; */
|
||||||
"58.title" = "A propos de MacPass";
|
"58.title" = "À propos de MacPass";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "72"; */
|
/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "72"; */
|
||||||
"72.title" = "Ouvrir…";
|
"72.title" = "Ouvrir…";
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
"81.title" = "Fichier";
|
"81.title" = "Fichier";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "New Database"; ObjectID = "82"; */
|
/* Class = "NSMenuItem"; title = "New Database"; ObjectID = "82"; */
|
||||||
"82.title" = "Nouveau";
|
"82.title" = "Nouvelle base de données";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */
|
/* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */
|
||||||
"83.title" = "Fichier";
|
"83.title" = "Fichier";
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Toggle Inspector"; ObjectID = "1181"; */
|
/* Class = "NSMenuItem"; title = "Toggle Inspector"; ObjectID = "1181"; */
|
||||||
"1181.title" = "Afficher l'inspecteur";
|
"1181.title" = "Afficher l'inspecteur";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Show Password Generator"; ObjectID = "1200"; */
|
/* Class = "NSMenuItem"; title = "Password Generator"; ObjectID = "1200"; */
|
||||||
"1200.title" = "Afficher le générateur de mot de passe";
|
"1200.title" = "Afficher le générateur de mot de passe";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Change Master Password…"; ObjectID = "1203"; */
|
/* Class = "NSMenuItem"; title = "Change Master Password…"; ObjectID = "1203"; */
|
||||||
@@ -157,7 +157,7 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Lock"; ObjectID = "1261"; */
|
/* Class = "NSMenuItem"; title = "Lock"; ObjectID = "1261"; */
|
||||||
"1261.title" = "Verrouiller";
|
"1261.title" = "Verrouiller";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Import"; ObjectID = "aTb-sW-nUd"; */
|
/* Class = "NSMenuItem"; title = "Import From"; ObjectID = "aTb-sW-nUd"; */
|
||||||
"aTb-sW-nUd.title" = "Importer";
|
"aTb-sW-nUd.title" = "Importer";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "aVO-9F-Lwc"; */
|
/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "aVO-9F-Lwc"; */
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Fix Autotype…"; ObjectID = "nx7-Vf-LiD"; */
|
/* Class = "NSMenuItem"; title = "Fix Autotype…"; ObjectID = "nx7-Vf-LiD"; */
|
||||||
"nx7-Vf-LiD.title" = "Réparer la saisie automatique…";
|
"nx7-Vf-LiD.title" = "Réparer la saisie automatique…";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Export"; ObjectID = "p8h-Fg-h1O"; */
|
/* Class = "NSMenu"; title = "Export To"; ObjectID = "p8h-Fg-h1O"; */
|
||||||
"p8h-Fg-h1O.title" = "Exporter";
|
"p8h-Fg-h1O.title" = "Exporter";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "rW0-r1-QYL"; */
|
/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "rW0-r1-QYL"; */
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
/* Class = "NSMenu"; title = "Item"; ObjectID = "Ttt-tR-emo"; */
|
/* Class = "NSMenu"; title = "Item"; ObjectID = "Ttt-tR-emo"; */
|
||||||
"Ttt-tR-emo.title" = "Elément";
|
"Ttt-tR-emo.title" = "Elément";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Export"; ObjectID = "tz9-yK-pOf"; */
|
/* Class = "NSMenuItem"; title = "Export To"; ObjectID = "tz9-yK-pOf"; */
|
||||||
"tz9-yK-pOf.title" = "Exporter";
|
"tz9-yK-pOf.title" = "Exporter";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */
|
/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */
|
||||||
@@ -193,3 +193,6 @@
|
|||||||
/* Class = "NSMenuItem"; title = "Merge With…"; ObjectID = "zvE-0h-UxI"; */
|
/* Class = "NSMenuItem"; title = "Merge With…"; ObjectID = "zvE-0h-UxI"; */
|
||||||
"zvE-0h-UxI.title" = "Fusionner avec…";
|
"zvE-0h-UxI.title" = "Fusionner avec…";
|
||||||
|
|
||||||
|
/* Class = "NSMenuItem"; title = "Autotype Doctor"; ObjectID = "zWx-Re-iuJ"; */
|
||||||
|
"zWx-Re-iuJ.title" = "Docteur de saisie automatique";
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
"179.title" = "Longueur :";
|
"179.title" = "Longueur :";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Character options"; ObjectID = "332"; */
|
/* Class = "NSBox"; title = "Character options"; ObjectID = "332"; */
|
||||||
"332.title" = "Cacactères autorisés";
|
"332.title" = "Caractères autorisés";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "A-Z"; ObjectID = "453"; */
|
/* Class = "NSButtonCell"; title = "A-Z"; ObjectID = "453"; */
|
||||||
"453.title" = "A-Z";
|
"453.title" = "A-Z";
|
||||||
@@ -40,6 +40,9 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Use default only for selected entry"; ObjectID = "cfZ-5F-Nge"; */
|
/* Class = "NSButtonCell"; title = "Use default only for selected entry"; ObjectID = "cfZ-5F-Nge"; */
|
||||||
"cfZ-5F-Nge.title" = "Utiliser par défaut uniquement pour l'entrée sélectionnée";
|
"cfZ-5F-Nge.title" = "Utiliser par défaut uniquement pour l'entrée sélectionnée";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Use characters from every group"; ObjectID = "CMc-Uh-Fo5"; */
|
||||||
|
"CMc-Uh-Fo5.title" = "Utiliser des caractères de chaque groupe";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Set Default"; ObjectID = "Wvs-Md-Ob8"; */
|
/* Class = "NSButtonCell"; title = "Set Default"; ObjectID = "Wvs-Md-Ob8"; */
|
||||||
"Wvs-Md-Ob8.title" = "Utiliser par défaut";
|
"Wvs-Md-Ob8.title" = "Utiliser par défaut";
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Class = "NSWindow"; title = "Change Password"; ObjectID = "1"; */
|
/* Class = "NSWindow"; title = "Change Password"; ObjectID = "1"; */
|
||||||
"1.title" = "Modifier le mot de passe";
|
"1.title" = "Modifier le mot de passe";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Missmatching Passwords"; ObjectID = "14"; */
|
/* Class = "NSTextFieldCell"; title = "Mismatching Passwords"; ObjectID = "14"; */
|
||||||
"14.title" = "Les mots de passe ne correspondent pas";
|
"14.title" = "Les mots de passe ne correspondent pas";
|
||||||
|
|
||||||
/* Class = "NSSecureTextFieldCell"; placeholderString = "Repeat Password"; ObjectID = "15"; */
|
/* Class = "NSSecureTextFieldCell"; placeholderString = "Repeat Password"; ObjectID = "15"; */
|
||||||
|
|||||||
@@ -13,6 +13,9 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "erj-mR-UyO"; */
|
/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "erj-mR-UyO"; */
|
||||||
"erj-mR-UyO.title" = "Annuler";
|
"erj-mR-UyO.title" = "Annuler";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "key_file_warnig"; ObjectID = "f6J-5f-ZvP"; */
|
||||||
|
"f6J-5f-ZvP.title" = "avertissement_fichier_clé";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Password"; ObjectID = "IU9-5u-jn9"; */
|
/* Class = "NSButtonCell"; title = "Password"; ObjectID = "IU9-5u-jn9"; */
|
||||||
"IU9-5u-jn9.title" = "Mot de passe";
|
"IU9-5u-jn9.title" = "Mot de passe";
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,9 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "fil-tT-GXX"; */
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "fil-tT-GXX"; */
|
||||||
"fil-tT-GXX.title" = "Libellé de cellule";
|
"fil-tT-GXX.title" = "Libellé de cellule";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Header View Cell"; ObjectID = "kTy-VO-Xlg"; */
|
||||||
|
"kTy-VO-Xlg.title" = "Cellule de vue d'en-tête";
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Value"; ObjectID = "rVo-ud-5fs"; */
|
/* Class = "NSTableColumn"; headerCell.title = "Value"; ObjectID = "rVo-ud-5fs"; */
|
||||||
"rVo-ud-5fs.headerCell.title" = "Valeur";
|
"rVo-ud-5fs.headerCell.title" = "Valeur";
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */
|
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */
|
||||||
"fug-79-n9g.title" = "Vue en tableau";
|
"fug-79-n9g.title" = "Vue en tableau";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "If enabled, a remote connection is established to macpassapp.org"; ObjectID = "i3S-9b-Bpf"; */
|
||||||
|
"i3S-9b-Bpf.title" = "Si activé, une connection vers macpassapp.org sera établie";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Plugin Settings Info"; ObjectID = "OOr-SW-jZb"; */
|
/* Class = "NSTextFieldCell"; title = "Plugin Settings Info"; ObjectID = "OOr-SW-jZb"; */
|
||||||
"OOr-SW-jZb.title" = "Paramètres du plugin";
|
"OOr-SW-jZb.title" = "Paramètres du plugin";
|
||||||
|
|
||||||
@@ -14,7 +17,10 @@
|
|||||||
"sqO-8H-n1y.title" = "Parcourir les plugins disponibles…";
|
"sqO-8H-n1y.title" = "Parcourir les plugins disponibles…";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
||||||
"STt-PQ-Szr.title" = "Libellé de la cellule";
|
"STt-PQ-Szr.title" = "Libellé de cellule";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Download current Plugin information"; ObjectID = "uHR-uL-Ddm"; */
|
||||||
|
"uHR-uL-Ddm.title" = "Télécharger les informations du plugin actuel";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
||||||
"vBs-Ga-aq0.title" = "Case";
|
"vBs-Ga-aq0.title" = "Case";
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user